Составить программу, помогающую сообщать сведения о местах на авиарейсы из Москвы в Иркутск на календарный месяц (30 дней). В файле прямого доступа хранится информация о местах на рейс на заданное число в виде матрицы, в которой номер строки – ряд номер столбца – номер места в ряду (всего 25 рядов по 6 мест в ряду). Элемент матрицы может иметь следующие значения: 0 – место свободно, 1 – место продано, 2 – место забронировано. Считать, что в день имеется один рейс. Файлы имеют имена следующего типа: «DAYNN», где NN – число на которое хранится информация. Например: «DAY15» - в этом файле хранятся сведения о местах на рейс отправляющийся 15-го числа. По требованию сообщать следующую информацию:
- о количестве свободных мест - о проданных местах на заданное число - о проданных местах на весь месяц - о брони на весь месяц - о брони на заданное число Смоделировать покупку, бронирование и сдачу авиабилета.
Я в шоке ... Такого еще не было. Блин, даже не знаю с чего начать ...
Требуется посчитать в матрице кол-во элементов равных t. (и некоторые другие действия для других подзадач)
Реализовав это все остальное реализуется просто. вот тебе основа если хочешь... я кое что реализовал тебе лишь добавить немного осталось... весь интерфейс для файловой работы реализован..
uses crt; Type ATable = array[1..25,1..6]of byte; Var {global} f:file of ATable;
Procedure ReadMatr(var A:Atable); var i,j:word; begin For i:=1 to 25 do begin for j:=1 to 6 do begin write('A[',i,j,']= '); readln(A[i,j]) end; clrscr; end end;
Procedure PrintMatr(A:Atable); Var i,j:word; begin For i:=1 to 25 do begin For j:=1 to 6 do write(A[i,j],' '); writeln; end end;
procedure writetable(filename:string; tabl:Atable); begin Assign(f,filename); rewrite(f); write(f,tabl); close(f); end;
procedure ReadTable(filename:string; var tabl:ATable); begin Assign(f,filename); reset(f); read(f,tabl); close(f); end;
Procedure GetCount(nn:byte); var mn,selcase,i,j,s:byte; fn:string; A:ATable; begin repeat clrscr; write('enter day: '); readln(mn); if (mn<1) or (mn>31) then writeln('error!') else begin str(mn,fn); fn:='DAY'+fn; end until (mn>=1) and (mn<=31); readtable(fn,A); s:=0; for i:= 1 to 25 do begin for j:=1 to 6 do begin if a[i,j]=nn then inc(s); end; end; writeln(s); writeln('OK! press any key...'); readkey end;
var mn,selcase,i,j,s:byte; fn:string; A:ATable; begin
repeat clrscr; writeln('1. Enter table'); writeln('2. free seats'); writeln('3. sold seats (day)'); writeln('4. sold seats (month)'); writeln('5. reserved seats (month)'); writeln('6. reserved seats (day)'); writeln('--------------------------------'); writeln('7. purchase of ticket'); writeln('8. reserve ticket'); writeln('9. return ticket'); writeln('exit -> '); selcase:=ord(readkey); if (selcase >=48) and (selcase<=60) then dec(selcase,48); case selcase of 1: begin repeat clrscr; write('enter day: '); readln(mn); if (mn<1) or (mn>31) then writeln('error!') else begin str(mn,fn); fn:='DAY'+fn; end until (mn>=1) and (mn<=31); readmatr(A); writetable(fn,A); writeln('file ',fn,' created! press any key...'); readkey end; 2: begin GetCount(0); end;
3: begin GetCount(1); end; 4: begin
end; 5: begin end; 6: begin GetCount(2); end; 7: begin end; 8: begin end; 9: begin end; end; until selcase=27; end.
реализованные функции протестировал.
Art87
27.11.2005 9:27
Altair Спасибо огромное!!!
Romtek
27.11.2005 13:54
Цитата
о количестве свободных мест
Подсчитать кол-во нулей в матрице.
Цитата
о проданных местах на заданное число
Считать матрицу из файла за данный день и подсчитать кол-во единиц.
Цитата
о проданных местах на весь месяц
Тоже самое, но считав за весь месяц.
Цитата
- о брони на весь месяц - о брони на заданное число
в том же духе. Ну очень сложное задание! Главная проблема - это как считать матрицу из файла или как посчитать кол-во нулей в матрице??
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.