Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Суть вопроса состоит в следующем: я хочу написать рекурсивную процедуру на вход которой будет подаватся какаято переменная (ые), которая должна изменятся в процесе рекурсии. Если в процедуру передавать только значение переменной то там создается копия и в конце роботи программы переменная остается с начальным значением. Поскольку в роботе процедури переменние могут будут разные, то я так понимаю нужно работать через указатели.
Вот тут возникла проблема (ниже приведен упрощенный код процедуры) у меня вышло роботать только с первым элементом масива, никак неполучается роботать с 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,532
Репутация: 1059
По умолчанию

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

то: Баламут

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

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

icq: 2118529
По умолчанию

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

В общем-то 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
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


18:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru