Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab8m06.pdf
Скачиваний:
9
Добавлен:
23.03.2015
Размер:
277.14 Кб
Скачать

2

СОТРУДНИКИ

 

 

 

ОТДЕЛЫ

НОМЕР

ФАМИЛИЯ

ЗАРПЛАТА

НОМЕР

 

НОМЕР

НАЗВАНИЕ

_СОТР

_ОТД

 

_ОТД

1020

Иванов

1500.0

300

 

300

Бухгалтерия

1232

Петров

1200.0

301

 

301

Канцелярия

 

НОМЕР_СОТР - уникальный номер сотрудника (целое без знака). ФАМИЛИЯ - фамилия сотрудника (строка из 15 символов). ЗАРПЛАТА - зарплата сотрудника (вещественное).

НОМЕР _ОТД - уникальный номер отдела (целое без знака). НАЗВАНИЕназвание отдела (строка из 12 символов).

3. СТУДЕНТЫ, КУРСЫ, ВЕДОМОСТЬ Таблицы СТУДЕНТЫ и КУРСЫ содержат сведения о студентах и учебных курсах. Таблица

ВЕДОМОСТЬ содержит данные о том, какой учебный курс изучен студентом, и об оценке, полученной по данному курсу.

СТУДЕНТЫ ВЕДОМОСТЬ

С_НОМ

ФАМИЛИЯ

ГРУППА

1

Петров

Ф-103

2

Иванов

Ф-102

 

 

 

КУРСЫ

С_НОМ К_НОМ ОЦЕНКА

1

1

5

1

4

3

2

2

4

К_НОМ

НАЗВАНИЕ

ОБЪЕМ

1

Алгебра

36

2

Механика

58

С_НОМ - уникальный номер студента (целое без знака). ФАМИЛИЯ - фамилия студента (строка из 15 символов). ГРУППА – номер группы (строка из 4 символов).

К_НОМуникальный номер курса (целое без знака). НАЗВАНИЕ - название курса (строка из 20 символов). ОБЪЕМобъем курса в часах (целое без знака).

ОЦЕНКА – оценка, полученная студентом по курсу (целое в интервале от 2 до 5).

5. Пример выполнения задания

Задание

1.Задано множество попарно различных точек на плоскости. Найти пару точек, принадлежащих множеству, с минимальным расстоянием между ними. Вывести на печать значение расстояния и номера первой найденной пары точек.

2.Заданы таблицы СОТРУДНИКИ и ОТДЕЛЫ. Составить программу, определяющую распечатывающую таблицу, которая содержит список сотрудников, работающих в заданном отделе.

Тесты Задача 1

1. Для координат точек (0,0); (0,2); (1,1); (4,2); (2,4) расстояние минимально между точками 1 и 3 и равно

1,41.

Задача 2

1.Для названия отдела "Канцелярия" ожидаемый результат - печатается таблица, содержащая данные о сотрудниках (Орлов, Лебедев, Гусев).

2.Для названия отдела "Экономический" ожидаемый результат - сообщение "Отдела Экономический не существует".

3

{Автор: Иванов И.И.} {Группа: ФФ-111}

{Тема: Обработка записей, задача 1 }

Program Lab81; const

N=5; type

TPoint=record

X,Y:real end;

TPointsSet=array [1..5] of TPoint;

const

PointsSet:TPointsSet=

((X:0;Y:0),(X:0;Y:2), (X:1;Y:1), (X:4;Y:2), (X:2;Y:4));

function Dist(X1,Y1,X2, Y2:real):real;

begin

Dist:=sqrt(sqr(X1-X2)+ sqr(Y1-Y2));

end;

{Автор: Иванов И.И.} {Группа: ФФ-111}

{Тема: Обработка записей – задача 2}

Program Lab82; const

NE=5; ND=3; type

TStr15=string[15];

TStr12=string[12]; TEmp=record

ENum :integer;

EName:TStr15; ESal :real; DNum :integer;

end; TDept=record

DNum :integer;

DName:TStr12; end;

TEmpTable=array [1..NE] of TEmp; TDeptTable=array [1..ND] of TDept;

procedure MinDist(var P:TPointsSet; var IMin, JMin:integer;var SMin:real); var

I,J,K,L:integer;

D:real; begin

SMin:=Dist(P[1].X,P[1].Y, P[2].X, P[2].Y);

IMin:=1;

JMin:=2;

for I:=1 to N-1 do

for J:=I+1 to N do begin

D:=Dist(P[I].X,P[I].Y,

P[J].X,P[J].Y);

if D<SMin then begin

SMin:=D;

IMin:=I;

JMin:=J; end

end end;

var

IMin,JMin:integer;

SMin:real; begin

MinDist(PointsSet,IMin, JMin,SMin); writeln(' Точки с номерами ',

IMin:3,' и ',JMin,

' минимальное расстояние ', SMin:7:2);

end.

const

Emp:TEmpTable=

((ENum:21;EName:'Иванов'; ESal:1030.0;DNum:102),

(ENum:12;EName:'Орлов'; ESal: 630.0; DNum:300), (ENum:35;EName:'Сидоров';ESal:1234.5;DNum:200), (ENum:14;EName:'Лебедев'; ESal: 678.9; DNum:300), (ENum:51;EName:'Гусев'; ESal:1011.1;DNum:300));

Dept:TDeptTable=((DNum:102;DName:'Бухгалтерия'), (DNum:300;DName:'Канцелярия' ), (DNum:200;DName:'Плановый' ));

4

procedure FindDeptNum(DeptName:TStr12;var D:TDeptTable; var DNum:integer); var

I:integer; begin

I:=1;

while (I<=ND) and (D[I].DName<>DeptName) do I:=I+1; if I>ND then begin

writeln(' Отдела ',DeptName,' не существует.'); halt end

else DNum:=D[I].DNum; end;

procedure MakeList(var Emp:TEmpTable;var EmpList:TEmpTable; DNum:integer;var K:integer); var I:integer;

begin

K:=0;

for I:=1 to NE do

if Emp[I].DNum=DNum then begin K:=K+1;

EmpList[K]:=Emp[I] end

end;

procedure PrintDept(var Dept:TDeptTable;ND:integer); var I:integer;

begin writeln;

writeln('*****************************'); writeln('* НОМЕР_ОТД * НАЗВАНИЕ *'); writeln('*****************************'); for I:=1 to ND do

with Dept[I] do begin

writeln('* ',DNum:5,' * ',DName:12,' *'); end

end;

procedure PrintEmp(var EmpList:TEmpTable;N:integer); var

I:integer; begin

writeln;

writeln('***************************************************'); writeln('*НОМЕР_СОТР*ФАМИЛИЯ*ЗАРПЛАТА*НОМЕР_ОТД*'); writeln('***************************************************'); for I:=1 to N do

with EmpList[I] do begin

writeln('* ',ENum:5,' * ',EName:15,' * ',ESal:8:2,' *',DNum:5,' end

end; var

EmpList:TEmpTable;

DeptName:TStr12;

DNum,LNum:integer; begin

write('Название отдела- '); readln(DeptName); PrintEmp(Emp,NE); PrintDept(Dept,ND); FindDeptNum(DeptName,Dept,DNum); MakeList(Emp,EmpList,DNum,LNum); writeln(' Отдел ',DeptName);

if LNum>0 then

PrintEmp(EmpList,LNum) else

writeln(' Нет сотрудников.'); end.

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