КИТА unofficial

Ваши интересы => Викторины и конкурсы => Тема начата: vimmax от Сентябрь 04, 2007, 02:47:33



Название: Искусство программирования (задача 8)
Отправлено: vimmax от Сентябрь 04, 2007, 02:47:33
Может и баян  ;)

Назовите функцию, которая возвращает два значения.


Название: Re: Искусство программиования (задача 8)
Отправлено: tendervampire от Сентябрь 04, 2007, 03:33:11
 С точки зрения терминологии - если функция возвращает структуру, состоящую из двух переменных, то считается, что это одно значение или два?
  А возвращение через ссылку считаем?
 


Название: Re: Искусство программиования (задача 8)
Отправлено: vimmax от Сентябрь 04, 2007, 03:47:30
Нет, вариант со структурой неправильный.
И возвращение по ссылке тоже не подходит.

Функция реально возвращает два значения типа int. Причем совершенно законно)))


Название: Re: Искусство программиования (задача 8)
Отправлено: tendervampire от Сентябрь 04, 2007, 03:57:26
Ну, не знаю. Побитово записать в один double два int'a, вернуть, разобрать обратно на два int'a :)


Название: Re: Искусство программиования (задача 8)
Отправлено: vimmax от Сентябрь 04, 2007, 04:01:00
tendervampire - прикольный вариант!!! Мне очень понравился.
Но это не то что я имел ввиду.


Название: Re: Искусство программиования (задача 8)
Отправлено: Olorin от Сентябрь 04, 2007, 04:15:02
Таких функций много :)

Назовите функцию, которая возвращает два значения.

Каждая функция, возвращающая результат типа bool, возвращает 2 значения:
true  если правда
false  если ложь.


Название: Re: Искусство программиования (задача 8)
Отправлено: vimmax от Сентябрь 04, 2007, 04:21:56
Olorin Нет)
Для переменной типа bool - True и False - это множество возможных значений.

"-Какова вероятность, что на вас нападет маньяк?
-50% на 50%, или нападет или не нападет!"


Название: Re: Искусство программирования (задача 8)
Отправлено: naxellar от Сентябрь 04, 2007, 10:12:22
vimmax, В каком языке функция? Нужно имя функции, что-ли? Уточни, а то не совсем ясно.


Название: Re: Искусство программирования (задача 8)
Отправлено: vimmax от Сентябрь 05, 2007, 10:01:30
Вообще это библиотечная функция Unix систем.
Думаю ее можно вызвать из библиотеки на С, ASM, Kylix и т.д.


Название: Re: Искусство программирования (задача 8)
Отправлено: EvilMax от Сентябрь 05, 2007, 10:16:51
Какой-то странный вопрос. В том же Си можно написать функцию, использующую в качестве аргументов указатели и вернуть не только два, а сколько угодно значений. Ну а если нужен пример стандартной функции, возвращающей два (или больше) значений, так возьмите тот же scanf (и другие функции из этого семейства) - возвращает число успешно введенных и присвоенных значений, ну и сами введенные значения, конечно.


Название: Re: Искусство программирования (задача 8)
Отправлено: vimmax от Сентябрь 06, 2007, 10:05:24
EvilMax - не-а.  ;)

scanf возвращает в программу число успешно выведенных параметров - а это одна переменная типа int.

Можно конечно пофилософствовать и сказать что параметры, выведенные на stdout - тоже есть возвращенные параметры, но это не та функция, которую я имел ввиду.

Мой ответ с приколом, но вполне законный.


Название: Re: Искусство программирования (задача 8)
Отправлено: LazarusLong от Сентябрь 06, 2007, 10:31:27
Нихт фрштейн.... то есть функция реально возвращает два значения (возможно разных типов)?.... представляю себе её прототип....


Название: Re: Искусство программирования (задача 8)
Отправлено: vimmax от Сентябрь 06, 2007, 10:35:40
LazarusLong - да, функция возвращает два значения типа int.
Просто вы с ней не встречались )))

Функция Unix систем. Используется в многопоточном программировании.


Название: Re: Искусство программирования (задача 8)
Отправлено: vimmax от Сентябрь 06, 2007, 05:00:30
НУ ???????


Название: Re: Искусство программирования (задача 8)
Отправлено: EvilMax от Сентябрь 06, 2007, 07:05:07
НУ ???????

Ты случайно не про fork? Функция создает новый процесс путем клонирования родительского и возвращает PID в родителе и 0 в дочернем. Конечно, при условии, что дочерний процесс удалось создать.


Название: Re: Искусство программирования (задача 8)
Отправлено: vimmax от Сентябрь 06, 2007, 07:29:22
EvilMax - Ура, Ура, Ура !!! У нас победитель! +1.

Да, Короче функция fork дублирует процесс на два равнозначных процесса и возвращает pId процесса.
Т.е. был у тебя один процесс, в нем вызвал fork - и теперь у тебя в памяти два абсолютно одинаковых процесса с разными pId - распараллеливание программы.
А функция fork вернет pid для первого процесса, а во втором дублированном процессе вернет pId для второго процесса, т.е. функцию вызвал один раз - а получил два ответа, хоть и для разных процессов   :P


Название: Re: Искусство программирования (задача 8)
Отправлено: EvilMax от Сентябрь 06, 2007, 07:40:35
Ясно. Вот только в дочернем процессе будет не PID, а 0. Вот отрывок из man fork:

RETURN VALUE
       On success, the PID of the child process is returned  in  the  parent's
       thread  of execution, and a 0 is returned in the child's thread of exe‐
       cution.  On failure, a -1 will be returned in the parent's context,  no
       child process will be created, and errno will be set appropriately.


Название: Re: Искусство программирования (задача 8)
Отправлено: Olorin от Сентябрь 07, 2007, 03:03:21
И все же я не согласен. Вопрос надо было ставить корректнее.У тебя ж не сказано, что функция возвращает одновременно 2 рез-та.
Ты написал
Может и баян  ;)

Назовите функцию, которая возвращает два значения.
True и false - это тебе не рез-ты?