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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2011, 15:36   #1
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию Тест на делфи, исправить ошибку

создаю тест на делфи, где возможны только 2 варианта ответа - да,нет, все хорошо, он выводит все вопросы, отвечаю, но когда выводится последний вопрос и после нажатия на кнопку "Далее" должны быть выведены результаты тестирования выскакивает ошибка. не могу понять в чём там дело, может кто поможет??
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons;

type
  TTest_Form = class(TForm)
    Image1: TImage;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Test_Form: TTest_Form;



implementation

{$R *.dfm}
var
f: TextFile;      // ôàéë òåñòà (âîïðîñû è âàðèàíòû îòâåòîâ)
  nq: integer;      // êîëè÷åñòâî âîïðîñîâ â òåñòå
  right: integer;   // êîëè÷åñòâî ïðàâèëüíûõ îòâåòîâ
  level: array[1..4] of integer;      // êðèòåðèè îöåíîê
  mes: array[1..4] of string;    // êîììåíòàðèè
  
// ÷èòàåò âîïðîñ èç ôàéëà è âûâîäèò åãî íà â ïîëÿ ôîðìû
function NextQw : boolean;
var
  buf: string;
begin
  Test_Form.Memo1.Clear;
if not EOF(f) then
  begin
    // ïðî÷èòàòü è âûâåñòè âîïðîñ
    Readln(f,buf);
    Test_Form.Memo1.Lines.Add(buf);

    // ïðî÷èòàòü è âûâåñòè âàðèàíòû îòâåòîâ
    // 1-é âàðèàíò

    Readln(f,buf);  // îöåíêà çà âûáîð ýòîãî îòâåòà (1 - ïðàâèëüíî, 0 - íåò)
    Test_Form.RadioButton1.Tag := StrToInt(buf);
    // 2-é âàðèàíò
    Readln(f,buf);
    Test_Form.RadioButton2.Tag := StrToInt(buf);

     // ñ÷åò÷èê îáùåãî êîëè÷åñòâà âîïðîñîâ
    nq:= nq + 1;

    // êíîïêà "Äàëüøå" íå äîñòóïíà,
    // ïîêà íå âûáðàí îäèí èç âàðèàíòîâ îòâåòà
    Test_Form.BitBtn1.Enabled := False;

    // íè îäíà èç ðàäèîêíîïîê íå âûáðàíà
    Test_Form.RadioButton1.Checked := False;
    Test_Form.RadioButton2.Checked := False;
    NextQw := TRUE;
  end
else
  NextQw := FALSE;
end;

// ñîáûòèå FormCreate âîçíèêàåò â ìîìåíò
// ñîçäàíèÿ ôîðìû
procedure TTest_Form.FormCreate(Sender: TObject);
var
  i: integer;
   buf: string;
begin
   AssignFile(f,'input.txt'); //â ïðîöåññå îòêðûòèÿ ôàéëà âîçìîæíû îøèáêè, ïîýòîìó ...
   try
    Reset(f); // ýòà èíñòðóêöèÿ ìîæåò âûçâàòü îøèáêó
   except
    on EInOutError do
        begin
            ShowMessage('Îøèáêà îáðàùåíèÿ ê ôàéëó òåñòà: ' + 'input.txt');
            Application.Terminate; // çàâåðøèòü ïðîãðàììó
        end;
  end;
  for i:=1 to 4 do   // ïðî÷èòàòü îöåíêè è êîììåíòàðèè
    begin
      Readln(f,buf);
      mes[i] := buf;
      Readln(f,buf);
      level[i] := StrToInt(buf);
    end;
     right := 0; // ïðàâèëüíûõ îòâåòîâ
   nq := 0;    // âñåãî âîïðîñîâ
   NextQW;     // ïðî÷èòàòü è âûâåñòè ïåðâûé âîïðîñ
end;

// ùåë÷îê íà êíîïêå "Äàëüøå"
procedure TTest_Form.BitBtn1Click(Sender: TObject);
var
    buf: string;
    i: integer;
begin
   if BitBtn1.Caption = 'Çàâåðøèòü' then Close;

    // äîáàâèì îöåíêó çà âûáðàííûé âàðèàíò îòâåòà
    // îöåíêà íàõîäèòñÿ â ñâîéñòâå Button.Tag
    // Button.Tag = 1 - îòâåò ïðàâèëüíûé, 0 - íåò

    if RadioButton1.Checked  then
       right := right + RadioButton1.Tag;
    if RadioButton2.Checked  then
       right := right + RadioButton2.Tag;
 if not NextQW then
  begin
      // çäåñü çíà÷åíèå NextQw = FALSE
      BitBtn1.Caption := 'Çàâåðøèòü';

      // ñêðûòü ïåðåêëþ÷àòåëè è ïîëÿ ìåòîê
      RadioButton1.Visible := False;
      RadioButton2.Visible := False;
      memo1.Visible:=False;
      StaticText2.Visible := False;
      StaticText3.Visible := False;

      buf := 'Òåñòèðîâàíèå çàâåðøåíî.' + #13 +
             'Ïðàâèëüíûõ îòâåòîâ: ' + IntToStr(right) +
             ' èç ' + IntToStr(nq) + '.' + #13;

      // âûñòàâèòü îöåíêó
      // right - êîë-âî ïðàâèëüíûõ îòâåòîâ
      i:=1; // íîìåð óðîâíÿ
      while (right < level[i]) and (i < 4) do
            inc(i);

      buf := buf + mes[i];

      StaticText1.AutoSize := TRUE;
      StaticText1.Caption := buf;

    end;
