Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсраб №2.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
334.85 Кб
Скачать

Методика испытаний

Для каждой подпрограммы

  1. П/п вводит из файла name матрицу Q(k,j) Исх. дан.: name, k, j Рез.: Q procedure enter(name:string; k,j:byte; var Q:mas)

program mod1;

uses crt;

type mas=array[1..5,1..5] of real;

var y:mas; i,j:byte;

procedure enter(name:string; k,j:byte; var Q:mas);

var fa:text; t,h:byte;

begin

assign(fa,name);

reset(fa);

for t:=1 to k do

for h:=1 to j do read(fa, q[t,h]);

close(fa);

end;

begin

clrscr;

enter('C:\a1',5,3,y);

for i:=1 to 5 do begin writeln;

for j:=1 to 3 do write(y[i,j]:8:2);

end;

readln;

end.

Вычисления вручную

Исх. дан.: 1 -0.1 0.2 -1 1 -1 1 2 0.3 1 0.1 0.2 2 3 0.5 В рез.: 1 -0.1 0.2 -1 1 -1 1 2 0.3 1 0.1 0.2 2 3 0.5

Результат, полученный в процессе выполнения подпрограммы

1.00 -0.10 0.20 –1.00 1.00

-1.00 1.00 2.00 0.30 1.00

0.10 0.20 2.00 3.00 0.50

  1. П/п умножает матрицу P(k,l) на матрицу O(l,k) и результат записывает файл name Исх. дан.: name, k, l, p, o Рез.: –– procedure prv(name:string; k,l:byte; var p,o:mas)

program mod2;

type mas=array[1..3,1..3] of real;

var a,b:mas; i,j:byte; f,f1,f2:text;

procedure prv(name:string; k,l:byte; var p,o:mas);

var i,t,h:byte; x,s:real; r:mas; f:text;

begin

assign(f,name);

append(f);

for i:=1 to k do begin writeln(f);

for t:=1 to k do begin

s:=0;

for h:=1 to l do

s:=s+p[i,h]*o[h,t];

r[i,t]:=s;

write(f,r[i,t]:8:2);

end;

end;

writeln(f);

close(f);

end;

begin

assign(f,'C:\a2.txt');

rewrite(f);

close(f);

assign(f1,'C:\a2.txt');

assign(f2,'C:\a3.txt');

reset(f1);

reset(f2);

for i:=1 to 3 do

for j:=1 to 3 do read(f1,a[i,j]);

for i:=1 to 3 do

for j:=1 to 3 do read(f2,b[i,j]);

prv('C:\a2.txt',3,3,a,b);

close(f1);

close(f2)

end.

Вычисления вручную

Исх. дан.: A(1 -0.1 0.2 -1 1 -1 1 2 0.3 1 0.1 0.2 2 3 0.5),

