Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Delphi
Перезагрузить страницу Как в написанном коде найти ошибку
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
baklan2004 baklan2004 вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.11.2005
Thumbs up Как в написанном коде найти ошибку - 19.09.2006, 18:11

Писал тест используя в качестве образца найденный в и-нете простенький образец теста. Всё работает но неправильно считаютса очки. Притом неправельно считаютса именно серединном ответе. Точнее придлогаетса везде по 3 ответа из которых 1 правельный и если правельный попадает по середине то он неучитываетса. Если отвечать все серединные то полюбому будет 0 очков даже если все серединные правельные.
Если менять N_ANS=3 то тогда середина считаетса, но всё считаетса неправельно.

Был бы очень благодарен за помощ, уже очень давно мучаюсь и немогу найти проблему

Код программы :

Код:
 unit unit7;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls,
  jpeg, DynamicSkinForm, SkinCtrls;

type
  TForm7 = class(TForm)
    Label5: TLabel;

    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;

    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;

    Image1: TImage;
    Button1: TButton;
    Panel1: TPanel;
    RadioButton5: TRadioButton;
    spDynamicSkinForm1: TspDynamicSkinForm;
    spSkinMainMenuBar1: TspSkinMainMenuBar;
    Button2: TButton;
    spSkinGauge1: TspSkinGauge;
    Timer1: TTimer;

    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure RadioButtonClick(Sender: TObject);

    procedure Info;
    procedure VoprosToScr;
    procedure ShowPicture;
    procedure ResetForm;
    procedure Itog;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  form7: TForm7;

implementation

Uses unit1;

{$R *.DFM}
const
   N_LEV=5;
   N_ANS=3;

var
  f:TextFile;
  vremja:integer;
  minuta:integer;

  level:array[1..N_LEV] of integer;
  mes:array[1..N_LEV] of string;

  score:array[1..N_ANS] of integer;
  summa:integer;
  vopros:integer;
  otv:integer;

procedure Tform7.Info;
var
   s,buf:string;
begin
   readln(f,s);
   form7.Caption := s;
   buf:='';
   repeat
         readln(f,s);
         if s[1] <> '.'
            then buf := buf +s + #13;
   until s[1] ='.';
   Label5.caption:=buf;
end;

Procedure GetLevel;
var
   i:integer;
   buf:string;
begin
     i:=1;
     repeat
         readln(f,buf);
         if buf[1] <> '.' then begin
            mes[i]:=buf;
            readln(f,level[i]);
            i:=i+1;
         end;
     until buf[1]='.';
end;

Procedure Tform7.ShowPicture;
var
  w,h: integer;
begin
  w:=ClientWidth-10;
  h:=ClientHeight
         - Panel1.Height -10
         - Label5.Top
         - Label5.Height - 10;

  if Label1.Caption <> ''
     then h:=h-Label1.Height-10;
  if Label2.Caption <> ''
     then h:=h-Label2.Height-10;
  if Label3.Caption <> ''
     then h:=h-Label3.Height-10;
  if Label4.Caption <> ''
     then h:=h-Label4.Height-10;

  Image1.Top:=form7.Label5.Top+Label5.Height+10;
  if Image1.Picture.Bitmap.Height > h
        then Image1.Height:=h
        else Image1.Height:= Image1.Picture.Height;
  if Image1.Picture.Bitmap.Width > w
        then Image1.Width:=w
        else Image1.Width:=Image1.Picture.Width;

  Image1.Visible := True;
end;

