Программирование на языке Pascal - ФОРУМ

Объявление

Продолжается конкурс на "Самый прикоьный юзербар" Голосовать и просматривать голоса других вы можете в форуме События, раздел "Голосование"

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование на языке Pascal - ФОРУМ » Теория » Загвоздка в динамических массивах


Загвоздка в динамических массивах

Сообщений 1 страница 3 из 3

1

Просветите меня по динамическим массивам.
Как их сформировать в Паскале, как их передавать функциям и процедурам, как потом освобождать память из под них.

Дайте, пожалуйста пример небольшой программки именно с динамическими массивами: пусть юзер будет вводить число элементов массива, потом вводит эти элементы(или рандом), пусть будет функция или процедура работающая с этим динамическим массивом (пусть выводит их).

Вот это бы мне действительно помогло.
Нужно, чтобы обязательно в TURBO PASCAL 7.0 работало

0

2

Нашел как эмулировать динамические массивы в Турбо Паскаль 7.0,
написал процедуру вывода динамического массива outmas.
Теперь передо мной встал вопрос: можно ли через эту процедуру как-нибудь выводить содержимое обычных массивов? Если можно, то покажите как, пожалуйста.
Если нельзя, то как создать такую же процедуру для обычного массива.

Код:
uses crt;
type
   {- Массивы и указатели на них -}
      tIntArr0 = array [0..$FFF0 div SizeOf(integer)-1] of integer;
      tIntArr1 = array [1..$FFF0 div SizeOf(integer)] of integer;
      tPtrIntArr0 = ^tIntArr0;
      tPtrIntArr1 = ^tIntArr1;

{процедура вывода массива без ведущих нулей}
procedure outmas(ptr: tPtrIntArr0; size: integer);
var
   i: integer;
   flag: byte;
begin
   flag:=0;{признак того, что встречен не ноль}
   for i:=1 to size do
                      begin
                         if(flag<>0) then
                            write(ptr^[i],' ')
                         else
                            if(ptr^[i]<>0) then
                               begin
                                  write(ptr^[i],' ');
                                  flag:=1;
                               end;
                      end;
end;{outmas}

var
     pDynArray : tPtrIntArr0;{tIntArr1;}
     nSize : integer;
     i: integer;
begin
  clrscr;
  write ('Vvedite size: ');
  readln (nSize);

 {Тут, конечно, по хородему, надо проверить, чтобы введенное nSize не было
  большим настольо, чтобы требуемый размер памяти не превосходил $FFFF}

  if (nSize > ($FFF0 div SizeOf(integer)))
     then begin
               writeln ('Slishkom bolsjoe chislo!');
               Halt;
          end;
  if MaxAvail < SizeOf(integer)*nsize then


  else
      begin
        GetMem (pDynArray, nSize * SizeOf (pDynArray^[1]));
 { Тут опять, по-хорошему, проверить, что память выделилась }


 { Далее действия как с обычны массивом }
  for i:=1 to nsize do
                       pDynArray^ [i] := 2;
  pDynArray^ [nsize] := 10;
  pDynArray^ [nsize-1] := 20;
  pdynarray^[1]:=1;
  pdynarray^[2]:=0;
{ ..........................................}
{  writeln('pDynArray^ [1] = ',pDynArray^ [1]); }
  outmas(pDynArray,nSize);

  FreeMem (pDynArray, nSize * SizeOf (pDynArray^[1]));
  readln;{задержка}
       end;
end.

0

3

да не, динамически можно выводить ток по ссылкам пройдясь по всему массиву

0


Вы здесь » Программирование на языке Pascal - ФОРУМ » Теория » Загвоздка в динамических массивах


Рейтинг форумов | Создать форум бесплатно