B(0.02 0.3 1.3 1.2 0 0 0 1 2 0.1 0.2 0.3 -1 -2 0.01

R(5,5)=A(5,3)*B(3,5)

R(1,1) = 1*0.02+0*(– 0.1)+0.2*0.2 = 0.06

R(1,2) = 1*0.3+0*(– 0.1)+0.2*0.3 = 0.36

R(1,3) = 1*1.3+1*(– 0.1)+0.2*(–1) = 1

R(1,4) = 1*1.2–2*(– 0.1)+0.2*(–2) = 0.6

R(1,5) = 1*0.1*(– 0.1)+0.2*0.01 = 0.01

R(2,1) = 0.02*(–1)+0*1+0.2*(–1) = – 0.22

R(2,2) = – 0.3 + 0 – 0.3 = – 0.6

R(2,3) = – 1.3 + 1 + 1 = 0.7

R(2,4) = – 1.2 + 2 + 2 = 2.8

R(2,5) = 0 + 0.1 – 0.01 = 0.09

R(3,1) = 0.02 + 0 + 0.06 = 0.08

R(3,2) = 0.3 + 0 + 0.09 = 0.39

R(3,3) = 1.3 + 2 – 0.3 = 3

R(3,4) = 1.2 + 4 – 0.6 = 4.6

R(3,5) = 0 + 0.2 + 0.003 = 0.203

R(4,1) = 0.02 + 0 + 0.04 = 0.06

R(4,2) = 0.3 + 0 + 0.06 = 0.36

R(4,3) = 1.3 + 0.1 – 0.2 = 1.2

R(4,4) = 1.2 + 0.2 – 0.4 = 1

R(4,5) = 0 + 0.01 + 0.002 = 0.012

R(5,1) = 0.04 + 0 + 0.1 = 0.14

R(5,2) = 0.6 + 0 + 0.15 = 0.75

R(5,3) = 2.6 + 3 – 0.5 = 5.1

R(5,4) = 2.4 + 6 – 1 = 7.4

R(5,5) = 0 + 0.3 + 0.005 = 0.305

Результат, полученный в процессе выполнения подпрограммы

0.06 0.36 1.00 0.60 -0.01

-0.22 -0.60 0.70 2.80 0.09

0.08 0.39 3.00 4.60 0.20

0.06 0.36 1.20 1.00 0.01

0.14 0.75 5.10 7.40 0.31

  1. П/п возвращает сумму элементов матрицы D(n,m) Исх. дан.: n, m, d Рез.: sum function sum(n,m:byte; var d:mas):real

program mod3;

type mas=array[1..3,1..2] of real;

var i,j:byte; summa:real; a:mas;

function sum(n,m:byte; var d:mas):real;

var i,j:byte; s:real;

begin

{Считаем сумму из элементов матрицы}

s:=0;

for i:=1 to n do

for j:=1 to m do s:=s+d[i,j];

sum:=s;

end;

Begin

for i:=1 to 3 do

for j:=1 to 2 do read(a[i,j]);

summa:=sum(3,2,a);

writeln('Сумма=',Summa:8:2);

end.

Вычисления вручную

Исх. дан.: 1, 0.1, 0.2, –1, 1, –1

Summa = 1+0.1+0.2–1+1–1=0.3

Результат, полученный в процессе выполнения подпрограммы

Сумма = 0.30

  1. П/п возвращает максимальное данное из x,y,z Исх. дан.: x, y, z Рез.: Pmax function Pmax(x,y,z:real):real

program mod4;

uses crt;

var P,a,b,c:real;

function Pmax(x,y,z:real):real;

begin

Pmax:=x;

if (x<y)and(z<y) then Pmax:=y;

if (z>x)and(z>y) then Pmax:=z;

end;

begin

clrscr;

writeln('Введите a,b,c');

readln(a,b,c);

P:=Pmax(a,b,c);

Writeln('Из трех введенных чисел максимальное‘,P:5:2);

readln;

end.

Вычисления вручную

Исх. дан.: 10 20 9

Рез.: 20

Результат, полученный в процессе выполнения подпрограммы

Из трех введенных чисел максимальное 20

  1. П/п умножает столбец m матрицы X(n,h) на p и добавляет преобразованную матрицу в файл name Исх. дан.: name, p, n, m, h, X Рез.: –– procedure UMN(name:string; p:real; n,m,h:byte; var x:mas)

program mod5;

type mas=array[1..5,1..5] of real;

var i,j:byte; x:mas; f:text;

procedure UMN(name:string; p:real; n,m,h:byte; var x:mas);

var i,j:byte; f:text; y:real;

begin

assign(f,name);

append(f);

for i:=1 to n do x[i,m]:=x[i,m]*p;

writeln(f);

for i:=1 to n do begin writeln(f);

for j:=1 to h do write(f,x[i,j]:8:2);

end;

close(f);

end;

begin

assign(f,'C:\a3.txt');

rewrite(f);

close(f);

Assign(f,’C:\a1’);

for i:=1 to 3 do

for j:=1 to 5 do read(f,x[i,j]);

UMN('C:\a3.txt',2,3,3,5,x);

end.

Вычисления вручную

Исх. дан.: 1 -0.1 0.2 В рез: 1 -0.1 0.4

-1 1 -1 -1 1 -2

1 2 0.3 1 2 0.6

1 0.1 0.2 1 0.1 0.4

2 3 0.5 2 3 0.5

Результат, полученный в процессе выполнения подпрограммы

1.00 -0.10 0.40

-1.00 1.00 -2.00

1.00 2.00 0.60

1.00 0.10 0.40

2.00 3.00 0.50

  1. П/п вводит матрицу из файла name, если logic=1 элементы матрицы находятся не на нулевой позиции, то переводит невидимый указатель на k позиций и считывает с k+1 позиции, после находит произведение ненулевых элементов, результат добавляет в файл name1 Исх. дан.: name, name1, k, n, m, logik Рез.: –– procedure prnot0(name,name1:string; k,n,m,logik:byte)

program mod6;

type mas=array[1..5,1..5] of real;

var f:text;

procedure prnot0(name,name1:string; k,n,m,logik:byte);

var i,j:byte; x,p:real; f,fa:text; q:mas;

begin

assign(f,name);

assign(fa,name1);

append(f);

reset(fa);

if logik=1 then for i:=1 to k do read(fa,x);

for i:=1 to n do

for j:=1 to m do read(fa,q[i,j]);

close(fa);

p:=1;

for i:=1 to n do

for j:=1 to m do if q[i,j]<>0 then p:=p*q[i,j];

writeln(f,p:8:9);

close(f);

end;

Begin

assign(f,'C:\a4.txt');

rewrite(f);

close(f);

prnot0('C:\a4.txt','C:\a2',0,3,5,0);

end.

Вычисления вручную

Исх. дан.: 0.02 0.3 1.3 1.2 0 0 0 1 2 0.1 0.2 0.3 -1 -2 0.01

Рез.: 0.02*0.3*1.3*1.2*1*2*0.1*0.2*0.3*(–1)*(–2)*0.01 = 0.0000022464

Результат, полученный в процессе выполнения подпрограммы

0.0000002246

  1. П/п определяет количество заглавных русских и латинских букв в файле name1 и выводит в файл name2 Исх. дан.: name1,name2 Рез.: –– procedure kol_buk(name1,name2:string)

program mod7;

uses crt;

procedure kol_buk(name:string);

var f:text; ch:char;

kollat,kolrus:integer;

begin

clrscr;

assign(f,name);

reset(f); kollat:=0; kolrus:=0;

while not eof(f) do begin read(f,ch);

if ch in ['A'..'Z'] then kollat:=kollat+1;

if ch in ['А'..'Я'] then kolrus:=kolrus+1;

end;

writeln('В файле A1.txt заглавных латинских букв ',kollat);

writeln('В файле A1.txt заглавных руских букв ',kolrus);

close(f);

Writeln('Для выхода нажмите <Enter>');

readln;

end;

begin

kol_buk('C:\a1.txt');

end.

Тестовый пример

Душа поёт, а сердце плачет, но все же верю я, что ждет меня удача. I like writing Turbo Pascal.

Количество заглавных русских букв = 1

Количество заглавных латинских букв = 3

Результат, полученный в процессе выполнения подпрограммы

Количество заглавных русских букв = 1

Количество заглавных латинских букв = 3

  1. П/п выводит все символы второй половины текста в файл name2 считанного из файла name1 Исх. дан.: name1,name2 Рез.: –– procedure symbol(name1,name2:string)

program z1;

var f:text;

procedure symvol(name1,name2:string);

var f1,f2:text; k,i:integer;

ch:char;

begin

assign(f1,name1);

assign(f2,name2);

reset(f1); append(f2);

k:=0;

while not eof(f1) do begin

read(f1,ch);

k:=k+1;

end;

close(f1);

reset(f1);

k:=k div 2;

for i:=1 to k do read(f1,ch);

writeln(f2);

while not eof(f1) do begin

read(f1,ch);

write(f2,ch);

end;

close(f1);

close(f2);

end;

begin

assign(f,'C:\a2.txt');

rewrite(f);

close(f);

k('C:\a1.txt','C:\a2.txt');

end.

Тестовый пример

Душа поёт, а сердце плачет, но все же верю я, что ждет меня удача. I like writing Turbo Pascal.

ждет меня удача. I like writing Turbo Pascal.

Результат, полученный в процессе выполнения подпрограммы

ждет меня удача. I like writing Turbo Pascal.

  1. П/п определяет, является ли первая строка файла name1 десятичной записью кратной трем и последняя строка десятичной записью кратной двум, после выводит сообщение в файл name2 Исх. дан.: name1,name2 Рез.: –– procedure kratn(name1,name2:string)

program mod10;

procedure kratn(name1,name2:string);

var i,k:byte; f1,f2:text; x:integer;

ch:char;

begin

{Присваеваем файловым переменным конкретные файлы на диске}

assign(f1,name1);

assign(f2,name2);

{Открываем файл f1 для чтения, а файл f2 для добавления}

reset(f1); append(f2);

read(f1,x);

x:=x mod 2; if x=0 then

writeln(f2,'Первая строка является кратной двум')

else

writeln(f2,'Первая строка не кратная двум');

close(f1);

reset(f1);

k:=0;

while not eof(f1) do begin

readln(f1);

k:=k+1;

end;

close(f1);

reset(f1);

for i:=1 to k-2 do readln(f1);

read(f1,x);

x:=x mod 3; if x=0 then

writeln(f2,'Последняя строка является кратной трем')

else

writeln(f2,'Последняя строка не кратная трем');

close(f2);

end;

begin

kratn('A:\a1.txt','A:\a2.txt');

end;

Тестовый пример

243

Душа поет а сердце плачет, но все же верю я, что ждет меня удача. I like write Turbo Pascal.

9331

Первая строка не кратная двум

Последняя строка не кратная трем

------

242

Душа поет а сердце плачет, но все же верю я, что ждет меня удача. I like write Turbo Pascal.

9333

Первая строка кратная двум

Последняя строка кратная трем

Результат, полученный в процессе выполнения подпрограммы

1) Первая строка не кратная двум

Последняя строка не кратная трем

2) Первая строка кратная двум

