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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 13:26   #1
T.e.m.p.l.a.R
 
Регистрация: 15.06.2011
Сообщений: 5
Смех ошибка incomparable types

Код:
if (not ( lu.y<i<rd.y and lu.x<j<rd.x ))and (ar[i,j]<>GetPixel(GetDC(0),j,i) then
в этой строке ошибка incomparable types

Типы переменных:
Код:
lu,rd:TPoint;
i,j:Integer;
ar:array [0..2000,0..2000] of Longint;
помогите исправить ошибку
T.e.m.p.l.a.R вне форума Ответить с цитированием
Старый 07.07.2011, 13:33   #2
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

Pascal/Delphi не поддерживает двойных сравнений.
У Вас получается ситуация при которой сравнивается boolean и integer (или что там у вас). А это действительно не сравниваемые величины.
Merkator вне форума Ответить с цитированием
Старый 07.07.2011, 13:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Merkator +1

плюс скобки надо ОБЯЗАТЕЛЬНО ставить между логическими операциями:
Код:
if (not ( (lu.y<i) and (i<rd.y) and (lu.x<j) and (j<rd.x) ))
                        and (ar[i,j]<>GetPixel(GetDC(0),j,i)) then

Последний раз редактировалось Serge_Bliznykov; 07.07.2011 в 13:39.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2011, 13:40   #4
T.e.m.p.l.a.R
 
Регистрация: 15.06.2011
Сообщений: 5
По умолчанию

большое спасибо
T.e.m.p.l.a.R вне форума Ответить с цитированием
Старый 22.12.2011, 18:17   #5
hunteee
Новичок
Джуниор
 
Регистрация: 22.12.2011
Сообщений: 5
По умолчанию

Добрый день! Следующая проблема несовместимости типов.

Код:
procedure TForm1.Button1Click(Sender: TObject);


var P,Q,a,b,x,k,y,l,i:integer;
    S,D,M: string;
    
    W:array [1..36] of string;

begin
//записываем алфавит в массив
  W[1]:='À';W[2]:='Á';W[3]:=#13;W[4]:='Ì';W[5]:='Ã';W[6]:='Ò';
  W[7]:='Å';W[8]:='Ð';W[9]:='Ç';W[10]:='È';W[11]:='É';W[12]:='Ê';
  W[13]:='Ë';W[14]:='Â';W[15]:='Í';W[16]:='Î';W[17]:='Ï';W[18]:='Æ';
  W[19]:='Ñ';W[20]:='Ä';W[21]:='Ó';W[22]:='Ô';W[23]:='Õ';W[24]:='Ö';
  W[25]:='×';W[26]:='Ø';W[27]:='-';W[28]:='Ù';W[29]:='Ú';W[30]:='Û';
  W[31]:='Ü';W[32]:=',';W[33]:='Ý';W[34]:='Þ';W[34]:='ß';W[35]:=' ';
  W[36]:='!';

  S := Edit1.Text;
  l := length(S);
  y := exp(x*ln(Q)) mod P;
  a := exp(k*ln(Q)) mod P;
//сопоставляем каждый символ сообщения с алфавитом
  for i := 0 to l  do
  begin
  M := pos(S[i],W);
//рассчитываем b
  b := M - exp(k*ln(y)) mod P;
  D := D + inttostr(b);

  end;

  P := strtoint(Edit2.Text);
  Q := strtoint(Edit3.Text);
  Edit4.Text := inttostr(a);
  Edit5.Text := inttostr(b);

end;
end.
На линии M := pos(S[i],W); выдает ошибку несовместимости типов, т.к. M,S,W это string, а i из for это integer. Что делать?

Последний раз редактировалось hunteee; 22.12.2011 в 19:01.
hunteee вне форума Ответить с цитированием
Старый 22.12.2011, 18:30   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
M := inttostr(pos(S[i],W));
Только проблема не в i, а в том что pos возвращает индекс вхождения подстроки в строку.

и дальше

Код:
b := strtoint(M) - y;
Оформляете код тегом пожалуйста (решетка над окном редактора)

Кстати напишите в коде комментарий, а то я не понял, что и где вы хотите сделать

+
Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
pos() возвращает значение integer а ты присваешь его переменной типа String это раз
(S[i],W) W должно быть string а у тебя array [1..36] of string тоже не проканает
О точно ещё и W.

Последний раз редактировалось vovk; 22.12.2011 в 18:40.
vovk вне форума Ответить с цитированием
Старый 22.12.2011, 18:31   #7
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

pos() возвращает значение integer а ты присваешь его переменной типа String это раз
(S[i],W) W должно быть string а у тебя array [1..36] of string тоже не проканает
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 22.12.2011, 18:46   #8
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Может W надо обьявить как
Код:
w:array of char [1..36]
?
vovk вне форума Ответить с цитированием
Старый 22.12.2011, 18:54   #9
hunteee
Новичок
Джуниор
 
Регистрация: 22.12.2011
Сообщений: 5
По умолчанию

Программа представляет собой реализацию алгоритма шифрования Эль-Гамаля. Суть заключается в том, что в Edit1.Text мы должны вводить сообщение, а в другие эдиты некоторые значения. Все дано по условию. Существует алфавит, где каждая буква алфавита имеет свое значение. Программа должна проверять символы сообщения введенные и сопоставлять их со значениями в объявленном алфавите, затем закладываться в некоторые формулы алгоритма и полученное сообщение должно выводиться в другой эдит.
hunteee вне форума Ответить с цитированием
Старый 22.12.2011, 19:42   #10
hunteee
Новичок
Джуниор
 
Регистрация: 22.12.2011
Сообщений: 5
По умолчанию

Немного изменил код. Появилась ошибка в функции. [Error] Unit1.pas(47): Incompatible types: 'Integer' and 'Extended'
Код:
var
  Form1: TForm1;
  var P,Q,a,b,x,k,y,l,M:integer;
    S,D: string;
    i:byte;
    W:array [1..36] of char;

implementation

{$R *.dfm}
Function exp (M,x,k,P:integer):integer;
begin
 b := M - exp(k*ln(y)) mod P;
 end;
procedure TForm1.Button1Click(Sender: TObject);

begin
  W[1]:='À';W[2]:='Á';W[3]:=#13;W[4]:='Ì';W[5]:='Ã';W[6]:='Ò';
  W[7]:='Å';W[8]:='Ð';W[9]:='Ç';W[10]:='È';W[11]:='É';W[12]:='Ê';
  W[13]:='Ë';W[14]:='Â';W[15]:='Í';W[16]:='Î';W[17]:='Ï';W[18]:='Æ';
  W[19]:='Ñ';W[20]:='Ä';W[21]:='Ó';W[22]:='Ô';W[23]:='Õ';W[24]:='Ö';
  W[25]:='×';W[26]:='Ø';W[27]:='-';W[28]:='Ù';W[29]:='Ú';W[30]:='Û';
  W[31]:='Ü';W[32]:=',';W[33]:='Ý';W[34]:='Þ';W[34]:='ß';W[35]:=' ';
  W[36]:='!';
  S := Edit1.Text;
  l := length(S);
  y := exp(x*ln(Q)) mod P;
  a := exp(k*ln(Q)) mod P;
  for i := 0 to l  do
  begin
  M := pos(S[i],W);
  b:= exp(M,x,k,P:integer);

  D := D + inttostr(b);

  end;

  P := strtoint(Edit2.Text);
  Q := strtoint(Edit3.Text);
  Edit4.Text := inttostr(a);
  Edit5.Text := inttostr(b);

end;
end.
hunteee вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка - [Error] GraphUnit.pas(104): Types of actual and formal var parameters must be identical Ash Общие вопросы Delphi 8 30.10.2012 21:01
Incompatible types MetR Помощь студентам 4 22.12.2011 18:31
incompatible types nupinh Общие вопросы Delphi 1 21.05.2011 23:18
Ошибка компилятора "Comparing signed and unsigned types" Prisioner Общие вопросы Delphi 2 15.11.2010 02:46
Ошибка [Error] UPER.pas(57): Incompatible types: 'Integer' and 'Pointer' Pirotexnik Общие вопросы Delphi 4 27.03.2009 11:04