Міністерство освіти та науки України
НУ “Львівська політехніка”
Лабораторна робота №9
“Опрацювання файлів з текстовою інформацією”
Львів 2005
Назва роботи: Опрацювання файлів з текстовою інформацією.
Мета роботи: Закріпити теоретичні знання та оволодіти практичними навиками в створенні програм для опрацювання текстової інформації, що міститься в дискових файлах. Засвоїти основні методи читання, запису даних з дискових файлів текстового типу.
Завдання на лабораторну роботу.
Розробити програмне забезпечення зі застосуванням техніки роботи з дисковими файлами відповідно до заданого варіанту. Програмне забезпечення повинно складатися з декількох модулів. Основна програма вводить та виводить дані які опрацьовуються функціями, що реалізовані як окремі модулі. Назву текстового файлу, в якому містяться дані для опрацювання, передавати через аргументи функції main(). Розміри та значення елементів матриць (в загальному не квадратних) вводити з текстового файлу. Параметри, що задають кількість рядків та стовпців повинні бути іменованими.
Пам’ять під матриці виділяти динамічно. Для трикутних матриць (опираючись на їх структуру) виділяти мінімальні об’єми пам’яті.
Обмін даними з функцією, що опрацьовує матрицю, виконувати через її аргументи. Результати обчислень записувати в текстовий файл. Назву файлу для запису результатів формувати на основі назви файлу з вхідними даними шляхом заміни розширення. Звернути особливу увагу на обробку помилок, які користувач може зробити при створені текстового файлу з вхідними даними.
При вирішенні задач забезпечити дружній інтерфейс з користувачем.
Текст laba9.c:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
#include <dir.h>
#include "laba9fn.h" //підключення власного заготовочного файлу
int main(int argc,char* argv[])
{
char file_in[20],file_out[20],drive[5],dir[10],name[10],ext[5];
int num,width,j,i;
int sum;
float ser;
FILE *f1,*f2; //файлові потоки
int **masiv; //вказівка на двохвимірний масив
clrscr(); //очистка екрану
if(argc!=2) //перевірка кількості параметрів
{printf("Error in arguments");return 1;}
sscanf(argv[1],"%s",file_in); //зчитування імені файлу
fnsplit(file_in,drive,dir,name,ext); //розбивання імені на складові
fnmerge(file_out,drive,dir,name,"out"); //зміна розширення імені файлу
if(!(f1=fopen(file_in,"r"))) //відкриття файлу для читання
{printf("Error: cannot open input file");return 1;}
if(!(f2=fopen(file_out,"w"))) //відкриття файлу для запису
{printf("Error: cannot create output file");return 1;}
//перевірка чи файл пустий
if(feof(f1)){printf("Error: input file is empty");return 1;}
if(!(fscanf(f1,"%d",&width))){printf("Error: not number in input file");return 1;}
for(i=1,num=0;i<width+1;num+=i++);
masiv=(int **)calloc(width,sizeof(int*));//виділення памяті під масив
for(i=0;i<width;i++)
masiv[i]=(int*)calloc(i+1,sizeof(int));
//зчитування вхідних даних з файлу
for(i=0;i<width;i++)
for(j=0;j<i+1;j++)
{
if(feof(f1)){printf("Error: input file is not complete");return 1;}
if(!fscanf(f1,"%d",&masiv[i][j])){printf("Error: not number in input file");return 1;}
}
//підрахунок суми та середнього арифметичного всіх елементів
sum=sum_el(masiv,width);
ser=ser_el(masiv,width);
//вивід результатів
fprintf(f2,"Summary of elements: %d\n",sum);
fprintf(f2,"Seredne arifmet of elements: %.4f\n",ser);
//закриття файлів
fclose(f1);
fclose(f2);
free(masiv);
return 0;
}
Текст laba9fn.h
//прототипи функцій
int sum_el(int** mas,int count);
float ser_el(int** mas,int count);
Текст laba9fn.c:
#include "laba9fn.h"
int sum_el(int** mas,int count)
{//підрахунок суми елементів
int i,j,sum=0;
for(i=0;i<count;i++)
for(j=0;j<i+1;j++)sum+=mas[i][j];
return sum;
}
float ser_el(int** mas,int count)
{//підрахунок середнього арифметичного значення всіх елементів
int i,j,num=0,sum=0;
for(i=0;i<count;i++)
for(j=0;j<i+1;j++){sum+=mas[i][j];num++;}
return (float)(sum)/num;
}
Результат роботи програми:
Вхідний файл:
4
1
2 3
4 5 6
7 8 9 10
Вихідний файл
:Summa= 551
Seredn= 5.5000
Алгоритм програми
Висновок: Ознайомились з масивами та основними прийомами створення та опрацювання динамічних масивів. Організували зчитування вхідної інформації з текстового файлу.