Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Подготовьте в блокноте файл с тестом.

В файле с тестами текст с вопросом помечается символом «?» в первой позиции и текст с правильным ответов знаком «+» также в первой позиции.

 

Рисунок 9. Пример файла с тестом

 

1. Создайте новый проект, на основную форму поместите компоненты:

Label1 – для вывода текста вопроса;

Radiogroup1 – для вывода вариантов ответа;

Label2 – для вывода сообщения «Правильно» или «Неправильно» в зависимости от ответа тестируемого;

Label3 – для вывода номера вопроса

Label4 – для вывода рейтинга;

Label5 – для вывода качества знаний при тестирвоании.

Кнопки с надписями «Далее» и «Закрыть».

 

 

Рисунок 10. Основная форма

 

2. Объявите глобальные переменные после строки Form1: Tform1;:

vopros:array[1..100] of shortstring; // массив для записи вопросов в тесте

otvet: array[1..1000,1..5] of shortstring; // массив для записи ответов в тесте

prav_otv:array[1..1000] of shortstring; // массив для записи правильных ответов

reiting : integer; // переменная для подсчета рейтинга

rmax ,ksl :integer; // переменные передаваемые в процедуру sluch для выбора случайным //образом rmax вопросов для тестирования из числа имеющихся ksl.

rmax1,ksl1:integer; // для перемешивания вариантов ответа

fix : mas; // массив для запоминания номеров вопросов используемых в тесте

answer : mas; // массив для запоминания номеров ответов в случайном порядке num_vopr:integer; // номер вопроса

 

3. Подсоедините к проекту модуль mylib, содержащий процедуру sluch (см. лаб. работу 11).

Procedure sluch (var fix: mas; rmax,ksl : integer);

 

Код формы с организацией тестирования:

unit Unittest;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, mylib,

StdCtrls, ExtCtrls, Buttons;

 

type

TForm1 = class(TForm)

Label1: TLabel;

RadioGroup1: TRadioGroup;

Label2: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label4: TLabel;

Image1: TImage;

Label5: TLabel;

