Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
02.05.2014
Размер:
134.66 Кб
Скачать

Лекции ясп

Горбунов В.М.

Среда визуальной разработки delphi Информационная система «Учебник-тест»

1 лекция

Компьютерный тест

Протоколы переноса данных

для текстового формата хранения заданий

1. Простой протокол заданий

Текст задания

Вариант1

Вариант2

Вариант3 ~

Вариант4

(пустая строка открывает и закрывает задание)

2. Нумерационный протокол заданий

{Открывающий тег}

<

{Строки задания}

Deske[N,1]:='Текст задания';

Deske[N,2]:='Продолжение текста задания ';

Deske[N,3]:='Продолжение текста задания ';

Deske[N,4]:='Продолжение текста задания ';

Deske[N,5]:='Продолжение текста задания ';

{Варианты}

Deske[N,6]:='1 вариант ответа';

Deske[N,7]:='Продолжение';

Deske[N,8]:='2 вариант ответа ';

Deske[N,9]:='Продолжение';

Deske[N,10]:='3 вариант ответа';

Deske[N,11]:='Продолжение';

Deske[N,12]:='4 вариант ответа';

Deske[N,13]:='Продолжение';

Deske[N,14]:='5 вариант ответа';

Deske[N,15]:='Продолжение';

Deske[N,16]:='6 вариант ответа';

Deske[N,17]:='Продолжение';

Deske[N,18]:='7 вариант ответа';

Deske[N,19]:='Продолжение';

Deske[N,20]:='8 вариант ответа';

Deske[N,21]:='Продолжение';

Deske[N,22]:='Указание к выбору вариантов или примечание '; 14

Deske[N,23]:='Номер ключа #1-8'; Пример: #15

// По умолчанию текстовый ответ (регистр не учит.).

// Дополнительный тип задания: & - соответствие. < - сортировка.

{Служебные для текущего задания}

Deske[N,24]:='Вес правильного ответа';

Deske[N,25]:='Номер фактора'; // *

Deske[N,26]:='Комментарий к неправильному ответу';

Deske[N,27]:='Имя файла';

// Путь к рисунку: Mesto:=GetCurrentDir;

Ris:= Mesto+ '\'; (+ ‘Picture\’+ Deske[N,27]);

Deske[N,28]:='Параметры теста'; {Обучение, нет перемешивания, нет автоподстройки}

// 000 111

// Обучение

{Служебные для всего теста}

Deske[N,29]:='Параметры диагностики';

Deske[N,30]:='Имя файла диагностики';

//*'Путь к файлу диагностики'

Deske[N,31]:='Тема теста';

Deske[N,32]:='Авторизация';

>

// Закрывающий тег

// Протокол ответов* сохраняется в файле

Структура:

Общая начальная часть

Фамилия

Название теста

Дата тестирования

Время тестирования: Старт

Строки заданий

1 строка задания

Строки правильных ответов с номерами

Текст (номер) ответа испытуемого

Общая завершающая часть

Число заданий

Число правильно выполненных заданий

Время тестирования: Финиш

Фамилия

Структурный протокол

(не используется в проектах)

Пример хранения заданий в текстовом файле

<

31 И Н Ф О Р М А Т И К А

1 Задание

2 Сколько различных сочетаний нулей и единиц для кодовой таблицы символов

3 и команд можно получить с помощью одного байта (8 бит)?

4

5

6 8 сочетаний.

7

8 1024 сочетания.

9

10 2 сочетания [0;1].

11

12 256 сочетаний.

13

14

15 #4

>

<

31 И Н Ф О Р М А Т И К А

1 Какая частота обновления экрана монитора на электронно-лучевой трубке считается оптимальной?

2

3

4

5

6 50-60 Гц.

7

8 5-7 Гц.

9

10 85-100 Гц.

11

12 336 МГц

13

14

15 #3

>

Шифрование данных

Объектный файл

инструментальной системы тестирования

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus;

type

{Объявляем тип массива}

TArray=array[0..100,0..32] of string;

Объявление переменных

public

{ Public declarations }

{Объявляем массив}

Deske: TArray;

{Файловая переменная}

Fap: TextFile;

{Строка передачи}

Stroka: String[250];

{Ключи ответов}

SelKey1: String;

SelKey2: String;

SelKey3: String;

