Смекни!
smekni.com

Методические указания к выполнению лабораторных работ Фрейз И. И (стр. 10 из 11)

Предлагаем учащимся запустить программу и в дальнейшем следовать указаниям программы.

После выполнения этой работы предлагаем учащимся выполнить еще одну работу, предварительно объяснив им условие задачи:

Задано множество целых положительных чисел от J до п . Создать из элементов этого множества такие подмножества, элементы которых удовлетворяют следующим условиям:

элементы подмножества не больше 10;

элементы подмножества кратны 8;

Лабораторная работа №20. Тип данных Record (запись).

Цель: познакомить студентов со структурированным типом данных record, подготовиться к изучению файловых переменных.

И.Ф.О.

Год рождения

Стаж

Пол Мужской

Номер отдела

Иванов Петр Иванович

1980

3,5

Да

2

Сидорова Светлана Анатольевна

1975

8

Нет

5

Для описания данных, когда с одним значением связывается набор данных разного типа, используется понятие запись. В ряде языков программирования аналогичное понятие называется структура.

Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи.

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

2. I способ

Type <название типа> = record
<имя компонента 1>:<тип компонента 1 >;

<имя компонента 2>:<тип компонента 2 >;

<имя компонента n>:<тип компонента n >;

end;

var

< идентификатор >: <тип>;

II способ

var < идентификатор>: record

end;

Замечание В качестве поля (компоненты) записи может использоваться другая запись. В этом случае ее описание либо указывается сразу после двоеточия либо описана выше в разделе type.

Пример type Data=record

Day:byte;

Month:byte;

Year:word;

End;

Type Rabotnic=record

Dr:Data;

Fio:string;

Pol:booleon;

Otd:integer

End;

Var x,y:rabotnic;

3. Обращение к конкретным полям записи производится при помощи уточнения через точку.

Например

x.fio

y.otd

x.dr.day

y.dr.year

Для упрощения работы с записью в Паскале используется оператор with .. do. Он позволяет указать переменную типа запись, а затем напрямую использовать название полей записи.

Пример with x, dr do …fio…

Begin … otd…

…year…

End

Варианты

With x do

With x.dr do

4. В массиве GRUP(24), описывающих данные на студентов

Имя Фамилия

Дата рождения

Адрес

Телефон

Составить программу, позволяющую вывести данные на всех студентов, затем данные на студентов 1980 года рождения и проживающих по пр.Ленина.

uses crt;

type STUDENT=record

ifa:string;

data:record

day:byte;

month:byte;

year:word;

end;

adres:string;

tel:word

end;

var GRUP:array[1..24] of student;

i:byte;

x:STUDENT;

begin clrscr;

writeln('Создание массива данных');

for i:=1 to 3 do

begin

writeln('Имя,Фамилия');

readln(x.ifa);

writeln('День рождения');

readln(x.data.day);

writeln('Месяц рождения');

readln(x.data.month);

writeln('Год рождения');

readln(x.data.year);

writeln('Адрес');

readln(x.adres);

writeln('Телефон');

readln(x.tel);

GRUP[i]:=x;

end;

writeln('Имя Фамилия':15,'День Месяц Год Адрес':20,'Телефон');

for i:=1 to 3 do with GRUP[i] do

writeln(ifa:15,data.day:4,data.month:4,data.year:6,adres:15,tel:7);

