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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2014, 15:00   #1
JAUG
Пользователь
 
Регистрация: 22.11.2009
Сообщений: 12
Восклицание Задача с кольцевым списком

Задается кольцевой список из n элементов (n=const). Удалить элементы,встречающиеся наибольшее число раз.
Написал код:
Код:
Type Pint=^intr;
     intr=record
       a:integer;
       next:Pint;
     end;
Procedure NtCreat(Var Hed:Pint);  //процедура создания элемента списка
Var C,B:Pint;
    a:integer;
begin
  New(C);
  for var i:=1 to 10 do C^.a:=Random(100);
  if hed=nil then
    begin
      hed:=c;
      hed^.next:=Hed;
    end      else
    begin
      b:=hed;
      while b^.next<>hed do
        b:=b^.next;
      c^.next:=Hed;
      b^.next:=c;
    end;
end;
 
Procedure View(Var Hed:Pint);  // процедура просмотра всего списка
Var C,S:Pint;
    i:integer;
begin
  c:=Hed; 
  S:=nil;
    for i:=1 to 10 do
    begin
    Write(C^.a,'  ');
    c:=C^.next; 
    end;
end;
 
Procedure Delete(Var Hed:Pint);  // процедура удаления повторяющихся элементов
Var C,S:Pint;
    i:integer;
    j:integer;
    realmax:^intr;
begin
  c:=Hed;    
  S:=nil;
  realmax:=C;
  for i:=1 to 10 do
  begin
  if C>realmax then realmax:=C;
  C:=C^.next;
  end;
  writeln(reallymax);
end; 

Var Spisok:Pint;
    F:boolean;i:integer;
Begin
  Randomize;
  Spisok:=nil;
  Writeln('Исходный список');
  for i:=1 to 10 do NtCreat(Spisok);
  View(Spisok);
  writeln;
  Delete(Spisok);
end.
Выдает ошибку компиляции в процедуре Delete: Операция > не применима к типу ^intr. Как сравниваются два числа в таком кольцевом списке? И помогите,пожалуйста,дорешить задачу,решить нужно уже сегодня. Спасибо.
Just Another Unnecessary Guy
JAUG вне форума Ответить с цитированием
Старый 17.01.2014, 15:27   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Сравнивать не адреса (указатели), а то, что по ним находится. Потрудитесь прочитать хоть одну главу из книги по паскалю.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 17.01.2014, 17:40   #3
JAUG
Пользователь
 
Регистрация: 22.11.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Сравнивать не адреса (указатели), а то, что по ним находится. Потрудитесь прочитать хоть одну главу из книги по паскалю.
Я ж потому сюда и обращаюсь, потому что не могу понять, и прошу помощи разобраться
Just Another Unnecessary Guy
JAUG вне форума Ответить с цитированием
Старый 17.01.2014, 19:49   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Что вы не можете понять? Открываем ЛЮБУЮ книгу по паскалю. Открываем главу УКАЗАТЕЛИ (или как-то так), ЧИТАЕМ как в паскале получить то, на что указывает указатель (подсказка: надо поставить всего один значок) и ставим этот значок куда надо.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 18.01.2014, 10:21   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как сравниваются два числа в таком кольцевом списке?
Просто знаком "равно". Кстати а почему проход по списку именно так сделано?
Почему цикл FOR?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2014, 16:57   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Что вы не можете понять? Открываем ЛЮБУЮ книгу по паскалю. Открываем главу УКАЗАТЕЛИ (или как-то так), ЧИТАЕМ как в паскале получить то, на что указывает указатель (подсказка: надо поставить всего один значок) и ставим этот значок куда надо.
Товарищ либо не сам писал код, либо просто забуксовал в работе, т.к. если он писал код сам то он использует способы работы с указателями нормально.

Суть проблемы:
Код:
if C>realmax then realmax:=C;
тут сравнение указателей (оно недопустимо в дельфи кроме = и <> )
а надо
Код:
if C^>realmax^ then realmax^:=C^;
а тут сравнение чисел , лежащих по этим указателям.
phomm вне форума Ответить с цитированием
Старый 18.01.2014, 22:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
а надо
Код:
if C^>realmax^ then realmax^:=C^;
а тут сравнение чисел , лежащих по этим указателям.
Извините, коллега, Вы ошибаетесь немного.
Такой код, скорее всего, даже не скомпилируется.
Ибо в указателе ссылка на структуру (==запись, ==record)
а сравнивать нужно числовые значения поля a
тогда уже:
Код:
Var C,S:Pint;
    i:integer;
    j:integer;
    realmax:Pint;
begin
  realmax:=C;
...
  if C^.a > realmax^.a then realmax:=C;
....
но вообще-то, использование цикла от 1 до 10 для прохода по списку в корне дискредитирует саму идёю использования связнного списка - проходить по списку нужно от головы и до конца списка. Цикл for здесь не к месту!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.01.2014, 23:07   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Да, извиняюсь, в заблуждение ввёл Type Pint что сразу ассоциируется с указателем на инт. Ну а тогда крышки не нужны будут, дельфи умеет расчехлять ситуацию, что берётся поле у структуры через указатель на эту структуру.
Ну а про замену цикла на while полностью поддерживаю.
phomm вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции над многочленами, заданными списком свомх коэффициентовОперации над многочленами, заданными списком свомх коэффициентов lelicki_bolicki Общие вопросы по Java, Java SE, Kotlin 1 06.12.2011 22:07
проблема со списком ZET78 Общие вопросы C/C++ 3 02.05.2010 23:11
Задача в паскале, работа со списком. Cartman18 Помощь студентам 1 30.04.2008 12:44