Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Пишу тест! Помогите!   Найти похожие ветки 

 
Гость   (2004-10-15 20:08) [0]

Мне нужно написать тест. Я написал прогу, но почему то она у меня не работает! Всё сделал что надо: к параметрам присоединил файл с вопросами, всё как надо сделал. Выдаёт ошибку что где (выделено жирным шрифтом), обращаюсь к памяти по адресу: 0000000 как-то так. Вроде все прально.... Что делать не наю! Помогите!

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton;
   RadioButton1: TRadioButton;
   RadioButton2: TRadioButton;
   RadioButton3: TRadioButton;
   RadioButton4: TRadioButton;
   RadioButton5: TRadioButton;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Label5: TLabel;
   procedure FormActivate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure RadioButtonClick(Sender: TObject);
   
        private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
const
N_LEV=4;
N_ANS=4;
var
f:TextFile;
fn: String;

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;
n_otv: integer;
otv:integer;

procedure info(var f:TextFile;l:TLabel);
var
s,buf:string;
begin
buf:="";
 repeat
  readln(f,s);
  if s[1] <> "."
   then buf:=buf + s+ "";
 until s[1]=".";
end;

procedure getlevel (var f:TextFile);
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 VoprosToScr(var f:TextFile;frm:TForm1;var vopros:integer);
var
 i:integer;
 code: integer;
 s,buf:string;
