Найти, в каком году вышел первый альбом исполнителя - 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.
- Запись обновленных данных обратно в файл.
- Повторение процесса до тех пор, пока не будет достигнут конец файла.
- Закрытие файла после завершения чтения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д