…………

SelKey8: String;

TotaKey: String;

AutoKey: String;

// Индексы массива

InderX: integer;

InderY: integer;

// Управление переносом файл-массив

Signal,Stroka2,Lin: string;

Koder,Dlin,Uprav: integer;

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

Титульный лист окна тестирования

procedure TForm1.FormActivate(Sender: TObject);

// OnActivate Form 1

begin

Memo1.Lines.Clear;

Memo1.Lines.Add('Инструментальная система тестирования');

Memo2.Lines.Clear;

Memo2.Lines.Add('Перемешивание заданий и ответов');

Memo2.Lines.Add(' ');

Memo2.Lines.Add('Стандартизация баллов');

Memo2.Lines.Add(' ');

Memo2.Lines.Add('Контроль и обучение');

Memo2.Lines.Add(' ');

Memo2.Lines.Add('Комментарий к неправильному ответу');

Memo2.Lines.Add(' ');

Memo2.Lines.Add('Адаптация заданий');

Memo2.Lines.Add(' ');

CheckBox1.SetFocus;

end;

Загрузка тестовых заданий из файла

procedure TForm1.Read1Click(Sender: TObject);

// Read Menu

begin

Koder:=0;

Dlin:=0;

Uprav:=1;

InderY:=0;

//OpenDialog1

If OpenDialog1.Execute then

begin

{Устанавливаем связь с файлом для переноса в массив}

AssignFile(Fap,OpenDialog1.FileName);

{Режим чтения из файла}

Reset(Fap);

//1

If Pos('.txt',OpenDialog1.FileName)>0 then

Begin

InderY:=0;

Signal:='Тег';

//1 слой - поиск открывающего тега

//2

While not Eof(Fap) do begin

{Присваиваем элементам массива строки из файла}

Readln (Fap,Stroka);

// ShowMessage('Открыл 1 слой'+chr(13)+Stroka);

If Stroka='<' then

Begin

Signal:='<';

InderY:=InderY+1;

End;

//2 слой - Перенос в текущую строку массива

While Signal='<' do begin

Readln (Fap,Stroka);

//ShowMessage('Открыл 2 слой '+chr(13)+Stroka);

If Stroka='>' then Signal:='Тег закрыт';

Dlin:=Length(Stroka);

Stroka2:=Copy(Stroka,1,3);

{Преобразуем в управляющее число}

Val(Stroka2,Uprav,Koder);

{Вырезаем текстовую часть}

Stroka2:=Copy(Stroka,4,Dlin-3);

// ShowMessage('Управляющее число '+IntToStr(Uprav));

// ShowMessage(IntToStr(InderY)+'='+Stroka2);

Case Uprav of

1: Deske[InderY,1]:=Stroka2;

2: Deske[InderY,2]:=Stroka2;

3: Deske[InderY,3]:=Stroka2;

4: Deske[InderY,4]:=Stroka2;

5: Deske[InderY,5]:=Stroka2;

6: Deske[InderY,6]:=Stroka2;

7: Deske[InderY,7]:=Stroka2;

8: Deske[InderY,8]:=Stroka2;

9: Deske[InderY,9]:=Stroka2;

10: Deske[InderY,10]:=Stroka2;

11: Deske[InderY,11]:=Stroka2;

12: Deske[InderY,12]:=Stroka2;

13: Deske[InderY,13]:=Stroka2;

14: Deske[InderY,14]:=Stroka2;

15: Deske[InderY,15]:=Stroka2;

16: Deske[InderY,16]:=Stroka2;

17: Deske[InderY,17]:=Stroka2;

18: Deske[InderY,18]:=Stroka2;

19: Deske[InderY,19]:=Stroka2;

20: Deske[InderY,20]:=Stroka2;

21: Deske[InderY,21]:=Stroka2;

22: Deske[InderY,22]:=Stroka2;

23: Deske[InderY,23]:=Stroka2;

24: Deske[InderY,24]:=Stroka2;

25: Deske[InderY,25]:=Stroka2;

26: Deske[InderY,26]:=Stroka2;

27: Deske[InderY,27]:=Stroka2;

28: Deske[InderY,28]:=Stroka2;

29: Deske[InderY,29]:=Stroka2;

30: Deske[InderY,30]:=Stroka2;

