МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
Кафедра ІСМ
Звіт
Лабораторна робота №11
“ Робота з дисковими файлами ”
Виконав:
ст. гр. КН-1
Львів – 2007
Мета роботи: Навчитись використовувати бібліотечні функції Borland C/C++ для роботи з файлами.
Методичні вказівки:
Кожне завдання складається із двох варіантів, розміщених у частинах 1 та 2. У завданнях першої частини необхідно використати текстові файли, а у завданнях другої частини – двійкові файли. Кроки виконання завдань:
Cтворити файли, необхідні для розв’язування задачі. Якщо спеціально не вказано, то текстові файли можуть бути створені за допомогою екранного редактора. Створення двійкових файлів здійснюється за допомогою програми.
Ім’я файлу може бути визначено за допомогою директиви препроцесора #define, введене з клавіатури або визначено параметром командного рядка.
Роботу з файлами (створення, пошук, перетворення, виведення та ін.) оформити у вигляді окремих функцій.
Якщо спеціально не визначено, то запис даних у файл та їх читання з файлу виконати за допомогою бібліотечних функцій високорівневого буферизованого введення-виведення.
Забезпечити контроль виконання операцій роботи з файлом за допомогою відповідних перевірок та виведення повідомлень на екран.
Утворені нові та перетворені файли обов’язково виводити на екран.
Формування структурованих файлів та їх виведення на екран виконати у формі таблиць.
Частина 1. Робота з текстовими файлами
Засобами екранного редактора утворити файл з текстом програми на мові Сі. Переписати в інший файл головну функцію Сі-програми. Кінець функції визначити на основі балансу фігурних дужок.
Частина 2. Робота з двійковими файлами
створити файл структур: прiзвище студента, оцiнки з п’яти предметів. Знайти середнiй бал кожного студента.
Текст програми1:
#include <io.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
char source[200], dest[200];
char string[255],string2[255],word[20];
void main()
{ FILE *f1,*f2; printf("Vkazhit' file z C-programojy: ");
int flag=0,dyzhku=0,i;
scanf("%s",source);
printf("V jakuj fajl zapusatu? ");
scanf("%s",dest);
if ((f1=fopen(source,"rt"))==NULL)
{ clrscr(); perror("Error opening file!");
exit(-1);
}
if ((f2=fopen(dest,"wt"))==NULL)
{ perror("Error creating file!");
exit(-1);
}
do
{ if (fgets(string, 255, f1)==NULL) break;
strcpy(string2, string);
strtok(string2, " ");
strcpy(word,strtok(NULL," "));
printf("%s",word);
if (strcmp(word,"main()\n")==0) {flag=1;break;}
} while (1);
if (flag == 0) {printf("There are no main() function!\n"); exit(1);}
fputs(string,f2);
fgets(string,255,f1);
for (i=0;i<strlen(string);i++)
{ if (string[i]=='{') {dyzhku++;fputs(string,f2);}
if (string[i]=='}') {dyzhku--;fputs(string,f2);}
}
while (fgets(string,255,f1)!=NULL)
{ for (i=0;i<strlen(string);i++)
{ if (string[i]=='{') dyzhku++;
if (string[i]=='}') dyzhku--;
}
fputs(string,f2);
if (dyzhku == 0) break;
}
fclose(f1);
fclose(f2);
}
Текст програм2:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
struct Tstudent
{ char name[20];
int matan,linalg,angl,program,phizuka;
};
void main()
{ FILE *f; char words[4][40];
int serbal;
Tstudent s;
int n,i,flag=0;//char *s;
printf("Skilku stydentiv?\n");
cin>>n;
printf ("[name] [matan] [linalg] [angl] [program] [phizuka]\n");
if ((f=fopen("rezult.dat","wb"))==NULL)
{ perror("Error creating file!"); exit(-1);
}
for (i=0;i<n;i++)
{ scanf("%20s %d %d %d %d %d",s.name,&s.matan,&s.linalg,&s.angl,&s.program,&s.phizuka);
fwrite(&s,sizeof(Tstudent),1,f);
}
fclose(f);
if ((f=fopen("rezult.dat","rb"))==NULL)
{ perror("Error opening file!"); exit(-1);
}
while (fread(&s, sizeof(Tstudent),1,f), feof(f)==0)
{ serbal = (s.matan+s.linalg+s.program+s.phizuka+s.angl)/5;
printf("%20s %d %d %d %d %d: %d\n",s.name,s.matan,s.linalg,s.angl,s.program,s.phizuka, serbal);
}
getch();
}
Висновок: В даній лабораторній роботі я закріпив знання в роботі файлами, стрічками та структурами.