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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2008, 14:16   #1
programer_tang
 
Регистрация: 27.08.2008
Сообщений: 6
По умолчанию Нужна помощь с передачей даных в процедуру

Суть вопроса состоит в следующем: я хочу написать рекурсивную процедуру на вход которой будет подаватся какаято переменная (ые), которая должна изменятся в процесе рекурсии. Если в процедуру передавать только значение переменной то там создается копия и в конце роботи программы переменная остается с начальным значением. Поскольку в роботе процедури переменние могут будут разные, то я так понимаю нужно работать через указатели.
Вот тут возникла проблема (ниже приведен упрощенный код процедуры) у меня вышло роботать только с первым элементом масива, никак неполучается роботать с 2..N, подскажите как это сделать. Или подскажите другое решение этой ситуации.

Зарание благодарен,

Код:
var
  Form1: TForm1;
  s : array [1..10] of TPoint;
  P1 : ^TPoint;
  procedure test(d: pointer; counter:integer);  forward;

procedure test(d: pointer; counter:integer);
begin
if counter >- 1 then
begin
  dec(counter);
  Tpoint(d^).X := counter;
  Tpoint(d^).Y := counter;
  test(d,counter);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
P1 :=@s[1];
test(P1,5);
showmessage(inttostr(s[1].X));
end;

Последний раз редактировалось Stilet; 27.08.2008 в 15:00.
programer_tang вне форума Ответить с цитированием
Старый 27.08.2008, 14:32   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Может все-таки стоит передать массив в процедуру как var-параметр? Т.е. procedure test(var d: array of TPoint; counter: integer).
Баламут вне форума Ответить с цитированием
Старый 27.08.2008, 14:59   #3
programer_tang
 
Регистрация: 27.08.2008
Сообщений: 6
По умолчанию

то: Баламут

Спсб помогло.

Но для общего развития всеже хотелось бы узнать как работать с масивами через указатели...
programer_tang вне форума Ответить с цитированием
Старый 27.08.2008, 21:36   #4
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Зачем, если есть динамические массивы?
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 28.08.2008, 01:44   #5
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

В общем-то var-параметр по сути своей и есть указатель, но если очень уж хочется в явном виде... Смотри, примерно так

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type TMyArray = array[0..0] of TPoint;
PMyArray = ^TMyArray;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    s: PMyArray;
    procedure test(d: pointer; counter: integer);
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
GetMem(s, SizeOf(TPoint) * 3);
test(s, 3);
end;

procedure TForm1.test(d: pointer; counter: integer);
var
  i: integer;
begin
for i := 0 to 2 do
begin
  PMyArray(s)^[i].X := i;
end;

for i := 0 to 2 do
begin
  Memo1.Lines.Add(IntToStr(PMyArray(s)^[i].X));
end;
end;

end.
Баламут вне форума Ответить с цитированием
Старый 28.08.2008, 10:14   #6
programer_tang
 
Регистрация: 27.08.2008
Сообщений: 6
По умолчанию

Понятно, большое спасибо за помощь.
programer_tang вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База даных Access xakkkkker БД в Delphi 6 31.03.2008 16:47
Проблема с передачей куки arwm Работа с сетью в Delphi 7 28.12.2007 23:44
Не работает база даных Snake_ua БД в Delphi 9 08.12.2007 07:42
Праблеми с дабавление даных. marcho10 БД в Delphi 2 10.07.2007 13:10
Нужна помощь! onlyredblue Паскаль, Turbo Pascal, PascalABC.NET 9 13.01.2007 17:59