Форум «Всё о Паскале» _ Задачи _ Помогите с сортировкой
Автор: Гость 19.04.2007 22:42
Задание на запись.Создадь БД студентов, про каждого известно ФИО, пол, возр,средний балл.Отсортировать по возрасту. написал, но пишет ошибку при попытке отсортировать, не могу устранить. помогите пожалуйста
Код
program lab_Zapisi; uses crt; const n=9; type stud=record fio:string; srb:integer; age:integer; pol:char; end; var f1:file of stud; m,k,a:stud; gruppa:array[1..n] of stud; vid: byte; flag: boolean; i:integer; name:string;
procedure file_name;{ima fila} begin write(' Vvedite ima fila '); readln(name); end;
procedure zapici; {sozdanie zapici} begin writeln(' zapici gryppi ',filepos(f1)+1); with gruppa[i] do begin write(' Enter FIO '); readln(fio); write(' Vozrast '); readln(age); write(' Pol '); readln(pol); write(' CPEDHUU BALL '); readln(srb); write(f1,gruppa[i]); end; end;
procedure dobavit_zapic; var i,p:integer; begin file_name; assign(f1, name); rewrite(f1); writeln(' Sozdanie novoy zapisi ',name); write(' Vvedite colichestvo zapisey '); readln(p); for i:=1 to p do zapici; writeln(' Dobavlenie novogo file '); writeln(' File imeet ',filesize(f1),' zapicei '); close(f1); end;
procedure vivod; begin read(f1,gruppa[i]); with gruppa[i] do begin write(filepos(f1)); writeln(' FIO ',fio,' Bo3PaCT ',age,' CPEDHUU BALL ', srb,' Pol ',pol); end; end;
procedure vivod_zapicei; begin file_name; assign(f1, name); {$I-} reset(f1); {$I+} if IOresult = 0 then begin seek(f1, 0); writeln(' Vivod zapicei ',name); while (not Eof(f1)) do vivod; close(f1); end else writeln(' File s imenem ',name,' NET'); end;
procedure updaterec; var numrec: longint; begin file_name; assign(f1, name); {$I-} reset(f1); {$I+} if IOresult = 0 then begin write('N zapici'); readln(numrec); seek(f1,numrec-1); writeln(' Staroe znachenie '); vivod; seek(f1,numrec-1); writeln(' Zadaem novoe znachenie ',numrec,' zapici '); zapici; close(f1); end else writeln('Faila s imenem ',name,' NET '); end;
procedure zapic_end; begin file_name; assign(f1, name); {$I-} reset(f1); {$I+} if IOresult = 0 then begin seek(f1, filesize(f1)); zapici; writeln('Otkritiy file imeet ',filesize(f1),' zapisey '); close(f1); end else writeln(' File s imenem ',name,' NET '); end;
procedure findfio; var f: file of stud; gruppa: stud; maska: string; flag: boolean; countrec: integer; begin file_name; assign(f, name); {$I-} reset(f); {$I+} if IOresult = 0 then begin write('vvedite familiy dly poiska: '); readln(maska); flag:=false; countrec:=0; while (not Eof(f)) do begin read(f,gruppa); with gruppa do if pos(maska,fio) <> 0 then begin flag:=true; inc(countrec); writeln(' FIO ',fio,' Vozrast ',age,' sped ball ', srb,' Pol ',pol); end; end; if flag then begin writeln(' Chislo zapisey s imenem ',maska,'=',countrec); end else writeln(' File ne sodershit familii ',maska); close(f); end else writeln(' Fila s imenem ',name,' NET '); end;
procedure sort_age; var i:integer; f1:file of stud; k,m:stud; flag:boolean; begin file_name; assign(f1,name); {$I-} reset(f1); {$I+} if IOresult = 0 then begin for i:=1 to filesize(f1) do begin seek(f1,i); read(f1,m); seek(f1,i+1); read(f1,k); repeat if m.age >k.age then begin a.age:=m.age; m.age:=k.age; k.age:=a.age; if i>1 then dec(i); end else inc(i); until i>=filesize(f1); for i:=1 to filesize(f1) do begin with gruppa[i] do write(' FIO ',fio,' Vozrast ',age,' srednii ball',srb ,' Pol ',pol); end; end; close(f1); end else writeln(' Fila s imenem ',name,' NET '); end;
Begin textcolor(6); flag:=false; repeat
writeln(' 1. New file'); writeln(' 2. Prosmotr gruppi '); writeln(' 3. Izmenenie zapisi'); writeln(' 4. Dobavlenie zapici'); writeln(' 5. Poik zapisi'); writeln(' 6. Sortirovka po Bo3PACTY'); writeln(' 0. Exit'); readln(vid); case vid of 1: dobavit_zapic; 2: begin clrscr;
1. При размещении исходного кода программ необходимо пользоваться тегами!
Гости не могут редактировать сообщения, поэтому исправлю сама... но на будущее....
2.
for i:=1 to filesize(f1) do begin {откуда? нумерация вообще-то идет с 0} seek(f1,i); read(f1,m); seek(f1,i+1); {seek(f1,filesize(f1)+1) - это лихо..} read(f1,k);
3.Что это за деятельность?
a.age:=m.age; m.age:=k.age; k.age:=a.age;
то есть из Пети 17 лет и Виктора 93 лет получится Петя 93 лет и Виктор 17 лет. Зачем? Тем более что в файл эти изменения не пойдут...