31: Deske[InderY,31]:=Stroka2;

32: Deske[InderY,32]:=Stroka2;

end;

end;

end;

end

else

Begin

ShowMessage(' Открывать можно'+chr(13)+'только текстовый файл!');

end;

{Закрываем файл}

CloseFile (Fap);

end;

InderY:=1;

// Read Menu

end;

Переключение заданий

procedure TForm1.Button4Click(Sender: TObject);

// NEXT Button

Var

NextX: integer;

begin

// ShowMessage('Номер задания (строки) '+IntToStr(InderY));

// ShowMessage('Индикатор NEXT '+Deske[InderY,6]);

//ShowMessage(IntToStr(InderY)+' '+IntToStr(NextX)+' '+Deske[InderY,NextX]);

// Если есть 1 вариант ответа

If Length(Deske[InderY,6])>0 then

Begin

//Подготовка

Edit1.Text:='';

Memo1.Lines.Clear;

Memo2.Lines.Clear;

NextX:=1;

CheckBox1.Checked:=False;

CheckBox2.Checked:=False;

CheckBox3.Checked:=False;

CheckBox4.Checked:=False;

CheckBox5.Checked:=False;

//Если есть Тема

If Length(Deske[InderY,31])>0 then Edit1.Text:=Deske[InderY,31];

// While Signal='<' do begin

{Текст задания}

For NextX:=1 to 5 do begin

{Lin:=Deske[IndekX,IndekY];}

Memo1.Lines.Add(Deske[InderY,NextX]);

end;

{Текст вариантов ответов}

For NextX:=6 to 21 do begin

{Lin:=Deske[IndekX,IndekY];}

If Length(Deske[InderY,NextX])>0 then Memo2.Lines.Add(Deske[InderY,NextX]);

end;

{Текст указаний}

Memo2.Lines.Add(' ');

Memo2.Lines.Add(Deske[InderY,22]);

//Запомним ключ

AutoKey:=Deske[InderY,23];

Memo2.Lines.Add('Отладочный показ ключей '+Deske[InderY,23]);

CheckBox1.SetFocus;

{Счетчик}

InderY:=InderY+1;

End

else

begin

ShowMessage('Заданий нет!')

end;

end;

Переключение заданий с перемешиванием

procedure TForm1.Button4Click(Sender: TObject);

// NEXT Button NEXT BUTTON NEXT BUTTON NEXT BUTTON

Var

NextX,Balsu,KeyVar: integer;

MAX1D,MAX2D: real;

begin

// 0 If Nagal // and (Vhod>0)

If Nagal>0 then begin

// Не нажал для следующего

Nagal:=0;

// 1 Если первая проверка Не проверялось Perv=0 и Не выполнялось Soob='Не проверялось!'

If Perv=0 then

Begin

Perv:=1;

TotaKey:=SelKey1+SelKey2+SelKey3+SelKey4+SelKey5;

// 2 Если есть предыдущий ответ

If (Length(TotaKey)>0) and (Length(AutoKey)>0) then

Begin

// ShowMessage('Ответ('+TotaKey+') Ключ('+AutoKey+')');

// Удаление пробелов из ключа

While AutoKey[1]=' ' do delete(AutoKey,1,1);

While AutoKey[Length(AutoKey)]=' ' do

delete(AutoKey,Length(AutoKey),1);

// 3 Первая проверка

If TotaKey=AutoKey then

Begin

Bals:=Bals+1;

Soob:='Зачтено!';

Memo3.Lines.Add('+'+IntToStr(IndezY-1)+'.'+' '+'K: '+' '+AutoKey+' '+'Y: '+' '+TotaKey+' '+'Ball'+' '+IntToStr(Bals));

end

else

Begin

Soob:='Незачтено!';

Memo3.Lines.Add('-'+IntToStr(IndezY-1)+'.'+' '+'K:'+' '+AutoKey+' '+'Y:'+' '+TotaKey+' '+'Ball:'+' '+IntToStr(Bals));

// 3

End;

//2

End;

// 1

End;

// Раздача заданий InderY из Roz(IndezY,1) - счетчик заданий

// получение номера строки массива

InderY:=Roz[IndezY,1];

// Возможность проверять следующее задание

Perv:=0;

// 1* Если есть 1 вариант ответа

If Length(Deske[InderY,6])>0 then

