Язык Си. Лабораторные работы / Примеры отчетов / Lab11
.docx
Лабораторная работа №11
РАБОТА С ФАЙЛАМИ
Студент гр. ИКПИ-81
Коваленко Л. А.
А. Постановка задачи
Имеется текстовый файл, содержащий произвольное количество строк. Длина каждой строки не превосходит 255 символов. Необходимо выполнить заданную обработку файла.
В каждой строке записано произвольное количество чисел, записанных в форме f. Сформировать новый файл, дописав в конец каждой строки исходного файла значение ее максимального элемента.
Лабораторная работа выполняется в виде одного файла, содержащего функцию main() и функцию для работы с файлом.
Б. Разработка алгоритма
Алгоритм решения задачи следующий:
-
Открытие одного файла на чтение.
-
Открытие второго файла на запись.
-
Обработка двух файлов при помощи функции: поиск максимального из приведенных в каждой строке (первого файла) вещественных чисел и запись символов и максимального в конец строки (во второй файл).
-
Закрытие двух файлов.
Входные данные находятся в файле rtext.txt. Выходные данные программа запишет в файл wtext.txt.
В. Таблица идентификаторов
N |
Обозначение в задаче |
Идентификатор |
Назначение |
1 |
Текстовый файл |
rfile |
Входные данные из файла |
2 |
Новый текстовый файл |
wfile |
Выходные данные в файл |
3 |
– |
type |
Промежуточные данные пользовательской функции |
4 |
– |
num |
|
5 |
– |
max |
|
6 |
– |
c |
|
7 |
Функция обработки |
FInputData(FILE *r, FILE *w) |
Функция обработки двух файлов |
0
Начало
1
2
(rfile<>NULL)
&&
(wfile<>NULL)
Да Нет 3
5
Вывод
"Не удалось открыть файл" 4
6
7
Останов 8
Конец 0 (c=fgetc(r))
<> EOF
max<num
Да Нет (c=='\n'
|| c=='\0')
max<num
Вывод
max в
файл w Вывод
c в
файл w c=='
'
max<num
Нет Да Нет Да (c>='0')&&(c<='9')
Да Нет type==0
Да Нет Да Нет num=num*10+c-48 num=num+pow(0.1,type)*(c-48) c=='.'
Да Да Нет Нет type=1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 FInputData(*r,*w) 0 1 2 20 3 type=type+1 Вывод
max в
файл w 26 27
Д. Контрольный расчет
Контрольный расчет представлен в таблице.
Машинные результаты могут немного отличаться от ручных в случае с числами, у которого после точки более 6-ти знаков (программа округляет).
№ теста |
Содержимое исходного файла rtext.txt |
Максимумы в конце каждой строки файла wtext.txt |
|
Ручные |
Машинные |
||
1 |
1.99 2.45 3.99 4.77 99.9 77.7 565.0 333.33 345.99 |
99.9 565 |
99.900000 565.000000 |
2 |
56.575676 56.5756768 9.99 544.557 454.111 3434.333 |
56.5756768 3434.333000 |
56.575677 3434.333000 |
3 |
56.22222 333.0 11.2 |
333.000000 11.200000 |
333.000000 11.200000 |
Е. Программа на языке Си
/* Файл Lab11.c */
// Стандарт языка СИ: "ISO C99"
// Компилятор: "TDM-GCC (MinGW) 4.9.2"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
Лабораторная работа 11
РАБОТА С ФАЙЛАМИ
Студент гр. ИКПИ-81
Коваленко Л. А.
*/
void FInputData(FILE *r, FILE *w);
int main() {
// Открытие файлов
FILE *rfile = fopen("rtext.txt", "r");
FILE *wfile = fopen("wtext.txt", "w");
// Проверка на наличие ошибок при открытии
if ((rfile != NULL) || (wfile != NULL))
FInputData(rfile, wfile);
else {
printf("Не удалось открыть файл!");
getchar();
}
// Закрытие файлов
fclose(rfile);
fclose(wfile);
return 0;
}
/// Функция добавляет максимальное знач. последовательности в конец строки
/// ***Функция универсальна для любой длины строки
/// Первый параметр — файл для чтения, второй — файл для записи
void FInputData(FILE *r, FILE *w){
// num - число последовательности
// max - максимальное последовательности
short int type = 0;
double num = 0, max = 0;
char c = 0;
while ((c = fgetc(r)) != EOF) {
if ((c == '\n') || (c == '\0')) {
if (max < num) max = num;
fprintf(w, " %lf", max);
max = 0;
num = 0;
type = 0;
}
else if (c == ' ') {
if (max < num) max = num;
num = 0;
type = 0;
}
else if ((c >= '0') && (c <= '9')) {
if (type == 0)
num = num * 10 + (c-48);
else {
num = num + pow(0.1, type) * (c-48);
type += 1;
}
}
else if (c == '.')
type = 1;
fprintf(w, "%c", c);
}
if (max < num) max = num;
fprintf(w, " %lf", max);
}
Ж. Выводы
Тот факт, что результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, свидетельствуют о том, что программа составлена правильно.