Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Работа с указателями   Найти похожие ветки 

 
Ozone ©   (2003-09-08 10:17) [0]

Есть такое обьявление типов:
type
p = ^byte;
pP = ^p;
var
Matrix: pP;
begin
{ ??? }
end;
Стоит следующая задача - создать и распечатать подобие матрицы в которой кол-во строк задается random"ом (внутрипрограммно) и длина строк также неизвестна заранее.


 
Рамиль ©   (2003-09-08 10:23) [1]

А что значит эта конструкция?
> p = ^byte;
> pP = ^p;


 
[lamer]Barmaglot ©   (2003-09-08 10:27) [2]

Что сложного?
Получаешь число (RND), GetMem"ом выделяешь память под строку, в отдельном массиве сохраняем указатель на полученную строку. После чего оперируем этим указателем.


 
Ozone ©   (2003-09-08 10:30) [3]

TO [lamer]Barmaglot:

Если тебе не сложно, то напиши пожалуйста примерчик всего этого. Просто уже мозги вскипели, но "доехать" никак не могу.

Буду очень-очень признателен.


 
Nikolay M. ©   (2003-09-08 10:30) [4]


> p = ^byte;

это тоже самое, что p = PByte;

Ну и что? Ну, объявил указатель на указатель, в плюсах это - обычное дело. Инициализируй теперь память, заноси туда значения, распечатывай...

ПС
Что-то рано. В сентябре уже начали к лабораторным "готовиться"...


 
[lamer]Barmaglot ©   (2003-09-08 10:32) [5]

то Ozone
Извини сейчас у меня времени нет, если подождешь гдето до обеда, то может быть...


 
Ozone ©   (2003-09-08 10:37) [6]

TO Nikolay M.:

Может пример приведешь или ссылочку на литературу дашь.


 
Palladin ©   (2003-09-08 10:57) [7]


> Ozone © (08.09.03 10:37) [6]

Ты в интернете информацию искать умеешь вообще?
http://www.yandex.ru/yandsearch?rpt=rad&text=%F0%E0%E1%EE%F2%E0+%F1+%F3%EA%E0%E7%E0%F2%E5%EB%FF%EC%E8+pascal

пробелы только удали которые тут вставлены


 
Digitman ©   (2003-09-08 11:02) [8]

в огороде бузина, в Киеве дядька


 
Рамиль ©   (2003-09-08 11:14) [9]

Каким образом здесь массив можно то сделать?
Тогда уж надо:
PItem = ^TItem
TItem = record
P: PItem;
Value: PByte;
end;
PRow = ^TRow
P: PRow;
Row: PItem;
end;
Так, по крайней мере в институте учили...


 
Romkin ©   (2003-09-08 11:18) [10]

Ага, однонаправленным спискам учили :)
2[lamer]Barmaglot а зачем тебе указатели? Просто открытый массив и спользовать SetLEngth не подходит?


 
Ozone ©   (2003-09-08 11:34) [11]

TO Рамиль:
Хреново Вас в институте учили.


 
Ozone ©   (2003-09-08 11:36) [12]

MASTER"a будьте добры, приведите пример.


 
Morfein   (2003-09-08 11:44) [13]

какой пример? описываешь тип на основе array of string (a.k.a. динамический массив динамический строк) и работаешь с ним через SetLength.


 
[lamer]Barmaglot ©   (2003-09-08 15:03) [14]

Если для лабораторной, то держи код (все таки обещал...)

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

Function GetBuffer(const len: integer): pointer;
begin
GetMem(result, len+1);
PByte(result)^:=len;
end;

Function FreeBuffer(const p: pointer): boolean;
begin
FreeMem(p, PByte(p)^);
result:=true;
end;

Procedure FillBufferOfChar(const p: Pointer);
var
k: integer;
pp: Pointer;
begin
pp:=p;
for k:=1 to PByte(p)^ do
begin
inc(PByte(pp));
PByte(pp)^:=random(25)+65;
end;
end;

Function GetBufferString(const p: Pointer): string;
var
k: integer;
pp: pointer;
begin
pp:=p;
for k:=1 to PByte(p)^ do
begin
inc(PByte(pp));
Result:=Result+Char(PByte(pp)^);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
const
p: pointer=nil;
var
s: string;
a: Array of Pointer;
k: integer;
begin
randomize;
a:=nil;
For k:=1 to random(10) do
begin
SetLength(a, length(a)+1);

p:=GetBuffer(Random(10));
FillBufferOfChar(p);
s:=GetBufferString(p);
listbox1.Items.Add(s);
s:="";

a[k-1]:=p;
end;

For k:=1 to length(a) do
Freebuffer(a[k-1]);

end;

end.


Если для личного испльзования, то действительно лучше динамический массив.



Страницы: 1 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
3-58587
Rat
2003-08-26 17:00
2003.09.18
При выполнении запроса UPDATE данные в таблице не обновляются


1-58746
SergeY_X
2003-09-07 01:48
2003.09.18
CAB - SFX


7-58934
aleks_tes
2003-07-04 18:52
2003.09.18
отправка факса


1-58650
vvz
2003-09-05 06:17
2003.09.18
Распространение приложений


3-58526
Akni
2003-08-28 14:22
2003.09.18
Объединение полей в запросе