Найти, в каком году вышел первый альбом исполнителя - Free Pascal
Формулировка задачи:
Здравствуйте, есть текстовый файл, в нем информация о певце, кол-во песен, название альбома, год выпуска альбома, жанр. Информация разделена табом(Tab). Задача, найти в каком году вышел первы альбом и т.д. делоне в этом. В строчках 61 и 47 компилятор выдает ошибку, там стоит условие, если встречаем символ Таб, то выходим из тела цикла. Не могу понять, что не так. Подскажите.
Program WWTxtFile; Uses Crt,SysUtils; Const SimY='##';SimAl='***'; TxtFile='Kolekcija.txt'; AuxiliaryF='MaxMin.txt'; Type InPut=Record YearMax:String; AlbumMax:String; YearMin:String; AlbumMin:String; end; Var F:File of InPut; T:Text; Procedure Initial; var Rab:InPut; begin Assign(F,AuxiliaryF); Reset(F); With Rab do begin YearMax:='0'; AlbumMax:='0'; YearMin:='9999'; AlbumMin:='99'; end; Write(F,Rab); Close(F); end; Function FindYear(Str:String;I:Byte):String; var Temp:String; J:LongInt; begin Temp:=''; J:=I+Length(SimY); Repeat Temp:=Temp+Str[J]; Inc(J); Until Str[I]=#9; FindYear:=Temp; end; Function FindAl(Str:String;I:Byte):String; var Temp:String; J:LongInt; begin Temp:=''; J:=I+Length(SimAl); Repeat Temp:=Temp+Str[J]; Inc(J); Until Str[J]=#9; FindAl:=Temp; end; Procedure InPutData;//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov var I:LongInt; Rab:InPut; Str:String; Year,AlCount:String; begin ReadLn(T,Str); Str:=Str+#9; WriteLn(Str); For I:=1 to Length(Str) do begin If Str[I]='#' then Year:=FindYear(Str,I); If Str[I]='*' then AlCount:=FindAl(Str,I); end; With Rab do begin If StrToInt(YearMax)<StrToInt(Year) then YearMax:=Year; If StrToInt(YearMin)>StrToInt(Year) then YearMin:=Year; If StrToInt(AlbumMax)<StrToInt(AlCount) then AlbumMax:=AlCount; If StrToInt(AlbumMin)>StrToInt(AlCount) then AlbumMin:=AlCount; end; Write(F,Rab); end; Begin ClrScr; Assign(T,TxtFile); Reset(T); Initial; While Not EoF(T) do begin Assign(F,AuxiliaryF); Reset(F); InPutData; Close(F); end; Close(T); End.
Решение задачи: «Найти, в каком году вышел первый альбом исполнителя»
textual
Листинг программы
Program WWTxtFile; Uses Crt,SysUtils; Const SimY='##';SimAl='***'; TxtFile='Kolekcija.txt'; AuxiliaryF='MaxMin.txt'; Type InPut=Record YearMax:String; AlbumMax:String; YearMin:String; AlbumMin:String; end; Var F:File of InPut; T:Text; D:InPut; Procedure Initial(var Rab:InPut); begin Assign(F,AuxiliaryF); Reset(F); With Rab do begin YearMax:='0'; AlbumMax:='0'; YearMin:='9999'; AlbumMin:='99'; end; Write(F,Rab); Close(F); end; Function FindYear(Str:String;var I:Byte):String; var Temp:String; J:LongInt; begin Temp:=''; J:=I+length(SimY); I:=J; while (Str[J]<>#9) do begin Temp:=Temp+Str[J]; Inc(J); end; FindYear:=Temp; end; Function FindAl(Str:String;var I:byte):String; var Temp:String; J:LongInt; begin Temp:=''; J:=I+length(SimAl); I:=J; while (Str[J]<>#9) do begin Temp:=Temp+Str[J]; Inc(J); end; FindAl:=Temp; end; Procedure InPutData(var Rab :InPut);//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov var i:byte; Str:String; Year,AlCount:String; begin ReadLn(T,Str); Str:=Str+#9; WriteLn(Str); i:=1; while i<=length(Str) do begin If Str[i]='#' then Year:=FindYear(Str,i); If Str[i]='*' then AlCount:=FindAl(Str,i); inc(i); end; With Rab do begin If StrToInt(Rab.YearMax)<StrToInt(Year) then Rab.YearMax:=Year; If StrToInt(Rab.YearMin)>StrToInt(Year) then Rab.YearMin:=Year; If StrToInt(Rab.AlbumMax)<StrToInt(AlCount) then Rab.AlbumMax:=AlCount; If StrToInt(Rab.AlbumMin)>StrToInt(AlCount) then Rab.AlbumMin:=AlCount; end; Write(F,Rab); end; Begin ClrScr; Assign(T,TxtFile); Reset(T); Initial(D); While Not EoF(T) do begin Assign(F,AuxiliaryF); reset(f); InPutData(D); close(f); end; Close(T); End.
Объяснение кода листинга программы
- Объединение строк с помощью оператора
+
. - Использование функции StrToInt для преобразования строк в целые числа.
- Использование функций FindYear и FindAl для поиска года и названия альбома соответственно.
- Использование цикла while для чтения строки из файла до тех пор, пока не будет достигнут символ
#
. - Использование условного оператора If для установки значений переменных Year и AlCount.
- Использование цикла while для чтения строк из файла до тех пор, пока не будет достигнут символ
#
. - Использование условного оператора If для установки значений переменных Rab.YearMax, Rab.YearMin, Rab.AlbumMax и Rab.AlbumMin.
- Запись обновленных данных обратно в файл.
- Повторение процесса до тех пор, пока не будет достигнут конец файла.
- Закрытие файла после завершения чтения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д