Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 16.03.2014
Сообщений: 3
1

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

16.03.2014, 12:28. Показов 1501. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2014, 12:28
Ответы с готовыми решениями:

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

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

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

Создать поле, тип которого "перечисление"
в своей бд мне нужно создать поле, тип которого &quot;перечисление&quot; , поле значения которого будут...

__________________
4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30902 / 20218 / 7882
Регистрация: 22.10.2011
Сообщений: 35,099
Записей в блоге: 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
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30902 / 20218 / 7882
Регистрация: 22.10.2011
Сообщений: 35,099
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2014, 15:03

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Задача "читателя и писателя" с буферным пулом (динамическим массивом)
Сама задача: Рассмотрим взаимодействие двух потоков, один из которых пишет данные в буферный пул,...

Создать тип "Book" и в нём сделать пункты "автор" и "количество страниц"
нужна задача на наследование, т. е. создать родителя и наследника. создать тип Book (родитель) и в...

Есть массив Т [5], каждый элемент которого имеет тип "Структура Телефон". Ввести его с клавиатуры
Есть массив Т , каждый элемент которого имеет тип &quot;Структура Телефон&quot;. Ввести его с клавиатуры, и...

Создать динамический массив обьектов класса "Сотрудник"
Здравствуйте! Не давно началось ООП и пока не все понимаю! Задача в базов классе задать три...


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

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

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