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

Текст программы

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.