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


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



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

 

Рисунок 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; Просмотров: 1245; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.071 с.)
Главная | Случайная страница | Обратная связь