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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2011, 03:22   #1
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
Восклицание Массивы.Процедуры

Помогите, кто может!!проблема состоит в том, что нужно создать программу с неизвестным количеством элементов в массиве.Я пробывал сделать через процедуру, но не получается!! код удалил поэтому прошу помогите,Без предоставления кода!!Прошу не считать лентяем!
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 28.12.2011, 11:23   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Дык динамические массивы никто не отменял...
При работе с ними можно программно менять число элементов.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 28.12.2011, 11:50   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) непонятно, что у Вас подразумевается под "неизвестное количество элементов в массиве"? Динамические массивы?

2)
тут всё зависит от того, для какого Паскаля нужен код.

если для TurboPascal - то там настоящих динамических массивов НЕ БЫЛО.
значит нужно или использовать обычные статические заведомо бОльшего размера, чем может быть задан пользователем, либо использовать хакерские штучки по выделению и доступу к памяти через указатели, либо использовать динамические связанные списки...

если же FPC/Delphi, то да. тут всё просто - есть нормальные динамические массивы
var Имя : array of ТипЭлемента;

3) зря Вы стесняетесь код свой выкладывать. Хоть было бы понятно, что именно Вы хотите сделать и что не получается..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.12.2011, 15:54   #4
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

требуется сделать в обычном турбо паскале=>нет динамических массивов.Создание массива заведомо большего размера это трата большого количества памяти,что в данном случае не желательно.Я хочу получить границы массива в процедуре или в самой программе а после использовать в программе или процедуре соответственно.Код я не выложил потому что я не сохранил его и мне придется его восстанавливать по памяти и я подумал что может кто-нибудь делал так как я предлагаюю
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 28.12.2011, 23:43   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

по поводу траты памяти Вы не совсем правы.
сегмент данных в программе EXE под MS DOS выделяется 64 кб. Даже если Вы опишете одну переменную типа byte..
в этом способе хуже другое. По той же причине все переменные не могут занимать БОЛЕЕ 64 кб.
т.е.
var X[1..50000] of Integer;
уже не может быть скомпилировано - будет ошибка, что структура слишком велика...

попробуйте "хакерский" вариант.
он заключается в следующем трюке:
Код:
program DynMass;
{$N+}{$R-}

{пример создания динамического массива через указатели
 "хакерский" вариант
}

type
  TypeElem = extended;
  TMas = array[1..1] of TypeElem;
  TDymMas = ^TMas;

var
  i, N : integer;
  MyDMas : TDymMas; 

begin
  WriteLn('Введите размер массива: ');
  Readln(N);

  if N<1 then begin WriteLn('Неверное число!'); Readln; Halt(1); end;

  {выделить память под массив}
  GetMem(MyDMas, N * SizeOf(TMas));

  {для примера введём значения с клавиатуры}
  WriteLn('Ввод данных.');
  for i:=1 to N do begin
    Write('Введите A[',i,'] : '); Readln(MyDMas^[i]);
  end;
  WriteLn;

  {выведем значения в обратном порядке - тоже просто для примера}
  for i:=N downto 1 do 
    Write(MyDMas^[i]:1:3,' ');
  WriteLn;

  {освободить занятую память}
  FreeMem(MyDMas, N * SizeOf(TMas));

  WriteLn('Example Done.');
  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.12.2011, 00:01   #6
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

Большое спасибо я читал про этот вариант, но подумал сделать через процедуру(т.к. этот вариант "хакерский" в лабе его использовать не рекомендуется)Попробую восстановить код и доработать.Большое спасибо.
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 29.12.2011, 00:17   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
(т.к. этот вариант "хакерский" в лабе его использовать не рекомендуется
Это почему это?
Он читает зарезервированные операционкой отделы памяти и меняет их чтоль?
Почему под словом хакер и хакерский, у некоторых людей ассоциации прямо скажем не приятные(мягко скажем)?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 29.12.2011, 01:31   #8
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

Смысл не в том хакерский или нет у меня нет никаких ассоциаций я просто говорю что такой вариант в лабе не желателен
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 29.12.2011, 01:59   #9
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ладно извините, но я не про вас конкретно говорил! )
и так если вам не желательно использовать статик массив заранее большего размера
и способ описанный Serge_Bliznykov тоже вам не походит,
Может быть вы опишите задание?
И тогда уже что-то думать!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 29.12.2011, 02:07   #10
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

я все сделал используя статический массив большого размера.но все равно спасибо
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры массивы 1gorb Паскаль, Turbo Pascal, PascalABC.NET 0 22.12.2010 22:01
Массивы и процедуры Кэйт Паскаль, Turbo Pascal, PascalABC.NET 5 19.04.2010 19:58
C++ массивы, стоки, процедуры. daniil2010 Помощь студентам 1 18.04.2010 15:16
Двумерные массивы и процедуры F(r)an!k Фриланс 12 30.03.2010 17:46
Pascal. Массивы, процедуры. midletarket Помощь студентам 14 31.05.2009 22:24