Форум программистов, компьютерный форум, киберфорум
Наши страницы

Другие языки программирования

Войти
Регистрация
Восстановить пароль
 
кчирвырлмылвырл
0 / 0 / 0
Регистрация: 16.03.2014
Сообщений: 3
#1

[Ada] Создать динамический массив, тип которого опеределяется, как "Запись с динамическим массивом" - Программирование

16.03.2014, 12:28. Просмотров 570. Ответов 4
Метки нет (Все метки)

Я программирую на языке ada. Передо мной возникла задача создать динамический массива тип которого
опередяется как запись с динамическим массивом. тоесть примерно вот так:

Код
type A is array (Positive range <>) of integer;
type B(max : integer) is record 
  B_a : A(1..max);
  B_b : integer;
end record;
type C is array (Positive range <>) of B;
понятное дело этот код работать не будет из за того что в типе C тип ячеек массива не имеет параметра max. но если задать параметр max То массив станет не динамический. На решение данной проблемы я потратил 2 дня поиска, но ответа так и не нашел. Надеюсь тут найдется человек который прошел через всю боль ада. И знает решение этой проблемы.
Если ты все таки этот человек то помоги как задать этот массив, а так же как задавать его размерность в функциях. Ну тоесть для обычного динамического массива это происходить вот так:

Код
type D is array (Positive range <>) of integer;
Procedure K (m:integer) is
  F: D (1..max);
begin
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 12:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос [Ada] Создать динамический массив, тип которого опеределяется, как "Запись с динамическим массивом" (Программирование):

[Ada] Почему язык Ada не получил широкого распространения? - Программирование
ADA, этот язык позиционируется как язык для разработки приложений, к которым предъявляются высокие требования в отношении безопасности,...

[Ada] Где можно скачать язык Ada? - Программирование
Здрасте всем народ где можно скачать этот язык?у кого нибудь есть ссылки? в поисковиках все ссылки битые, вся надежда на вас:)

[КуМир] Ввести символьную строку и заменить все буквы "а" на "б" и наоборот (как заглавные так и строчные) - Программирование
ввести символьную строку и заменить все буквы а на буквы б и наоборот как заглавные так и строчные Кумир

[Ada] Язык Ada и семантика ASIS - Программирование
Требуется помощь, не ставится ADA ASIS на ПК, не понимаю как его распаковывать, пытаюсь поставить под Windows 7, через командную строку, но...

Как "расширить" тип integer - Fortran
Возникла проблема. Во время выполнения программы вылезает ошибка: Fortran runtime error: Attempt to allocate negative amount of memory....

как работают команды "String", "Unstring", "Pointer" с большими переменными - Cobol
Привет. Я начинающий программист в Cobol. У меня такой вопрос: мне нужно протестировать как работают команды &quot;String&quot;, &quot;Unstring&quot;,...

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25287 / 16935 / 5345
Регистрация: 22.10.2011
Сообщений: 29,968
Записей в блоге: 6
16.03.2014, 13:56 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ты не можешь задать массив из дискриминантных record-ов, не задавая значения дискриминанта еще при объявлении типа. Лучшее, что можно сделать - это задать некое значение дискриминанта по умолчанию, но массив B_a от этого более "динамическим" не станет. Задачу уточни, возможно, она решится другим способом.
1
кчирвырлмылвырл
0 / 0 / 0
Регистрация: 16.03.2014
Сообщений: 3
16.03.2014, 14:14  [ТС] #3
нужно улучшить вот эту древовидную структуру:

Код
   Type T_sA is array (0..4) of integer;
   Type A is record
      Op:string(1..8);
      s : T_sA;
      i : integer;
   end record;
  type D is array (Positive range <>,Positive range <>,Positive range <>) of A;
Данная структура описывает дерево в котором op это какой либо оператор +,-,mod,:= и.т.д. а S(0..4) массив ссылок, i это указатель не заполненной ячейки массива S. Для моей программы требуется массив элементов A назовем его B и ещё 1 массив из элементов B. динамическими они нужны для постепенного заполнения и не использование дополнительных параметров отвечающих за количество заполненных ячеек. В данном же случае если увеличивать i из типа D(i,j,k) то мы увеличиваем его размер не на 1 ячейку а на i*j что не очень хорошо.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25287 / 16935 / 5345
Регистрация: 22.10.2011
Сообщений: 29,968
Записей в блоге: 6
16.03.2014, 14:59 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Есть вот такой вариант:
Код
procedure main is   
   type A is array (Natural range <>) of integer;
   
   subtype Max_Range is Natural range 0 .. 1000; -- тут какое-то ограничение чтобы не было Storage_Error
   type B(max : Max_Range := 0) is record 
      B_b : integer;
      B_a : A(1 .. max);
   end record;
   
   type C is array (Positive range <>) of B; -- это прекрасно компилируется
   
   procedure P is
      -- а при создании массива уже задаются его дискриминанты...
      arr : array(1 .. 10) of B := 
        (others => (max => 75, B_b => 1, B_a => (others => 0)));
   begin
      null;
   end P;
   
begin
   P;
end main;
Но опять, я не думаю, что тебе это поможет...
1
кчирвырлмылвырл
0 / 0 / 0
Регистрация: 16.03.2014
Сообщений: 3
16.03.2014, 15:03  [ТС] #5
ага не поможет, но главное что вы сказали что сделать этого нельзя, это уже можно считать ответом, иначе я бы так и продолжал искать, большое спасибо.
0
16.03.2014, 15:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 15:03
Привет! Вот еще темы с ответами:

Массив фиксированного размера может быть динамическим? Что такое "динамический массив"? - C++
есть код string line; char *dup=new char; Я так понимаю создается динамический массив фиксированного размера длинной символов...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена" - C (СИ)
Создать запись &quot;Двигатель&quot;, которая содержит элементы &quot;Название&quot;, &quot;Мощность&quot;, &quot;Скорость&quot;, &quot;Цена&quot;. На основе записи &quot;Двигатель&quot; создать...

Создать поле, тип которого "перечисление" - Oracle
в своей бд мне нужно создать поле, тип которого &quot;перечисление&quot; , поле значения которого будут принимать вид: активный(когда=1)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru