OberonCore https://forum.oberoncore.ru/ |
|
Как передать в процедуру строку? https://forum.oberoncore.ru/viewtopic.php?f=35&t=3040 |
Страница 1 из 1 |
Автор: | Хохулин Олег [ Среда, 01 Декабрь, 2010 10:51 ] |
Заголовок сообщения: | Как передать в процедуру строку? |
есть следующие три модуля: 1-ый Код: МОДУЛЬ ПримерЖивность; ТИП Описание* = УКАЗАТЕЛЬ ДО МАССИВ ИЗ ЛИТЕР; Живность* = УКАЗАТЕЛЬ ДО АБСТРАКТНАЯ ЗАПИСЬ имя*: Описание; (*Описание;*) описание*: Описание; КОНЕЦ; ПЕРЕМЕННЫЕ НАЧАЛО КОНЕЦ ПримерЖивность. 2-ой Код: МОДУЛЬ ПримерПтица; ПОДКЛЮЧИТЬ ПримерЖивность; ТИП Птица* = УКАЗАТЕЛЬ ДО ЗАПИСЬ (ПримерЖивность.Живность) КОНЕЦ; ПРОЦЕДУРА новая_птица*( наименование: ПримерЖивность.Описание): Птица; ПЕРЕМЕННЫЕ эта_птица: Птица; НАЧАЛО НОВАЯ (эта_птица); (*НОВАЯ (эта_птица.описание, 20);*) эта_птица.описание^:= "летает"; эта_птица.имя := наименование; ВЕРНУТЬ эта_птица; КОНЕЦ новая_птица; НАЧАЛО КОНЕЦ ПримерПтица. и модуль в котором возникает ошибка: МОДУЛЬ Пример; ПОДКЛЮЧИТЬ Вывод := i21eduВывод, Ввод := i21eduВвод, ПримерЖивность, ПримерПтица; КОНСТАНТЫ количество_живности = 4; (*пусть будут ворона, собака, лиса, ястреб*) ПЕРЕМЕННЫЕ список_живности : УКАЗАТЕЛЬ ДО МАССИВ ИЗ ПримерЖивность.Живность; (*некая_живность : ПримерЖивность.Живность;*) НАЧАЛО НОВЫЙ (список_живности, количество_живности + 1); список_живности [0]:= ПримерПтица.новая_птица("Ворона");несовместимое присваивание КОНЕЦ Пример. Как тогда правильно передать в процедуру строку? |
Автор: | Ярослав Романченко [ Среда, 01 Декабрь, 2010 11:23 ] |
Заголовок сообщения: | Re: Как передать в процедуру строку? |
Параметр процедуры как открытый массив лучше всего сделать: Код: ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ ЛИТЕР): Птица;
|
Автор: | Хохулин Олег [ Среда, 01 Декабрь, 2010 11:31 ] |
Заголовок сообщения: | Re: Как передать в процедуру строку? |
Ярослав Романченко писал(а): Параметр процедуры как открытый массив лучше всего сделать: Код: ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ ЛИТЕР): Птица; Тогда получается другая ошибка МОДУЛЬ ПримерПтица; ПОДКЛЮЧИТЬ ПримерЖивность; ТИП Птица* = УКАЗАТЕЛЬ ДО ЗАПИСЬ (ПримерЖивность.Живность) КОНЕЦ; (* ПРОЦЕДУРА новая_птица*( наименование: ПримерЖивность.Описание): Птица; *) ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ ЛИТЕР): Птица; ПЕРЕМЕННЫЕ эта_птица: Птица; НАЧАЛО НОВАЯ (эта_птица); (*НОВАЯ (эта_птица.описание, 20);*) эта_птица.описание^:= "летает"; эта_птица.имя := наименование; несовместимое присваивание ВЕРНУТЬ эта_птица; КОНЕЦ новая_птица; |
Автор: | Ярослав Романченко [ Среда, 01 Декабрь, 2010 11:45 ] |
Заголовок сообщения: | Re: Как передать в процедуру строку? |
Вобщем, нужно определиться, передавать в процедуру указатель или передавать массив. Если указатель, то мою предыдущую рекомендацию отменить, но тогда так (ПримерПтица.новая_птица("Ворона");) строку передать будет нельзя, нужно создать указатель на строку "Ворона" и передавать его в процедуру. Если передавать строку то в месте присваивания (там где "несовместимое присваивание") нужно создать экземпляр строки (указатель) из переданного массива и его присваивать. |
Автор: | Valery Solovey [ Среда, 01 Декабрь, 2010 12:07 ] |
Заголовок сообщения: | Re: Как передать в процедуру строку? |
Ярослав Романченко писал(а): Если передавать строку то в месте присваивания (там где "несовместимое присваивание") нужно создать экземпляр строки (указатель) из переданного массива и его присваивать. ВместоКод: эта_птица.имя := наименование; написатьКод: эта_птица.имя^ := наименование$;
|
Автор: | Александр Ильин [ Среда, 01 Декабрь, 2010 12:21 ] |
Заголовок сообщения: | Re: Как передать в процедуру строку? |
Код: ПРОЦЕДУРА ДавайСтрокуЖиво* (такую: СТРОКА ИЗ ЛИТЕР): Описание;
ПЕРЕМЕННАЯ строку: Описание; НАЧАЛО НОВУЮ(строку, ДЛИНУ(такую)); строку^ := такую$; ВЕРНУТЬ строку КОНЕЦ ДавайСтрокуЖиво; ... список_живности [0]:= ПримерПтица.новая_птица(ДавайСтрокуЖиво("Ворона")); |
Автор: | Ярослав Романченко [ Среда, 01 Декабрь, 2010 12:34 ] |
Заголовок сообщения: | Re: Как передать в процедуру строку? |
вот! ![]() В A2 такое чудо присутствует. Strings.NewString() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |