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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2014, 07:44   #21
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Error: Incompatible type for arg no. 1: Got "<address of functio
n(Pointer,Pointer):SmallInt;Registe r>", expected "<procedure variable type of fu
nction(Pointer,Pointer):LongInt;Reg ister>"
Poma][a вне форума Ответить с цитированием
Старый 03.06.2014, 08:33   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Poma][a, твой код нормально сортирует в Д7

Попробуй
Код:
function Compare(a, b : Pointer) : Longint;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.06.2014 в 08:36.
Аватар вне форума Ответить с цитированием
Старый 03.06.2014, 10:42   #23
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Poma][a
Наверное тебе придется описывать процедурный тип, или подставить туда анонимную функцию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2014, 11:27   #24
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А куда мой пост пропал?
Ладно..
Цитата:
Poma][a, твой код нормально сортирует в Д7
Ага.. с fpc -Mdelphi всё работает..

Цитата:
function Compare(a, b : Pointer) : Longint;
Снова всё работает..
А почему?

Цитата:
Наверное тебе придется описывать процедурный тип, или подставить туда анонимную функцию
Код:
uses Classes, Math;
type
   funct = procedure(a, b : Pointer);

function Compare(a, b : Pointer) : Integer;
begin
   Compare := Sign(PInteger(a)^-PInteger(b)^)
end;

var
   n, i, t : Integer;
   p : PInteger;
   f : TList;
   a, b : Pointer;
   pr : funct;
begin
   ReadLn(n);
   f := TList.Create;
   pr := Compare;
   for i := 1 to n do begin
      Read(t);
      New(p);
      P^ := t;
      t := f.Add(p)
   end;

   f.Sort(@pr)   
end.
Так?

Огромное Вам спасибо!
Poma][a вне форума Ответить с цитированием
Старый 03.06.2014, 12:34   #25
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А почему?
Теперь уже забей, раз работает )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2014, 12:49   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
А почему?
Ромаха, а у тебя FPC? Там видимо и должно быть Longint, сообщение об ошибке к этому подталкивает. А почему с процедурным типом работает не догоняю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.06.2014, 12:54   #27
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Ромаха, а у тебя FPC?
Ага..
Цитата:
Там видимо и должно быть Longint, сообщение об ошибке к этому подталкивает.
Точно..

Спасибо!
Poma][a вне форума Ответить с цитированием
Старый 04.06.2014, 12:03   #28
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А можно еще вопрос?
Есть задача тыц
Решил я её кучей..
Но меня мучает вопрос, можно ли решить её списками..

Этот код проходит до 21 теста и там виснет по времени.. Оно и понятно..
Код:
uses Classes, Math;
  
function Compare(a, b : Pointer) : LongInt;
begin
    Compare := Sign(PInteger(a)^-PInteger(b)^)
end;
  
var
    n, i, t : Integer;
    p, q : PInteger;
    f : TList;
    res : Real;
  
begin
    Reset(input, 'input.txt');
    Assign(output, 'output.txt');
     
    ReadLn(n);
    f := TList.Create;
    res := 0;
    for i := 1 to n do begin
        Read(t);
        New(p);
        P^ := t;
        t := f.Add(p)
    end;
  
    f.Sort(@Compare);
  
    while f.Count > 1 do begin
        p := f.Items[0];
        q := f.Items[1];
        f.Delete(0); f.Delete(0);
        t := PInteger(p)^+PInteger(q)^; res := res + 0.05*t;
        FreeMem(p); FreeMem(q);
        New(p);
        p^ := t;
        t := f.Add(p);
        f.Sort(@Compare)
    end;
  
    f.Clear;
    f.Free;
    WriteLn(res : 0 : 2)
end.
Этот код валит 7-ой тест.. Wrong Answer..
Почему я понять не могу.. Прошу хелпа..
Код:
uses Classes, Math;
  
function Compare(a, b : Pointer) : LongInt;
begin
    Compare := Sign(PInteger(a)^-PInteger(b)^)
end;
  
var
    n, i, t, l, r, m : Integer;
    p, q : PInteger;
    f : TList;
    res : Real;
  
begin
    Reset(input, 'input.txt');
    Assign(output, 'output.txt');
 
    ReadLn(n);
    f := TList.Create;
    res := 0;
    for i := 1 to n do begin
        Read(t);
        New(p);
        P^ := t;
        t := f.Add(p)
    end;
  
    f.Sort(@Compare);
  
    while f.Count >= 2 do begin
        p := f.Items[0];
        q := f.Items[1];
        f.Delete(0); f.Delete(0);
        t := PInteger(p)^+PInteger(q)^;
        FreeMem(p); FreeMem(q);
        New(p);
        p^ := t;
        res := res + 0.05*t;
        //WriteLn(res : 0 : 2, ' ', 0.05*t : 0 : 2);
         
        if f.Count = 0 then Break;
        l := 0; r := f.Count-1;
        while l < r do begin
            m := l+(r-l) div 2;
            if t > PInteger(f.Items[m])^ then l := m+1
            else r := m
        end;
 
        f.Insert(l+1, p)
    end;
  
    f.Clear;
    f.Free;
    WriteLn(res : 0 : 2)
end.
Poma][a вне форума Ответить с цитированием
Старый 04.06.2014, 12:42   #29
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Фуххх. Опять этот дурацкий АЦэМэПэ... Не надоело ли еще моск засирать бяками?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2014, 12:57   #30
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ромаха, не правильно вставку делаешь. Вставь в List 3 и 5, вполне достаточно. И добавь в список:
1: результат = 3,1,5
4: результат = 3,5,4
7: результат = 3,5,7 - тут Ok
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по БД Rost93 PHP 9 28.06.2011 22:18
Вопросы по С++ Fantazerishka Общие вопросы C/C++ 2 19.05.2010 06:52
Вопросы по if, else? molodoyy Помощь студентам 5 21.03.2010 15:34