Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
14-58839
Jeer
2003-09-01 10:25
2003.09.18
Всех учащихся с новым учебным годом


6-58824
nik_sch
2003-07-18 15:58
2003.09.18
подсоединиться к серверу приложений по TCP/IP


14-58896
KaPaT
2003-08-28 16:32
2003.09.18
Бортовые компьютеры автомобилей (BMW, Mercedes и т.д.)


3-58571
Dynamit
2003-08-27 11:48
2003.09.18
Очень быстро заканчивается память!!!!


9-58501
Juster~
2003-03-05 18:45
2003.09.18
Рендеринг планет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский