Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
Гость   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
1-1097589162
White__
2004-10-12 17:52
2004.10.31
Работа с Excel


1-1098171059
Сергей__С
2004-10-19 11:30
2004.10.31
TreeView


14-1097582942
Суслик
2004-10-12 16:09
2004.10.31
Спам роботы


3-1095717516
stoun
2004-09-21 01:58
2004.10.31
Как связать БД


14-1097413050
race1
2004-10-10 16:57
2004.10.31
compiler





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский