Лаба 10 вар 9 / Лаба 10
.docxСанкт-Петербургский политехнический университет Петра Великого
Институт Металлургии, Машиностроения и Транспорта
Кафедра «Компьютерные Технологии и Машиностроения»
Отчет
По лабораторной работе №10
Дисциплина: «Информатика»
Тема: «Внешние файлы» Вариант - 9
Студент гр. 13332/1 Лебедев А.В.
Преподаватель Ю. В. Кожанова
«__»______________2018
Санкт-Петербург
2018г.
Цель работы
Цель работы приобретение умений построения конструкций контроля вводимых числовых данных пользователем.
Задание Найти наибольший элемент, получив данные из файла, указать его положение, записать полученные данные в файл.
Ход работы
Алгоритм программы
Рис.1 – Блок-схема
Программный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
btn1: TBitBtn;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var f1,f2:textfile; i, j, m, k:byte; x:array of array of Integer; y:array of byte;
BEGIN
If OpenDialog1.Execute Then //если файл выбран в окне открытия файла
Begin
AssignFile(f1, OpenDialog1.FileName); //связать его с переменной f1
{$I-} Reset(f1); {$I+} //открыть файл, связанный с f1 для чтения
if IOresult <>0 then begin ShowMessage('Файл не найден'); Exit; end;
End
Else Begin ShowMessage('файл для чтения не выбран'); Exit; End;
if eof(f1) then begin ShowMessage(' файл пуст'); Closefile(f1); Exit; end;
i:=0; //начальное значение номера строки
while not eof(f1) do //пока не достигнут конец файла
Begin //начало тела внешнего цикла
SetLength(x, i+1); //выделение (добавл.) памяти под одну строку массива x
SetLength(y, i+1); //выделение (добавл.) памяти под один элемент массива y
j:=0; //начальное значение номера столбца (номера элемента в строке)
while not eoln(f1) do //пока не достигнут конец строки
begin //начало тела вложенного цикла
SetLength(x[i], j+1); //выделение памяти под один эл-нт в i-ой строке
{$I-} Read(f1, x[i,j]); {$I+} //чтение (ввод) xij элемента из файла
if IOResult <>0 then begin
ShowMessage('Ошибка син-са'); CloseFile(f1);
SetLength(x, 0, 0); SetLength(y, 0); Exit;
end;
j:=j+1; //переход к следующему столбцу в i-ой строке
end; //конец тела вложенного цикла
y[i]:=j; //запись в массив y длины i-ой строки
i:=i+1; //переход к следующей строке
Readln(f1); //перевод строки чтения в файле чтения
End; //конец тела внешнего цикла
CloseFile(f1); //закрытие файла чтения
m:=i; //число строк получает значение числа итераций внешнего цикла
If SaveDialog1.Execute Then //если файл выбран в окне сохранения
Begin
AssignFile(f2,SaveDialog1.FileName); //связать его с переменной f2
{$I-} Rewrite(f2); {$I+} //открыть файл, связанный с f2 для записи
if IOResult <>0 then begin ShowMessage('Ошибка доступа'); Exit; end;
End
Else Begin ShowMessage('Файл записи не выбран'); Exit; End;
i:=0; //начальное значение номера строки135
Begin //начало тела внешнего цикла
k:=0;
j:=0; //начальное значение номера столбца (номера элемента в строке)
while j <= y[i]-1 do //пока не исчерпаны все элементы i-ой строки
begin //начало тела вложенного цикла
k:=k+1; //запись в файл квадрата элемента в формате
j:=j+1; //переход к следующему столбцу 5:2 с пробелом
end; //конец тела вложенного цикла
i:=i+1; //переход к следующей строке вывода
Write(f2, k,' ');
Writeln(f2); //перевод строки записи в файле
End; //конец тела внешнего цикла
CloseFile(f2); //закрытие файла записи
SetLength(x, 0, 0); //высвоб. памяти из-под двумерного массива элементов
SetLength(y, 0); //высвоб. памяти из-под одномерного массива длин строк
END; //конец процедуры
Файл записи и вывода представлены на рисунке 2.1 и 2.2.
Рис 2.1 – файл записи Рис 2.2 – файл вывода