![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пишу тест! Помогите! [D7, WinXP]
Гость © (2004-10-15 20:08:00)Мне нужно написать тест. Я написал прогу, но почему то она у меня не работает! Всё сделал что надо: к параметрам присоединил файл с вопросами, всё как надо сделал. Выдаёт ошибку что где (выделено жирным шрифтом), обращаюсь к памяти по адресу: 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
panov (2004-10-15 20:14:00) [1]if (s[1]<> '.') and (s[1] <> ',')
then buf:=buf+s+' ';
проверяй длину прочитанной строки - ведь она моджет быть нулевой длины.
begin...end (2004-10-15 20:13:00) [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]='.');
>
И где гарантия, что в файле встретится ',' или '.' ?
Defunct (2004-10-15 20:12:00) [3]Прочитана пустая строка
добавь:
if Length(S)>0 Then
if (s[1]<> '.') and (s[1] <> ',')
...
...