Листингпрограммынаязыке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

               
 
 
   
 
   
 
   
 
   



Imax:=1; Imin:=1; Jmax:=1; Jmin:=1; Max:=P[1;1]; Min:=P[1;1];    

Min:=P[i;j]; Imin:=i; Imin:=j;    
Max:=P[i;j]; Imax:=i; Imax:=j;    

 
 

Шаг 3-4 ВТОРОЙ АЛГАРИТМ

           
   
 
 
Шаг 5-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.

Наши рекомендации