Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 09.12.2020, 20:42   #1 (permalink)
margo_boooom
Новичок
 
Регистрация: 09.12.2020
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Post Какие из рейсов на каждом маршруте надо исключить из расписания, чтобы маршруты стали

Помогите пожалуйста решить задачу на двумерные массивы, используя процедуры или функции, уже всю голову сломала

Задание:
Для каждого из пяти автобусных маршрутов известно количество проданных билетов на каждый из семи рейсов. В каждом автобусе K мест. Какие из рейсов на каждом маршруте надо исключить из расписания, чтобы маршруты стали рентабельными. (Маршрут является рентабельным, если общее число проданных на него билетов превосходит 75% от общего числа мест во всех автобусах маршрута).
margo_boooom вне форума   Ответить с цитированием

Старый 09.12.2020, 20:42
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Не исключено, что ваша проблема уже решена в аналогичных топиках

При каждом запуске находит какие-то нежелательные надстройки браузера
Что надо установить, чтобы DVD приогрывало в Windows Media?

Старый 10.12.2020, 16:19   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,760
Сказал(а) спасибо: 339
Поблагодарили 579 раз(а) в 207 сообщениях
Репутация: 112176
По умолчанию

Да... думал — раз, и квас, ан нет: задачка заковыристая. И весьма. Ну вот что получилось. Должен, правда, предупредить, что программа написана, отлажена и оттестрована на DOS Free Pascal, а если у Вас, к примеру, этот грёбаный ABC, который начнёт верещать, то я за это не отвечаю. Впрочем, напишите, разберёмся.
Код:
Const
 K=20; {Количество посадочных мест в автобусе}

Var
 A:Array[1..5,1..7] of Byte; {Число проданных билетов на маршрут, рейс}
 W:Array[1..5,1..7] of Byte; {Номера исключаемых рейсов}
 i,j:Byte;

Function Rent(M1:Byte {Маршрут}):Boolean; {Рентабельность}
var i1,Num_of_R,Num_of_B:Byte;
begin
 Num_of_R:=0; {Количество неотмененных рейсов}
 Num_of_B:=0; {Количество проданных билетов}
 for i1:=1 to 7 do
  if W[M1,i1]=1 then
   begin
    Inc(Num_of_R);
    Inc(Num_of_B,A[M1,i1]);
   end;
 Rent:=(1.0*Num_of_B>0.75*Num_of_R*K);
end;

Function Min_R(M:Byte):Byte; {номер рейса маршрута M с минимальной загрузкой}
var
 Mnt,MnR,q,Rm:Byte;
begin
 Mnt:=K;
 for q:=1 to 7 do
  if (W[M,q]=1) and (A[M,q]<Mnt) then
   begin
    MnR:=q;
    Mnt:=A[M,q];
   end;
 Min_R:=MnR;
end;

Procedure Crash; {Заполнение массива исключаемых рейсов}
var
 m1,r1,t1,i1,j1,Sum:Byte;
begin
 for i1:=1 to 5 do
  if Rent(i1)=FALSE then
   repeat
    W[i1,Min_R(i1)]:=0;
    Sum:=0;
    for j1:=1 to 7 do Inc(Sum,W[i1,j1]);
   until Rent(i1) or (Sum=0);
end;

Begin
 for i:=1 to 5 do
  for j:=1 to 7 do
   W[i,j]:=1;
 for i:=1 to 5 do
  begin
   for j:=1 to 7 do
    repeat
     Write(' Маршрут ',i,' Рейс ',j, ' Продано билетов ');
     Readln(A[i,j]);
     if A[i,j]>K then Writeln(' Число билетов не может превышать ',K,'!');
    until A[i,j]<=K;
   Writeln;
  end;
 Crash;
 Writeln(' Отменяются: ');
 for i:=1 to 5 do
  for j:=1 to 7 do
   if W[i,j]=0 then
    Writeln(' Маршрут ',i,' Рейс ',j);
 Readln;
End.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.