Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с указателями и динамической памятью в Паскале.  (Прочитано 35306 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maliyusha
Гость
« : 10-05-2009 19:43 » 

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

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-05-2009 19:50 » 

И?
Не хватает только примера описания функции
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 11-05-2009 10:17 » 

По-моему ещё не хватает работы с массивом указателей.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
maliyusha
Гость
« Ответ #3 : 11-05-2009 10:47 » 

Беда =(
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 11-05-2009 11:44 » 

а ты табань в сторону учебников...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
maliyusha
Гость
« Ответ #5 : 11-05-2009 18:16 » new

Да там нет ничего путного Ага
Посмотрите,пожалуйста, все правильно? Так должно работать по условию задачи? А то тут с миру по нитке =)
Код:
Uses crt;
type
  XP=^INTEGER;
  VectXP=ARRAY [1..100] of XP;
  PVectXP=^VectXP;

 function Max(A:PVectXP; Size:integer):integer;
  var
   i,r:integer;
   begin
    if Size>0 then
     begin
      r:=A^[1]^;
      for i:=2 to Size do if A^[i]^>r then r:=A^[i]^;
     end
      else r:=0;
     Max:=r;
   end;
var
  n,i: integer;
  Arr: PVectXP;
begin
 clrscr;
  write('Vvedite koli4estvo elementov ot 10 do 100: ');
  read(n);
  GetMem(Arr, sizeof(XP)*n);
  for i:=1 to n do
   begin
    New(Arr^[i]);
    write('vvedite ',i,' 4islo: ');
    read(Arr^[i]^);
   end;
  writeln('maximum =  ',Max(Arr,N));
   readln;
  for i:=1 to n do Dispose(Arr^[i]);
  FreeMem(Arr,sizeof(XP)*n);
   readln;
end.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines