Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2012, 16:06   #1
ROCKY111
 
Регистрация: 24.09.2012
Сообщений: 4
По умолчанию Изменить задачу (из линейной очереди в кольцевую)

1) Из линейной очереди переделать в кольцевую.
2) Добавить предельное время нахождения в очереди.. Как только предельное время заканчивается клиент покидает очередь.
3) Убрать момент прихода.

Задача: Дан список клиентов, желающих посетить банк в некоторый период времени. Для каждого клиента заданы имя, момент прихода и время обслуживания. В банке работает один кассир. Если в момент прихода очередного клиента кассир занят, клиент становится в очередь. Обслуженный кассиром клиент покидает банк. Требуется промоделировать работу кассира, то есть последовательно выдать информацию о приходах и уходах клиентов из банка с указанием состояния очереди. Необходимо также найти среднее время обслуживания клиента.
Код:
Program Ochered;
  Uses Crt;
  Type
    klient=record
                  Name: string;    { имя }
                  M: integer;        { момент прихода }
                  T: integer         { время обслуживания }
               end;
  Var
    H: real;  { среднее время обслуживания клиента }
    I, J, R, S, P, N, L: integer;
    Och: array [1..100] of integer; { очередь }
    Bego, Endo: integer;             { начало и конец очереди }
    Kli: array [1..100] of Klient;
    { список клиентов по возрастанию моментов прихода }
  Procedure Razgruz;
    Begin
      J:=Och[Bego]; { номер клиента из начала очереди }
      S:=S+R-Kli[J].M;
      { учет времени его нахождения в очереди }
      Write('Время: ', R, ', обслужен клиент ', Kli[J].Name);
      Endo:=Endo-1;               { разгрузка очереди }
      For L:=Bego to Endo do
        Och[L]:=Och[L+1];
      if Endo>0 then                { очередь не пуста }
        begin
          WriteLn(', следующий клиент ', Kli[J+1].Name);
          R:=R+Kli[J+1].T
          { следующий момент разгрузки }
        end
      else WriteLn(', очередь пуста !');
      ReadLn                     { пауза }
    End;
  Begin
    ClrScr;  { очистка экрана }
    For N:=1 to 100 do
      begin
        with Kli[N] do
          Begin
            WriteLn('Введите информацию об очередном клиенте:');
            Write('Введите имя (к-признак конца): ');
            ReadLn(Name);
            if Name='к' then Break; { конец списка клиентов }
            Write('Укажите момент прихода: ');
            ReadLn(M);
            Write('Сообщите время обслуживания: ');
            ReadLn(T)
          end
      end;
    WriteLn;
    WriteLn('   ПРОТОКОЛ РАБОТА БАНКА');
    N:=N-1;         { число клиентов }
    S:=0;           { для общего времени обслуживания }
    Bego:=1;        { начало очереди всегда здесь ! }
    Endo:=0;        { критерий пустой очереди }
    R:= Kli[1].M+ Kli[1].T;    { ближайший момент разгрузки очереди }
    For I:=1 to N do
      begin
        P:=Kli[I].M;   { момент прихода следующего клиента }
        While (P>=R) and (Endo>0)  do
          Razgruz;
        { очередь сокращается до прихода следующего клиента }
        { и больше не разгружается                          }
        if Endo=0 then R:=Kli[I].M+Kli[I].T;
        { следующий момент разгрузки }
        Endo:=Endo+1; { постановка в очередь i-го клиента }
        Och[Endo]:=I;
        Write('Время: ', Kli[I].M,', прибыл клиент ', Kli[I].Name);
        if Endo=1 then
          WriteLn(', очереди нет, ура !')
        else
          WriteLn(', встал в очередь за клиентом ',
                   Kli[Och[Endo-1]].Name);
        ReadLn       { пауза }
      end;
      While Endo>0  do
        Razgruz;
      H:=S/N;
      WriteLn('Обслуживание закончено, перерыв на обед !');
      WriteLn('Среднее время обслуживания клиента: ',h:5:2);
      ReadLn           { пауза }
   End.

Последний раз редактировалось Stilet; 24.09.2012 в 16:56.
ROCKY111 вне форума Ответить с цитированием
Старый 25.09.2012, 08:57   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

ROCKY111, ответь, плз - ты этот код сам писал?
Если да, то я готов тебе помочь советами (там надо переделывать ВСЕ, то есть писать заново). Если нет - тогда я пас, потому что переделывать чей-то идиотский код, чтоб ты спихнул свое задание - ищи дураков..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 25.09.2012, 11:03   #3
ROCKY111
 
Регистрация: 24.09.2012
Сообщений: 4
По умолчанию

нет...........
ROCKY111 вне форума Ответить с цитированием
Старый 25.09.2012, 12:11   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Найди (но лучше - напиши) реализацию кольцевого буфера (оно же FIFO, оно же очередь), и от нее уже пляши. Сама такая реализация - работы на полчаса, если разберешься. К ней уже прикручивать модель обслуживания клиентов в банке.
Если честно, мне несколько странно вот это добавление о предельном ожидании в очереди. Оно выглядит не совсем естественным для FIFO. Но если надо - можно его прикрутить, конечно (причем, разными способами, зависит от модели).
Короче, думай - хочешь ты попробовать сам (с нашей помощью) это вытянуть или хочешь пойти в раздел Фриланс и заплатить за готовое решение..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритмы линейной структуры. larisakrasa Помощь студентам 3 31.05.2011 15:01
уравнение линейной алгебры Irisk Помощь студентам 0 24.05.2011 17:17
Необходимо изменить задачу в C++ SL1M_DOGG Помощь студентам 0 20.01.2011 17:57
алгоритм линейной структуры browneyed Паскаль, Turbo Pascal, PascalABC.NET 0 15.12.2010 11:42
Стеки (как изменить задачу?) Anita_i Помощь студентам 3 30.11.2009 19:29