Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_лабы_ЭМ.doc
Скачиваний:
13
Добавлен:
17.11.2018
Размер:
802.3 Кб
Скачать

3.6. Тестовые примеры

Необходимо протестировать программу для различных тестовых примеров (подобрать самостоятельно).

3.7. Интерфейс программы в режиме выполнения

Результаты работы программы выглядят следующим образом:

Задание 5.

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

В соответствии с вариантом написать программу, позволяющую с помощью меню:

  1. Создавать одномерный массив записей;

  2. Просматривать содержимое массива на экране монитора в виде таблицы;

  3. Производить поиск данных в массиве по указанному значению ключевого поля.

  4. Сортировать записи в массиве по одному из казанных значений ключевого поля.

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

Данные в структуре нулевого варианта:

  1. Поля данных: Фамилия И.О. студента, № группы, Успеваемость (массив из 5 оценок). Ключевые поля: № группы, Успеваемость (средний балл).

2. Теоретическое введение

(самостоятельно)...

3. Описание программы

Программа написана на алгоритмическом языке ПАСКАЛЬ и реализована в среде Borland Pascal-7.0 Windows XP/MS DOS, на платформе х86.

3.1. Описание логической структуры программы.

Для решения задачи необходимо:

  • Организовать необходимые процедуры и функции:

    • Read_Student – для ввода данных о студенте;

    • Write_Student – для вывода данных о студенте;

    • Menu – для организации интерфейса пользовательского меню;

    • Find(key) – для поиска по определенному условию выборки (key – целочисленный параметр определяющий вид поиска: =1 – выборка студентов по указанному номеру группы; =2 – выборка студентов "по успеваемости");

    • Menu – для организации интерфейса пользовательского меню;

    • Sort – сортировка студентов по фамилии в алфавитном порядке;

  • Организовать в основной программе пользовательский интерфейс в виде циклически предлагаемого выбора процедур, соответствующих пунктам пользовательского меню

3.2 Описание входных данных

Student = record

FIO :String;

Number :Integer;

Bal :array[1..5]of Byte;

end;

– определение типа "Студент"

A: array [1..10] of Student массив из элементов типа "Студент"

count – количество студентов в массиве – переменная типа Integer;

3.4. Описание выходных данных

Вывод на экран результатов выборок из массива А

3.5. Описание программы (листинг)

Program ZAD_5;

uses

Crt;

const

Nmax=10;

type

Student = record

FIO :String;

Number :Integer;

Bal :array[1..5]of Byte;

end;

var

A :array [1..Nmax] of Student;

n,num,i,count :integer;

Procedure Read_Student(var s :Student);

var i:integer;

begin

writeln;

writeln('=== Ввод студента ===');

write(' ФИО: '); readln(s.FIO);

write(' №гр: '); readln(s.Number);

for i:=1 to 5 do

begin

write(' оценка ',i,': '); readln( s.Bal[i] );

end;

writeln('==== ok.');

end;

Procedure Write_Student( s :Student);

var i:integer;

begin

write(' ', s.FIO, ' гр ', s.Number, ' оценки: ');

for i:=1 to 5 do

write(s.Bal[i], ' ' );

writeln;

end;

function Menu :integer;

var c:char; n,code:integer;

begin

ClrScr;

repeat

writeln;

writeln('*****************************');

writeln('* 1. Добавить студента *');

writeln('* 2. Показать всех *');

writeln('* 3. Выборка по № группы *');

writeln('* 4. Выборка по ср.баллу *');

writeln('* 5. Сортировать по ФИО *');

writeln('* 6. Выход *');

writeln('*****************************');

write('выбери пункт меню: ');readln(c);

val(c,n,code);

until (c in ['1'..'6'])and(code=0) ;

ClrScr;

Menu:=n;

end;

Procedure Find(key:integer);

var

gr,k,i,j :integer;

b,sb :real;

begin

case key of

1: {поиск по № группы}

begin

write('Введи № группы для выборки: ');

readln(gr);

writeln;

writeln('Список студентов гр.№ ',gr);

writeln('-------------------------------------------');

k:=0;

for i:=1 to count do

if A[i].Number=gr then

begin

k:=k+1;

write(k,'. '); Write_Student(A[i]);

end;

writeln('-------------------------------------------');

writeln('найдено записей: ',k);

end;

2: поиск по успеваемости}

begin

write('Введи средний балл: ');

readln(b);

writeln;

writeln('Список студентов, чей средний балл > ',b);

writeln('-------------------------------------------');

k:=0;

for i:=1 to count do

begin

sb:=0;

for j:=1 to 5 do sb:=sb+ A[i].Bal[j];

sb:=sb/5;

if sb >= b then

begin

k:=k+1;

write(k,'. (',sb:3:2,') ');

Write_Student(A[i]);

end;

end;

writeln('-------------------------------------------');

writeln(' найдено записей: ',k);

end;

end;

end;

procedure Sort;

var

i,j:integer;

s:Student;

begin

for j:=0 to count-2 do

for i:=2 to count-j do

if a[i-1].FIO > a[i].FIO then

begin s:=a[i-1]; a[i-1]:=a[i]; a[i]:=s; end;

end;

Begin

count:=0;

repeat

num:=Menu;

case num of

1:

begin

count:=count+1;

if count>Nmax then

begin

writeln('Массив переполнен');

count:=count-1;

end

else

Read_Student(A[count]);

write('нажми Enter для продолжения');readln;

end;

2:

begin

writeln;

if count=0 then writeln('Массив пуст');

writeln('Список всех студентов');

writeln('-------------------------------------');

for i:=1 to count do

begin

write(i,'. '); Write_Student(A[i]);

end;

writeln('-------------------------------------');

write('нажми Enter для продолжения');readln;

end;

3:

begin

Find(1);

write('нажми Enter для продолжения ');readln;

end;

4:

begin

Find(2);

write('нажми Enter для продолжения ');readln;

end;

5:

begin

Sort;

end;

end;

until num=6;

{readln;}

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]