Procedure Tform7.VoprosToScr;
  var
   i:integer;
   s,buf:string;
   ifn:string;
  begin
     vopros:=vopros+1;
     caption:='Jautajums ' + IntToStr(vopros);
     buf:='';
     repeat
           readln(f,s);
           if (s[1] <> '.') and (s[1] <> '\')
              then buf:=buf+s+' ';
     until (s[1] ='.') or (s[1] ='\');
     Label5.caption:=buf;


     if s[1] <> '\'
       then Image1.Tag:=0
       else
        begin
          Image1.Tag:=1;
          ifn:=copy(s,2,length(s));
          try
            Image1.Picture.LoadFromFile(ifn);
            except
              on E:EFOpenError do
                 Image1.Tag:=0;
          end;
        end;

     i:=1;
     repeat
        buf:='';
        repeat
          readln(f,s);
          if (s[1]<>'.') and (s[1] <> ',')
                then buf:=buf+s+' ';
        until (s[1]=',')or(s[1]='.');
        score[i]:= StrToInt(s[2]);
        case i of
            1: Label1.caption:=buf;
            2: Label2.caption:=buf;
            3: Label3.caption:=buf;
            4: Label4.caption:=buf;
        end;
        i:=i+1;
     until s[1]='.';

     if Image1.Tag =1
        then ShowPicture;

      if form7.Label1.Caption <> ''
     then begin
        if form7.Image1.Tag =1
            then Label1.top:=Image1.Top+Image1.Height+10
            else Label1.top:=Label5.Top+Label5.Height+10;
        RadioButton1.top:=Label1.top;
        Label1.visible:=TRUE;
        RadioButton1.visible:=TRUE;
     end;

     if form7.Label2.Caption <> ''
     then begin
        Label2.top:=Label1.top+ Label1.height+10;
        RadioButton2.top:=Label2.top;
        Label2.visible:=TRUE;
        RadioButton2.visible:=TRUE;
     end;

     if form7.Label3.Caption <> ''
     then begin
        Label3.top:=Label2.top+ Label2.height+10;
        RadioButton3.top:=Label3.top;
        Label3.visible:=TRUE;
        RadioButton3.visible:=TRUE;
     end;

     if form7.Label4.Caption <> ''
     then begin
        Label4.top:=Label3.top+ Label3.height+10;
        RadioButton4.top:=Label4.top;
        Label4.visible:=TRUE;
        RadioButton4.visible:=TRUE;
     end;
  end;

Procedure Tform7.ResetForm;
begin

     Label1.Visible:=FALSE;
     Label1.caption:='';
     Label1.width:=ClientWidth-Label1.left-5;
     RadioButton1.Visible:=FALSE;

     Label2.Visible:=FALSE;
     Label2.caption:='';
     Label2.width:=ClientWidth-Label2.left-5;
     RadioButton2.Visible:=FALSE;

     Label3.Visible:=FALSE;
     Label3.caption:='';
     Label3.width:=ClientWidth-Label3.left-5;
     RadioButton3.Visible:=FALSE;

     Label4.Visible:=FALSE;
     Label4.caption:='';
     Label4.width:=ClientWidth-Label4.left-5;
     RadioButton4.Visible:=FALSE;

     Label5.width:=ClientWidth-Label5.left-5;

     Image1.Visible:=FALSE;
end;

procedure Tform7.Itog;
  var
   i:integer;
   buf:string;
  begin
   buf:='';
   buf:='Testa rezultats'+ #13
        +'Pavisam balles: '+ IntToStr(summa);
   i:=1;
   while (summa < level[i]) and (i<N_LEV) do
         i:=i+1;
   buf:=buf+ #13+mes[i];
   Label5.Top:=20;
   Label5.caption:=buf;
  end;

procedure Tform7.FormActivate(Sender: TObject);
  begin
  Timer1.Enabled:=False;
   vremja:=30;
   minuta:=0;
   spSkinGauge1.ProgressText:='Palika '+IntToStr(Vremja)+' min';
     ResetForm;
          assignfile(f,'Jaunsardze2.txt');
          try
            reset(f);
          except
            on EFOpenError do
               begin
                    ShowMessage('Fails netika atrasts');
                    Button1.caption:='Ok';
                    Button1.tag:=2;
                    Button1.Enabled:=TRUE;
                    exit;
               end;
          end;
          Info;
          GetLevel;
end;

procedure Tform7.Button1Click(Sender: TObject);
  begin
     case Button1.tag of
       0: begin
               Timer1.Enabled:=True; 
               Button1.caption:='Turpinat';
               Button1.tag:=1;
               RadioButton5.Checked:=TRUE;
               Button1.Enabled:=False;
               Button2.Enabled:=True;
               ResetForm;
               VoprosToScr;
          end;
       1: begin
               summa:=summa+score[otv];
               RadioButton5.Checked:=TRUE;
               Button1.Enabled:=False;
               ResetForm;
               if not eof(f)
                  then VoprosToScr
                  else
                     begin
                        summa:=summa+score[otv];
                        closefile(f);
                        Button1.caption:='Ok';
                        form7.caption:='Rezultats';
                        Button1.tag:=2;
                        Button1.Enabled:=TRUE;
                        Button2.Enabled:=False;
                        Timer1.Enabled:=False;
                        Itog;
                     end;
          end;
       2: begin
            form7.Close;
          end;
     end;
end;

procedure Tform7.RadioButtonClick(Sender: TObject);
begin
  if sender = RadioButton1
  then otv:=1
  else if sender = RadioButton1
          then otv:=2
          else if sender = RadioButton3
                  then otv:=3
                  else otv:=4;
  Button1.enabled:=TRUE;
end;

procedure Tform7.FormCreate(Sender: TObject);
begin
    Image1.AutoSize := False;
    Image1.Proportional := True;
    RadioButton1.Visible := False;
end;

procedure TForm7.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 spSkinGauge1.Value:=0;
 Vopros:=0;
 Button1.Tag:=0;
 Otv:=0;
 Summa:=0;
 Form1.Show;
end;

procedure TForm7.Button2Click(Sender: TObject);
begin
 summa:=summa+score[otv];
               RadioButton5.Checked:=TRUE;
               Button1.Enabled:=False;
               ResetForm;
                        closefile(f);
                        Button1.caption:='Ok';
                        Form7.caption:='Rezultats';
                        Button1.tag:=2;
                        Button1.Enabled:=TRUE;
                        Itog;
 Button2.Enabled:=False;
end;

procedure TForm7.Timer1Timer(Sender: TObject);
begin
  spSkinGauge1.Value:=spSkinGauge1.Value+1;
 minuta:=minuta+1;
 if minuta = 60 then
  begin
   vremja:=vremja-1;
   spSkinGauge1.progresstext:='Palika '+IntToStr(vremja)+' min.';
   minuta:=0;
  end;
 if spSkinGauge1.Value = 1800 then Button2.Click;
end;

end.
Заранее огромное спасибо
Ответить с цитированием
  (#2 (permalink)) Старый
LARS LARS вне форума
Member
 
Сообщений: 568
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.06.2005
По умолчанию 19.09.2006, 23:57

боже...ты бы еще сюда все файлы проекта выставил...покажи именно код где "что-то" не работает...считает не правильно..лично у меня нет времени копаться в твоих бесконечных глобальных переменных...и разбирать абсолютно нечитабельный стиль программирования!!! Приведи место ошибки конкретней!!!
Ответить с цитированием
  (#3 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 20.09.2006, 00:41

Цитата:
Приведи место ошибки конкретней!!!
..А для этого есть отладчик :-)
Ответить с цитированием
  (#4 (permalink)) Старый
LARS LARS вне форума
Member
 
Сообщений: 568
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.06.2005
По умолчанию 20.09.2006, 02:59

Цитата:
..А для этого есть отладчик
благо в наше время просто бесподобный!!!
Ответить с цитированием
  (#5 (permalink)) Старый
123 123 вне форума
Member
 
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.03.2005
По умолчанию 20.09.2006, 03:06

У тебя в обработчике RadioButtonClick дважды RadioButton1.
Код:
procedure Tform7.RadioButtonClick(Sender: TObject);
begin
  if sender = RadioButton1
  then otv:=1
  else if sender = RadioButton1   <--- ОШИБКА
          then otv:=2
          else if sender = RadioButton3
                  then otv:=3
                  else otv:=4;
  Button1.enabled:=TRUE;
end;
Лучше бы каждому RadioButton.Tag присвоить значение и
Код:
procedure Tform7.RadioButtonClick(Sender: TObject);
begin
  otv := (Sender as TRadioButton).Tag;
  Button1.Enabled := true;
end;
Конечно на описываемую тобой ошибку не влияет, но в procedure Tform7.Itog;
есть цикл

while (summa < level[i]) and (i<N_LEV) do

может нужно увеличивать level до тех пор, пока
summa > level[i]?

А то кто-то наберет 0 очков и будет на высшем уровне.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Виталик 1 Виталик 1 вне форума
Member
 
Сообщений: 1,286
Сказал(а) спасибо: 1
Поблагодарили 3 раз(а) в 2 сообщениях
Регистрация: 14.06.2006
По умолчанию 20.09.2006, 14:20

Я согласен с тобой, LARS, вот в этом:
Цитата:
боже...ты бы еще сюда все файлы проекта выставил...
Я вот вчера долго пытался найти ошибку, долго не мог скомпилить (нормально), но под конец второго часа все же запустил эту махину и у меня вообще один раз выдало результат -1, потом нули были и только один раз что-то типа 5. Так я так и не понял что я там сделал, что оно все посчитало (правильно, я полагаю). Думал проблема в пересчете очков, так вроде нет...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти ошибку в программном коде salwator Pascal 1 12.06.2011 15:37
Помогите найти ошибку в коде Аркашка PHP 2 07.05.2011 15:59
Как найти ошибку в написанном модуле serjike Visual Basic 1 23.04.2011 00:28
Как найти ошибку в коде imported_Fred_ Visual Basic 0 12.03.2011 20:51
Как найти ошибку в коде olegnaum С/С++ 4 04.02.2010 21:03
Как найти ошибку в программном коде katen Программирование графики 0 05.11.2009 18:08
Как можно найти ошибку в коде C# 4ainik .NET 2 13.07.2009 14:29
Как найти ошибку в программном коде skamaica С/С++ 14 16.10.2008 04:08
Как найти ошибку в коде NP Pascal 6 12.12.2005 18:01
Как найти ошибку в написанном запросе bfm SQL 1 19.03.2005 11:19
Как найти ошибку в программном коде Daredevil С/С++ 2 17.12.2004 10:58
Как найти ошибку в написанном запросе Anonymous MSSQL Server 0 25.06.2003 21:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов