
- •Курсовая работа
- •Содержание введение
- •Пояснительная записка Информационная таблица
- •Схемы стадий пошаговой детализации методом иерархической декомпозиции
- •Укрупненные блок-схемы
- •Описание программы
- •Детализированная блок-схема
- •Описание модулей для каждой подпрограммы
- •Текст программы
- •Используемые модули в программе
- •Методика испытаний
- •Вычисления вручную
- •Результат, полученный в процессе выполнения программы До выполнения
- •После выполнения Для задания 1
- •Для задания 2
- •Для задания 3
- •Руководство программиста
Текст программы
program ZVEZDA;
uses crt,vector;
{Пользовательский тип}
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;
{Строка описания переменных}
var y,z,x:matrix; f:text; Pm:real; i,k:integer;
{Процедура enter вводит из файла двухмерную матрицу}
{name-является переменной строкового типа используется
для указания пути размещения файла}
{k,j-переменные целого типа подразумевают размерность матрицы}
{Q-массив в который производится заполнение значений, читаемых с файла}
procedure enter(name:string; k,j:byte; var Q:matrix);
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;
{Процедура prv перемножает матрицы и выводит результат в указанный файл}
{name-является переменной строкового типа используется
для указания пути размещения файла}
{ch-переменная символьного типа используется для вывода в файл, поясняя
тем самым какой массив был выведен}
{k,l-переменные целого типа, где k определяет количество столбцов и строк
получившейся матрицы после умножения других матриц имеющих размеры k,l и l,k}
{p,o-являются массивами над которыми производиться умножение}
procedure prv(name:string; k,l:byte; var p,o:matrix);
var i,t,h:byte; x,s:real; r:matrix;
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;
{Процедура kol_buk подсчитывает количество заглавных латинских и
русских букв и выводит на экран}
{name-является переменной строкового типа используется
для указания пути размещения файла}
procedure kol_buk(name1,name2:string);
var f1,f2:text; ch:char;
kollat,kolrus:integer;
begin
clrscr;
{Присваиваем файловым переменным конкретные файлы на диске}
assign(f1,name1);
assign(f2,name2);
{Открываем файл для чтения}
reset(f1); kollat:=0; kolrus:=0;
{Считаем количество символов заглавных лат. и рус. букв из файла}
while not eof(f1) do begin read(f1,ch);
if ch in ['A'..'Z'] then kollat:=kollat+1;
if ch in ['А'..'Я'] then kolrus:=kolrus+1;
end;
{Открываем файл для добавления сообщения в конец файла}
append(f2);
{Выводим количество символов заглавных лат. и рус. букв на экран}
writeln(f2,'В файле заглавных латинских букв ',kollat);
writeln(f2,'В файле заглавных руских букв ',kolrus);
{Закрываем файлы}
close(f1);
close(f2);
end;
{Процедура symvol считывает из файла name1 текст и записывает в
файл name2 вторую половину текста}
{name1, name2 - переменные строкового типа определяют
расположение файлов на диске}
procedure symvol(name1,name2:string);
var f1,f2:text; k,i:integer;
ch:char;
begin
{Присваеваем файловым переменным конкретные файлы на диске}
assign(f1,name1);
assign(f2,name2);
{Открываем файл f1 для чтения, а файл f2 для добавления}
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;
{Процедура kratn определяет является первая строка файла name1,
кратной двум и последняя строка кратной трем и соответствующие
сообщения выводит в файл name2}
{name1, name2 - переменные строкового типа определяют
расположение файлов на диске}
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;
{Процедура bazdan осуществляет поиск по записям в файле и выводит
сообщения на данный запрос}
{name-является переменной строкового типа используется
для указания пути размещения файла}
procedure bazdan(name:string);
var i,k,n,l:integer; ch:char; fl:text; s:string[40];
rec:array[1..25] of poezd; log:string[3];
time1,time2,time3,time4:integer;
begin
{Присваиваем файловой переменной конкретный файл на диске}
assign(fl,name);
{Открываем файл для чтения}
reset(fl);
{Цикл просматривает данные из файла и присваивает строкам записи
данные считанные с файла}
for i:=1 to 25 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 25 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 25 do with rec[i] do begin
if n=num then begin writeln('да имеется на ',stanc); k:=1; end;
end;
if k=0 then writeln('нет билетов с таким номером');
{Если поиск не дал ожидаемых результатов, то выводится соответвуещее
запланированное (на случай не совпадения) сообщение}
writeln('Для выхода нажмите любую клавишу...');
repeat until keypressed;
end;
{Проверка нажатой клавиши конечного условия, если эта клавиша
оказывается ESC, то цикл завершается и передается управление
главной программе}
until ch=#27;
end;
{Основная программа}
Begin
{Определяем файловой переменной конкретный файл на диске}
assign(f,'A:\a3');
{Создаем файл}
rewrite(f);
{Закрываем файл}
close(f);
{Присваеваем файловой переменной конкретный файл на диске}
assign(f,'A:\a4');
{Создаем файл}
rewrite(f);
{Закрываем файл}
close(f);
{Определяем файловой переменной конкретный файл на диске}
assign(f,'A:\a2.txt');
{Создаем файл}
rewrite(f);
{Закрываем файл}
close(f);
{Определяем файловой переменной конкретный файл на диске}
assign(f,'A:\a3.txt');
{Создаем файл}
rewrite(f);
{Закрываем файл}
close(f);
{Определяем файловой переменной конкретный файл на диске}
assign(f,'A:\a4.txt');
{Создаем файл}
rewrite(f);
{Закрываем файл}
close(f);
wind(1,1,80,25,3,1);
music(900);
{Функция menus возвращает значение целого типа взависимости, от
которого выполняется запланированное событие}
k:=menus;
case k of
{Если условие соблюдается то выполняется задание 1}
{Пункт 1}
1:begin
signal;
enter('A:\a1',5,3,y);
enter('A:\a2',3,5,z);
prv('A:\a3',5,3,y,z);
prv('A:\a3',3,5,z,y);
wind(1,1,80,25,1,7);
writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
writeln('Результаты работы находятся в файле A3 на диске A:\');
readln;
end;
{Пункт 2}
2:begin
enter('A:\a3',5,5,x);
Pm:=Pmax(sum(5,3,y),sum(3,5,z),sum(5,5,x));
umn('A:\a1',pm,5,2,3,y);
umn('A:\a2',pm,3,3,5,z);
umn('A:\a3',pm,5,4,5,x);
wind(1,1,80,25,1,7);
writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
writeln('Результаты работы находятся в файлах A1,A2,A3 на диске A:\');
readln;
end;
{Пункт 3}
3:begin
prnot0('A:\a4','A:\a1',0,5,3,0);
prnot0('A:\a4','A:\a2',0,3,5,0);
prnot0('A:\a4','A:\a1',15,5,3,1);
prnot0('A:\a4','A:\a2',15,3,5,1);
prnot0('A:\a4','A:\a3',0,5,5,0);
prnot0('A:\a4','A:\a3',25,3,3,1);
prnot0('A:\a4','A:\a3',34,5,5,1);
wind(1,1,80,25,1,7);
writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
writeln('Результаты работы находятся в файле A4 на диске A:\');
readln;
end;
{если условие соблюдается то выполняется задание 2}
{Пункт 1}
4:begin
signal;
kol_buk('A:\a1.txt','A:\a2.txt');
wind(1,1,80,25,1,7);
writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
writeln('Результаты работы находятся в файле A2.txt на диске A:\');
readln;
end;
{Пункт 2}
5:begin
signal;
symvol('A:\a1.txt','A:\a2.txt');
wind(1,1,80,25,1,7);
writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
writeln('Результаты работы находятся в файле A3.txt на диске A:\');
readln;
end;
{Пункт 3}
6:begin
signal;
kratn('A:\a1.txt','A:\a2.txt');
wind(1,1,80,25,1,7);
writeln('Задача выполнена... для выхода нажмите кл. <Enter>');
writeln('Результаты работы находятся в файле A4.txt на диске A:\');
readln;
end;
{Если условие соблюдается то выполняется задание 3}
7:begin
signal;
bazdan('A:\bazdan.txt');
wind(1,1,80,25,1,7);
readln;
end;
end;
{Проверка нажатой клавиши конечного условия, если эта клавиша
оказывается ESC, то цикл завершается и програма заканчивается}
end.