Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 10:34   #1
Selicat
 
Аватар для Selicat
 
Регистрация: 16.04.2011
Сообщений: 5
Вопрос Вопросы из мемо в случайном порядке

Здравствуйте, я делаю тест в Delphi7, вопросы лежат в текстовом файле, структура файла: первая строка-вопрос, 2,3,4 - варианты ответов, 5 - номер правильного ответа. весь файл грузится в мемо, а оттуда по строчкам раскидывается в Label и RadioButton-ы. вопросы должны появляться случайно. Я попыталась что-то сделать......
Код:
procedure TForm6.FormCreate(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('тест.txt');
randomize;
for i:= to n do begin
v:=random(n)
label1.Caption:=memo1.Lines[v*5];
Radiobutton1.Caption:=memo1.Lines[v*5+1];
Radiobutton2.Caption:=memo1.Lines[v*5+2];
Radiobutton3.Caption:=memo1.Lines[v*5+3];
NP:=Memo1.Lines[v*5+4];
if Radiobutton1.Checked and NP='1'
or Radiobutton2.Checked and NP='2'
or Radiobutton3.Checked and NP='3'
then ball:=ball+1;
for k:=0 to 4 do
memo1.Lines.Delete(v*5+k);
n:=n-1;
end;
 n:=strtoint(memo1.Lines[memo1.Lines.count-1]);
 end;
Но видимо я совсем не так делаю Помогите, пожалуйста разобраться
Редактировать/Удалить сообщение
Selicat вне форума Ответить с цитированием
Старый 18.05.2011, 11:47   #2
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Тут надо место for использовать условие while (n>0) а то получается что у тебя условие для for плавающее, у тебя и счетчик и условия окончания изменяются. И n надо определять до начала цикла.
Код:
procedure TForm6.FormCreate(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('тест.txt');
randomize;
n:=(memo1.Lines.count-1)/5;
While (n>0) do begin
v:=random(n)
label1.Caption:=memo1.Lines[v*5];
Radiobutton1.Caption:=memo1.Lines[v*5+1];
Radiobutton2.Caption:=memo1.Lines[v*5+2];
Radiobutton3.Caption:=memo1.Lines[v*5+3];
NP:=Memo1.Lines[v*5+4];
if Radiobutton1.Checked and NP='1'
or Radiobutton2.Checked and NP='2'
or Radiobutton3.Checked and NP='3'
then ball:=ball+1;
for k:=0 to 4 do
memo1.Lines.Delete(v*5+k);
n:=n-1;
end;
end;
Могу ощибиться в синтаксисе т.к. с паскалем не дружу.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 18.05.2011, 12:33   #3
Selicat
 
Аватар для Selicat
 
Регистрация: 16.04.2011
Сообщений: 5
По умолчанию

Код:
procedure TForm6.FormCreate(Sender: TObject);
begin

n:=15; 
Memo1.Lines.LoadFromFile('тест.txt');
randomize;
n:=(memo1.Lines.count-1)/5; 
While (n>0) do begin

v:=random(n)
label1.Caption:=memo1.Lines[v*5];
Radiobutton1.Caption:=memo1.Lines[v*5+1];
Radiobutton2.Caption:=memo1.Lines[v*5+2];
Radiobutton3.Caption:=memo1.Lines[v*5+3];
NP:=Memo1.Lines[v*5+4];
if Radiobutton1.Checked and NP='1'
or Radiobutton2.Checked and NP='2'
or Radiobutton3.Checked and NP='3'
then ball:=ball+1;
for k:=0 to 4 do
memo1.Lines.Delete(v*5+k);
n:=n-1;
end;
 n:=strtoint(memo1.Lines[memo1.Lines.count-1]);
 end;
а что значит эта строка? на ней ошибку выдает n:=(memo1.Lines.count-1)/5;
и n я задаю как количество вопросов, не правильно делаю?
Selicat вне форума Ответить с цитированием
Старый 18.05.2011, 13:29   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) удаление использованного вопроса сделано неверно.

2) почему получение случайного вопроса вынесено на FormCreate ?! Вам ОДИН вопрос при запуске программы нужен?! Остальные не интересуют?!

3) я вижу несколько различных подходов.
I. После чтения вопросов в Memo (кстати, а почему в Memo - TStringList тоже самое, только быстрее (т.к. без визуализации)
потом вопросы брать из списка, просто читая по пять строк.

II. Завести массивчик [1..N] (N - количество вопросов.) можно динамический.
В него поместить адреса строк вопросов (1, 6, 11 и т.д.)
массив перемешать. брать вопросы по ссылкам из этого массива.

III. брать случайный номер вопроса через RANDOM(N) + 1
до тех пор пока этого номера нет ещё в списке выпавших.
сохранить выпавших номер в список.
повторить нужное число раз...


p.s. с любым вариантом легко помогу примером..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2011, 14:00   #5
Selicat
 
Аватар для Selicat
 
Регистрация: 16.04.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
2) почему получение случайного вопроса вынесено на FormCreate ?! Вам ОДИН вопрос при запуске программы нужен?! Остальные не интересуют?!
а куда его выносить? ведь когда программа запускается, вопрос должен уже быть случайный из списка, а не первый
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
I. После чтения вопросов в Memo (кстати, а почему в Memo - TStringList тоже самое, только быстрее (т.к. без визуализации)
потом вопросы брать из списка, просто читая по пять строк.
тоесть в мэмо выводить вопрос и варианты ответа к нему? или как?
Мне нужно чтобы их мемо в лэйбл и на кнопки, чтоб вопросы не по порядку, а случайным образом, и чтобы можно было не все 30 задать, а к примеру 15
Selicat вне форума Ответить с цитированием
Старый 18.05.2011, 15:27   #6
Selicat
 
Аватар для Selicat
 
Регистрация: 16.04.2011
Сообщений: 5
По умолчанию

может у кого-то есть подобный исходник, я бы в нем попробовала разобраться, а то совсем все плохо
поделитесь, если не жалко
Selicat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rss лента ( как можно вывести в случайном порядке ?) nikolj JavaScript, Ajax 0 01.05.2011 11:55
C# - Посимвольный вывод слова в случайном порядке Lastsummer Помощь студентам 4 02.02.2011 12:40
мемо bulldog5293 Работа с сетью в Delphi 3 13.07.2010 21:43
Как скопировать текст из мемо одной формы в мемо другой CraZZy RabbIt Общие вопросы Delphi 4 27.02.2009 00:01
отсортировать таблицу сначала в алфавитном порядке фамилий продавцов, затем в порядке возростания получен Lora Microsoft Office Excel 1 31.05.2008 17:22