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

35. Задача.

Информация об операциях междугородной телефонной станции (МГТС) содержит следующие данные: город (русские, латинские буквы, дефис), номер телефона абонента (символы цифр, дефис), дату переговоров, включающую номер месяца (в интервале 1..12) и номер дня в месяце (в интервале 1..30), количество минут (больше нуля), цену минуты разговора (больше нуля). Написать программу, позволяющую автоматизировать деятельность клерка, обслуживающего операции МГТС. При этом необходимо:

обеспечить ввод данных с клавиатуры, контроль их на корректность, при вводе и сохранении данных в типизированном файле (количество наборов данных неограниченно);

определить среднюю стоимость переговоров за период, предшествующий заданному месяцу;

вывести на экран и в текстовый файл информацию о переговорах в заданном месяце, стоимость которых выше средней за предыдущие месяцы в году.

Program MGTS;

type

tmgts=record

town, tel: string;

d, m, min: integer;

pr: real;

end;

var

m: tmgts;

f1: file of tmgts;

f2: text;

spr: real;

tm, n: integer;

procedure ctrltown( what:string;

var p:string);

var

fl: boolean; i: integer;

begin

repeat

fl:=true;

write( what); readln( p);

for i:=1 to length( p) do

if not( p[i] in [’А’..’п’,’р’..’я’,’-’]) then

fl:=false;

until fl;

end; { ctrltown }

procedure ctrltel( what:string;

var p:string);

fl: boolean; i: integer;

begin

repeat

fl:=true;

write( what); readln( p);

for i:=1 to length( p) do

if not( p[i] in [‘0’..’9’,’-‘]) then

fl:=false;

until fl;

end; { ctrltel }

procedure ctrlday( what:string;

var p:integer);

var

fl: boolean; s: string; cod: integer;

begin

repeat

fl:=true;

write( what); readln( s);

val( s, p, cod);

if not( cod = 0) then

fl:=false;

if not( (p > 0) and (p<31))then

fl:= false;

until fl;

end; { ctrlday }

procedure ctrlmon( what:string;

var p:integer);

var

fl: boolean; s: string; cod: integer;

begin

repeat

fl:=true;

write( what); readln( s);

val( s, p, cod);

if not( cod = 0) then

fl:=false;

if not( (p > 0) and (p<13))then

fl:=false;

until fl;

end; { ctrlmon }

procedure ctrlmin( what:string;

var p:integer);

var

fl: boolean; s: string; cod: integer;

begin

repeat

fl:=true;

write( what); readln( s);

val( s, p, cod);

if not( cod = 0) then

fl:=false;

if not( p > 0)then

fl:=false;

until fl;

end; { ctrlmin }

procedure ctrlprice( what:string;

var p: integer);

var

fl: boolean; s: string; cod: integer;

begin

repeat

fl:=true;

write( what); readln( s);

val( s, p, cod);

if not( cod = 0) then

fl:=false;

if not( p > 0)then

fl:=false;

until fl;

end; { ctrlprice }

begin

assign( f1, ‘mgts.dat’);

rewrite( f1);

repeat

ctrltown( ‘Город?’, m.town);

{ write( ‘Город?’; readln( m.town);}

{Ввод всех данных заканчивается, когда вместо города нажимается <CR>}

if m.town<>” then

begin

ctrltel( ‘Телефон?’, m.tel);

ctrlday( ‘День?’, m.d);

ctrlmon( ‘Месяц?’, m.m);

ctrlmin( ‘Кол-во минут?’, m.min);

ctrlprice( ‘Цена?’, m.pr);

write (f1, m); end;

until m.town<>”;

close( f1);

write(‘Тек. месяц?’); readln( tm);

reset( f1);

spr:=0; n:=0;

while not eof(f1) do

begin

read( f1, m);

if m.m<tm then

begin

n:=n+1; spr:=spr+ m.min*m.pr;

end;

end;

close( f1);

assign( f2, ‘mgts.txt’);

rewrite( f2);

reset( f1);

while not eof(f1) do

begin

read( f1, m);

if (m.m=tm) and (m.min*m.pr>spr)

then

begin

writeln( f1, m.town, m.tel, m.d, m.m,

m.min, m.pr);

writeln( f, m.town, m.tel, m.d, m.m,

m.min, m.pr):

end;

end;

close( f1); close( f2);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]