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.