OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 18 Ноябрь, 2019 09:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Как передать в процедуру строку?
СообщениеДобавлено: Среда, 01 Декабрь, 2010 10:51 
Аватара пользователя

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
есть следующие три модуля:
1-ый
Код:
МОДУЛЬ ПримерЖивность;
   ТИП
      Описание* = УКАЗАТЕЛЬ ДО МАССИВ ИЗ  ЛИТЕР;
      
      Живность* = УКАЗАТЕЛЬ ДО АБСТРАКТНАЯ ЗАПИСЬ
         имя*: Описание; (*Описание;*)
         описание*: Описание;
      КОНЕЦ;

   ПЕРЕМЕННЫЕ
НАЧАЛО
КОНЕЦ ПримерЖивность.

2-ой
Код:
МОДУЛЬ ПримерПтица;
   ПОДКЛЮЧИТЬ  ПримерЖивность;
   ТИП
   
      Птица* = УКАЗАТЕЛЬ ДО ЗАПИСЬ (ПримерЖивность.Живность)
      КОНЕЦ;   
   ПРОЦЕДУРА новая_птица*( наименование: ПримерЖивность.Описание): Птица;
      ПЕРЕМЕННЫЕ
         эта_птица: Птица;
   НАЧАЛО
      НОВАЯ (эта_птица);
      (*НОВАЯ (эта_птица.описание, 20);*)
      эта_птица.описание^:= "летает";
      эта_птица.имя := наименование;
      ВЕРНУТЬ эта_птица;   
   КОНЕЦ новая_птица;


НАЧАЛО
КОНЕЦ ПримерПтица.


и модуль в котором возникает ошибка:

МОДУЛЬ Пример;
ПОДКЛЮЧИТЬ Вывод := i21eduВывод, Ввод := i21eduВвод,
ПримерЖивность, ПримерПтица;
КОНСТАНТЫ
количество_живности = 4; (*пусть будут ворона, собака, лиса, ястреб*)
ПЕРЕМЕННЫЕ
список_живности : УКАЗАТЕЛЬ ДО МАССИВ ИЗ ПримерЖивность.Живность;
(*некая_живность : ПримерЖивность.Живность;*)

НАЧАЛО
НОВЫЙ (список_живности, количество_живности + 1);
список_живности [0]:= ПримерПтица.новая_птица("Ворона");несовместимое присваивание
КОНЕЦ Пример.

Как тогда правильно передать в процедуру строку?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Декабрь, 2010 11:23 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1283
Откуда: Украина, Киев
Параметр процедуры как открытый массив лучше всего сделать:
Код:
   ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ  ЛИТЕР): Птица;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Декабрь, 2010 11:31 
Аватара пользователя

Зарегистрирован: Суббота, 13 Ноябрь, 2010 14:09
Сообщения: 26
Ярослав Романченко писал(а):
Параметр процедуры как открытый массив лучше всего сделать:
Код:
   ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ  ЛИТЕР): Птица;


Тогда получается другая ошибка
МОДУЛЬ ПримерПтица;
ПОДКЛЮЧИТЬ ПримерЖивность;
ТИП

Птица* = УКАЗАТЕЛЬ ДО ЗАПИСЬ (ПримерЖивность.Живность)
КОНЕЦ;
(* ПРОЦЕДУРА новая_птица*( наименование: ПримерЖивность.Описание): Птица; *)
ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ ЛИТЕР): Птица;
ПЕРЕМЕННЫЕ
эта_птица: Птица;
НАЧАЛО
НОВАЯ (эта_птица);
(*НОВАЯ (эта_птица.описание, 20);*)
эта_птица.описание^:= "летает";
эта_птица.имя := наименование; несовместимое присваивание
ВЕРНУТЬ эта_птица;
КОНЕЦ новая_птица;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Декабрь, 2010 11:45 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1283
Откуда: Украина, Киев
Вобщем, нужно определиться, передавать в процедуру указатель или передавать массив.
Если указатель, то мою предыдущую рекомендацию отменить, но тогда так (ПримерПтица.новая_птица("Ворона");) строку передать будет нельзя, нужно создать указатель на строку "Ворона" и передавать его в процедуру.
Если передавать строку то в месте присваивания (там где "несовместимое присваивание") нужно создать экземпляр строки (указатель) из переданного массива и его присваивать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Декабрь, 2010 12:07 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Ярослав Романченко писал(а):
Если передавать строку то в месте присваивания (там где "несовместимое присваивание") нужно создать экземпляр строки (указатель) из переданного массива и его присваивать.
Вместо
Код:
эта_птица.имя := наименование;
написать
Код:
эта_птица.имя^ := наименование$;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Декабрь, 2010 12:21 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Код:
ПРОЦЕДУРА ДавайСтрокуЖиво* (такую: СТРОКА ИЗ ЛИТЕР): Описание;
ПЕРЕМЕННАЯ строку: Описание;
НАЧАЛО
   НОВУЮ(строку, ДЛИНУ(такую));
   строку^ := такую$;
   ВЕРНУТЬ строку
КОНЕЦ ДавайСтрокуЖиво;

...

список_живности [0]:= ПримерПтица.новая_птица(ДавайСтрокуЖиво("Ворона"));


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Декабрь, 2010 12:34 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1283
Откуда: Украина, Киев
вот! :D
В A2 такое чудо присутствует. Strings.NewString()


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB