Найти, в каком году вышел первый альбом исполнителя - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть текстовый файл, в нем информация о певце, кол-во песен, название альбома, год выпуска альбома, жанр. Информация разделена табом(Tab). Задача, найти в каком году вышел первы альбом и т.д. делоне в этом. В строчках 61 и 47 компилятор выдает ошибку, там стоит условие, если встречаем символ Таб, то выходим из тела цикла. Не могу понять, что не так. Подскажите.
Листинг программы
  1. Program WWTxtFile;
  2. Uses
  3. Crt,SysUtils;
  4. Const
  5. SimY='##';SimAl='***';
  6. TxtFile='Kolekcija.txt';
  7. AuxiliaryF='MaxMin.txt';
  8. Type
  9. InPut=Record
  10. YearMax:String;
  11. AlbumMax:String;
  12. YearMin:String;
  13. AlbumMin:String;
  14. end;
  15. Var
  16. F:File of InPut;
  17. T:Text;
  18.  
  19. Procedure Initial;
  20. var
  21. Rab:InPut;
  22. begin
  23. Assign(F,AuxiliaryF);
  24. Reset(F);
  25. With Rab do
  26. begin
  27. YearMax:='0';
  28. AlbumMax:='0';
  29. YearMin:='9999';
  30. AlbumMin:='99';
  31. end;
  32. Write(F,Rab);
  33. Close(F);
  34. end;
  35. Function FindYear(Str:String;I:Byte):String;
  36. var
  37. Temp:String;
  38. J:LongInt;
  39. begin
  40. Temp:='';
  41. J:=I+Length(SimY);
  42. Repeat
  43. Temp:=Temp+Str[J];
  44. Inc(J);
  45. Until Str[I]=#9;
  46. FindYear:=Temp;
  47. end;
  48. Function FindAl(Str:String;I:Byte):String;
  49. var
  50. Temp:String;
  51. J:LongInt;
  52. begin
  53. Temp:='';
  54. J:=I+Length(SimAl);
  55. Repeat
  56. Temp:=Temp+Str[J];
  57. Inc(J);
  58. Until Str[J]=#9;
  59. FindAl:=Temp;
  60. end;
  61. Procedure InPutData;//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov
  62. var
  63. I:LongInt;
  64. Rab:InPut;
  65. Str:String;
  66. Year,AlCount:String;
  67. begin
  68. ReadLn(T,Str);
  69. Str:=Str+#9;
  70. WriteLn(Str);
  71. For I:=1 to Length(Str) do
  72. begin
  73. If Str[I]='#' then Year:=FindYear(Str,I);
  74. If Str[I]='*' then AlCount:=FindAl(Str,I);
  75. end;
  76. With Rab do
  77. begin
  78. If StrToInt(YearMax)<StrToInt(Year) then YearMax:=Year;
  79. If StrToInt(YearMin)>StrToInt(Year) then YearMin:=Year;
  80. If StrToInt(AlbumMax)<StrToInt(AlCount) then AlbumMax:=AlCount;
  81. If StrToInt(AlbumMin)>StrToInt(AlCount) then AlbumMin:=AlCount;
  82. end;
  83. Write(F,Rab);
  84. end;
  85. Begin
  86. ClrScr;
  87. Assign(T,TxtFile);
  88. Reset(T);
  89. Initial;
  90. While Not EoF(T) do
  91. begin
  92. Assign(F,AuxiliaryF);
  93. Reset(F);
  94. InPutData;
  95. Close(F);
  96. end;
  97. Close(T);
  98. End.

Решение задачи: «Найти, в каком году вышел первый альбом исполнителя»

