- •Курсовая работа
- •Содержание введение
- •Пояснительная записка Информационная таблица
- •Схемы стадий пошаговой детализации методом иерархической декомпозиции
- •Укрупненные блок-схемы
- •Описание программы
- •Детализированная блок-схема
- •Описание модулей для каждой подпрограммы
- •Текст программы
- •Используемые модули в программе
- •Методика испытаний
- •Вычисления вручную
- •Результат, полученный в процессе выполнения программы До выполнения
- •После выполнения Для задания 1
- •Для задания 2
- •Для задания 3
- •Руководство программиста
Методика испытаний
Для каждой подпрограммы
П/п вводит из файла 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
П/п умножает матрицу 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
П/п возвращает сумму элементов матрицы 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
П/п возвращает максимальное данное из 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
П/п умножает столбец 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
П/п вводит матрицу из файла 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
П/п определяет количество заглавных русских и латинских букв в файле 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
П/п выводит все символы второй половины текста в файл 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.
П/п определяет, является ли первая строка файла 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) Первая строка кратная двум
Последняя строка кратная трем
П/п вводит сведения из файла 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
Для всей программы в целом
