Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Файлы прямого доступа

Автор: Anastacia Adesso 8.01.2007 16:52

Хмммм если честно, попробовала сделать эту программу.. Только или запуталась где-то или что-то вообще неверно делаю... Просто не компилирует.

Программа тест.. Сначала делается файл с вопросами в виде-вопросб количество вариантов ответа, сами варианты ответов и номер правильного.
А результат записывается так- номер вопроса, имя и фамилия, выбранный номер ответа, правильный ответ.

Прикрепленный файл  UZD10.PAS ( 2.37 килобайт ) Кол-во скачиваний: 351

Может кто-нибудь в этом разбирается...

Автор: volvo 8.01.2007 17:01

как ты думаешь, сколько ошибок вот в этом фагменте?

      readln(f1,q.vopr);
writeln(q.vopr);
readln(f1,j_sk,prav);
for i:=1 to j_sk do
begin
readln(f1,q.vopr);
writeln(i,'. ',q.vopr);
end;

Автор: Anastacia Adesso 8.01.2007 17:06

Надо

      begin
readln(f1,q.otv);
writeln(i,'. ',q.otv);
end;
да?

Автор: volvo 8.01.2007 17:09

Не совсем... Файл F1 определен, как File of Test - соотвественно, типизированный... А к типизированным файлам процедура ReadLn неприменима, только Read... Во-вторых, читать надо в переменную типа Test, то есть всю запись сразу, а не кусками, иначе опять же компилятор не пропустит...

Автор: Anastacia Adesso 8.01.2007 17:14

Эммм

read(f1,q.vopr);
writeln(q.vopr);
read(f1,j_sk,prav);
for i:=1 to j_sk do
begin
read(f1,q.vopr);
writeln(i,'. ',q.vopr);
end;
у меня же q и есть переменная типа test. А история та же всё ещё

Автор: volvo 8.01.2007 17:26

Я же предупредил:

Цитата
читать надо в переменную типа Test, то есть всю запись сразу, а не кусками
, а ты опять хочешь прочесть только одно поле...
read(f1, q); { <--- Вот так у компилятора не будет претензий }

Автор: Anastacia Adesso 8.01.2007 17:32

Тогда можно оставить вот так..

      read(f1,q);
writeln(q.vopr);
for i:=1 to q.j_sk do
begin
writeln(i,'. ',q.vopr);
end;
те ридлайны, что были раньше надо убрать, так как прочитана уже вся запись?

Автор: Anastacia Adesso 8.01.2007 17:59

Тогда теперь ему что-то уже здесь не нравится

      for i:=1 to q.j_sk do
begin writeln(i,'. ',q.otv);{<--здесь}
end;

Автор: Malice 8.01.2007 18:06

Цитата(Anastacia Adesso @ 8.01.2007 13:59) *

Тогда теперь ему что-то уже здесь не нравится

for i:=1 to q.j_sk do
for j=1 to n do
writeln(i,'. ',q.otv[j]);{<--здесь}




Автор: Anastacia Adesso 8.01.2007 18:10

Нет

      for i:=1 to q.j_sk do
begin writeln(i,'. ',q.otv[i]);
end;

теперь почему-то после заполнения файла вопросов он выдает оценку ПЛОХО и всё... Что делать?

Автор: Malice 8.01.2007 18:16

Цитата
if otv_nr=q.prav then inc(prav_otv);

Автор: Anastacia Adesso 8.01.2007 18:21

Не в этом смысле..
Вначале идёт вообще создание файла с вопросами..
Это всё работает, но потом сразу же (не задавая вопросов) даёт оценку

Автор: Malice 8.01.2007 18:37

Приведи еще раз, что получилось, ведь были еще исправления, а то в исходном коде есть такие интересные строки:

writeln('Vvedite nomer praviljnogo otveta i nazhmite <Enter>');
writeln('Nazhmi <Enter> chtob nachatj test');
clrscr;

т.е. написали и стерли сразу..

Автор: Anastacia Adesso 9.01.2007 18:48

Вот такое получилось
Прикрепленный файл  UZD10.PAS ( 2.4 килобайт ) Кол-во скачиваний: 360

Автор: Malice 9.01.2007 19:36

Перед

while not eof(f1) do begin

надо поставить Reset (f1), чтоб сбросить указатель чтения в начало файла. + то, о чем я говорил раньше:

if otv_nr=q.prav then inc(prav_otv);

Автор: Anastacia Adesso 9.01.2007 19:48

На otv_nr он говорит что неизвестный идентификатор. Если поставить r.otv_nr ое перестаёт дальше компилировать

Вот так программа работае.

write('Vash vybor-->');
readln(r.otv_nr);
if r.otv_nr=q.prav then inc(prav);
writeln;
end;

Проблемма.. Всё можно ввести, задаст вопросы, примет ответы, и ... напишет что файл не открыт.. А почему?

Автор: Malice 9.01.2007 19:56

Цитата(Anastacia Adesso @ 9.01.2007 15:48) *

Вот так программа работае.

Ну да, правильно, я имел ввиду, что прблема в отсутствующем "q.".
if r.otv_nr=q.prav then inc(r.prav_nr);

Про файл ничего не говорит у меня, оценку ставит..

Автор: Anastacia Adesso 9.01.2007 20:02

А может потому что у меня в папке много файлов и я одно и то же название ввожу? Его заглючило

Да работает...
А как сделать так, чтоб он записывал во второй файл результаты, а не просто его создавал?

Автор: Malice 9.01.2007 20:14

Ты делаешь Close (f2), хотя его не открывала. Он у тебя вообще не используется. Поставь в начале Rewrite (f2) хотя бы.

Автор: Anastacia Adesso 9.01.2007 20:29

Сделала... Всё равно не пишет.. Ну и ладно...

Спасибо!!!!

Автор: Malice 9.01.2007 20:36

Эт я тебе про ошибку написал, а не пишет т.к. записи то и нет.. Если в начале поставить rewrite (f2), а перед close (f2) поставить write (f2,r), то запишет..

Автор: Anastacia Adesso 11.01.2007 16:24

Пишеееет!!!!!!! Ураааа give_rose.gif