Лабораторная работа №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. Упорядочить его по возрастанию и выполнить вставку элемента, равного Лабораторная работа №8 - student2.ru , не нарушив упорядоченности массива. Результат
Дана матрица целых чисел 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: Лабораторная работа №8 - student2.ru Результат

список РЕКОМЕНДОВАНОй ЛиТЕРАТУРЫ

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

__________________

Проверил: __________________

__________________

Донецк

Наши рекомендации