Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 сем_1 / 10 лаба / Unit1

.pas
Скачиваний:
5
Добавлен:
18.07.2019
Размер:
3.35 Кб
Скачать
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, k, m: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
while i<=m-1 do //пока не исчерпаны все строки
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; //конец процедуры

end.

Соседние файлы в папке 10 лаба
  • #
    18.07.2019188 б5Project1.dpr
  • #
    18.07.2019876 б5Project1.res
  • #
    18.07.20195.99 Кб5Unit1.dcu
  • #
    18.07.201951 б5Unit1.ddp
  • #
    18.07.2019900 б6Unit1.dfm
  • #
    18.07.20193.35 Кб5Unit1.pas