Последняя строка кратная трем

  1. П/п вводит сведения из файла name и осуществляет поиск по введенным данным Исх. дан.: name Рез.: –– procedure bazdan(name:string)

program mod8;

uses crt;

type time_o=record hh:0..23; mm:0..59; end;

time_p=record hh:0..23; mm:0..59; end;

poezd=record num:integer; stanc:string[40];

nalbil:boolean; timo:time_o; timp:time_p;

end;

procedure wind(a,b,c,d,e,f:byte);

begin

window(a,b,c,d);

textbackground(e);

clrscr; textcolor(f);

end;

procedure bazdan(name:string);

var i,k,n,l:integer; ch:char; fl:text; s:string[40];

rec:array[1..5] of poezd; log:string[3];

time1,time2,time3,time4:integer;

begin

{Присваеваем файловой переменной конкретный файл на диске}

assign(fl,name);

{Открываем файл для чтения}

reset(fl);

{Цикл просматривает данные из файла и присвевает строкам записи

данные считанные с файла}

for i:=1 to 5 do with rec[i] do Begin

readln(fl,num);

readln(fl,stanc);

readln(fl,log);

if log='да' then nalbil:=true;

if log='нет' then nalbil:=false;

readln(fl,timo.hh);

readln(fl,timo.mm);

