Консультация № 65843
06.12.2006, 20:29
0.00 руб.
0 3 3
Добрый вечер...
Имеется учебная программа на Дельфи. Тест. Выдаются вопросы, и в зависимости от ДА или НЕТ меняется значение счетчика. Выдает все время один и тот же, последний результат. Не могу найти ошибку.
Код в приложении.

Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls;type TForm1 = class(TForm) Fon: TImage; Edit1: TEdit; LblYes: TLabel; LblNo: TLabel; procedure LblNoClick(Sender: TObject); procedure LblYesClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;const kol=5; vopr: array[1..kol] of string = (‘Боитесь ли вы темноты?‘, ‘Закрываете ли вы ВСЕГДА окна и двери?‘, ‘Потеют ли у вас ладони при встрече с чем-то неожиданным?‘, ‘Избегаете ли вы ночных прогулок в одиночестве?‘, ‘Снятся ли вам кошмары?‘); result: array[0..kol] of string = (‘Поздравляем! У вас просто железные нервы!‘, ‘У вас очень крепкие нервы.‘, ‘Нервы уже не такие, как в молодости...‘, ‘Нервишки уже пошаливают...‘, ‘Слабоваты нервишки... Кажется, пора обратиться к врачу.‘, ‘Да вы просто псих! Немедленно отойдите от компьютера!‘);var Form1: TForm1; num: Integer; s: Integer;implementation{$R *.dfm}procedure Make;beginif num < kolthen begin num:=num+1; Form1.Edit1.Text:= vopr[num]; endelse begin Form1.LblYes.Enabled:=False; Form1.LblYes.ShowHint:=False; Form1.LblNo.Enabled:=False; Form1.LblNo.ShowHint:=False; Form1.Edit1.Font.Color:=clBlue; Form1.Edit1.Text:= result[num]; end;end;procedure TForm1.FormCreate(Sender: TObject);begin num:=1; s:=0; Form1.Edit1.Text:=vopr[num];end;procedure TForm1.LblYesClick(Sender: TObject);begins:=s+1;Make;end;procedure TForm1.LblNoClick(Sender: TObject);beginMake;end;end.

Обсуждение

Неизвестный
06.12.2006, 23:55
общий
это ответ
Здравствуйте, Саша Александрова!

Всё очень просто! Вы видимо не учли, что ваш массив начинается с 1. А по вашему коду вы составили цикл, где индекс массива не может быть равным 1.

Вот правильный ответ:

procedure Make;
begin
if num <= kol
then
begin
num:=num+1;
Form1.Edit1.Text:= vopr[num];
end

И ещё,не стоит писать процедуры без формальных типов данных, соответтственно и объявлять. В некоторых кодах программа проста не будет работать.

Удачи в программировании!
Неизвестный
06.12.2006, 23:57
общий
это ответ
Здравствуйте, Саша Александрова!
Ошибка в процедуре Make. В приложении указана ошибка и исправление.
Удачи!

Приложение:
procedure Make;beginif num < kolthen begin num:=num+1; Form1.Edit1.Text:= vopr[num]; endelse begin Form1.LblYes.Enabled:=False; Form1.LblYes.ShowHint:=False; Form1.LblNo.Enabled:=False; Form1.LblNo.ShowHint:=False; Form1.Edit1.Font.Color:=clBlue; Form1.Edit1.Text:= result[s];// вот где ошибка, вместо //num поставьте s end;end;
Неизвестный
07.12.2006, 06:31
общий
это ответ
Здравствуйте, Саша Александрова!
Обратите внимание, что индекс массива вопросов начинается с 1, а индекс массива результатов - с 0. Так как Вы используете переменную num для вывода результата, то инициализировать надо ее тоже нулем. Изменять свое значение num должен только по нажатию на "ДА", а сравнивать с kol надо переменную s. Т.е. s- это счетчик, а num - индекс результата. Cм.приложение. Желаю успехов.

Приложение:
procedure TForm1.FormCreate(Sender: TObject);begin num:=0; //было Num:=1 s:=0; Form1.Edit1.Text:=vopr[num];end;procedure Make;beginif s < kol //было num<kolthen begin s:=s+1; Form1.Edit1.Text:= vopr[s]; endelse begin Form1.LblYes.Enabled:=False; Form1.LblYes.ShowHint:=False; Form1.LblNo.Enabled:=False; Form1.LblNo.ShowHint:=False; Form1.Edit1.Font.Color:=clBlue; Form1.Edit1.Text:= result[num]; end;end;procedure TForm1.LblYesClick(Sender: TObject);beginnum:=num+1; // было s:=s+1 Make;end;procedure TForm1.LblNoClick(Sender: TObject);beginMake;end;
Форма ответа