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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 11:38   #1
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию Объявление размерности массива.

В общем как объявлять массив понятно:

Код:
Const
N=40; {Константа N  содержит количество элементов массива}
Var
A : Array [1..N] Of Integer;
I : Integer;
begin
...
end.
А если мне нужно указать размерность внутри программы, то есть от i:=1 не до константы, а до x который вводится с клавиатуры или читается из файла.
iCaesy вне форума Ответить с цитированием
Старый 22.10.2011, 14:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на самом деле вопрос далеко не так прост, как может показаться.
Дело в том, что то, что Вы хотите - называется "динамические" массивы.
В "чистом" виде в обычном Паскаль их не было. (в Delphi/FreePascal они уже есть).

поэтому для решения подобных задач (когда число элементов вводится с клавиатуры) раньше применялись два основных подхода.
1) простой как топор. Задаём N заведомо больше, чем могут внести количество элементов в массиве. Ну, например, 1000. или 5000... дальше, заводим дополнительную переменную и в ней храним число, сколько элементов в массиве реально нужно.
например, в коде этом можно записать так:
Код:
const MaxN = 1000;
Var
A : Array [1..MaxN] Of Integer;
N : integer; {реальное кол-во элеметов в массиве - вводится пользователем}
I : Integer;
begin
  repeat
    WriteLn('Введите число элементов в массиве (от 1 до ',MaxN,'): ');
    Readln(N);
    if (N<1) or (N>MaxN)  then
        WriteLn('Вы ввели недопустимое число! Попробуйте ещё раз!');
  until (N>=1) and (N<=MaxN);
  
  for i:=1 to N do .....
второй подход основывается на использовании динамической памяти и указателей. Он гораздо сложнее (а иногда и использут хакерские методы доступа). На форуме были примеры подобных решений.

Но, без крайней необходимости не рекомендую использовать эти методы. Если задача позволяет - используйсте первый подход (статистические массивы).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2011, 14:42   #3
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

Код:
procedure SetLength(

  var A: DynArrayType;

  Len: Integer

);
можно и динамический масив
Код:
Var
A : Array Of Integer;
N : integer; {реальное кол-во элеметов в массиве - вводится пользователем}
begin
repeat   
 WriteLn('Введите число элементов в массиве (>1): ');
    Readln(N);
    if (N<1)  then
        WriteLn('Вы ввели недопустимое число! Попробуйте ещё раз!');
  until (N>=1);
 SetLength(A,N); 
 // идальш работаем с масивом....
просто незабываем проверять длину масива, чтоб не было ошибок при обработке данных
dosha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение размерности массива SAMOUCHKA Общие вопросы C/C++ 36 25.10.2011 08:11
Задание размерности 2мерного массива Bernarditto Общие вопросы C/C++ 2 18.06.2010 17:04
Конструктор для изменения размерности массива and277 Общие вопросы C/C++ 2 10.08.2009 20:47
объявление массива Crasty Помощь студентам 7 05.11.2008 17:18
увеличение размерности массива Лучик_света Общие вопросы .NET 3 25.10.2008 04:36