writeln;writeln('Данные студентов, рожденные после 1980 г. и

проживающие на пр.Ленина');

for i:=1 to 3 do

with GRUP[i] do

if(data.year>1980) and(copy(adres,1,9)='пр.Ленина') then

writeln(ifa:15,data.day:4,data.month:4,data.year:6,adres:15,tel:7);

readln;

end.

Лабораторная работа №21. Решение задач на типизированные файлы.

Цель: Рассмотреть цикл задач, связанных с типизированным типом файлом, в том числе задачу на создание простейшей базы данных.

Задача 1. Создать простейшую базу данных на основе типизированных файлов записей. Требуется - создать файл записей с заданным именем, поместив в него сведения о студентах потока (номер группы, фамилия, имя и три отметки за семестр). На основе файла выяснить процент успеваемости на "4" и "5" (количество студентов без "3", отнесенное к общему числу учащихся). Требуется также создать файл записей с заданным именем, поместив в него сведения о плохо успевающих студентах потока (с оценками "2" и "3") — номер группы, фамилия, имя, средний балл семестра, и вывести его записи на экран.

uses crt;

type stud=record

group:byte;

surname:string[20];

name:string[20];

{массив оценок: за семестр ставятся 3 оценки (от 2 до 5 баллов)}

oc:array[1..3] of 2..5;

end;

foolstud=record

group:byte;

surname:string[20];

name:string[20];

srarif:real;

end;

file_typ1=file of stud; file_typ2=file of foolstud;

var f1:file_typ1;f2:file_typ2;

namefile1,namefile2:string[12];

s:stud;

fs:foolstud;

i,nomrec:integer;

procedure read_data(var s:stud);

{Ввод записи по студенту}

begin

clrscr;

with s do

begin

writeln('Окончание ввода -0, как n группы');

write('N группы: '); readln(group);

if group <>0 then

begin

write('Фамилия:');readln(surname);

write('Имя:');readln(name);

writeln('Оценки:');for i:=1 to 3 do read(oc[i]);

end;

end;

end;

procedure copy_data(s:stud;var fs:foolstud);

{Копирование записи по студенту - задолжнику}

begin

with fs do

begin

group:=s.group; surname:=s.surname; name:=s.name;

{вычисление среднего арифметического элеиентов массива оценок}

srarif:=(s.oc[1]+s.oc[2]+s.oc[3])/3;

end;

end;

procedure write_list(var f:file_typ2);

{вывод записей по плохо успевающим студентам на экран}

begin

reset(f); seek(f,0);

writeln('Плохо успевающие:');

writeln('Группа ','Фамилия':16,'Имя':8,'Средний балл':18);

while not eof(f) do

begin

{чтение текущей записи из файла }

read(f,fs);

{вывод текущей записи на экран}

with fs do writeln(group:4,surname:15,name:10,srarif:16:2);

end;

end;

procedure create_file(var f:file_typ1; var n:integer);

{ввод записей по всем студентам в файл}

begin

n:=0; rewrite(f); read_data(s);

while s.group<>0 do

begin

{вывод текущей записи в файл}

write(f,s); inc(n);

{ввод записи по новому студенту}

read_data(s);

end;

close(f);

end;

procedure write_data(var f1:file_typ1;var f2:file_typ2;n:integer);

{вывод записей по плохо успевающим студентам в файл}

{подсчет % успевающих студентов}

var priz:char; k:integer;

begin

reset(f1); rewrite(f2); k:=0;

while not eof(f1) do

begin

read(f1,s);

{ПРИЗНАК УЧЕБЫ СТУДЕНТА}

PRIZ:='n';

for i:=1 to 3 do if (s.oc[i]>=2) then priz:='y';

if priz='y' then

begin

copy_data(s,fs);write(f2,fs) end

else inc(k);

end;

close(f1);close(f2);

clrscr;writeln('На "4" и "5" учатся',k/n*100:3:0,'%студентов');

end;

begin

clrscr;

write('Введите имя файла общей ведомости:');readln(namefile1);

assign(f1,namefile1);

create_file(f1,nomrec);

write('Введите имя файла ведомости задолжников:');readln(namefile2);

assign(f2,namefile2);

write_data(f1,f2,nomrec);

write_list(f2);

end.

Комментарии

Для каждого студента данные о номере его группы, фамилии, имени и отметках содержатся в полях записи stud: переменных group, surname, name и массиве ос соответственно. Для плохо успевающего студента данные о номере его группы, фамилии, имени и среднем балле содержатся в полях записи foolstud: переменных group, surname, name и sredarif соответственно. Создание типизированного файла базы данных на студентов потока выполняется процедурой create_file, а заполнение полей записи по отдельному студенту - процедурой read_data. Формирование типизированного файла базы данных на плохо успевающих студентов потока выполняется процедурой write_data, которая также подсчитывает процент обучающихся на "4" и "5". Процедура copy_data выполняет вспомогательную роль, копируя поля записи студента в соответствующие поля записи задолжника и вычисляя средний балл по оценкам семестра. Данные из файла задолжников выводятся процедурой write_list.

Лабораторная работа №22. Графика Турбо – Паскаля.

Цель: Рассмотреть основные операторы модуля GRAPH, реализовать их в конкретных программах

Выполнение работы.

1. Набрать программу и описать действие операторов в виде комментариев.

Program Animacia;

Uses crt,graph;

const

osn:array[1..14] of integer =(485,355,605,355,605,375,385,375,385,365,485,365,485,355);

kab:array[1..14] of integer=(485,365,485,305,455,305,445,335,395,345,395,365,485,365);

ok1:array[1..10] of integer=(480,335,467,335,467,308,480,308,480,335);

ok2:array[1..10] of integer=(463,335,448,335,457,308,463,308,463,335);

var dr,md,kod,i:integer;

size:word;

p:pointer;

Procedure Fillcolor (a,b:byte);

begin

setcolor(a);

setfillstyle(1,b);

end;

begin

dr:=Detect;

initGraph(dr,md,'C:&bsol;bp.7&bsol;bgi');

kod:=graphresult;

if kod=0 then

begin

fillcolor(0,11);bar(0,0,639,399);

fillcolor(0,10);bar(0,400,639,479);

fillcolor(14,14);pieslice(590,50,0,359,40);

fillcolor(15,15);pieslice(50,50,0,359,30);

pieslice(160,50,0,359,50);

pieslice(150,50,0,359,40);

fillcolor(6,6);bar(495,325,625,355);

fillcolor(8,8);

fillpoly(7,kab);

fillcolor(9,9);

fillpoly(5,ok1);

fillpoly(5,ok2);

fillcolor(0,0);

circle(425,375,25);

circle(565,375,25);

floodfill(425,375,0);

floodfill(565,375,0);

fillcolor(7,7);

circle(425,375,10);

circle(565,375,10);

floodfill(425,375,7);

floodfill(565,375,7);end;

repeat until keypressed;

end.

Лабораторная работа №23. Программирование в графическом режиме.

Цель: практическое знакомство с операторами графического режима в Паскале.

Программа изображает график функции. Для того чтобы можно было быстро настроить программу на любой вид функциональной зависимости, используем отдельную функцию для задания функциональной зависимости, в которой легко можно изменить одну строку. Сам график строим в виде отрезков прямых. Для многих функций такой график получается лучше, чем при прорисовке по отдельным точкам, к тому же это прекрасная возможность продемонстрировать действие процедур moveto и lineto, которые работают с текущим графическим указателем. Использование масштабных коэффициентов придает универсальность процедуре построения графика. При этом считаем, что график занимает все экранное пространство (ровно 640 точек) вне зависимости от введенного интервала изменения аргумента.