n0rm Опубликовано 30 ноября, 2006 Жалоба Поделиться Опубликовано 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. изпользовать всегда только один файл! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 30 ноября, 2006 Жалоба Поделиться Опубликовано 30 ноября, 2006 n0rm: 1) Внутри определения типа записи должны определяться имена полей, а не имена типов полей. То есть вместо второго и третьего знаков = поставь знак : Все равно тебе имена типов этих внутренних записей отдельно не нужны. 2) Например: a[1].balli_postupleniya.matan:=5; 3) Насчет пункта 3 я не понял. Если до записи в файл записи (тьфу, многозначное слово!) видно, что она не нужна, так зачем ее туда записывать? Но если надо удалить запись в файле, то есть два способа: а) записываем вместо старого значения одного из элементов какое-нибудь специальное значение, показывающее, что эта запись недействительна. Когда-нибудь можно сжать файл специальной процедурой, подтягивающей действительные записи к началу файла, записывая их вместо недействительных записей. б) на место удаляемой записи переносим последнюю запись из файла, затем файл укорачиваем на одну запись. Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 6 декабря, 2006 Жалоба Поделиться Опубликовано 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 лет и имеют более одной награды. Ну вроде насчет копирования и т.п. все понятно. Ну а как просмотреть: скопировалась ли инфа или нет? Это ж не текстовый файл (текстовый нельзя использовать). Вот в конце я пытаюсь вывести на экран эту инфу, а оно не получается, а то вдруг и правда прога неправильно работает? Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 6 декабря, 2006 Жалоба Поделиться Опубликовано 6 декабря, 2006 Бумер: используй вьювер встроенный в FAR или HexEdit или UltraEdit. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 6 декабря, 2006 Жалоба Поделиться Опубликовано 6 декабря, 2006 Бумер: используй вьювер встроенный в FAR или HexEdit или UltraEdit.И к чему такая страсть? Достаточно посмотреть в Windows длины файлов. Тем более, что при проверке они окажутся равными нулю. Бумер: Как программа может работать? Ты же в файлы ничего не записываешь. Ты их только открываешь, причем зачем-то дважды подряд, а потом закрываешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 6 декабря, 2006 Жалоба Поделиться Опубликовано 6 декабря, 2006 Тролль: И к чему такая страсть? а что пригодятся позже, за то всё наглядно выглядит (тавтология) :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 6 декабря, 2006 Жалоба Поделиться Опубликовано 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 6 декабря, 2006 Жалоба Поделиться Опубликовано 6 декабря, 2006 Это уже должно работать. Хотя много лишнего. Зачем, например, тип sport2? Он вообще не используется. Объявления f и f2 тоже можно объединить: f,f2:file of sport; Две записи sp и sp2 ни к чему, достаточно одной. Прочитали в нее из одного файла, проверили и, если соответствует условиям, записали ее же в другой файл. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения