Работа с указателями и динамической памятью в Паскале.

Ответить
maliyusha
Сообщения: 21
Зарегистрирован: 25 дек 2008, 23:21
Контактная информация:

Здравствуйте! Пожалуйста,помогите решить задачу или направить в нужное русло:
Указатели. Имеется массив указателей на целые числа (вектор ХР), заданный следующим образом:

Код: Выделить всё

TYPE
    XP = ^INTEGER;
    VectXP = ARRAY [0..n] of XP;
Разместить в памяти n (от 10 до 100) чисел, на которые будут ссылаться элементы вектора ХР.
1.Написать функцию Мах для нахождения наибольшего из чисел n, на которые ссылаются элементы вектора ХР. Вывести это число.
Пример объявления указателей и использования их в программе:

Код: Выделить всё

TYPE
     PWord = ^WORD;  
     ArrayPWord = ARRAY [0..$03FF] of PWord;
     PArrayPWord = ^ArrayPWord;
VAR
     P : Pointer; {нетипизированный указатель}
     PW : PWord; {указатель на тип Word}
     PAPW : PArrayPWord; {указатель на динамический массив,
                                    хранящий в себе указатели на тип Word}
     W, D : WORD; {переменные типа Word}
BEGIN
     ...
     New (PW); {определяем и помещаем в переменную PW адрес,
                      по которому будет размещено число типа WORD}
     PW^ := 64; {по адресу, полученному выше, размещаем число 64}
     ...
     W := PW^ + D;{в переменную W помещаем сумму числа 64 и переменной D}
     Dispose (PW); {высвобождаем ячейку памяти}
     ...
END.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Заранее спасибо!
Жизнь-игра. Задумана хреново,но графика обалденная!
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

[syntax=Pascal]
type
PInteger = ^Integer;
ArrayPInteger = array[1..100] of PInteger;
PArrayPInteger = ^ArrayPInteger;

function Max(A:PArrayPInteger; Size:integer):integer;
var
i:integer; r:integer;
begin
if Size>0 then begin
r:=A^[1]^;
for i:=2 to Size do if A^^>r then r:=A^^;
end else r:=0;
Max:=r;
end;

var
n,i: integer;
Arr:PArrayPInteger;
begin
write('Введите количество элементов от 10 до 100:'); read(n);
getmem(Arr, sizeof(PInteger)*n);
for i:=1 to n do begin
new(Arr^);
write('введите ',i,'-е число:'); read(Arr^^);
end;

writeln('Максимум = ',Max(Arr,N));

for i:=1 to n do dispose(Arr^);
freemem(Arr,sizeof(PInteger)*n);
readln;
end.
[/syntax]
maliyusha
Сообщения: 21
Зарегистрирован: 25 дек 2008, 23:21
Контактная информация:

Большое спасибо!
Жизнь-игра. Задумана хреново,но графика обалденная!
Ответить