Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция особого опасного типа, розыск! 
:(
    Опции темы
Kaskad
  Дата 21.5.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 24.9.2004

Репутация: нет
Всего: 3



Нужно сделать функцию такого типа:
Код



type

MegaType=record
                   man:integer;
                   girl:integer;
                   end;

function GdeDeti(var x:bibip):MegaType;






Выдаёт ошибку: "инвалид тип". Как выличить инвалида? smile Вариант передачи параметра по ссылке не принимается.

Это сообщение отредактировал(а) Kaskad - 21.5.2005, 17:57


--------------------
Well come to America!
PM MAIL   Вверх
SPrograMMer
Дата 21.5.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6



Цитата(Kaskad @ 21.5.2005, 17:55)
функцию такого типа:

Цитата(Kaskad @ 21.5.2005, 17:55)
Код

function GdeDeti(var x:bibip):MegaType;


ну так в чем проблема?

Цитата(Kaskad @ 21.5.2005, 17:55)
инвалид тип

угу. тип MegaType ты объявляешь, чуть выше, а про bibip ничего неизвестно. Что это?


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Mager2005
Дата 21.5.2005, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.4.2005

Репутация: нет
Всего: нет



Что обязательно нужна функция? А процедура не подойдет?
Код

procedure GdeDeti (x:bibip; var y:MegaType);

Никаких инвалидов.
PM MAIL ICQ   Вверх
Kaskad
Дата 22.5.2005, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 24.9.2004

Репутация: нет
Всего: 3



Цитата(Mager2005 @ 21.5.2005, 21:32)
Что обязательно нужна функция? А процедура не подойдет?


Цитата(Kaskad @ 21.5.2005, 17:55)
Вариант передачи параметра по ссылке не принимается.



Цитата(SPrograMMer @ 21.5.2005, 21:13)
тип MegaType ты объявляешь, чуть выше, а про bibip ничего неизвестно. Что это?

Упс, ошибся. Вот как:

Код


type

MegaType=record
                   man:integer;
                   girl:integer;
                   end;

function GdeDeti(var bibip:integer):MegaType;



Вот, выдаёт инвалида. smile


--------------------
Well come to America!
PM MAIL   Вверх
Romtek
Дата 22.5.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Турбо Паскаль не умеет возвращать в функции тип запись. Нужна именно ссылка (указатель).
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
remax
Дата 22.5.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Да, именно так и написано во встроенном хелпе:
Цитата
Valid result types are ordinal, real, string, and pointer.
smile

То есть, передать в качестве результата функции другой тип (record, например) - нельзя! smile

Но, если очень хочется - то можно ! smile

Код


type
  MyType=record
     man:integer;
     girl:integer;
  end;

function MyFunction(x:integer):longint;
  var
    t:MyType;
    r:longint absolute t;
  begin
    t.man:=x;
    t.girl:=random(10);
    MyFunction:=r;
  end;

var
  y:MyType;
  z:longint absolute y;
begin
  z:=MyFunction(5);
  writeln('y.man=',y.man);
  writeln('y.girl=',y.girl);
end.


Просто мы здесь используем несложный прием - две переменные в одной области памяти, плюс нам повезло с исходной структурой - она занимает 4 байта.
integer(2) + integer(2) = longint(4) И все ок! smile Фактически, мы передаем нужную структуру, а формально - ничего не нарушили! smile smile smile smile

Это сообщение отредактировал(а) remax - 22.5.2005, 18:32


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Kaskad
Дата 23.5.2005, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 24.9.2004

Репутация: нет
Всего: 3



Цитата(Romtek @ 22.5.2005, 11:38)
Турбо Паскаль не умеет

А гну или компак умеет? smile
Добавлено @ 09:15
Цитата(remax @ 22.5.2005, 18:14)
И все ок!  Фактически, мы передаем нужную структуру, а формально - ничего не нарушили!   

Ага, я как-то 6+8 считал ~70 строк на Паскале мудрёным хитрым способом. В итоге преподаватель никак не мог понять
как получилось из 2+5=14 (это мои 6+8) smile



--------------------
Well come to America!
PM MAIL   Вверх
Romtek
Дата 23.5.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Цитата(Kaskad @ 23.5.2005, 09:11)
А гну или компак умеет?
Не знаю как эти, а Free Pascal - умеет.
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
remax
Дата 26.5.2005, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Цитата(Romtek @ 23.5.2005, 14:49)
Цитата(Kaskad @ 23.5.2005, 09:11)
А гну или компак умеет?
Не знаю как эти, а Free Pascal - умеет.

И Delphi может...


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1198 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.