IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Запись в файл
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Привет ребята выручайте. У меня курсовик игра "о счастливчик". Я не могу написать
продедуру(функцию, незнаю) которая бы вводила в графическом режиме вопросы и записывала
их в файл:
1. В начале появляется прямоугольник в котором выбирается уровень сложности вопросов. Если
пользователь введет цифру 1 значит должен активироваться 1 файл( так и с цифро 2 -- актив. 2
файл, 3 -- актив. 3 файл).
2. Потом пользователь нажимает клавишу и появляется окно для ввода вопроса (все идет в
графическом режиме). И после ввода вопроса, нажимаем любую клавишу и этот вопрос
записывается в файл.
3. Потом после ввода вопроса пользователь нажимает клавишу и появляется окно для ввода
правильного ответа. И после ввода ответа, нажимаем любую клавишу и этот ответ записывается
в файл.
4. И так для 3 не правильных ответов.


Причем ввод идет в графическом режиме(тоесть нада продедура ввода текста в граф. режим).
Моя проблема в том что я не понимаю как записать и куда все эти вопросы( а их может быть много) и
ответы. И что бы при случайном выводе вопроса в графический режим ответы(и не правильные
ответы) тоже должны совпадать с этим вопросом).


Прикрепленные файлы
Прикрепленный файл  file.PAS ( 2.3 килобайт ) Кол-во скачиваний: 169
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ты начинаешь не с того, с чего нужно начинать... Напиши сначала программу, которая будет стабильно работать в текстовом режиме, безо всяких финтифлюшек и рюшечек... А вот когда она заработает, тогда поменять процедуру ввода с текста на графику + изменить внешний вид интерфейса - дело получаса...

Цитата
Моя проблема в том что я не понимаю как записать и куда все эти вопросы
В файлы, куда ж еще?

type
tquest = record
question: string[50];
answers: array[1 .. 4] of string[30];
right_answer: byte;
end;


и создавай файл:
var f_in: file of tquest;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


как их связать чтобы при выводе вопроса нужные ответы выводились. И right_answer: byte это зачем???

Сообщение отредактировано: John -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Читаешь из файла запись полностью, в ней сразу будут содержаться И вопрос И 4 варианта ответа... Вот их и выводи на экран.

Цитата
И right_answer: byte это зачем???
То есть, тебе не обязательно знать, КАКОЙ из ответов правильный? Вот тут будет храниться номер правильного ответа из 4-х приведенных вариантов.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
как их связать чтобы при выводе вопроса нужные ответы выводились.

они ж уже связаны в запись.
то есть тебе надо сделать
var zap: tquest;
...
writeln(zap.question);
for i:=1 to 4 do
writeln(zap.answers[i]);



--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


мисс_граффити все так и делаю. Подскажите еще как несколько вопросов записать, а то они у меня один на другой накладываются..???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


blink.gif
у меня ничего ни на что не накладывается
показывай, как делаешь


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


 
type
Tvopros=record
question: string;
answer: array [1..4] of string[30];
ranswer: byte;
end;

var
s1:Tvopros;
f1: file of Tvopros;
f2: file of Tvopros;
f3: file of Tvopros;
ch:char;

procedure vvod1; {ввод вопросов для 1 файла}
var
i:integer;
begin
writeln('Question???');
readln(s1.question);
readkey;
for i:=1 to 4 do
begin
writeln('answer', i);
readln(s1.answer[i]);
end;
assign(f1, 'D:\all\1.bin');
reset(f1);
write(f1, s1);
close(f1);
end;

procedure out; {процедура вывода вопросов и ответов}
var
i:integer;
begin
assign(f1, 'D:\all\1.bin');
reset(f1);
read(f1, s1);
writeln(s1.question);
for i:=1 to 4 do
writeln(s1.answer[i]);
end;



Да, еще если записано много вопросов как вывести любой из этого списка вопрос??? И подскажите как ranswer: byte работать куда это поместить??

Сообщение отредактировано: John -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Стоп... Ты что, для ввода КАЖДОГО вопроса используешь vvod1? Там же у тебя Reset... Само собой все вопросы будут писаться в первую запись... Надо в основной программе открыть файл, а в процедуре никаких Reset чтоб не было...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Цитата
Стоп... Ты что, для ввода КАЖДОГО вопроса используешь vvod1? Там же у тебя Reset... Само собой все вопросы будут писаться в первую запись... Надо в основной программе открыть файл, а в процедуре никаких Reset чтоб не было...

Не понял??? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Скажем, так:

var
f1: file of Tvopros;
...

procedure vvod1; {ввод вопросов для 1 файла}
var
i:integer;
begin
write('Question???'); readln(s1.question);
readkey;
for i:=1 to 4 do
begin
write('answer', i, ': '); readln(s1.answer[i]);
end;
write(f1, s1)
end;

{ Основная программа: }
...
{ Открыл файл }
assign(f1, 'D:\all\1.bin');
reset(f1);

for i := 1 to 20 do begin
vvod1; { Вводишь 20 вопросов }
end;

{ Ввод окончен - файл можно закрыть }
close(f1);
...


Кстати, теперь можно выбрать случайный вопрос из файла очень просто:
n := random(filesize(f1));
seek(f1, n);
read(f1, s1);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


А как сделать чтобы если вопрос раньше выводился то потом он не выводился???
Я так понимаю, что если номер вопроса будет равен предыдущему номеру выведенного вопроса, то тогда надо вывести другой вопрос. Только как это записать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Я бы сделал массив булинов размером с количество вопросов. В моём компиляторе все элементы массива изначально принимаю значения False.
n := random(filesize(f1));
If ms[n + 1] = False then
begin
seek(f1, n);
read(f1, s1);
ms[n + 1] := True;
end else writeln ('Vopros uzhe bil');


Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Цитата
Я бы сделал массив булинов размером с количество вопросов

Это как??

ms: array [0..{максимальное количество вопросов}] of boolean;


Сообщение отредактировано: John -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Почему с 1? Индексация в файле начинается с 0, здесь тоже надо бы с нуля...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Опять с этими вопросами, как сделать так что бы эти вопросы блокировались после вывода. Просто как посоветовал Tan немного не то, надо что после того как вывелся вопрос, он блокировался до нового запуска..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


ну возьми так как я тебе советовал только после else не выводи сообщение о том, что вопроса нет а так :
 else continue; 
то есть ничего не изменится и программа продолжит работу, организуй цикл.

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Цитата
поменять процедуру ввода с текста на графику

Можете помочь.

Если использовать эту запись то для ввода я использую


procedure vvod;
var
s:string;
x,y:integer;
begin
s:='';
x:=72;
y:=88;
repeat
ch:=readkey;
case ch of
#0:
begin
ch:=readkey;
end;
#13:;

#8: if length(S)>0 then
begin
bar(x,y, x+textwidth(s), y+textheight(s));
s[0]:=chr(length(s)-1);
outtextxy(x, y, s);
end;
else
begin
s:=s+ch;
outtextxy(x,y, s);
end;
end;
until ch=#13;
end;




А как это связать с предыдущим???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Люди как сделать, помогите! blink.gif blink.gif blink.gif blink.gif ПОЖАЛУЙСТА.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Народ скажите тут мы в записи объявляли right_answer для того что знать правильный ответ. Так вот что надо присвоить right_answer
Допустим

var
s1: Tquestion;
begin
s1.right_answer:=???????????


Что надо написать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 19:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name