ЛистингпрограммынаязыкеPascal
Задание
Условие задачи
1) Если символ находится среди символов «А» - «Г», то для заданной матрицы найти min элемент среди элементов этой матрицы, расположенных над главной диагональю и max элемент среди элементов, расположенных под главной диагональю.
2) Если символ находится среди символов «И» -«Л», то определить лучшую по среднему баллу группу, если результаты экзаменов двух групп представлены в виде массивов и .
3) Если символ находится среди символов «П» - «С», то создать файл целых чисел. В другой файл переписать подряд отрицательные элементы первого файла и подсчитать их количество. Первоначальный и полученный файлы выдать на печать.
Набор тестовых примеров
1) входные данные:
символ«А» - «Г»
Матрица Р:
Матрица Р после формирования:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
выходные данные:
Min: 1
Max: 25
2) входные данные:
символ«И» -«Л»
введите элементы матрицы B
B[1]=5
B[2]=6
B[3]=2
B[4]=6
B[5]=5
B[6]=6
B[7]=2
B[8]=3
B[9]=5
B[10]=2
B[11]=4
B[12]=3
B[13]=2
B[14]=4
B[15]=5
B[16]=2
B[17]=3
B[18]=4
B[19]=2
B[20]=6
B[21]=5
B[22]=2
Матрица В после формирования:
5 62 6 5 6 2 3 5 2 4 3 2 4 5 2 3 4 2 6 5 2
вводите элементы матрицы С
С[1]=3
С[2]=5
С[3]=2
С[4]=6
С[5]=4
С[6]=2
С[7]=3
С[8]=4
С[9]=6
С[10]=5
С[11]=6
С[12]=3
С[13]=3
С[14]=3
С[15]=5
С[16]=2
С[17]=4
С[18]=6
С[19]=6
С[20]=6
С[21]=5
Матрица C после формирования:
3 5 2 6 4 2 3 4 6 5 6 3 3 3 5 2 4 6 6 6 5
выходные данные:
Среднее арифметическое B[i]: 3.82
Среднее арифметическое C[i]: 4.24
Среднее арифметическое C[i] лучше чем B[i]
3) входные данные:
символ«П» -«С»
введите элементы файла F
3-5-268-5-7999
выходные данные:
Вывод файла F:
3 -5 -2 6 8 -5 -7
Вывод файла G
-5 -2 -5 -7
Кол-во чисел файла G: 4
Блок-схемы алгоритмов
1 3 5
2 4 6
|
|
|
|
| |||||
Листинг программы на языке Pascal
program1;
const L=30;
type T2M = array[1.. L,1..L] of integer;
T1M = array[1.. L] of integer;
TF = file of integer;
Tname = string[4];
var P: T2M;
B, C: T1M;
s, s1, buf, max, min, imax,imin,jmax,jmin:integer;
sra1,Sra3 : real;
N,M,i,j,r, k, k1:byte;
F,G: file of integer;
// Процедура для ввода двухмерной матрицы
procedureVvodMx(var P:T2m; const N,M: byte; const name:Tname);
vari,j:byte;
begin
writeLn('Введитеэлементыматрицы ',name);
for i:=1 to N do
for j:=1 to M do
begin
write('P[',i,',',j,']=');
readLn(P[i,j]); end;end;
// Процедура для ввода двухмерной матрицы
procedureVivodMx(const P:T2m; const N,M: byte; const name:Tname);
vari,j:byte;
begin
writeLn('Матрица ',name,' послеформирования:');
for i:=1 to N do
begin
for j:=1 to M do
write(P[i,j]:4);
writeLn;end;end;
// Процедура для ввода матрицы
procedure VvodMx1(var B:T1m; const N: byte; const name:Tname);
var i:byte;
begin
writeLn('Введитеэлементыматрицы ',name);
for i:=1 to N do
begin
write('B[',i,']=');
readLn(B[i]); end;end;
// Процедура для ввода матрицы
procedure VivodMx1(const B:T1m; const N: byte; const name:Tname);
var i:byte;
begin
writeLn('Матрица ',name,' послеформирования:');
for i:=1 to N do
begin
write(B[i]:4);
writeLn; end;end;
// Функция нахождения среднего арифметического
functionsra(const B:T1m; const N:byte):real;
vari,k:byte;
Sra1:real;
s:integer;
begin
S:=0;
k:=0;
for i:=1 to N do
begin
k:=k+1;
S:=S+b[i];
end;
if k<>0 then
SrA:= S/k; end;
// Процедура для ввода файла
procedureVvodF(var F:TF; const name:Tname);
varbuf:integer;
begin
rewrite(F);
writeLn('Введите компоненты файла', name);
readLn(buf);
whilebuf<>999 do
begin
write(F,buf);
readLn(buf);end;end;
// Процедура для вывода файла
procedureVivodF(var F:TF; const name:Tname);
varbuf:integer;
begin
reset(F);
writeLn('Выводфайла ', name);
while not EOF(F) do
begin
read(F,buf);
write(buf:5);end;
writeLn;end;
// основная программа
begin
writeLn('введите символ');
readLn(ch);
casech of
'А'..'Г':
begin
VvodMx(p,5,5,'p');
VivodMx(P,5,5,'p');
begin
Imax :=1;
Jmax :=1;
Max := P[1,1];
Imin :=1;
Jmin :=1;
min := P[1,1];
for i:=1 to N do
for j:=1 to M do
ifi>=j then
begin
if P[i,j]>Max then
begin
Max := P[i,j];
IMax :=i;
JMax := j;end; end
else
begin
if P[i,j]<min then
begin
min := P[i,j];
Imin :=i;
Jmin := j;
end;end;
writeLn('Min: ', min );
writeLn('Max: ', max);
end;end;
'И'..'Л':
begin
VvodMx1(B,22,'b');
VivodMx1(b,22,'b'); begin
sra1:=SrA(b,22); begin
VvodMx1(c,21,'с');
VivodMx1(c,21,'с'); begin
sra1:=SrA(c,21);
writeLn('СреднеарифметическоеB[i]: ', SrA(b,22):8:2);
writeLn(' Среднеарифметическое C[i]: ', SrA(c,21):8:26);
end;end; end;
if SrA(c,21)>SrA(b,22) then
begin
writeLn(' Среднеарифметическое C[i] лучше чемB[i] ');
end
else
begin
writeLn('СреднеарифметическоеB[i] лучшечемC[i] ');
end;end;
'П'..'С':
begin
Assign(F,'F.dat');
rewrite(F);
VvodF(F,'F');
Assign(g,'g.dat');
rewrite(g);
reset(F);
while not EOF(F) do
begin
read(F,buf);
if buf<0 then
k:=k+1;
if buf<0 then
write(G,buf);
end;
VivodF(F,'F');
VivodF(g,'g');
writeLn('Кол-во чисел файлаG:',k);
end;
else
writeLn('символ находится вне допустимого диапазона'); end;end.
2 Задание
Условие задачи
В данном задании следует при помощи массива записей реализовать: функциональное меню; ввод таблицы; вывод таблицы; три запроса на выбор.
В приемной комиссии вуза об абитуриенте имеются сведения: Ф.И.О., адрес, факультет, специальность, форма обучения (очная, заочная, вечерняя), номер аттестата, средний балл аттестата, наличие медали. СУБД должна выдавать следующие сведения:
- список медалистов, подавших заявления на заданную специальность;
- список абитуриентов-очников;
- абитуриентов с наименьшим средним баллом в аттестате;
- определить сколько абитуриентов на каждый факультет подало заявлений;
+ список всех абитуриентов живущих на одинаковых улицах;
+ сортировка по отдельным полям.
Набор тестовых примеров
входные данные:
№ п/п | ФИО | Адрес. Улица | Дом | Факультет | Специальность | Форма обучения. Очная | Заочная | Вечерняя | Номер аттестата | Ср.Балл аттестата | Наличие медали |
Иванов | Сухова | + | - | - | + | ||||||
Петров | Ленина | - | + | - | - | ||||||
Сидоров | Пушкина | + | - | - | - | ||||||
Зотов | Зеленная | + | - | - | - | ||||||
Харьков | Мира | - | - | + | + |
выходные данные:
Запрос 1. Найти медалистов, подавших заявления на заданную специальность;
Обработка запроса: список медалистов, подавших заявления на заданную специальность
Введите специальность: 12
Результат Запроса:
№ п/п | ФИО | Адрес. Улица | Дом | Факультет | Специальность | Форма обучения. Очная | Заочная | Вечерняя | Номер аттестата | Ср.Балл аттестата | Наличие медали |
Иванов | Сухова | + | - | - | + | ||||||
Харьков | Мира | - | - | + | + |
выходные данные:
Запрос 2. Найти абитуриентов-очников;
Обработка запроса: список абитуриентов-очников
Результат Запроса:
№ п/п | ФИО | Адрес. Улица | Дом | Факультет | Специальность | Форма обучения. Очная | Заочная | Вечерняя | Номер аттестата | Ср.Балл аттестата | Наличие медали |
Иванов | Сухова | + | - | - | + | ||||||
Сидоров | Пушкина | + | - | - | - | ||||||
Зотов | Зеленная | + | - | - | - |
выходные данные:
Запрос 3. Найти абитуриентов с наименьшим средним баллом в аттестате;
Обработка запроса: список абитуриентов с наименьшим средним баллом в аттестате
Результат Запроса:
№ п/п | ФИО | Адрес. Улица | Дом | Факультет | Специальность | Форма обучения. Очная | Заочная | Вечерняя | Номер аттестата | Ср.Балл аттестата | Наличие медали |
Сидоров | Пушкина | + | - | - | - | ||||||
Зотов | Зеленная | + | - | - | - |
2.3 Блок-схема алгоритма
Ввод FIOName
Ввод Adress.Street
Ввод Adress.NumberofBld
Ввод Fuculty
Ввод specialty
FormaObucheniy.Ochnay
FormaObucheniy.Zaochnay
ЛистингпрограммынаязыкеPascal
programsubd;
type
TShops = record
ReestrNumber: integer;
FIOName: string[10];
Adress, FormaObucheniy : record
Street : string[15];
Ochnay, Zaochnay, Vechernyy:char;
NumberOfBld : byte;
end;
faculfy : string[10];
Specialty, NumberAttestata, SrBall : integer;
Medal:char;
end;
TBaseMass = array[1..255] of TShops;
{Процедура формирования новой таблицы}
procedureInputNewBase(varBase:TBaseMass; varNumOfRec:byte);
var i: byte;
Shop: TShops;
ContinueInput: char;
begin
i:=0;
WriteLn;
repeat
i:= i + 1;
with Shop do
begin
write('Введите ФИО ',i,'-го абитуриента: ');
readLn(FIOName);
writeLn('Введите адрес абитуриента ',FIOName);
write(' Улица: ');
readLn(Adress.Street);
write(' Дом: ');
readLn(Adress.NumberOfBld);
write('Факультет абитуриента ',FIOName,': ');
readLn(faculfy);
write('Специальность абитуриента ',FIOName,': ');
readLn(Specialty);
writeLn('Форма обучения абитуриента ',FIOName);
write(' Очная: ');
readLn(FormaObucheniy.Ochnay);
write(' Заочная: ');
readLn(FormaObucheniy.Zaochnay);
write(' Вечерняя: ');
readLn(FormaObucheniy.Vechernyy);
write('Номер аттестата абитуриента ',FIOName,': ');
readLn(NumberAttestata);
write('Ср. балл аттестата абитуриента ',FIOName,': ');
readLn(SrBall);
write('Наличие медали у абитуриента ',FIOName,': ');
readLn(Medal);
end;
Base[i] := Shop;
writeLn('Введите данные о следующем абитуриента ');
writeLn('Если код окончен, введите 0, если нет - 1');
readLn(ContinueInput);
untilContinueInput='0';
NumOfRec:=i;
end;
{Процедура вывода базы на экран}
procedureOutBase(const Base:TBaseMass; const NumOfRec:byte);
vari,j: byte;
begin
writeLn;
ifNumOfRec<> 0 then
begin
writeLn('База данных содержит следующие сведения:');
for j:=1 to 179 do
write('-');
writeLn;
writeLn('N п/п':6,'| ','ФИО|':12,'Адрес.Улица |':17,'Дом |':7,'Факультет |':8,'Специальность |':15, 'Формаобучения.Очная |':22, 'Заочная |':10, 'Вечерняя|':10, 'Номераттестата |':17, 'Ср.Баллаттестата|':19,'Наличиемедали|':17);
forj:=1 to 179 do
write('=');
writeLn;
for i:=1 to NumOfRec do
with Base[i] do
begin
write(i:5,' |');
write(FIOName:10,' |');
write(Adress.Street:15,' |');
write(Adress.NumberOfBld:5,' |');
write(faculfy:9,' |');
write(Specialty:13,' |');
write(FormaObucheniy.Ochnay:21,' |');
write(FormaObucheniy.Zaochnay:8,' |');
write(FormaObucheniy.Vechernyy:8,' |');
write(NumberAttestata:15,' |');
write(SrBall:17,' |');
writeLn(Medal:15,' |');
for j:=1 to 179 do
write('-');
writeLn;
end;
end
else
writeLn('ÁÄ ïóñòà');
end;
{ПроцедураобработкизапросакБД
(поиск медалистов, подавших заявления на заданную специальность)}
Procedure Medal(const Base:TBaseMass; const NumOfRec: byte);
vari,j: byte;
NeedSpecialty,Specialty: integer;
Medal:char;
begin
ifNumOfRec<> 0 then
begin
writeLn;
writeLn('Запрос к БД: список медалистов, подавших заявления на заданную специальность ');
writeLn;
write('Введите специальность:');
readln (NeedSpecialty);
for i:= 1 to NumOfRec do
with Base[i] do
writeLn('Результат запроса:');
for j:=1 to 179 do
write('-');
writeLn;
writeLn('N п/п':6,'| ','ФИО|':12,'Адрес.Улица |':17, 'Дом |':7,'Факультет |':8,'Специальность |':15, 'Формаобучения.Очная |':22, 'Заочная |':10, 'Вечерняя|':10, 'Номераттестата |':17, 'Ср.Баллаттестата |':19, 'Наличиемедали |':17);
for j:=1 to 179 do
write('=');
writeLn;
for i:=1 to NumOfRec do
with Base[i] do
if (Specialty = NeedSpecialty) and (medal='+')then
begin
write(i:5,' |');
write(FIOName:10,' |');
write(Adress.Street:15,' |');
write(Adress.NumberOfBld:5,' |');
write(faculfy:9,' |');
write(Specialty:13,' |');
write(FormaObucheniy.Ochnay:21,' |');
write(FormaObucheniy.Zaochnay:8,' |');
write(FormaObucheniy.Vechernyy:8,' |');
write(NumberAttestata:15,' |');
write(SrBall:17,' |');
writeLn(Medal:15,' |');
for j:=1 to 179 do
write('-');
writeLn;end;end
else
writeLn('В базе нет такой специальности ', NeedSpecialty);
end;
{Процедура обработки запроса к БД
(поиск абитуриентов-очников)}
Procedure Ochnik(const Base:TBaseMass; const NumOfRec: byte);
vari,j: byte;
Ochnay: char;
begin
ifNumOfRec<> 0 then
begin
writeLn;
writeLn('Запрос к БД: список абитуриентов-очников);
writeLn('Результат запроса:');
for j:=1 to 179 do
write('-');
writeLn;
writeLn('N п/п':6,'| ','ФИО|':12,'Адрес.Улица |':17, 'Дом |':7,'Факультет |':8,'Специальность |':15, 'Формаобучения.Очная |':22, 'Заочная |':10, 'Вечерняя|':10, 'Номераттестата |':17, 'Ср.Баллаттестата |':19, 'Наличиемедали |':17);
for j:=1 to 179 do
write('=');
writeLn;
for i:=1 to NumOfRec do
with Base[i] do
if (FormaObucheniy.Ochnay = '+') then
begin
write(i:5,' |');
write(FIOName:10,' |');
write(Adress.Street:15,' |');
write(Adress.NumberOfBld:5,' |');
write(faculfy:9,' |');
write(Specialty:13,' |');
write(FormaObucheniy.Ochnay:21,' |');
write(FormaObucheniy.Zaochnay:8,' |');
write(FormaObucheniy.Vechernyy:8,' |');
write(NumberAttestata:15,' |');
write(SrBall:17,' |');
writeLn(Medal:15,' |');
for j:=1 to 179 do
write('-');
writeLn;end;end
else
writeLn('В базе нет очников ');
end;
{Процедура обработки запроса к БД
(поиск абитуриентов с наименьшим средним баллом в аттестате)}
Procedure srBall(const Base:TBaseMass; const NumOfRec: byte);
vari,j, k: byte;
SrA: integer;
SrBall : integer;
begin
ifNumOfRec<> 0 then
begin
writeLn;
writeLn('Запрос к БД: список абитуриентов с наименьшим средним баллом в аттестате ');
writeLn('Результат запроса:');
for j:=1 to 179 do
write('-');
writeLn;
writeLn('N п/п':6,'| ','ФИО|':12,'Адрес.Улица |':17, 'Дом |':7,'Факультет |':8,'Специальность |':15, 'Формаобучения.Очная |':22, 'Заочная |':10, 'Вечерняя|':10, 'Номераттестата |':17, 'Ср.Баллаттестата |':19, 'Наличиемедали |':17);
for j:=1 to 179 do
write('=');
writeLn;
for i:=1 to NumOfRec do
with Base[i] do
if (srBall<4) then
begin
write(i:5,' |');
write(FIOName:10,' |');
write(Adress.Street:15,' |');
write(Adress.NumberOfBld:5,' |');
write(faculfy:9,' |');
write(Specialty:13,' |');
write(FormaObucheniy.Ochnay:21,' |');
write(FormaObucheniy.Zaochnay:8,' |');
write(FormaObucheniy.Vechernyy:8,' |');
write(NumberAttestata:15,' |');
write(SrBall:17,' |');
writeLn(Medal:15,' |');
for j:=1 to 179 do
write('-');
writeLn; end;end
else
writeLn('В базе нет абитуриентов с низким ср.баллом в аттестатом ');
end;
{процедура выводящая главное меню программы}
procedureMainMenu;
varPunktOfMenu: byte;
Base: TBaseMass;
NumOfRec : byte;
begin
NumOfRec := 0;
repeat
writeLn;
writeLn('Выберите нужное действие:');
writeLn('1 - Ввод новой БД');
writeLn('2 - Вывод БД');
writeLn('3 - поиск медалистов, подавших заявления на заданную специальность ');
writeLn('4 - поиск абитуриентов-очников ');
writeLn('5 - поиск абитуриентов с наименьшим средним баллом в аттестате');
writeLn('6 - Выход');
write('Ваш выбор:');
readLn(PunktOfMenu);
casePunktOfMenu of
1: InputNewBase(Base, NumOfRec);
2: OutBase(Base, NumOfRec);
3: Medal(Base, NumOfRec);
4: Ochnik(Base, NumOfRec);
5: srBall(Base, NumOfRec)
else
ifPunktOfMenu<>6 then
writeLn('Введите корректный пункт меню');
end;
untilPunktOfMenu = 6 ;
end;
{очень короткая главная программа}
begin
MainMenu;
end.