Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nSk
Код
program p128randacc;

type
cd = record
        artist : string[40];
        title : string[40];
        style : char;
        rating : integer;
        filepos : longint;
end;
var
        diskfile : file of cd;
        single : CD;
        counter : integer;
        choice : char;

procedure newcd;
begin
with single do
        begin
                write('Enter artist: ');
                readln(artist);
                write('Enter title: ');
                readln(title);
                writeln('Enter style (C)lassical, (J)azzm (R)ock, (F)olk: ');
                readln(style);
                writeln('Enter rating (0-9)');
                readln(rating);
                filepos := counter;
        end;
        seek(diskfile,filepos);
        write(diskfile,single);
        counter := counter + 1;
end;

procedure showone(disk : CD);
begin
if single.artist[1] <> chr(255) then
        with disk do
                begin
                writeln('Record number: ',filepos);
                writeln(artist);
                writeln(title);
                writeln(style);
                writeln(rating);
        end;
end;

procedure display;
var
        loop : integer;
begin
        for loop := 1 to counter -1 do
        begin
                seek(diskfile,loop);
                read(diskfile,single);
                showone(single);
end;
end;

procedure search;
var
        loop : integer;
        target : string[40];
begin
        writeln('Enter artist to search for: ');
        readln(target);
        for loop := 1 to counter-1 do
                begin
                seek(diskfile,loop);
                read(diskfile,single);
                if single.artist = target
                then showone(single);
        end;
end;

procedure editrec;
var
        target : longint;
        tstring : string[40];
        tchar : char;
begin
        write('Record number? ');
        readln(target);
        if (target>0) and (target<counter)
                then begin
                seek(diskfile,target);
                read(diskfile,single);
                showone(single);
                write('Enter new name or [Enter]');
                readln(tstring);
                if length(tstring)>0 then single.artist := tstring;
                write('Enter new title or [Enter]');
                readln(tstring);
                if lenght(string)> 0 then single.title := tstring;
                write('Enter new style or [Enter]');
                readln(tchar);
                if char <> chr(13) then single.style := tchar;
                write('Enter new rating or [Enter]');
                readln(tchar);
                if tchar<>chr(13)
                        then single.rating := ord(tchar)-48;
                        seek(diskfile,target);
                        write(diskfile,single);
                        end;
                        end;

        procedure deleterec;
        var
                target : longint;
        begin
                write('Record number? ');
                readln(target);
                if (target>0) and (target<counter)
                        thenbegin
                                single.artist[1] := chr(255);
                                seek(diskfile,target);
                                write(diskfile,single);
                        end;
                end;
                procedure closefile;
                begin
                        single.filepos := counter;
                        seek(diskfile,0);
                        write(diskfile,single);
                        close(diskfile);
                end;

begin
  assign(diskfile,'randcd.dat');
  reset(diskfile);
  read(diskfile);
  read(diskfile,single);

  counter := single,filepos;
  writeln('CD collection organiser');
  repeat
  writeln('New CD..............1');
  writeln('Display collection..2');
  writeln('Search by artist....3');
  writeln('Delete record.......4');
  writeln('Exit................5');
  readln(choice);
  case choice of
  '1' : newcd;
  '2' : display;
  '3' : search;
  '4' : editrec;
  '5' : deleterec;
  '6' : closefile;

  end;
  until choice = '6';
end.


Можете пожалусто помочь исправить ошибку в этом коде
volvo
Компилятор тебе что, ошибки не показывает? Не надо делать из форума удаленную версию "Alt+F9"... Можешь вполне сам догадаться, что
procedure newcd;
begin
with single do
begin
write('Enter artist: ');
readln(artist);
write('Enter title: ');
readln(title);
writeln('Enter style ©lassical, (J)azzm ®ock, (F)olk: ');
readln(style);
writeln('Enter rating (0-9)');
readln(rating);
filepos := counter;
end;
seek(diskfile,filepos); { <--- Здесь !!! }
write(diskfile,single);
counter := counter + 1;
end;

ты уже не находишься внутри With, и filepos компилятор справедливо считает функцией из модуля System... А эта функция требует параметров... Так что придется добавить:
Цитата
Seek(diskfile, single.filepos);


Ну и дальше по-тексту идет полный бардак с именами переменных (char вместо tchar, string вместо tstring, запятые вместо точек, и т.д.)

Исправляй...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.