Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
ВнизРабота с указателями Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c