Jump to content
СофтФорум - всё о компьютерах и не только

Файлы + записи


n0rm
 Share

Recommended Posts

Привет!

Нужна помощь в оформление синтаксиса!

Дано:

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

n0rm:

1) Внутри определения типа записи должны определяться имена полей, а не имена типов полей. То есть вместо второго и третьего знаков = поставь знак :

Все равно тебе имена типов этих внутренних записей отдельно не нужны.

2) Например: a[1].balli_postupleniya.matan:=5;

3) Насчет пункта 3 я не понял. Если до записи в файл записи (тьфу, многозначное слово!) видно, что она не нужна, так зачем ее туда записывать?

Но если надо удалить запись в файле, то есть два способа:

а) записываем вместо старого значения одного из элементов какое-нибудь специальное значение, показывающее, что эта запись недействительна. Когда-нибудь можно сжать файл специальной процедурой, подтягивающей действительные записи к началу файла, записывая их вместо недействительных записей.

б) на место удаляемой записи переносим последнюю запись из файла, затем файл укорачиваем на одну запись.

Link to comment
Share on other sites

Вот у меня тоже непонятки.

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

Бумер: используй вьювер встроенный в FAR или HexEdit или UltraEdit.

И к чему такая страсть? Достаточно посмотреть в Windows длины файлов. Тем более, что при проверке они окажутся равными нулю.

Бумер:

Как программа может работать? Ты же в файлы ничего не записываешь. Ты их только открываешь, причем зачем-то дважды подряд, а потом закрываешь.

Link to comment
Share on other sites

А вот такой код:

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

Это уже должно работать. Хотя много лишнего. Зачем, например, тип sport2? Он вообще не используется. Объявления f и f2 тоже можно объединить: f,f2:file of sport; Две записи sp и sp2 ни к чему, достаточно одной. Прочитали в нее из одного файла, проверили и, если соответствует условиям, записали ее же в другой файл.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...