readln(fl,timp.hh);

readln(fl,timp.mm);

end;

{Цикл repeat Повторяет пока не будет нажата клавиша ESC}

repeat

{Вывод на экран графического сообщения с запросом о нажатии клавиш}

wind(1,1,80,25,0,1);

wind(6,9,71,15,5,1);

wind(7,10,70,14,0,2); gotoxy(4,1);

textcolor(5); gotoxy(9,2);

writeln('Время отправления поездов во временом интервале "Б"');

textcolor(9); gotoxy(11,3);

writeln('Наличие билета на поезд с номером... "П"');

textcolor(2); gotoxy(29,4);

write('Выход ESC');

textcolor(3);

{Считывает клавишу с клавиатуры и присваевает ее

значение переменной символьного типа}

ch:=readkey;

{Производится проверка нажатой клавиши если она совподает с

нижеуказаным условием то выполняется поиск отправления поездов

в определенный город во временном интервале}

if (ch='Б')or(ch='б')or(ch=',') then begin

wind(1,1,80,25,1,2);

gotoxy(12,3);Writeln('Условия поиска...');

writeln('Введите временной интервал соблюдая следующий формат');

writeln('Например 12 клавиша <Enter>');

writeln(' 10 клавиша <Enter>');

writeln(' 14 клавиша <Enter>');

