Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal]Исправление кода 
V
    Опции темы
Tony_Bil
Дата 9.3.2008, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



Помогите исправить код программы, чтобы она запускалась
Код

program chief;
const MAXN=5000;
      INFTY=$7FFFFFFF;

type
  Node = record
  a,b,orig:integer;
  end;
  List = array[1..MAXN] of Node;

var N,i,time_passed,people_passed,minb,i_minb:integer;

    heap_end,unheaped_start:integer;

    Data: List;
    out_order:array[0..MAXN*2] of integer;
    found_0,found_1:boolean;

    hh,mm,ss,cc:word;

procedure SortByLeft(var A: List; N: integer);

procedure Sort(l, r: integer);
var
  i, j: integer;
  x, y: Node;
begin
  i := l; j := r;
  x := a[(l+r) DIV 2];
  repeat
    while a[i].a < x.a do i := i + 1;
    while x.a < a[j].a do j := j - 1;
    if i <= j then
    begin
      y := a[i]; a[i] := a[j]; a[j] := y;
      i := i + 1; j := j - 1;
    end;
  until i > j;
  if l < j then Sort(l, j);
  if i < r then Sort(i, r);
end;

begin {QuickSort};
  Sort(1,N);
end;

procedure Heapify_from_end(var Data:List; last:integer);
var tmp:Node;
Begin
  while (last>1) and (Data[last div 2].b > Data[last].b) do begin
    tmp := Data[last div 2];
    Data[last div 2] := Data[last];
    Data[last] := tmp;
    last := last div 2;
  end
End;

procedure Heapify_from_root(var Data:List; size:integer);
var tmp:Node;
    i,i_min:integer;
Begin
  i:=1;
  while i*2<=size do begin
    if (2*i+1<=size) and (Data[2*i+1].b < Data[2*i].b) then
      i_min:=2*i+1
    else
      i_min:=2*i;
    if Data[i].b<Data[i_min].b then
      break
    else begin
      tmp:=Data[i];
      Data[i]:=Data[i_min];
      Data[i_min]:=tmp;
      i:=i_min;
    end
  end
End;

BEGIN

  read(N);
  for i:=1 to N do begin
    read(Data[i].a,Data[i].b);
    Data[i].orig:=i;
  end;

  SortByLeft(Data,N);

  time_passed:=0;
  people_passed:=0;
  heap_end:=0;
  unheaped_start:=1;
  found_0:=false;
  found_1:=false;


  repeat
    while (unheaped_start<=N) and (Data[unheaped_start].a<=time_passed) do begin
      inc(heap_end);
      Data[heap_end]:=Data[unheaped_start];
      Heapify_from_end(Data,heap_end);
      inc(unheaped_start);
    end;
    if heap_end=0 then
      minb:=INFTY
    else begin
      minb:=Data[1].b;
      i_minb:=Data[1].orig;
      Data[1]:=Data[heap_end];
      dec(heap_end);
      Heapify_from_root(Data,heap_end);
    end;
    if minb<time_passed then
      found_0:=true
    else
      if minb=INFTY then
        out_order[time_passed]:=-1
      else
        {means INFTY>minb>=time_passed then} begin
          inc(people_passed);
          out_order[time_passed]:=i_minb;
        end;
    inc(time_passed);
  until found_0 or (people_passed=N);

  if found_0
    then write(0)
    else begin
           write(1);
           for i:=0 to time_passed-1 do write(' ',out_order[i])
         end;
  writeln;

END.


PM MAIL   Вверх
eskaflone
  Дата 10.3.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 5.11.2005

Репутация: 2
Всего: 3



Запустил её во freepascal 2.0.2 - прекрасно запускается, считывает вводимые данные, и всегда выдаёт 0!

Достаточный ответ на вопрос, или таки подскажешь что в ней не работает?
PM MAIL   Вверх
Tony_Bil
Дата 10.3.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.