textual
Листинг программы
  1. Program WWTxtFile;
  2. Uses
  3.   Crt,SysUtils;
  4. Const
  5.   SimY='##';SimAl='***';
  6.   TxtFile='Kolekcija.txt';
  7.   AuxiliaryF='MaxMin.txt';
  8. Type
  9.   InPut=Record
  10.     YearMax:String;
  11.     AlbumMax:String;
  12.     YearMin:String;
  13.     AlbumMin:String;
  14.   end;
  15. Var
  16.   F:File of InPut;
  17.   T:Text;
  18.   D:InPut;
  19.  
  20.   Procedure Initial(var Rab:InPut);
  21.     begin
  22.       Assign(F,AuxiliaryF);
  23.       Reset(F);
  24.       With Rab do
  25.        begin
  26.          YearMax:='0';
  27.          AlbumMax:='0';
  28.          YearMin:='9999';
  29.          AlbumMin:='99';
  30.        end;
  31.       Write(F,Rab);
  32.       Close(F);
  33.     end;
  34.  
  35.    Function FindYear(Str:String;var I:Byte):String;
  36.     var
  37.       Temp:String;
  38.       J:LongInt;
  39.     begin
  40.       Temp:='';
  41.       J:=I+length(SimY);
  42.       I:=J;
  43.        while  (Str[J]<>#9) do
  44.        begin
  45.         Temp:=Temp+Str[J];
  46.         Inc(J);
  47.        end;
  48.       FindYear:=Temp;
  49.     end;
  50.  
  51.   Function FindAl(Str:String;var I:byte):String;
  52.     var
  53.       Temp:String;
  54.       J:LongInt;
  55.     begin
  56.       Temp:='';
  57.       J:=I+length(SimAl);
  58.       I:=J;
  59.       while (Str[J]<>#9) do
  60.       begin
  61.         Temp:=Temp+Str[J];
  62.         Inc(J);
  63.       end;
  64.       FindAl:=Temp;
  65.     end;
  66.  
  67.   Procedure InPutData(var Rab :InPut);//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov
  68.     var
  69.       i:byte;
  70.       Str:String;
  71.       Year,AlCount:String;
  72.     begin
  73.       ReadLn(T,Str);
  74.       Str:=Str+#9;
  75.       WriteLn(Str);
  76.       i:=1;
  77.       while i<=length(Str) do
  78.         begin
  79.          If Str[i]='#' then Year:=FindYear(Str,i);
  80.          If Str[i]='*' then AlCount:=FindAl(Str,i);
  81.          inc(i);
  82.         end;
  83.       With Rab do
  84.         begin
  85.           If StrToInt(Rab.YearMax)<StrToInt(Year) then Rab.YearMax:=Year;
  86.           If StrToInt(Rab.YearMin)>StrToInt(Year) then Rab.YearMin:=Year;
  87.           If StrToInt(Rab.AlbumMax)<StrToInt(AlCount) then Rab.AlbumMax:=AlCount;
  88.           If StrToInt(Rab.AlbumMin)>StrToInt(AlCount) then Rab.AlbumMin:=AlCount;
  89.         end;
  90.       Write(F,Rab);
  91.     end;
  92.  
  93. Begin
  94.   ClrScr;
  95.   Assign(T,TxtFile);
  96.   Reset(T);
  97.   Initial(D);
  98.  
  99.   While Not EoF(T) do
  100.     begin
  101.       Assign(F,AuxiliaryF);
  102.       reset(f);
  103.       InPutData(D);
  104.       close(f);
  105.     end;
  106.   Close(T);
  107. End.

Объяснение кода листинга программы

  1. Объединение строк с помощью оператора +.
  2. Использование функции StrToInt для преобразования строк в целые числа.
  3. Использование функций FindYear и FindAl для поиска года и названия альбома соответственно.
  4. Использование цикла while для чтения строки из файла до тех пор, пока не будет достигнут символ #.
  5. Использование условного оператора If для установки значений переменных Year и AlCount.
  6. Использование цикла while для чтения строк из файла до тех пор, пока не будет достигнут символ #.
  7. Использование условного оператора If для установки значений переменных Rab.YearMax, Rab.YearMin, Rab.AlbumMax и Rab.AlbumMin.
  8. Запись обновленных данных обратно в файл.
  9. Повторение процесса до тех пор, пока не будет достигнут конец файла.
  10. Закрытие файла после завершения чтения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы