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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 18:59   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Ошибка в setlength(m,x);

Доброе время суток ))
Пожалуйста , подскажите в чём ошибка.
В модуле obhod.pas компилятор выделяет строку-
Код:
 procedure obh(var m: array of  integer; var uk: pelement; uk1:pelement;
 n,s: integer; t:boolean;var  x,y:integer);
implementation
procedure obh(var m: array of  integer; var uk: pelement; uk1:pelement;
 n,s: integer; t:boolean;var  x,y:integer);
var
pn1, pn2: pelement;
begin
  if uk<>nil  then
  if uk^.pr=false then
  begin
    s:=s+uk^.infa;
    if (t=true) and (s<0) then
    begin
      uk^.pr:=true;
      x:=0

    end;
    if (t=false) and (s>0) then
    begin
      uk^.pr:=true;
      x:=0;
    end;
    if (uk^.left<>nil) and (uk^.right<>nil) then
    begin
      pn1:=uk^.left;
      pn2:=uk^.right
    end;
    if (t=true) and (s>0) then
    begin
      x:=x+1;
      setlength(m,x);
      m[x-1]:=uk^.infa;
      if (uk^.left=nil) or ((pn1^.pr:=true) and (pn2^.pr=true))
      then uk^.pr:=true;
      obh( m , uk^.left, uk1,n,s, t,x,y);
      obh( m , uk^.right, uk1,n,s, t,x,y);
    end;
    if (t=false) and (s<0) then
    begin
      x:=x+1;
      setlength(m,x);
      m[x-1]:=uk^.infa;
      if (uk^.left=nil) or ((pn1^.pr:=true) and (pn2^.pr=true))
      then uk^.pr:=true;
      obh( m , uk^.left, uk1,n,s, t,x,y);
      obh( m , uk^.right, uk1,n,s, t,x,y);
    end;
  end;

end;

end.
и пишет -
Цитата:
[Pascal Error] obhod.pas(37): E2008 Incompatible types
это вроде как несоответствие типов, и это при том , что m - это динамический массив, а x - типа integer.
Не могу понять в чём дело. Кто знает - скажите ))
Буду благодарен.
вот код основного модуля , из которого происходит вызов -
Код:
procedure TForm1.Button1Click(Sender: TObject);
var  p1,p,p1kop,p2: pelement;
     n,m ,i,j: integer;
     mv: array of integer;
     a,x,y,xkop,ykop,leftx,lefty,
  rightx,righty,radius,otv:integer;
  f2:textfile;
  b: string;
  t:boolean;
begin
  if radiobutton1.Checked=true then t:=true else t:=false;
  p1:=nil;
  n:=strtoint(edit1.Text);
  m:=0;
  sozdereva (p1,p,n,m );
  leftx:=-30;
  lefty:=60;
  rightx:=50;
  righty:=40;
  radius:=25;
  xkop:=500;
  ykop:=30;
  p1kop:=p1;
  p2:= p1^.left;

  form2.Show;
  x:=form2.Width div 2;
  y:=60;
  a:=50;
  risuemego (a,x,y,xkop,ykop,leftx,lefty,
  rightx,righty,radius, p1, p1kop ) ;
  x:=0;
  y:=0;
  for i := 1 to n-1 do
  j:=2*2;
  b:='f2.txt';
  AssignFile(f2,b);
  rewrite(f2);
  for i:=1  to j do
  begin
    obh( mv , uk^.left, uk1,n,s, t,x,y);
    if s=0 then 
    begin
      for I := 0 to x-1 do
       write(f2, mv[i]);
       write(f2, ' ');
    end;
    write(#13#10); 
    x:=0;
    setlength(mv,x);
    uk:=uk1;
  end;
  CLOSEFILE (f2);
  


end;

end.
прикрепляю архив с программой
Вложения
Тип файла: zip 7-3.zip (72.1 Кб, 9 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 27.06.2010, 19:58   #2
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Не пойму в чём дело. Помогите.
------------------------------------------
если написать так -
Код:
setlength(m,2)
компилятор всё равно говорит, что такие типы недопустимы.
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 27.06.2010 в 20:00.
vedro-compota вне форума Ответить с цитированием
Старый 27.06.2010, 20:22   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Объявите новый тип
Код:
  TA = array of  integer;
и замените все array of integer в объявлении переменных на TA.
Я уже для себя давно решил не пользоваться объявлением типа переменной как массива в разделе VAR и при описании параметров функции. Виг поймешь где какой тип делфя использует. Переменные одного и того же типа array of integer в разных процедурах и модулях для нее это переменные разных типов. Лучше явно указать, что это один и тот же тип и четко его единажды определить.

Но проект все равно не откомпелимуется. Там столько еще косяков:
- необъявленые переменные
- ошибка типа
Код:
  for i:=0 to с1 do
    for i := 0 to с2 do
- банальные
Код:
    if b := True then
и вообще...

Надеюсь это не ваше творение
Sibedir вне форума Ответить с цитированием
Старый 28.06.2010, 20:12   #4
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Sibedir, спасибо огромное !)))) если б не вы - я бы ничего вчера не решил )) это моё детище)) ошибок, и вправду там очень много было........ но теперь всё исправлено. Один мой знакомый сказал по поводу этой проблемы , что он сталкивался с этим и про какие-то оверлоды (overloads) но так как у него не особо с русским - я не стал его мучать ))
Ещё раз спасибо. Благодарю, что не прошли мимо ужасного программиста ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 28.06.2010 в 20:26.
vedro-compota вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SetLength 16*16 Alex Cones Общие вопросы Delphi 13 23.03.2010 15:57
setlength Smerch66 Общие вопросы Delphi 8 22.03.2010 19:32
Несколько параметров в SetLength Alex Cones Общие вопросы Delphi 9 21.03.2010 14:00
SetLength никогда не стирает старые элементы массива? TwiX Общие вопросы Delphi 6 20.03.2010 02:35
Вкаких случаях может быть полезной процедура SetLength Ainur Помощь студентам 2 22.05.2009 12:01