// If InderY<6 then

Begin

//Осуществлен вход в тест

Vhod:=1;

// Номер задания

Label2.Caption:=IntToStr(IndezY)+'.';

//Подготовка

Memo1.Lines.Clear;

Memo2.Lines.Clear;

// Memo3.Lines.Clear; Не очищается, а наследуется.

CheckBox1.Checked:=False;

CheckBox2.Checked:=False;

CheckBox3.Checked:=False;

CheckBox4.Checked:=False;

CheckBox5.Checked:=False;

//Если есть Тема, не очищается, а наследуется.

If Length(Deske[InderY,31])>0 then Edit1.Text:=Deske[InderY,31];

// Вызов рисунка или ЛОГО

If Length(Deske[InderY,27])>0 then

Image1.Picture.LoadFromFile(Mesto+Deske[InderY,27]) else

Image1.Picture.LoadFromFile(Mesto+'_LOGO.bmp');;

2 10 06

{Текст задания}

For NextX:=1 to 5 do begin

Memo1.Lines.Add(Deske[InderY,NextX]);

end;

//Запомним ключ для следующего задания

AutoKey:=Deske[InderY,23];

// По умолчанию ключ правильного ответа: 1-8.

// Дополнительный тип задания: & - соответствие. < - сортировка.

For NextX:=1 to 5 do begin

Rov[NextX,0]:=0;

end; // For

If Length(AutoKey)>0 then begin

// Memo3.Lines.Add(AutoKey);

For NextX:=1 to Length(AutoKey) do begin

// Запомним ключ в таблице

Koder:=StrToInt( AutoKey[NextX] );

Rov[Koder,0]:=Koder;

// Memo3.Lines.Add('N='+IntToStr(NextX) +' key '+IntToStr(Rov[Koder,0]));

end; // For

End;// If

// U1:= TimeToStr(DateTime);

randomize;

MAX1D:=Random(1000)/1000;

// MAX1D:=Random(5);

// Раздача номеров вариантов IndevY:=Rov[IndevY,1];

For NextX:=1 to 5 do begin

// Формирование случайных чисел

MAX2D:=(11*MAX1D+pi)-int((11*MAX1D+pi));

MAX1D:=MAX2D;

// Memo3.Lines.Add('R='+FloatToStr(MAX1D));

Rov[NextX,2]:=trunc(MAX1D*100000000);

// Закрепление порядкового номера

Rov[NextX,1]:=NextX;

// Memo3.Lines.Add('R='+IntToStr(Rov[NextX,2])+' N='+IntToStr(NextX));

end;

// Сортировка вариантов ответов

// Формирование случайных чисел Rov[NextX,2]:=Random(100);

// Закрепление порядкового номера Rov[NextX,1]:=NextX;

Balsu:=0;

While Balsu=0 do begin

Uprav:=0;

For NextX:=2 to 5 do begin

// Memo3.Lines.Add( IntToStr(NextX)+'if='+ IntToStr( Rov[NextX,2] ) +'>' + IntToStr( Rov[NextX-1,2] ) );

If Rov[NextX,2]>Rov[NextX-1,2] then

begin

// Случай обмена, хотя бы 1

Uprav:=Rov[NextX-1,0];

Rov[NextX-1,0]:=Rov[NextX,0];

Rov[NextX,0]:=Uprav;

Uprav:=Rov[NextX-1,1];

Rov[NextX-1,1]:=Rov[NextX,1];

Rov[NextX,1]:=Uprav;

Uprav:=Rov[NextX-1,2];

//Memo3.Lines.Add('Uprav=Rov[NextX-1,2] '+IntToStr(Uprav));

Rov[NextX-1,2]:=Rov[NextX,2];

//Memo3.Lines.Add('Rov[NextX-1,2]:=Rov[NextX,2] '+IntToStr(Rov[NextX-1,2]));

Rov[NextX,2]:=Uprav;

//Memo3.Lines.Add('Rov[NextX,2]:=Uprav '+IntToStr(Rov[NextX,2]));

Uprav:=1;

end; //If

// Memo3.Lines.Add( IntToStr(NextX)+') '+ IntToStr( Rov[NextX,1] )+' * '+ IntToStr( Rov[NextX,2] ) );

End; //For

