dimitriy7
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору вот условие Дан массив действительных чисел С(55). Получить новый массив P из тех элементов массива С, значение которых больше (max+min)/3. [more] ЛАБОРАТОРНАЯ РАБОТА №8 “Программирование с использованием внешних файлов” Цель работы: Освоение методов составления программ с использованием внешних файлов, а также закрепление навыков разработки и отладки программ, которые обеспечивают создание файлов, занесение в них информации и чтение информации из файлов. 1. Теоретическая часть 1.1. Описание файлов в языке программирования Pascal. В Паскале файлы делятся по типу информации, которая заносится в файл: – типизированные – текстовые – нетипизированные Типизированный файл содержит последовательность компонент любого заданного типа. Нетипизированный файл содержит последовательность компонент произвольного типа. Текстовый файл содержит набор любых символов. Доступ к файлу в программе происходит с помощью переменных файлового типа. В зависимости от типа файла переменную файлового типа описывают одним из трех способов: file of тип – типизированный файл; text – текстовый файл; file – нетипизированный файл. Примеры описания файловых переменных: var f1: file of char; f2: file of integer; f3: file; t: text; До начала работы с файлами необходимо установить связь между файловой переменной и именем физического дискового файла. Это осуществляется с помощью процедуры Assign(f,ff). При этом устанавливается связь между файловой переменной с именем f и физическим файлом с именем ‘ff. После связи файловой переменной с именем файла в программе нужно указать направление передачи данных (открыть файл). Процедура Reset(f) открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента. Процедура Rewrite(f) открывает для записи файл, с которым связана файловая переменная f. После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Если указанный файл уже существовал, то все данные из него уничтожаются. После окончания работы с файлами на Паскале, они должны быть закрыты с помощью процедуры Close(f). 1.2. Чтение и запись файлов в языке программирования Pascal. Чтение из текстового файла осуществляется с помощью процедур Read(f, список переменных) и ReadLn(f, список переменных). Эти процедуры читают информацию из файла f в переменные. Отличие ReadLn от Read в том, что при использовании ReadLn после прочтения данных, указанных внутри скобок в списке переменных пропускаются все оставшиеся символы в данной строке. Запись в текстовый файл осуществляется с помощью процедур Write(f, список переменных) и WriteLn(f, список переменных). При записи учитывается формат вывода. WriteLn от Write отличается тем, что после записи всех значений из переменных записывается еще и метка конца строки (формируется законченная строка файла). Добавление информации к концу файла осуществляется с помощью процедуры Append(f), которая открывает текстовый файл для добавления информации к его концу. 1.3 Пример составления алгоритма и программы на языке Pascal для обработки одномерных массивов с использованием внешних файлов. Задание: Для массива вещественных чисел A(40) выполнить ввод элементов из текстового файла. Вывести на экран все элементы массива. Разделить в массиве все элементы на среднее арифметическое значение, вывести результат в текстовый файл и на экран. Решение. Для объявления массива A опишем в разделе Type тип массива из 40 вещественных чисел. Для обозначения количества элементов массива A введем переменную n. Для решения задачи организуем в программе 4 процедуры: – ввод элементов массива из файла, – вывод элементов массива на экран, – вывод элементов массива в файл, – поиск среднего значения в массиве и деление всех элементов массива на среднее значение. Процедуру ввода элементов массива из файла назовем EnterMassivFile, в списке формальных параметров укажем следующие переменные: количество элементов в массиве N и массив X. При этом в списке формальных параметров массив должен быть указан со служебным словом var, поскольку значения элементов массива изменяются в процедуре и возвращаются в основную программу. Внутри процедуры введем локальную переменную файлового типа f:text, которую свяжем с файлом с именем MassivA.txt. Для считывания данных из файла откроем его с помощью процедуры reset(f). Процедуру вывода элементов массива на экран назовем PrintMassiv, и будем в нее передавать те же переменные: количество элементов в массиве N и массив X. Процедуру вывода элементов массива в файл назовем PrintMassivFile, будем в нее передавать те же переменные: количество элементов в массиве N и массив X. Внутри процедуры введем локальную переменную файлового типа f:text, которую свяжем с файлом с именем ResultA.txt. Для записи данных в файл откроем его с помощью процедуры rewrite(f). Функцию поиска среднего значения и деления на него всех элементов массива назовем ChangeMassiv, и будем в нее также передавать массив X и количество элементов в массиве N. Внутри функции будем использовать локальную переменную Sred для подсчета среднего значения. Решение задачи можно организовать также без использования подпрограмм. В этом случае, поскольку в программе используются два разных текстовых файла, необходимо описать две файловые переменные f1,f2:text. 1.3.1 Текст программы с использованием подпрограмм на языке Pascal выглядит следующим образом: program primer81; uses crt; type mas=array[1..40] of real; var n:byte; A:mas; procedure EnterMassivFile(n:byte; var X:mas); var i:byte; f:text; begin assign(f,'MassivA.txt'); reset(f); for i:=1 to n do read(f,A[i]); close(f); end; procedure PrintMassivFile(n:byte; X:mas); var i:byte; f:text; begin assign(f,'ResultA.txt'); rewrite(f); for i:=1 to n do begin write(f,A[i]:7:2); if i mod 10=0 then writeln(f); end; close(f); end; procedure PrintMassiv(n:byte; X:mas); var i:byte; begin for i:=1 to n do begin write(A[i]:7:2); if i mod 10=0 then writeln; end; end; procedure ChangeMassiv(n:byte;var X:mas); var Sred:real; i:byte; begin Sred:=0; for i:=1 to n do Sred:=Sred+A[i]; Sred:=Sred/n; writeln('Srednee znachenie v massive A ', Sred:7:2); for i:=1 to n do A[i]:=A[i]/Sred; end; Begin clrscr; n:=40; EnterMassivFile(n,A); writeln('Isxodniy massiv A:'); PrintMassiv(n,A); ChangeMassiv(n,A); writeln('Resultat: Kajdiy element massiva A razdelen na srednee znachenie'); PrintMassiv(n,A); PrintMassivFile(n,A); readkey; end. 1.3.2 Текст программы без использования подпрограмм на языке Pascal выглядит следующим образом: program primer82; uses crt; type mas=array[1..40] of real; var i,n:byte; A:mas; Sred:real; f1,f2:text; begin clrscr; n:=40; assign(f1,'MassivA.txt'); reset(f1); for i:=1 to n do read(f1,A[i]); close(f1); writeln('Isxodniy massiv A:'); for i:=1 to n do begin write(A[i]:7:2); if i mod 10=0 then writeln; end; Sred:=0; for i:=1 to n do Sred:=Sred+A[i]; Sred:=Sred/n; writeln('Srednee znachenie v massive A ', Sred:7:2); for i:=1 to n do A[i]:=A[i]/Sred; assign(f2,'ResultA.txt'); rewrite(f2); for i:=1 to n do begin write(f2,A[i]:7:2); if i mod 10=0 then writeln(f2); end; close(f2); writeln('Resultat: Kajdiy element massiva A razdelen na srednee znachenie'); for i:=1 to n do begin write(A[i]:7:2); if i mod 10=0 then writeln; end; readkey; end. 1.3.3 Результаты работы программы: Результаты с экрана Isxodniy massiv A: 1.50 0.00 23.00 15.00 100.00 10.00 -8.20 11.00 -0.90 0.10 22.00 33.00 30.50 1.00 7.90 -94.00 30.00 5.00 -1.90 -3.00 10.00 1.00 23.00 2.00 8.00 6.00 -5.00 0.00 0.40 7.60 -3.00 2.00 -5.50 0.00 9.00 19.00 27.50 11.00 20.10 1.00 Srednee znachenie v massive A 7.90 Resultat: Kajdiy element massiva A razdelen na srednee znachenie 0.19 0.00 2.91 1.90 12.65 1.27 -1.04 1.39 -0.11 0.01 2.78 4.18 3.86 0.13 1.00 -11.89 3.80 0.63 -0.24 -0.38 1.27 0.13 2.91 0.25 1.01 0.76 -0.63 0.00 0.05 0.96 -0.38 0.25 -0.70 0.00 1.14 2.40 3.48 1.39 2.54 0.13 Файл MassivA.txt 1.5 0 23 15 100 10 -8.2 11 -0.9 0.1 22 33 30.5 1 7.9 -94 30 5 -1.9 -3 10 1 23 2 8 6 -5 0 0.4 7.6 -3 2 -5.5 0 9 19 27.5 11 20.1 1 Файл ResultA.txt 0.19 0.00 2.91 1.90 12.65 1.27 -1.04 1.39 -0.11 0.01 2.78 4.18 3.86 0.13 1.00 -11.89 3.80 0.63 -0.24 -0.38 1.27 0.13 2.91 0.25 1.01 0.76 -0.63 0.00 0.05 0.96 -0.38 0.25 -0.70 0.00 1.14 2.40 3.48 1.39 2.54 0.13 2. Практическая часть 2.1 Требования к выполнению работы: Составить блок-схему алгоритма и программу для решения индивидуального задания. В программе предусмотреть ввод исходных массивов из внешнего текстового файла либо вывод результатов во внешний текстовый файл в соответствии с заданием. Предусмотреть вывод на экран исходных и результирующих массивов, подробных промежуточных и конечных результатов. Задание выполнить с использованием подпрограмм либо без их использования по выбору студента. Порядок выполнения работы. 1. Выполнить анализ задания, сформулировать постановку задачи. 2. Составить блок-схему алгоритма. 3. Подготовить файл исходных данных (если по заданию массив вводится из файла). 4. Составить программу на языке Pascal с использованием внешних файлов. Предусмотреть ввод исходных данных и вывод результатов на экран. 5. Выполнить проверку работоспособности программы на различных исходных данных. 6. Выполнить анализ полученных результатов. 7. В отчете предоставить также текст используемых в программе внешних файлов. 2.2 Варианты индивидуальных заданий. Варианты индивидуальных заданий выбираются из таблицы 8 в соответствии с номером студента в списке группы в журнале преподавателя. Таблица 8. Варианты индивидуальных заданий № п/п Задание Дан массив действительных чисел С(35). Получить новый массив P из тех элементов массива С, значение которых больше (max+min)/3. Назначение файла (Исходные данные) |