Форум: "Основная";
Текущий архив: 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:="Âîïðîñ" + 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:="Ðåçóëüòàòû òåñòèðîâàíèÿ"+chr(13)
+"Âñåãî áàëëîâ: "+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:="Íå çàäàí ôàéë âîïðîñîâ òåñòà!";
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:="Äàëüøå";
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:="Ðåçóëüòàò";
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