n0rm Posted November 30, 2006 Report Share Posted November 30, 2006 Привет! Нужна помощь в оформление синтаксиса! Дано: type rec=record gr,gp:integer; fio:string; sr_ball:real; balli_postupleniya=record matan,fizika:word; end; balli_attestat=record predm1,predm2,predm3:word; end; end; 1)В записе rec я хотел размисть некоторые переменные и две вложенные записи, правильно ли я записал? 2)Далее нужно обратится к к вводу данных, я знаю только как ввести через массив записей a:array[1..100] of rec; переменные gr,gp:integer; fio:string; sr_ball:real; А как обратится (и ввести значения в переменные) в этой же записи к вложенным записям matan,fizika:word; + predm1,predm2,predm3:word; ? (по окончанию ввода нужно все записи записать в файл) 3) Далее в задаче у меня будет вычисляться переменная sr_ball у каждой записи (до записи в файл), Нужно при некоторых условиях (sr_ball<4) удалять запись (rec) из массива записей из файла! Т.е. как и каким методом воспользоваться ? Заранее спасибо! P.S. изпользовать всегда только один файл! Link to comment Share on other sites More sharing options...
Тролль Posted November 30, 2006 Report Share Posted November 30, 2006 n0rm: 1) Внутри определения типа записи должны определяться имена полей, а не имена типов полей. То есть вместо второго и третьего знаков = поставь знак : Все равно тебе имена типов этих внутренних записей отдельно не нужны. 2) Например: a[1].balli_postupleniya.matan:=5; 3) Насчет пункта 3 я не понял. Если до записи в файл записи (тьфу, многозначное слово!) видно, что она не нужна, так зачем ее туда записывать? Но если надо удалить запись в файле, то есть два способа: а) записываем вместо старого значения одного из элементов какое-нибудь специальное значение, показывающее, что эта запись недействительна. Когда-нибудь можно сжать файл специальной процедурой, подтягивающей действительные записи к началу файла, записывая их вместо недействительных записей. б) на место удаляемой записи переносим последнюю запись из файла, затем файл укорачиваем на одну запись. Link to comment Share on other sites More sharing options...
Бумер Posted December 6, 2006 Report Share Posted December 6, 2006 Вот у меня тоже непонятки. program lab_9_2;type sport=record fio:string; godr:integer; wozr:byte; nagradi:byte; end;sport2=record fio2:string; godr2:integer; wozr2:byte; nagradi2:byte; end;k=file of sport;varm:string;f:k; n:integer; i:integer; sports:sport; sports2:sport2; f2:file of sport2;q:sport2;beginassign(f,'D:\sport.lab');rewrite(f);reset(f);writeln ('wwedite kol-wo sportsmenow'); readln(n);for i:=1 to n dobeginWriteln('wwedite FIO'); readln(sports.fio);writeln('wwedite wozrast'); readln(sports.wozr);writeln('wwedite kol-wo nagrad'); readln(sports.nagradi);end;Close(f);reset(f);assign(f2,'D:\sport2.lab');rewrite(f2);reset(f2);while eof(f)<>true dobeginif (sports.wozr<26) and (sports.nagradi>1) then begin sports2.fio2:=sports.fio; sports2.wozr2:=sports.wozr; sports2.nagradi2:=sports.nagradi;end;end;Close(f);Close(f2);reset(f);reset (f2);while eof(f2)<>true dobeginreadln(sports2.fio2); m:=sports2.fio2; writeln(sports2.fio2);end;end. короче, как видно из объъявления типов и переменных, дан один файл, который содержит инфу о спортсменах, скопировать в другой файл надо инфу о тех, которые не старше 25 лет и имеют более одной награды. Ну вроде насчет копирования и т.п. все понятно. Ну а как просмотреть: скопировалась ли инфа или нет? Это ж не текстовый файл (текстовый нельзя использовать). Вот в конце я пытаюсь вывести на экран эту инфу, а оно не получается, а то вдруг и правда прога неправильно работает? Link to comment Share on other sites More sharing options...
Форматцевт Posted December 6, 2006 Report Share Posted December 6, 2006 Бумер: используй вьювер встроенный в FAR или HexEdit или UltraEdit. Link to comment Share on other sites More sharing options...
Тролль Posted December 6, 2006 Report Share Posted December 6, 2006 Бумер: используй вьювер встроенный в FAR или HexEdit или UltraEdit.И к чему такая страсть? Достаточно посмотреть в Windows длины файлов. Тем более, что при проверке они окажутся равными нулю. Бумер: Как программа может работать? Ты же в файлы ничего не записываешь. Ты их только открываешь, причем зачем-то дважды подряд, а потом закрываешь. Link to comment Share on other sites More sharing options...
Форматцевт Posted December 6, 2006 Report Share Posted December 6, 2006 Тролль: И к чему такая страсть? а что пригодятся позже, за то всё наглядно выглядит (тавтология) :) Link to comment Share on other sites More sharing options...
Бумер Posted December 6, 2006 Report Share Posted December 6, 2006 А вот такой код: program lab922;typesport=recordfio:string;vozr:byte;nagr:byte;end;sport2=recordfio2:string;vozr2:byte;nagr2:byte;end;var f:file of sport;sp:sport;a,i:byte; f2:file of sport; sp2:sport;beginassign(f2,'D:\file2.dat');rewrite(f2);assign(f,'D:\filelba91.dat');rewrite(f);writeln('wwedite kol-wo sportsmenow'); readln(a);for i:=1 to a dobeginwriteln('wwedite fio'); readln(sp.fio);writeln('wwedite vozr'); readln(sp.vozr);writeln('wwedite nagr'); readln(sp.nagr);write(f,sp);end;close(f);reset(f);while eof(f)=false dobegin read(f,sp);if ((sp.vozr)<26) and ((sp.nagr)>1)thenbeginsp2:=sp; write(f2,sp2);end; end;close(f);close(f2);writeln('itogowii file');reset(f2);while eof(f2)=false dobeginread(f2,sp);writeln ('fio ', sp.fio);writeln ('vozr ', sp.vozr);end;close(f2);end. Link to comment Share on other sites More sharing options...
Тролль Posted December 6, 2006 Report Share Posted December 6, 2006 Это уже должно работать. Хотя много лишнего. Зачем, например, тип sport2? Он вообще не используется. Объявления f и f2 тоже можно объединить: f,f2:file of sport; Две записи sp и sp2 ни к чему, достаточно одной. Прочитали в нее из одного файла, проверили и, если соответствует условиям, записали ее же в другой файл. Link to comment Share on other sites More sharing options...
Recommended Posts