writeln(' 30 клавиша <Enter>');

readln(time1);

readln(time2);

readln(time3);

readln(time4);

k:=0;

{Если условие соблюдается для записи i-той, то ее элементы

выводится на экран, тем самым сообщая о наличии соблюдения условия}

for i:=1 to 5 do with rec[i] do begin

if (time1<=timo.hh)and(time3>=timo.hh) then

begin

k:=1;

delay(12000);

writeln(stanc);

writeln(timo.hh,':',timo.mm);

end;

end;

{Если поиск не дал ожидаемых результатов, то выводится соответвуещее

запланированное (на случай не совпадения) сообщение}

if k=0 then writeln('Поиск не дал результатов');

writeln('Для выхода нажмите любую клавишу...');

repeat until keypressed;

end;

{Производится проверка нажатой клавиши если она совподает с

нижеуказаным условием то выполняется поиск наличия билетов с указаным

номеров и выводом, таковых, если существуют}

if (ch='G')or(ch='g')or(ch='П')or(ch='п') then

begin wind(1,1,80,25,1,2);

gotoxy(12,3); Writeln('Условия поиска...');

writeln('Введите номер поезда');

readln(N); k:=0;

{Если условие соблюдается для записи i-той, то ее элементы

выводится на экран, тем самым сообщая о наличии соблюдения условия}

for i:=1 to 5 do with rec[i] do begin

if n=num then writeln('да имеется на ',stanc); k:=1;

end;

if k=0 then writeln('нет билетов с таким номером');

{Если поиск не дал ожидаемых результатов, то выводится соответвуещее

запланированное (на случай не совпадения) сообщение}

writeln('Для выхода нажмите любую клавишу...');

repeat until keypressed;

end;

{Проверка нажатой клавиши конечного условия, если эта клавиша

оказывается ESC, то цикл завершается и передается управление

главной программе}

until ch=#27;

end;

begin

bazdan('C:\bazdan.txt');

end.

Тестовый пример

Bazdan производит поиск по записям в файле

1245

Дубровка

да

12

10

2

0

1246

Казахстан

да

2

20

12

5

1247

Москва

да

12

15

10

25

1248

Ленинград

да

9

30

10

15

1249

Запорожье

нет

15

30

23

40

В результате поиска:

1. Условие – Найти номер поезда

1248 – да есть на Ленинград

1000 – нет билетов с таким номером

2. Условие – Во временном интервале

С 12:30 до 1:30, так как временной интервал не может быть в обратном порядке – Поиск не дал результатов

С 9:30 до 12:30 – Дубровка 12:10, Москва 12:15, Ленинград 9:30

Для всей программы в целом