// ShowMessage('Если Uprav=0 не было обмена, то выход. Uprav='+IntToStr(Uprav));

If Uprav=0 then Balsu:=1;

// Balsu:=0;

// Memo3.Lines.Add('Если Balsu=1 то Выход. Balsu='+IntToStr(Balsu));

End; // While

// End Сортировка Roz

// Сборка нового ключа

AutoKey:='';

For NextX:=1 to 5 do begin

IF Rov[NextX,0]>0 then AutoKey:=AutoKey+IntToStr(NextX);

// Memo3.Lines.Add('N='+IntToStr(NextX) +' key '+IntToStr(Rov[Koder,0]));

end; // For

// Memo3.Lines.Add('New Key = '+ AutoKey );

// View

// For NextX:=1 to 5 do begin

// Memo3.Lines.Add('Key= '+IntToStr(Rov[NextX,0])+'S='+IntToStr(Rov[NextX,1])+' '+IntToStr(Rov[NextX,2]));

// Memo3.Lines.Add('Key= '+IntToStr(Rov[NextX,0])+' S='+IntToStr(Rov[NextX,1]) );

// end;

// Memo3.Lines.Add(' ');

{Текст вариантов ответов}

For NextX:=1 to 5 do begin

// получение номера строки массива

KeyVar:=Rov[NextX,1];

// Memo3.Lines.Add(IntToStr(NextX)+'получил '+IntToStr(KeyVar)+' K='+FloatToStr(Rov[NextX,0]));

// В Rov перегон правильного варианта

// End;

{Текст вариантов ответов}

Case KeyVar of

1:

begin

If Length(Deske[InderY,6])>0 then Memo2.Lines.Add(Deske[InderY,6]) else Memo2.Lines.Add(' ');

If Length(Deske[InderY,7])>0 then Memo2.Lines.Add(Deske[InderY,7]) else Memo2.Lines.Add(' ');

End;

2:

Begin

If Length(Deske[InderY,8])>0 then Memo2.Lines.Add(Deske[InderY,8]) else Memo2.Lines.Add(' ');

If Length(Deske[InderY,9])>0 then Memo2.Lines.Add(Deske[InderY,9]) else Memo2.Lines.Add(' ');

End;

3:

Begin

If Length(Deske[InderY,10])>0 then Memo2.Lines.Add(Deske[InderY,10]) else Memo2.Lines.Add(' ');

If Length(Deske[InderY,11])>0 then Memo2.Lines.Add(Deske[InderY,11]) else Memo2.Lines.Add(' ');

End;

4:

Begin

If Length(Deske[InderY,12])>0 then Memo2.Lines.Add(Deske[InderY,12]) else Memo2.Lines.Add(' ');

If Length(Deske[InderY,13])>0 then Memo2.Lines.Add(Deske[InderY,13]) else Memo2.Lines.Add(' ');

End;

5:

Begin

If Length(Deske[InderY,14])>0 then Memo2.Lines.Add(Deske[InderY,14]) else Memo2.Lines.Add(' ');

If Length(Deske[InderY,15])>0 then Memo2.Lines.Add(Deske[InderY,15]) else Memo2.Lines.Add(' ');

End;

End; // Case

end;

{Текст вариантов ответов}

// For NextX:=6 to 21 do begin

{Lin:=Deske[IndekX,IndekY];}

// If Length(Deske[InderY,NextX])>0 then Memo2.Lines.Add(Deske[InderY,NextX]);

// end;

{Текст указаний}

Memo2.Lines.Add(' ');

Memo2.Lines.Add(Deske[InderY,22]);

//Запомним ключ для следующего задания

// AutoKey:=Deske[InderY,23];

// Memo2.Lines.Add('Отладочный показ ключей '+Deske[InderY,23]);

CheckBox1.SetFocus;

{Счетчик заданий}

// InderY:=InderY+1;

IndezY:=IndezY+1;

End

// Не пустое задание

else

begin

// Тест завершен Ваш результат

IndezY:=IndezY-1;

If IndezY<1 then IndezY:=1;

// Memo3.Lines.Add(IntToStr(InderY)+' var '+Deske[InderY,6]);

Image1.Picture.LoadFromFile(Mesto+'_LOGO.bmp');

Procent:=Int(Bals/IndezY*10000)/100;

