Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.08.2011, 23:47   #11
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Процедурой никак, не ищите способ. Функция отлично подойдет.
Код:
function MyProcedure:string;
begin
result:='Возвращаемая строка';
end;
...
procedure TForm1.Button1Click(Sender:TObject);
var a:String;
begin
a:=MyProcedure;
ShowMessage(a);
end;
kettanaito вне форума
Старый 22.08.2011, 09:22   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Процедурой никак, не ищите способ.
Я конечно понимаю что нанесу сейчас полную ересь, но твое категоричное нет совсем неверное.
Вот тебе пример в кунсткамеру извратов:
Код:
type f=function(a,b:integer):integer;
 procedure q(a,b:integer);begin a:=a+b; asm mov eax,[a];end;end;
begin
 write(f(@q)(1,2));
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума
Старый 22.08.2011, 10:35   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Вот тебе пример в кунсткамеру извратов:
Stilet, не согласен. буду спорить...

Ну, если месье так любит извраты, то попрошу пример кода,
только чтобы функция возвращала строчку, как в исходном задании требовалось.
ну и без слова function надо обойтись... ведь Вы же утверждаете, что задача может быть решена без использования функций, только через процедуры!

Просто, имхо, Ваш пример нечестный и не соответствует условиям задачи..
я согласен с высказанными выше мнениями, в том числе и мнением kettanaito
Без функции это сделать НЕЛЬЗЯ.
автор топика же чётко написал,
цитирую:
Цитата:
Код:
var a:String;
begin
a:=MyProcedure;
end;
Виталий, напишите свой пример (пишите что угодно, только MyProcedure должна быть procedure - Вы же утверждаете, что это возможно.
Ну и, разумеется, никаких приведений к другим функциям (опять таки ФУНКЦИЯМ) быть не должно... (т.е. дожно быть a:=MyProcedure; )

Дело в том, что процедура НЕ ВОЗВРАЩАЕТ результат (передача изменений через параметры не является возвратом результата), а функция В ОБЯЗАТЕЛЬНОМ порядке ВОЗВРАЩАЕТ результат.

и не надо смущать молодые умы, писать код через pointer и т.д. и т.п., что, похулиганить захотелось?
Serge_Bliznykov вне форума
Старый 22.08.2011, 10:45   #14
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Процедура может возвращать значение, но не собой, а в указанную переменную, то есть при вызове подпрограммы мы передаем ей переменную, с которой мы может делать что угодно.
Код:
procedure p(var B: Byte);
begin
  B := B * 2;
end;
...
var
  a: Byte;
begin
  P(a);
  ShowMessage(IntToStr(a));
end;
То же самое используется в Read в Pascale
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума
Старый 22.08.2011, 11:08   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

chertovich речь же не о этом, а об обязательном использовании конструкции a:=MyProcedure
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 22.08.2011, 11:09   #16
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

ну или так

Код:
procedure MyProcedure(const a, b: byte; out c: byte);
begin
  c := a+b;
end;
ZuBy вне форума
Старый 22.08.2011, 11:42   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
от тебе пример в кунсткамеру извратов:
Виталий, это неявная функция.(очень плохой стиль)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 22.08.2011, 11:59   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что, похулиганить захотелось?
От горе... Ну ладно ладно, будь по вашему. Разделение процедур на функции и нефункции важно только для ЯВУ, в реале никакой разницы, именно поэтому ЯВУ умеют игнорировать результат функции, если она не участвует в выражении.
Так что однозначно говорить что процедура не может возвращать результат нельзя.
Цитата:
Виталий, это неявная функция.(очень плохой стиль)
Я в курсе, потому и написал что это изврат.
I'm learning to live...
Stilet вне форума
Старый 22.08.2011, 12:02   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так что однозначно говорить что процедура не может возвращать результат нельзя.
это правда, вообще есть термин подпрограмма.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 22.08.2011, 12:19   #20
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
chertovich речь же не о этом, а об обязательном использовании конструкции a:=MyProcedure
Вопрос в теме звучал конкретно:
Цитата:
Как сделать, чтобы процедура ввернула число?
Я, в данном случае, отвечал на него.

Вы же отвечели на вопрос:
Цитата:
Что должно быть в процедуре MyProgecedure, чтобы она вернула значение?
В данном случае наши ответы истинны, но для разных условий (вопросов). Ведь мы, владея интеллектом, смотрим на вопрос несколько шире, и предлагаем решения вопроса несколько пренебрегая заданным условиям, но оставляя при этом сущность вопроса
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 22.08.2011 в 12:22.
chertovich вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать так,чтобы он левой рукой до стены коснулся? и если можно чтобы двери лифта закрылись maxon56 Паскаль, Turbo Pascal, PascalABC.NET 0 07.06.2011 18:46
Как записать, чтобы ячейка выдавала то же число, что введено в другой? abdumanon Microsoft Office Excel 6 09.04.2009 16:05
Как сделать так,чтобы при нажатии на кнопку выполнялась процедура? Bolgarin Общие вопросы Delphi 10 03.06.2008 23:48
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14
что нужно сделать, чтобы при нажатии кнопки запускалась процедура mager Общие вопросы Delphi 15 19.11.2006 15:02