Лабораторная работа №8
“Программирование с использованием внешних файлов”
Цель работы: Освоение методов составления программ с использованием внешних файлов, а также закрепление навыков разработки и отладки программ, которые обеспечивают создание файлов, занесение в них информации и чтение информации из файлов.
Теоретическая часть
8.1.1. Работа с внешними файлами в языке программирования С++.
Файлы данных могут содержать различную информацию.
При работе с файлами обычно выполняют следующие операции: описание указателя на файл, открытие файла, чтение или запись данных, закрытие файла, вспомогательные действия: проверка конца файла, проверка наличия ошибки и др.
Описание указателя на файл производится обязательно до открытия файла. Форма описания следующая:
FILE *f1, *f2...;
где FILE – это описанный в заголовочном файле STDIO.H тип данных, представляющий собой буфер для обмена данными с файлом.
Открытие файла:
f1 = fopen (“имя файла”,”режим”),
где f1 –описанный ранее указатель на файл;
fopen – функция открытия файла;
“имя файла” – указывается полное имя файла;
“режим” – этот параметр определяет тип операции, которые будут выполняться с файлом или режим его работы:
“r” – открытие файла для чтения;
“w” – для записи;
“a” – для дозаписи;
“+” – добавка к основному режиму, указывает на возможность выполнения операций в совмещенном режиме чтение/запись.
“r+” – чтение с последующей записью;
“b” – добавка к основному режиму, указывает, что файл содержит информацию в двоичном коде.
Для записи данных в файл используется оператор fprintf:
fprintf(f1,“управляющая строка”,” список вывода”);
Для чтения данных из файла используется оператор fscanf:
fscanf(f1,“управляющая строка”, список адресов);
Чтение числовых данных из файла необходимо производить с учетом формата, в котором данные были занесены в файл.
Для записи и чтения строк можно использовать функции fprintf()и fscanf() с форматом %s или специальные функции fputs(имя строки, f1), fgets(имя строки, max длина, f1);
При закрытии производится выгрузка данных из буфера файла и отключение его от программы.
fclose(указатель файла);
Проверка конца файла:
feof(указатель файла)
8.1.2 Пример составления алгоритма и программы на языке С++ для обработки одномерных массивов с использованием внешних файлов.
Задание: Для массива вещественных чисел A(20) выполнить ввод элементов из текстового файла. Вывести на экран все элементы массива. Разделить в массиве все элементы на среднее арифметическое значение, вывести результат в текстовый файл и на экран.
Решение.
Опишем массив A в разделе описаний. Для обозначения количества элементов массива A введем переменную n. Для связи с внешними файлами будем использовать одну переменную FILE *f. До начала работы программы создадим файл Data.txt, в который внесем 20 вещественных значений.
Процедуру ввода элементов массива из файла выполним с помощью функции fscanf. В переменную A_Sum запомним сумму элементов массива А, а в переменную A_Sr – среднее арифметическое элементов масива А.
Преобразованный массив А запишем в файл Result.txt с использованием функции fscanf.
Блок-схема алгоритма решения данной задачи выглядит следующим образом:
Текст программы на языке С++ выглядит следующим образом:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
int main()
{float A[20],A_Sr,A_Sum;
int n=20,i,j;
FILE *f;
clrscr();
f=fopen("Data.txt","r");
printf("Исходный массив A:\n");
for (i=0;i<n;i++)
{ fscanf(f,"%f",&A[i]);
printf("%8.2f",A[i]);
}
fclose(f);
f=fopen("Result.txt","w");
A_Sum=0;
for (i=0; i<n;i++)
A_Sum+=A[i];
A_Sr=A_Sum/n;
printf("\nСреднее арифметическое матрицы А = %.2f\n",A_Sr);
printf("Преобразованный массив A:\n");
for (i=0;i<n;i++)
{ A[i]=A[i]/A_Sr;
printf("%8.2f",A[i]);
fprintf(f,"%8.2f",A[i]);
}
fclose(f);
getch();
return 0;
}
Результаты работы программы:
Результаты с экрана
Исходный массив A:
9.00 4.01 -6.08 0.74 -5.66 -2.89 -9.33 -3.30 -9.92 -9.79
5.29 3.71 6.31 -6.70 -9.17 1.29 3.96 -7.82 -1.11 -4.50
Среднее арифметическое матрицы А = -2.10
Преобразованный массив A:
-4.29 -1.91 2.90 -0.35 2.70 1.38 4.45 1.57 4.73 4.67
-2.52 -1.77 -3.01 3.19 4.37 -0.61 -1.89 3.73 0.53 2.14
Файл Data.txt
9.00 4.01 -6.08 0.74 -5.66 -2.89 -9.33 -3.30 -9.92 -9.79
5.29 3.71 6.31 -6.70 -9.17 1.29 3.96 -7.82 -1.11 -4.50
Файл Result.txt
-4.29 -1.91 2.90 -0.35 2.70 1.38 4.45 1.57 4.73 4.67
-2.52 -1.77 -3.01 3.19 4.37 -0.61 -1.89 3.73 0.53 2.14
Практическая часть
8.2.1 Требования к выполнению работы:
Составить блок-схему алгоритма и программу для решения индивидуального задания. В программе предусмотреть ввод исходных массивов из внешнего текстового файла либо вывод результатов во внешний текстовый файл в соответствии с заданием.
Предусмотреть вывод на экран исходных и результирующих массивов, подробных промежуточных и конечных результатов.
Порядок выполнения работы.
1. Выполнить анализ задания, сформулировать постановку задачи.
2. Составить блок-схему алгоритма.
3. Подготовить файл исходных данных (если по заданию массив вводится из файла).
4. Составить программу на языке С++ с использованием внешних файлов. Предусмотреть ввод исходных данных и вывод результатов на экран.
5. Выполнить проверку работоспособности программы на различных исходных данных.
6. Выполнить анализ полученных результатов.
7. В отчете предоставить также текст используемых в программе внешних файлов.
* - задания предусматривают выполнение следующи требований: ввод исходных данных из текстового файла и вывод результатов в текстовый файл; имена файлов вводятся в программе; если в исходном файле недостаточно данных для заполнения массивов, недостающие данные формируются случайным образом.
Варианты индивидуальных заданий.
Варианты индивидуальных заданий выбираются из таблицы 8 в соответствии с номером студента в списке группы в журнале преподавателя.
Таблица 8. Варианты индивидуальных заданий
№ п/п | Задание | Назначение файла |
Задан массив действительных чисел R1,...,R40. Упорядочить его по возрастанию и выполнить вставку элемента, равного , не нарушив упорядоченности массива. | Результат | |
Дана матрица целых чисел B размером 6х7. Найти номер строки и произведение элементов строки, в которой располагается наибольший элемент. | Исходные данные | |
Дан массив целых чисел D1,...,D30. Удалить из него те элементы, которые больше среднего арифметического. | Результат | |
Дана матрица целых чисел C размером 10х10. Найти номер строки и сумму элементов строки, в которой располагается наименьший элемент. | Исходные данные | |
Задан массив действительных чисел b1,...b30. Удалить из него элементы, расположенные между первым и последним нулевыми элементами. | Результат | |
Дана матрица действительных чисел A(6x6). Заменить в ней на собственные модули все элементы, которые встречаются более 1 раза. | * | |
Дан массив действительных чисел f1,...,f40. Удалить из него те элементы, которые равны минимальному элементу. | Результат | |
Дана матрица действительных чисел A размером 8х9. Найти номер столбца и сумму элементов столбца, в котором располагается наименьший элемент. | * | |
Задан массив действительных чисел k1,...,k45. Найти в нем минимальный элемент и его номер и упорядочить по убыванию элементы массива, которые находятся после минимального. | Результат | |
Дана матрица действительных чисел A размером 8х10. Получить новую матрицу C путем деления элементов матрицы A на наибольший по модулю элемент. | Исходные данные | |
Задан массив действительных чисел A1,...,A40. Вставить в него элемент, равный минимальному, слева от максимального элемента. Если максимальным является первый элемент, то вставку элемента выполнить справа. | Исходные данные | |
Дана матрица действительных чисел D размером 5х6. Найти сумму модулей элементов, находящихся ниже главной диагонали. | Результат | |
Дан массив действительных чисел Z1,...,Z20. Получить новый массив Y из тех элементов массива Z, значение которых больше (max+min)/2. | Исходные данные | |
Дана матрица целых чисел X размером 6х7. Сформировать массив A1,…, A7, каждый элемент которого равен произведению элементов соответствующего столбца матрицы X. | Результат | |
Дан массив действительных чисел P1,...,P20. Вставить в каждую четную позицию массива элемент, равный предыдущему. | Исходные данные | |
Дана матрица действительных чисел C размером 8х7. Получить новую матрицу B путем деления элементов матрицы C на наибольший по модулю элемент. | * | |
Задан массив целых чисел d1,...,d25. Вставить в него элемент, равный максимальному, справа от последнего отрицательного элемента. | Исходные данные | |
Дана матрица целых чисел X(5х8). Выполнить циклический сдвиг элементов каждой строки матрицы на количество позиций, равное номеру строки. Найти строку с наибольшей разницей минимального и максимального элемента. | * | |
Задан массив действительных чисел B1,...,B20. Получить новый массив С1,...,C20, четные элементы которого равны соответствующим элементам массива B, а нечетные равны сумме элементов массива B. | Исходные данные | |
Дана матрица действительных чисел V размером 6х7. Найти количество столбцов, содержащих хотя бы один нулевой элемент. | Результат | |
Дан массив X1,...,X30. Удалить из него те элементы, которые меньше (min+max)/2. | Исходные данные | |
Дана матрица действительных чисел A размером 8х9. Найти номер столбца и сумму элементов столбца, в котором располагается наименьший элемент. | Результат | |
Задан массив целых чисел с1,...,с20. Вставить в него нулевые элементы справа и слева от максимального элемента. | Исходные данные | |
Дана матрица действительных чисел E размером 7х10. Получить новую матрицу A путем деления элементов матрицы E на наименьший по модулю элемент. | Результат | |
Задан массив целых чисел d1,...,d30. Удалить из него элементы, равные максимальному элементу. | Исходные данные | |
Дана матрица целых чисел A размером 5х8. Найти в ней количество строк, не содержащих ни одного нулевого элемента. | Результат | |
Задан массив целых чисел b1,...,b40. Удалить из него все элементы, которые находятся между максимальным и минимальным элементами. | Исходные данные | |
Дана матрица целых чисел B размером 6х8. Сформировать массив S1,…, S8, каждый элемент которого равен максимальному элементу соответствующего столбца матрицы B: | Результат |
список РЕКОМЕНДОВАНОй ЛиТЕРАТУРЫ
1. Биллиг В. А. Основы объектного программирования на C; Интернет-университет информационных технологий, Бином. Лаборатория знаний - Москва, 2010. - 584 c.
2. Дейтел, Х.М.; Дейтел, П.Дж. Как программировать на С; М.: Бином; Издание 4-е - Москва, 2005. - 633 c.
3. Дьюхарст, Стефан; Старк, Кэти Программирование на C; К.: ДиаСофт - Москва, 1993. - 272 c.
4. Карпов, Б.; Баранова, Т. C: специальный справочник; СПб: Питер - Москва, 2003. - 480 c.
5. Литвиненко Н. Технология программирования на C. Начальный курс; БХВ-Петербург - Москва, 2012. - 288 c.
6. Липпман, С основы программирования на C; М.: Вильямс - Москва, 2002. - 256 c.
7. Страуструп, Б. Язык программирования C; М.: Радио и связь - Москва, 1991. - 350 c.
8. Страуструп, Бьерн Язык программирования С; М.: Бином; Издание 3-е, перераб. - Москва, 2002. - 244 c.
9. Шилдт, Герберт Полный справочник по C; М.: Вильямс; Издание 4-е - Москва, 2003. - 800 c.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ГОУДАРСТВЕННОЕ ВЫСШЕЕ УЧЕБНОЕ ЗАВЕДЕНИЕ
ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра автоматики и телекомуникаций
ОТЧЕТ
о выполнении лабораторной работы №__
по дисциплине «Алгоритмические язики и программирование»
на тему:__________________________
Выполнил: ст. гр. СУА-14
__________________
Проверил: __________________
__________________
Донецк