Memo3.Lines.Add(' ');

Memo3.Lines.Add('Всего заданий '+IntToStr(IndezY));

Memo3.Lines.Add('Выполнено '+IntToStr(Bals));

Memo3.Lines.Add('Процент '+FloatToStr(Procent));

//ShowMessage('Всего заданий '+IntToStr(IndezY) +chr(13)+'Выполнено '+IntToStr(Bals)+chr(13)+'Процент '+FloatToStr(Procent));

Stops:=1;

Perv:=0;

Nagal:=0;

Vhod:=0;

TotaKey:='';

AutoKey:='';

end;

End

else

Begin

//Осуществлен вход в тест Vhod:=1;

If Vhod>0 then begin

Nagal:=0;

ShowMessage('Не тормози!'+ chr(13)+'Выбери ответ.');

end

else

begin

ShowMessage('Не открыли тест:'+ chr(13)+'Test, Read.');

end;

// 0 End If Nagal

end;

end;

Процедуры обработки нажатия CheckBox

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

//If CheckBox1.Checked=True then SelKey1:='1' else SelKey1:='';

If SelKey1='1' then SelKey1:='' else SelKey1:='1';

// ShowMessage(SelKey1);

end;

Проверка заданий

procedure TForm1.Button3Click(Sender: TObject);

//Проверка Ver

begin

TotaKey:=SelKey1+SelKey2+SelKey3+SelKey4+SelKey5;

ShowMessage('Ответ('+TotaKey+') Ключ('+AutoKey+')');

// Удаление пробелов из ключа

While AutoKey[1]=' ' do delete(AutoKey,1,1);

While AutoKey[Length(AutoKey)]=' ' do delete(AutoKey,Length(AutoKey),1);

If TotaKey=AutoKey then

ShowMessage('Зачтено')

else

ShowMessage('Незачтено');

end;

Работа с текстовыми файлами

(типизированные и нетипизированные)

procedure TForm1.Button1Click(Sender: TObject);

//Button START

Var

NextY: integer;

//0 begin

begin

// Read Menu

Koder:=0;

Dlin:=0;

Uprav:=1;

InderY:=0;

// Oткрываем файл для записи данных

FiNam:='Result.txt';

AssignFile(Fip,FiNam);

{Режим перезаписи в файл Rewrite(Fip);}

{Режим добавлять}

Append (Fip);

//Signal='Начнем'

Signal:='nt.txt';

// 1 Проверка наличия сигнального файла

// While FileExists(Signal) do begin

Repeat

//Memo1.Lines.Add('Сигнальный файл в наличии');

// 2 Ищем файл-журналы станций для чтения

For NextY:=1 to 16 do begin

// Формирование имени файла для этого поиска

FilNam:='W'+IntToStr(NextY)+'.TXT';

//Memo1.Lines.Add('Проверочное имя '+FilNam);

//3 Проверка существования файла

If FileExists(FilNam) then

Begin

Memo1.Lines.Add('Нашли и открыли журнал '+FilNam);

{Окрываем файлом для переноса в массив}

AssignFile(Fap,FilNam);

{Режим чтения из файла}

Reset(Fap);

//4

While not Eof(Fap) do begin

{Присваиваем элементам массива строки из файла}

Readln (Fap,Stroka);

// InderY:=InderY+1;

Dlin:=Length(Stroka);

If Dlin>250 then Stroka2:=Copy(Stroka,1,250)

else Stroka2:=Stroka;

// Показываем

Memo1.Lines.Add(Stroka2);

// Записываем в файл Result

Writeln (Fip,Stroka2);

//4 While not Eof

end;

Memo1.Lines.Add('Закрыли журнал'+FilNam);

// Закрываем читаемый файл

CloseFile(Fap);

Memo1.Lines.Add('Уничтожаем журнал');

// Уничтожаем читаемый файл

DeleteFile(FilNam);

Memo1.Lines.Add('End If FileExists');

// 3 If FileExists существует файл для чтения

end;

// 2 FOR 1..16 ищем файл для чтения

end;

// 1 End While Signal:='Начнем';

// end;

Until FileExists(Signal)

{Закрываем записываемый файл}

CloseFile (Fip);

Memo1.Lines.Add('End Begin START');

//End Begin START

end;

Соседние файлы в папке Visual Basic