procedure FormCreate(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

vopros:array[1..100] of shortstring; // массив для записи вопросов в тесте

otvet: array[1..1000,1..5] of shortstring; // массив для записи ответов в тесте

prav_otv:array[1..1000] of shortstring; // массив для записи правильных ответов

reiting : integer; // переменная для подсчета рейтинга

rmax ,ksl :integer; // переменные передаваемые в процедуру sluch для выбора случайным //образом rmax вопросов для тестирования из числа имеющихся ksl.

rmax1,ksl1:integer; // для перемешивания вариантов ответа

fix : mas; // массив для запоминания номеров вопросов используемых в тесте

answer : mas; // массив для запоминания номеров ответов в случайном порядке num_vopr:integer; // номер вопроса

 

implementation

 

{$R *.DFM}

 

procedure TForm1.FormCreate(Sender: TObject);

var s,s1:shortstring;

name_f:shortstring;

i,k,j:integer;

f,f1:textfile;

begin

k:=0;

assignfile(f,’test.dat’);

reset(f);

while not eof(f) do

begin

readln(f,s);

if s[1]='?' then

begin

inc(k);

s1:=copy(s,2,length(s));

vopros[k]:=s1;

j:=0;

end

else

if s[1]='+' then

begin

inc(j);

s1:=copy(s,2,length(s));

otvet[k,j]:=s1;

prav_otv[k]:=s1;

// showmessage(s1);

end

else

begin

inc(j);

otvet[k,j]:=s;

end;

end; // while

closefile(f);

ksl:=k;

rmax:=k;

sluch(fix,rmax,ksl);

num_vopr:=1;

label1.caption:=vopros[fix[num_vopr]];

rmax1:=5;

ksl1:=5;

sluch(answer,rmax1,ksl1);

Radiogroup1.Items.Clear;

for i:=0 to 4 do begin

if otvet[num_vopr,answr[I+1]]>’’ then

radiogroup1.Items.Add(otvet[num_vopr,answr[I+1]]);

radiogroup1.ItemIndex:=-1;

reiting:=0;

end;

 

 

// Кнопка «Далее»

procedure TForm1.BitBtn2Click(Sender: TObject);

var i,k:integer;

В:double;

begin

if Radiogroup1.ItemIndex<0 then begin

showmessage('Выберите ответ' );

exit;

end;

if prav_otv[fix[num_vopr]]= Radiogroup1. Items [ Radiogroup1.ItemIndex] then

begin inc(reiting);

label2.Caption:='Правильно!!!' end

else begin

label2.Caption:='Неправильно...';

s_num_neotv:=s_num_neotv+inttostr(fix[num_vopr])+' ';

end;

inc(num_vopr);

if num_vopr<=rmax then begin

label3.Caption:='Вопрос '+inttostr(num_vopr);

label1.caption:=vopros[fix[num_vopr]];

label4.Caption:='Правильных ответов = '+inttostr(reiting);

sluch(answer,rmax1,ksl1);

Radiogroup1.Items.Clear;

for i:=0 to 4 do

if otvet[num_vopr,answr[I+1]]>’’ then

radiogroup1.Items.Add(otvet[num_vopr,answr[I+1]]);

radiogroup1.ItemIndex:=-1;

end

else begin

Showmessage(‘Тестирование завершено’);

B:= reiting/rmax*100;

Label5.Caption:=' '+floatTostr(B);

end;

end; //proc

 

СРСП(3 часа)

 

Постановка задачи

Составить программу и блок-схему для решения каждой из следующих задач:

1. Пусть текстовый файл t разбит на непустые строки. Описать функцию count(t) для подсчета числа строк, которые:

a. Начинаются с буквы d;

b. Оканчиваются буквой z.

  1. Описать процедуру prisv (t1, t2), переписывающую в текстовый файл t1 содержимое текстового файла t2 но без пустых строк.

 

СРС(3 часа)

 

Дополнительное задание

1. Описать процедуру triangle(t), формирующую текстовый файл t из 9 строк, в первой из которых – одна литера ‘1’, во второй – две литеры ‘2’, …, в девятой – девять литер ‘9’.

2. Пусть текстовый файл t разбит на непустые строки. Описать функцию count (t) для подсчета числа строк, начинающихся и оканчивающихся одной и той же литерой.

Лабораторная работа №15

Тема:«Типизированные файлы»

Цели работы

 Закрепить умения и навыки работы с типизированными файлами

 Углубить знания о файлах

Методический материал

 

Постановка задачи: Создать проект для формирования файла с информацией о ведущих спортсменах мира. О каждом спортсмене хранится сведения о его фамилии, имени, отчестве, стране, которую он представляет, вид спорта, которым занимается и медали, завоеванной им. На основе сформированного файла организовать поиск информации по всем видам, хранящейся информации.

Для решения задачи объявим тип-запись:

Type

sportsmen=record

name:shortstring;

strana:shortstring;

vid: shortstring;

medal: shortstring;

end;

Объявим глобальные переменные (в интерфейсной части основного модуля):

f: file of sportsmen;

spr:sportsmen;// рабочая переменная, хранящая сведения о текущем спортмене

 

Создадим проект, в котором на отдельной форме организовано заполнение файла информации о спортсменах. При этом фамилия и инициалы вводятся в поле ввода, страна и вид спорта выбираются из выпадающих списков, медаль выбирается из радио-списка.

Поиск информации следует выполнять после заполнения файла. При этом выбор вида поиска выполняется из выпадающего списка. Значение для поиска определяется по полям и спискам используемых для ввода данных.

Разместим на форму три компонента:

Combobox1 – для выбора страны из выпадающего списка;

Combobox2 – для выбора вида спорта;

Combobox3 – для выбора вида поиска.

 

Списки следует набирать в окне построителя, открывающемся в поле Items.

Поместим на форму компонент RadioGroup1 и в поле Items наберем список медалей: золотая, серебряная и бронзовая.

Для вывода найденных записей поместим на форму Memo – поле.

Для сохранения записей поместим на форму кнопку и пропишем ее код.

Создание файла выполняется в коде события открытия формы.

Для события OnClick компонента Combobox3 пропишем код поиска записей.

 

Рисунок 13.

Код проекта:

unit Unitsport;

 

interface

 

uses

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

StdCtrls, ExtCtrls;

 

type

TForm1 = class(TForm)

ComboBox1: TComboBox;

Edit1: TEdit;

ComboBox2: TComboBox;

RadioGroup1: TRadioGroup;

Button1: TButton;

ComboBox3: TComboBox;

Label1: TLabel;

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ComboBox3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

sportsmen=record

name:shortstring;

strana:shortstring;

vid: shortstring;

medal: shortstring;

end;

var

f: file of sportsmen;

spr:sportsmen;

Form1: TForm1;

 

implementation

 

{$R *.DFM}

// создание файла

procedure TForm1.FormCreate(Sender: TObject);

begin

assignfile(f,'sport.dat');

rewrite(f);

end;

 

// сохранение записи

procedure TForm1.Button1Click(Sender: TObject);

begin

with spr do

begin

name:=edit1.Text;

strana:=combobox1.Text;

vid:=combobox2.Text;

medal:=radiogroup1.Items[radiogroup1.itemindex];

write(f,spr);

end;

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

closefile(f);

end;

 

// поиск записей по критериям поиска

procedure TForm1.ComboBox3Click(Sender: TObject);

begin

memo1.Clear;

if combobox3.text='поиск по стране' then

begin

seek(f,0);

while not eof(f) do

begin

read(f,spr);

if spr.strana=combobox1.text then

begin

memo1.Lines.Add(spr.name);

memo1.Lines.Add(spr.strana);

memo1.Lines.Add(spr.medal);

memo1.Lines.Add(spr.vid);

end;

end;

end;

if Combobox3.text='поиск по фамилии' then

begin

seek(f,0);

while not eof(f) do

begin

read(f,spr);

if spr.name=edit1.text then

begin

memo1.Lines.Add(spr.name);

memo1.Lines.Add(spr.strana);

memo1.Lines.Add(spr.medal);

memo1.Lines.Add(spr.vid);

end;

end;

end;

if Combobox3.text='поиск по виду спорта' then

begin

seek(f,0);

while not eof(f) do

begin

read(f,spr);

if spr.vid=combobox2.text then

begin

memo1.Lines.Add(spr.name);

memo1.Lines.Add(spr.strana);

memo1.Lines.Add(spr.medal);

memo1.Lines.Add(spr.vid);

end;

end;

end;

if Combobox3.text='поиск по медали' then

begin

seek(f,0);

while not eof(f) do

begin

read(f,spr);

if spr.medal=radiogroup1.Items[radiogroup1.ItemIndex] then

begin

memo1.Lines.Add(spr.name);

memo1.Lines.Add(spr.strana);

memo1.Lines.Add(spr.medal);

memo1.Lines.Add(spr.vid);

end;

end;

end;

end;

end.

 

СРСП(3 часа)

Постановка задачи

Составить программу и блок-схему для решения каждой из следующих задач:

1. Сформировать файл f целых чисел. Все отрицательные числа из файла f переписать в файл g.

2. type FR = file of Real;

Описать функцию predp(f), значением которой является предпоследний элеиент файла f, имеющего тип FR и содержащего не менее двух элементов.

3. type ryad = file of 1..maxint;

Описать процедуру fib(f, n), записывающую в ряд f все числа Фибоначчи (1, 1, 2, 3, 5, …), не превосходящие целого положительного числа n.

 

СРС(3 часа)

 

Дополнительное задание

1. type Seria = File of real;

Описать функцию otric (s), подсчитывающую сумму отрицательных элементов серии s.

2. type text = file of char;

Описать процедуру next (t), заменяющую в тексте t каждую цифру на следующую по величине цифру (‘9’ заменять на ‘0’).


 

 

Последнее изменение этой страницы: 2016-03-17; Просмотров: 56; Нарушение авторского права страницы


lektsia.com 2007 - 2017 год. Все права принадлежат их авторам! (0.084 с.) Главная | Обратная связь