begin
 vopros:=vopros+1;
 str(vopros:3,s);
 frm.Caption:="&#194;&#238;&#239;&#240;&#238;&#241;" + s;
 buf:="";
  repeat
   readln(f,s);
   if (s[1] <> ".") and (s[1] = "\")
   then buf:=buf+s+" ";
  until (s[1]=".") or (s[1] = "\");
  frm.Label5.Caption:=buf;

  i:=1;
  repeat
   buf:="";
   repeat
    readln(f,s);
    if (s[1]<> ".") and (s[1] <> ",")
     then buf:=buf+s+" ";
   until (s[1]=",") or (s[1]=".");
   val(s[2], score[i], code);
   case i of
   1: frm.Label1.Caption:=buf;
   2: frm.Label2.Caption:=buf;
   3: frm.Label3.Caption:=buf;
   4: frm.Label4.Caption:=buf;
   end;
   i:=i+1;
   until s[1]=".";
   if Form1.Label1.Caption <> ""
   then begin
   frm.Label1.Top:=frm.Label5.Top+frm.Label5.Height+5;
   frm.RadioButton1.Top:=frm.Label1.Top;
   frm.Label1.Visible:=true;
   frm.RadioButton1.Visible:=true;
  end;

  if Form1.Label2.Caption <> ""
   then begin
   frm.Label2.Top:=frm.Label1.Top+frm.Label1.Height+5;
   frm.RadioButton2.Top:=frm.Label1.Top;
   frm.Label2.Visible:=true;
   frm.RadioButton2.Visible:=true;
  end;

  if Form1.Label3.Caption <> ""
   then begin
   frm.Label3.Top:=frm.Label2.Top+frm.Label2.Height+5;
   frm.RadioButton3.Top:=frm.Label1.Top;
   frm.Label3.Visible:=true;
   frm.RadioButton3.Visible:=true;
  end;

  if Form1.Label4.Caption <> ""
   then begin
   frm.Label4.Top:=frm.Label3.Top+frm.Label3.Height+5;
   frm.RadioButton4.Top:=frm.Label1.Top;
   frm.Label4.Visible:=true;
   frm.RadioButton4.Visible:=true;
  end;
 end;

 procedure ResetForm(frm:TForm1);
 begin
 frm.Label1.Visible:=false;
 frm.Label1.Caption:="";
 frm.Label1.Width:=frm.ClientWidth-frm.Label1.Left-5;
 frm.RadioButton1.Visible:=false;

 frm.Label2.Visible:=false;
 frm.Label2.Caption:="";
 frm.Label2.Width:=frm.ClientWidth-frm.Label2.Left-5;
 frm.RadioButton2.Visible:=false;

  frm.Label3.Visible:=false;
 frm.Label3.Caption:="";
 frm.Label3.Width:=frm.ClientWidth-frm.Label3.Left-5;
 frm.RadioButton3.Visible:=false;

 frm.Label4.Visible:=false;
 frm.Label4.Caption:="";
 frm.Label4.Width:=frm.ClientWidth-frm.Label4.Left-5;
 frm.RadioButton4.Visible:=false;

 frm.Label5.Width:=frm.ClientWidth-frm.Label5.left-5;
 end;

 procedure Itog(summa:integer;frm:TForm1);
var
 i:Integer;
 buf:string;
 begin
 buf:="";
 str(summa:5,buf);
 buf:="&#208;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242;&#251; &#242;&#229;&#241;&#242;&#232;&#240;&#238;&#226;&#224;&#237;&#232;&#255;"+chr(13)
 +"&#194;&#241;&#229;&#227;&#238; &#225;&#224;&#235;&#235;&#238;&#226;: "+buf;
 i:=1;
 while (summa < level[i]) and (i<N_LEV) do
  i:=i+1;
  buf:=buf+chr(13)+mes[i];
  frm.Label5.Caption:=buf;
  end;
 {$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
ResetForm(Form1);
if ParamCount = 0
then begin
Label5.Caption:="&#205;&#229; &#231;&#224;&#228;&#224;&#237; &#244;&#224;&#233;&#235; &#226;&#238;&#239;&#240;&#238;&#241;&#238;&#226; &#242;&#229;&#241;&#242;&#224;!";
Button1.Caption:="Ok";
Button1.Tag:=2;
Button1.Enabled:=true;
RadioButton5.Visible:=false;
end
   else begin
fn:=ParamStr(1);
assignFile(f,fn);
{$I-}
reset(f);
{$I-}
if IOResult=0 then
begin
 info(f,Label5);
 GetLevel(f);
 end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
case Button1.Tag of
0: begin
Button1.Caption:="&#196;&#224;&#235;&#252;&#248;&#229;";
Button1.Tag:=1;
RadioButton5.Checked:=True;

Button1.Enabled:=False;
ResetForm(Form1);
VoprosToScr(f,Form1,vopros);
end;
1: begin
summa:=summa+score[otv];
RadioButton5.Checked:=TRUE;
Button1.Enabled:=False;
ResetForm(Form1);
if not EOF(f)
then VoprosToScr(f,Form1,vopros)
else
begin
summa:=summa+score[otv];
closefile(f);
Button1.Caption:="Ok";
Form1.Caption:="&#208;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242;";
Button1.Tag:=2;
Button1.Enabled:=true;
Itog(summa,Form1);
end;
end;
2: begin
Form1.Close;
end;
end;
end;
procedure TForm1.RadioButtonClick(Sender: TObject);
begin
if sender = RadioButton1
then otv:=1
else if sender = RadioButton2
then otv:=2
else if sender = RadioButton3
then otv:=3
else otv:=4;
Button1.enabled:=true;
end;

end.


 
Defunct ©   (2004-10-15 20:12) [1]

Прочитана пустая строка

добавь:
 if Length(S)>0 Then
 if (s[1]<> ".") and (s[1] <> ",")
 ...
 ...


 
begin...end ©   (2004-10-15 20:13) [2]


> Гость   (15.10.04 20:08)


> repeat
>     readln(f,s);
>     if (s[1]<> ".") and (s[1] <> ",")
>      then buf:=buf+s+" ";
>    until (s[1]=",") or (s[1]=".");
>    

И где гарантия, что в файле встретится "," или "." ?


 
panov ©   (2004-10-15 20:14) [3]

if (s[1]<> ".") and (s[1] <> ",")
    then buf:=buf+s+" ";

проверяй длину прочитанной строки - ведь она моджет быть нулевой длины.



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-1097137128
Игорь Шевченко
2004-10-07 12:18
2004.10.31
Вопрос к бывшим владельцам старого железа


8-1091525797
Андрей Валенинов
2004-08-03 13:36
2004.10.31
Помогите с картинкой


6-1093386512
nimble
2004-08-25 02:28
2004.10.31
TCP/IP программирование


4-1096111441
Вопрос
2004-09-25 15:24
2004.10.31
Сервис не может читать параметры из реестра


4-1095927456
Arnold
2004-09-23 12:17
2004.10.31
Какое сообщение возникает при изменении что либо на форме