Advertisement
dimon2242

Untitled

Jun 9th, 2017
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.55 KB | None | 0 0
  1. program LR4DT;
  2.  
  3. const N = 5;
  4.  
  5. type
  6.     ST = array[1..8] of string[200];
  7.     ST1 = string[20];
  8. STR = record
  9.     aName : string[20];
  10.     year : integer;
  11.     architector : string[20];
  12.     country : string[8];
  13.     city : string[8];
  14. end;
  15.  
  16. const
  17.     C : ST = (
  18. '                                                    Архитектурные шедевры                                                 ',
  19. '==========================================================================================================================',
  20. ' № |         Название          |      Архитектор     |         Страна          |          Город          | Год построения |',
  21. '==========================================================================================================================',
  22. '   |                           |                     |                         |                         |                |',
  23. '---|---------------------------|---------------------|-------------------------|-------------------------|----------------|',
  24. '   |                           |                     |                         |                         |                |',
  25. '==========================================================================================================================');
  26.  
  27. var
  28.     Z : array[1..N] of STR; // Массив записей
  29.     i, j : byte;
  30.     b : char; // Для пропуска символа при вводе
  31.     FI, FR : text; // Файлы для исходных данных и результатов
  32.  
  33. procedure header(withName : boolean);
  34. var
  35.     i, start : byte;
  36. begin
  37.     if(withName) then start := 1
  38.     else start := 2;
  39.     for i := start to 4 do
  40.         writeln(FR, C[i]);
  41. end;
  42.  
  43. function fFilter(STR : ST1) : ST1;
  44.  
  45. forward;
  46.  
  47. procedure pPrint;
  48. begin
  49.     with Z[i] do
  50.         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);
  51. end;
  52.  
  53. procedure pOutput;
  54. begin
  55.     for i := 1 to N do begin pPrint;
  56.         if(i = N) then
  57.             writeln(FR, C[8])
  58.         else
  59.             writeln(FR, C[6]);
  60.     end;
  61. end;
  62.  
  63. procedure pInput;
  64. var
  65.     oldYearIndex : byte;
  66. begin
  67.     assign(FI, 'SourceData');
  68.     reset(FI);
  69.     oldYearIndex := 1;
  70.     for i := 1 to N do
  71.         with Z[i] do begin
  72.             readln(FI, aName, b, country, b, city, year, b, architector); // Здесь потом отфильтровать
  73.             if(Z[oldYearIndex].year > Z[i].year) then oldYearIndex := i;
  74.             aName := fFilter(aName);
  75.             country := fFilter(country);
  76.             city := fFilter(city);
  77.             architector := fFilter(architector);
  78.         end;
  79.     pOutput;
  80.     writeln(FR, #10#13, 'Самый старый архитектурный шедевр: ', Z[oldYearIndex].aName);
  81.     close(FI);
  82. end;
  83.  
  84. procedure pSearch;
  85. var
  86.     aName : ST1;
  87. label
  88.     MK;
  89. begin
  90.     assign(FI, 'SearchData');
  91.     reset(FI);
  92.     repeat
  93.         readln(FI, aName);
  94.         writeln(FR, #10#13 ,'Найти архитектурный шедевр: ', '''',aName,'''');
  95.         aName := fFilter(aName);
  96.         if(aName = '') then begin
  97.             writeln(FR, 'Нет названия архитектурного шедевра для поиска');
  98.             continue;
  99.         end;
  100.         for i:= 1 to N do
  101.             if(aName = Z[i].aName) then begin
  102.                 header(false);
  103.                 pPrint;
  104.                 writeln(FR, C[2]);
  105.                 goto MK;
  106.             end;
  107.         writeln(FR, 'Архитектурный шедевр ', '''', aName, '''', ' не найден!');
  108.     MK: until EOF(FI);
  109.     close(FI);
  110. end;
  111.  
  112. procedure pSearchU;
  113. var
  114.     vcountry : string[8];
  115.     vyear : integer;
  116.     PR, found : boolean;
  117. begin
  118.     writeln(FR, #10#13, 'Поиск сведений', ' по любому сочетанию поисковых признаков', #10#13);
  119.     assign(FI, 'SearchDataU');
  120.     reset(FI);
  121.     repeat
  122.         readln(FI, vcountry, b, vyear); // Чтение данных для поиска
  123.         vcountry := fFilter(vcountry);
  124.         writeln(FR, #10#13, 'Найти в стране: ', '''',vcountry,'''', ' архитектурные шедевры, возведённые раньше: ', '''',vyear,'''', ' года', #10#13);
  125.         if((vcountry = '') and (vyear = 0)) then begin
  126.             writeln(FR, 'Нет данных для поиска');
  127.             continue;
  128.         end;
  129.         PR := false;
  130.         found := true;
  131.         for i := 1 to N do
  132.             with Z[i] do begin
  133.                 if(((vcountry = '') or (vcountry = country)) and ((vyear = 0) or (vyear > year))) then begin
  134.                     if(found) then begin
  135.                         header(false);
  136.                         found := false;
  137.                     end;
  138.                     pPrint;
  139.                     writeln(FR, C[2]);
  140.                     PR := true;
  141.                 end;
  142.             end;
  143.         if(NOT PR) then
  144.         writeln(FR, 'Таких архитектурных сооружений нет!');
  145.     until EOF(FI);
  146.     close(FI);
  147.     writeln(FR, 'Поиск закончен!');
  148. end;
  149.  
  150. procedure pSwapLines(i, j : byte);
  151. var
  152.     STR1 : STR; // Для перестановки строк таблицы
  153. begin
  154.     STR1 := Z[i];
  155.     Z[i] := Z[j];
  156.     Z[j] := STR1;
  157. end;
  158.  
  159. function fFilter(STR : ST1) : ST1;
  160. var
  161.     i, j, L : integer;
  162. begin
  163.     L := length(STR);
  164.     for i := 1 to L do
  165.         if STR[i] <> ' ' then
  166.             for j := L downto i do
  167.                 if STR[j] <> ' ' then begin
  168.                     fFilter := copy(STR, i, j-i+1);
  169.                     exit;
  170.                 end;
  171.     fFilter := '';
  172. end;
  173.  
  174. begin
  175.     assign(FR, 'ResultsData');
  176.     rewrite(FR);
  177.     header(true);
  178.     pInput;
  179.     pSearch;
  180.     pSearchU;
  181.     write('Введите номера строк, которые необходимо поменять местами: ');
  182.     readln(i, j);
  183.     pSwapLines(i, j);
  184.     writeln(FR, #10#13, 'Массив после перестановки строк:');
  185.     header(true);
  186.     pOutput;
  187.     close(FR);
  188. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement