Міністерство освіти і науки України
НУ ”Львівська політехніка”
Кафедра ЕОМ
Звіт
про виконання лабораторної роботи №9
з курсу: „Засоби системного програмування”
на тему
Опрацювання файлів з текстовою інформацією
Тема роботи: Опрацювання файлів з текстовою інформацією.
Мета роботи: Закріпити теоретичні знання та оволодіти практичними навиками в створенні програм для опрацювання текстової інформації, що міститься в дискових файлах. Засвоїти основні методи читання, запису даних з дискових файлів текстового типу.
Завдання на лабораторну роботу
Розробити програмне забезпечення зі застосуванням техніки роботи з дисковими файлами відповідно до заданого варіанту.
Програмне забезпечення повинно складатися з декількох модулів. Основна програма вводить та виводить дані які опрацьовуються функціями, що реалізовані як окремі модулі.
Назву текстового файлу, в якому містяться дані для опрацювання, передавати через аргументи функції main().
Розміри та значення елементів матриць (в загальному не квадратних) вводити з текстового файлу. Параметри, що задають кількість рядків та стовпців повинні бути іменованими.
Пам’ять під матриці виділяти динамічно. Для трикутних матриць (опираючись на їх структуру) виділяти мінімальні об’єми пам’яті.
Обмін даними з функцією, що опрацьовує матрицю, виконувати через її аргументи.
Результати обчислень записувати в текстовий файл. Назву файлу для запису результатів формувати на основі назви файлу з вхідними даними шляхом заміни розширення.
Звернути особливу увагу на обробку помилок, які користувач може зробити при створені текстового файлу з вхідними даними.
При вирішенні задач забезпечити дружній інтерфейс з користувачем.
Індивідуальне завдання: Перестановка заданих (за запитом) рядків матриці
Результати виконання роботи.
Текст програми:
n=3
m=3
6 5 1
5 4 9
7 3 2
int input(char *filename);
int output(char *filename);
# include <stdio.h>
# include <conio.h>
# include <string.h>
# include "labst_9.h"
FILE *fp,*fq;
int m,n,*Matrix[100][100];
int main(int argc, char *argv[])
{
int j,i,l1,l2,line[100];
char *filename;
clrscr();
n=0;m=0;
if (argc!=2) {printf("Eror..."); return 0;}
else strcpy(filename,argv[1]);
if (input(filename)==1)
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("\n Matrix[%d][%d]=%d",i,j,*Matrix[i][j]);
do
{
printf("\nEnter number of line1 to change line2");
scanf("%d %d",&l1,&l2);
}
while ((l1>=n)||(l2>=n));
for(j=0;j<m;j++)
{
line[j]=*Matrix[l1][j];
*Matrix[l1][j]=*Matrix[l2][j];
*Matrix[l2][j]=line[j];
}
printf("\n Output results..");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("M[%d][%d]=%d ",i,j,*Matrix[i][j]);
}
*(filename+strlen(filename)-4)='\0';
strcat(filename,".out");
output(filename);
}
return 0;
}
# include <stdlib.h>
# include <stdio.h>
# include <string.h>
extern FILE *fp;
int input(char *filename)
{
char *tmp;
extern int n,m,*Matrix[100][100];
int i,j;
fp=fopen(filename,"rt");
fscanf(fp,"%s",tmp);
if (strstr(tmp,"n=")!=NULL) sscanf((tmp+2),"%d",&n);
else if (strstr(tmp,"m=")!=NULL) sscanf((tmp+2),"%d",&m);
fscanf(fp,"%s",tmp);
if (strstr(tmp,"n=")!=NULL) sscanf((tmp+2),"%d",&n);
else if (strstr(tmp,"m=")!=NULL) sscanf((tmp+2),"%d",&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if ((Matrix[i][j]=malloc(sizeof(int)))==NULL)
{
printf("Not enought memory!!!");
return 0;
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
fscanf(fp,"%s",tmp);
sscanf(tmp,"%d",Matrix[i][j]);
}
fclose(fp);
if (n==0 || m==0) {printf("Eror..."); return 0;}
else return 1;
};
# include <stdio.h>
extern FILE *fq;
int output(char *filename)
{
extern int n,m,*Matrix[100][100];
int i,j;
fq=fopen(filename,"wt");
if (fq==NULL) {puts("\nEror create output file!!!");return 0; }
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
fprintf(fq,"%d",*Matrix[i][j]);
fprintf(fq,"%s"," ");
}
fprintf(fq,"%s","\n");
}
fclose(fq);
return 1;
}
Внаслідок виконання програми на екрані отримаємо:
..\labst_8.exe 3
Висновок: на даній лабораторній роботі я оволодів практичними навиками роботи з текстовими файлами на мові Сі.