end;

procedure TTest_Form.RadioButton1Click(Sender: TObject);
begin
  BitBtn1.Enabled := True; // êíîïêà Äàëåå òåïåðü äîñòóïíà
end;
procedure TTest_Form.RadioButton2Click(Sender: TObject);

begin
  BitBtn1.Enabled := True; // êíîïêà Äàëåå òåïåðü äîñòóïíà
end;

end.
Klik_1602 вне форума Ответить с цитированием
Старый 15.06.2011, 15:48   #2
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

ребят, да помогите кто-нить, завтра сдавать!!
Klik_1602 вне форума Ответить с цитированием
Старый 15.06.2011, 16:07   #3
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Что с каракулями?
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 15.06.2011, 16:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
ребят, да помогите кто-нить, завтра сдавать!!
Вы бы лучше исходники проекта запаковали и архив выложили...
(ну и файл 'input.txt' вложить в архив не помешает!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.06.2011, 16:21   #5
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

в смысле?? почему комментарии такие непонятные, не знаю))) у меня они нормально в делфи отображаются)
Klik_1602 вне форума Ответить с цитированием
Старый 15.06.2011, 16:21   #6
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

вот архив...
Вложения
Тип файла: rar Лаба3.rar (415.8 Кб, 15 просмотров)

Последний раз редактировалось Klik_1602; 15.06.2011 в 16:27.
Klik_1602 вне форума Ответить с цитированием
Старый 15.06.2011, 17:15   #7
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
Радость

Лаба3.rar
вооля....
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 15.06.2011, 17:26   #8
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

ооо))) пасиб большое-пребольшое))) а чего она работать не хотела??
Klik_1602 вне форума Ответить с цитированием
Старый 15.06.2011, 19:02   #9
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

если не трудно, посмотрите ещё раз эту работу, снова ошибки=(( пришлось переделывать, так как исходный файл должен выглядеть следующим образом №вопроса %название шрифта %размер шрифта %цвет %признак ответа%.вроде переделала, но снова не хочет работать\\

вот архивчик
Вложения
Тип файла: rar Черновик3.rar (491.6 Кб, 10 просмотров)
Klik_1602 вне форума Ответить с цитированием
Старый 15.06.2011, 19:09   #10
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Все ошибки сидят тут:

Код:
function NextQw : boolean;
var
  buf: string;
  Font_Size :Integer;
  Font_Name :String;
  Color_Name :String;
  Nomer:string;
  otvet:byte;
  vopros:string;
begin
  Test_Form.Memo1.Clear;
if not EOF(f) then
  begin
    Readln(f,buf);  //прочитать и вывести вопрос
    Nomer:=copy(buf,1,pos('%',buf)+1);
    Delete(buf,1,pos('%',buf)+2);
    Font_Name:=copy(buf,1,pos('%',buf)+1);
    Delete(buf,1,pos('%',buf)+2);
    // Font_Size:= strtoint(copy(buf,1,pos('%',buf)+1));
    Delete(buf,1,pos('%',buf)+2);
    Color_Name:=copy(buf,1,pos('%',buf)+1);
    Delete(buf,1,pos('%',buf)+2);
    Vopros:=copy(buf,1,pos('%',buf)+1);
    Delete(buf,1,pos('%',buf)+2);
    // Otvet:= strtoint(copy(buf,1,pos('%',buf)+1));
    Delete(buf,1,pos('%',buf)+2);
    Test_Form.Memo1.Font.Size:=Font_Size;
    Test_Form.Memo1.Font.Name:=Font_Name;
    // Test_Form.Memo1.Font.Color:=Color_Name;
    Test_Form.Memo1.Lines.Add('Вопрос№ '+nomer);
    Test_Form.Memo1.Lines.Add(vopros);
    if otvet=1 then
    Test_Form.RadioButton1.Tag:=1
    else
    Test_Form.RadioButton2.Tag:=1;
    nq:= nq + 1; // счетчик общего количества вопросов
    Test_Form.BitBtn1.Enabled := False;  // кнопка "Дальше" не доступна,пока не выбран один из вариантов ответа
    Test_Form.RadioButton1.Checked := False;  // ни одна из радиокнопок не выбрана
    Test_Form.RadioButton2.Checked := False;
    NextQw := true;
  end
else NextQw := false;
end;
После закоментирования проблемных строк всё работает боле менее.
Судя по всему неочень корректно происходит считывания структуры, которую ты придумала.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тест на делфи misher Общие вопросы Delphi 1 09.09.2010 06:40
Тест в делфи. homuljka Помощь студентам 1 28.06.2010 21:28
тест в делфи Гурам Общие вопросы Delphi 6 11.05.2010 22:55
Тест в Делфи natasxa Помощь студентам 5 23.03.2010 22:20
Помогите исправить ошибку в коде на делфи True_girl Помощь студентам 2 02.07.2009 00:57