Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пишу тест! Помогите! [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] <> ',')
 ...
 ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо