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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2012, 13:08   #1
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию Указатели.Поиск элементов в списке

есть процедура поиска элемента в списке,но когда я ее вписываю в программу,компилирую,курсор становится в место которое я выделил в тексте и пишет Operand types don't match operator.Как я понимаю,что-то не так с переменной n.Что тут можно придумать?

Код:
function Seach(n:tdata;var head,tail:ukazatel):boolean;
var
   p:ukazatel;
   found:boolean;
begin
     p:=head;
     found:=false;
     while (p<>nil) and (not found) do
     begin
          if p^.data=n вот тут  then
          found:=true
          else
          p:=p^.next;
     end;
     seach:=found;
end;

Последний раз редактировалось misery24-7; 17.06.2012 в 13:11.
misery24-7 вне форума Ответить с цитированием
Старый 17.06.2012, 13:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Полный код в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2012, 13:33   #3
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

Код:
unit example;
Interface
uses crt;
type
    Tdata=record
    name:string;
    strana:string;
    age:integer;
    end;
       ukazatel=^Tlist;
       Tlist=record
       data:Tdata;
       Next:ukazatel;
       end;
var
   head:ukazatel;
   tail:ukazatel;
   p:ukazatel;
   procedure InitList;
   procedure LookList(head,tail:ukazatel);
   procedure AddList(N:tdata;var head,tail:ukazatel);
   function Seach(n:tdata;var head,tail:ukazatel):boolean;
Implementation

function Seach(n:tdata;var head,tail:ukazatel):boolean;
var
   p:ukazatel;
   found:boolean;
begin
     p:=head;
     found:=false;
     while (p<>nil) and (not found) do
     begin
          if p^.data=n then
          found:=true
          else
          p:=p^.next;
     end;
     seach:=found;
end;



procedure InitList;
var
head,tail:ukazatel;
begin
Tail:=nil;
Head:=nil;
end;

procedure LookList(head,tail:ukazatel);
var
   p:ukazatel;
begin
     p:=head;
     writeln('-Prosmotr spiska-');
     writeln('---------------------');
     writeln('| Imya  |Strana| God|');
     while p<>nil do
     begin
          writeln('---------------------');
          writeln('|',p^.data.name,'|',p^.data.strana,'|',p^.data.age,'|');
          p:=p^.next;
     end;
     writeln('---------------------');
     repeat until keypressed;
end;

procedure AddList(n:tdata;var head,tail:ukazatel);
   var p:ukazatel;
begin
     New(p);
     p^.data:=n;
     p^.next:=nil;
     if tail=nil then
     begin
          tail:=p;
          head:=p;
     end
     else
     begin
          tail^.next:=p;
          tail:=p;
     end;
end;


end.
misery24-7 вне форума Ответить с цитированием
Старый 17.06.2012, 15:14   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
if p^.data=n then
где p^.data и n типа tdata.
В данном случае нет правила по которому можно определить равны ли записи или нет. То есть нужна перегрузка (не всякий паскаль умеет). Но можно просто заменить на
Код:
if (p^.data.name=n.name) and (p^.data.strana=n.strana) and (p^.data.age=n.age) then
eoln вне форума Ответить с цитированием
Старый 17.06.2012, 15:43   #5
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

eoln,спасибо,получилось теперь)
а что значит "не всякий паскаль умеет"?)
misery24-7 вне форума Ответить с цитированием
Старый 17.06.2012, 15:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да, пожалуй я бы тоже таке посоветовал. И даже посоветовал бы сию проверку отдельно в функцию вынести.
Цитата:
а что значит "не всякий паскаль умеет"?)
Это значит что не всякая версия компилятора вот так просто сумеет сравнить структуры...
Хотя должно сравниваться...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2012, 14:26   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Это значит что не всякая версия компилятора вот так просто сумеет сравнить структуры...
Хотя должно сравниваться...
да ну! с чего это вдруг она должна?!

TurboDelphi (aka Delphi 2006) даже массивы не умеет сравнивать
Код:
var
  a, b : array[1..10] of integer;
  i : integer;
begin
  for i:=1 to 10 do begin
    a[i] := i;
    b[i] := i;
  end;

  if a=b then ShowMessage('Массивы равны.')
     else ShowMessage('Массивы не равны!');
[Pascal Error] Unit1.pas(xx): E2015 Operator not applicable to this operand type

а вы про сравнение структур говорите...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск в списке sergo2705 Microsoft Office Access 1 16.08.2011 16:20
Перестановка элементов в списке Adya Помощь студентам 0 26.08.2009 15:11
поиск в линейном списке Yura_n Общие вопросы C/C++ 9 23.07.2009 01:42
Обмен местами 2х элементов в односвязном списке. amdbodia Общие вопросы C/C++ 4 31.05.2009 23:26
поиск IP в списке TaTT DoGG PHP 6 13.08.2008 18:53