Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 16:58   #1
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
Сообщение Стек. Освобождение памяти

Здравствуйте. Помогите пожалуйста розобратся с задачей:
Задан одномерный массив целых чисел, который инициализировать как константу. Записать массив в стек, выбрать элементы из стека (процедура) и освободить память, которую они занимали.
Наробки:
Код:
program Stek;
{$APPTYPE CONSOLE}
uses SysUtils;
var m: array[1..11] of integer = (9,4,2,4,5,6,1,8,0,1,7);
    i:integer;
begin
 writeln('Mas:');
 for i:=1 to 11 do write(m[i]:2);
 readln;
end.
kuy вне форума Ответить с цитированием
Старый 05.12.2011, 23:41   #2
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
Счастье

Вижу обо мне забыли сдесь..)). Я почти всё вроди как сделал, осталось только освободить память которую стек занимает. Почитал там процедура FreeMem(удаляет элементы) есть и SizeOf(подщитует розмер в байтах), но применить я нуб никак не могу, всё ошибки всякие выдаёт. Помогите вобщим, думаю для вас сдесь не сложно пару строк дописать.
Код:
program Stak;
{$APPTYPE CONSOLE}
uses SysUtils;

var
  Stack: array[0..255] of integer; 
  StackPointer: Byte;

  procedure Push(Value:integer); //пишем в стек
   begin
    Inc(StackPointer);
    Stack[StackPointer]:=Value;
   end;

  function Pop:integer; //читаем из стека
   begin
    Result:=Stack[StackPointer];
    Dec(StackPointer);
   end;

var
  i:integer;
const
  m: array[1..11] of integer = (9,4,2,4,5,6,1,8,0,1,7);
begin
 writeln('Mas:');
 for i:=1 to 11 do write(m[i]:2);  //выводим массив
 for i:=1 to 11 do Push(m[i]);     //заганяем массив в стек
 writeln;
 writeln('Stack:');
 for i:=1 to 11 do write(Pop:2);   //читаем стек
readln;
end.
kuy вне форума Ответить с цитированием
Старый 05.12.2011, 23:45   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Освободить можно только динамически выделенную память, которой у вас просто нет.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.12.2011, 01:02   #4
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

И как же это всё написать с выделением динамической памяти??
kuy вне форума Ответить с цитированием
Старый 06.12.2011, 01:08   #5
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

Код:
var
   A : array of integer;
begin
   SetLength(A,10); - создание динамического массива из 10 элементов
   Length(A) - длинна массива {10}
   High(A) - номер последнего элемента = Length(A)-1 {9} 
end;
hiho вне форума Ответить с цитированием
Старый 08.12.2011, 21:23   #6
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Хм.. условии сказано же что массив как константу инициализовать, а не как переменную. Лабу уже не здам канешно, но хочу решить, а оно не решаетса.
kuy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти Seran4ek Общие вопросы Delphi 7 21.12.2009 18:07
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23
Освобождение памяти AlexandrSid Общие вопросы Delphi 3 02.02.2009 13:45
Освобождение Памяти в Си volotsky Помощь студентам 2 16.12.2008 22:36