Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program LR4DT;
- const N = 5;
- type
- ST = array[1..8] of string[200];
- ST1 = string[20];
- STR = record
- aName : string[20];
- year : integer;
- architector : string[20];
- country : string[8];
- city : string[8];
- end;
- const
- C : ST = (
- ' Архитектурные шедевры ',
- '==========================================================================================================================',
- ' № | Название | Архитектор | Страна | Город | Год построения |',
- '==========================================================================================================================',
- ' | | | | | |',
- '---|---------------------------|---------------------|-------------------------|-------------------------|----------------|',
- ' | | | | | |',
- '==========================================================================================================================');
- var
- Z : array[1..N] of STR; // Массив записей
- i, j : byte;
- b : char; // Для пропуска символа при вводе
- FI, FR : text; // Файлы для исходных данных и результатов
- procedure header(withName : boolean);
- var
- i, start : byte;
- begin
- if(withName) then start := 1
- else start := 2;
- for i := start to 4 do
- writeln(FR, C[i]);
- end;
- function fFilter(STR : ST1) : ST1;
- forward;
- procedure pPrint;
- begin
- with Z[i] do
- writeln(FR, i, C[3,4] : 3-(i div 10), aName, C[3,4] : 28-length(aName), architector, C[3,4] : 22-length(architector), country, C[3,4] : 26-length(country), city, C[3,4] : 26-length(city), year, C[3,4] : 13);
- end;
- procedure pOutput;
- begin
- for i := 1 to N do begin pPrint;
- if(i = N) then
- writeln(FR, C[8])
- else
- writeln(FR, C[6]);
- end;
- end;
- procedure pInput;
- var
- oldYearIndex : byte;
- begin
- assign(FI, 'SourceData');
- reset(FI);
- oldYearIndex := 1;
- for i := 1 to N do
- with Z[i] do begin
- readln(FI, aName, b, country, b, city, year, b, architector); // Здесь потом отфильтровать
- if(Z[oldYearIndex].year > Z[i].year) then oldYearIndex := i;
- aName := fFilter(aName);
- country := fFilter(country);
- city := fFilter(city);
- architector := fFilter(architector);
- end;
- pOutput;
- writeln(FR, #10#13, 'Самый старый архитектурный шедевр: ', Z[oldYearIndex].aName);
- close(FI);
- end;
- procedure pSearch;
- var
- aName : ST1;
- label
- MK;
- begin
- assign(FI, 'SearchData');
- reset(FI);
- repeat
- readln(FI, aName);
- writeln(FR, #10#13 ,'Найти архитектурный шедевр: ', '''',aName,'''');
- aName := fFilter(aName);
- if(aName = '') then begin
- writeln(FR, 'Нет названия архитектурного шедевра для поиска');
- continue;
- end;
- for i:= 1 to N do
- if(aName = Z[i].aName) then begin
- header(false);
- pPrint;
- writeln(FR, C[2]);
- goto MK;
- end;
- writeln(FR, 'Архитектурный шедевр ', '''', aName, '''', ' не найден!');
- MK: until EOF(FI);
- close(FI);
- end;
- procedure pSearchU;
- var
- vcountry : string[8];
- vyear : integer;
- PR, found : boolean;
- begin
- writeln(FR, #10#13, 'Поиск сведений', ' по любому сочетанию поисковых признаков', #10#13);
- assign(FI, 'SearchDataU');
- reset(FI);
- repeat
- readln(FI, vcountry, b, vyear); // Чтение данных для поиска
- vcountry := fFilter(vcountry);
- writeln(FR, #10#13, 'Найти в стране: ', '''',vcountry,'''', ' архитектурные шедевры, возведённые раньше: ', '''',vyear,'''', ' года', #10#13);
- if((vcountry = '') and (vyear = 0)) then begin
- writeln(FR, 'Нет данных для поиска');
- continue;
- end;
- PR := false;
- found := true;
- for i := 1 to N do
- with Z[i] do begin
- if(((vcountry = '') or (vcountry = country)) and ((vyear = 0) or (vyear > year))) then begin
- if(found) then begin
- header(false);
- found := false;
- end;
- pPrint;
- writeln(FR, C[2]);
- PR := true;
- end;
- end;
- if(NOT PR) then
- writeln(FR, 'Таких архитектурных сооружений нет!');
- until EOF(FI);
- close(FI);
- writeln(FR, 'Поиск закончен!');
- end;
- procedure pSwapLines(i, j : byte);
- var
- STR1 : STR; // Для перестановки строк таблицы
- begin
- STR1 := Z[i];
- Z[i] := Z[j];
- Z[j] := STR1;
- end;
- function fFilter(STR : ST1) : ST1;
- var
- i, j, L : integer;
- begin
- L := length(STR);
- for i := 1 to L do
- if STR[i] <> ' ' then
- for j := L downto i do
- if STR[j] <> ' ' then begin
- fFilter := copy(STR, i, j-i+1);
- exit;
- end;
- fFilter := '';
- end;
- begin
- assign(FR, 'ResultsData');
- rewrite(FR);
- header(true);
- pInput;
- pSearch;
- pSearchU;
- write('Введите номера строк, которые необходимо поменять местами: ');
- readln(i, j);
- pSwapLines(i, j);
- writeln(FR, #10#13, 'Массив после перестановки строк:');
- header(true);
- pOutput;
- close(FR);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement