Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.11.2010, 18:24
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию В чем различие между Процедурой и функцией. Что когда используют?

В чем различие между Процедурой и функцией.Что когда используют?
Ответить с цитированием
  #2  
Старый 20.11.2010, 18:51
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от iluxa1810
В чем различие между Процедурой и функцией.Что когда используют?
А в гугле забанили?
Ответить с цитированием
  #3  
Старый 20.11.2010, 19:13
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию

Меня интересует ,как читается эта строка else if not Provinputint(key) then key:=chr(0); и за как осуществляется работа функции в If.
Я просто немного алгоритм этот понять не могу

Код:
function Provinputint (ch:char):boolean;
begin
  If (ch>='0') and (ch<='9') or (ch=#13) or (ch=#8)
  then Provinputint:=True
  else Provinputint:=false;
  end;
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then edt2.SetFocus
else if not Provinputint(key) then key:=chr(0);
end;

procedure TForm1.edt2KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then  btn1.SetFocus
else if not Provinputint(Key) then key:=chr(0);
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  n,m:Integer;
  coch:longint;
  function fact(k:integer):longint;
  var
    i:Integer;
    res:longint;
begin
 if k=0 then fact:=1 else
 begin
   res:=1;
   for i:=1 to k do res:=res*i;
   fact:=res;

 end;

end;
begin
  if (edt1.Text='') or (edt2.Text='') then
  ShowMessage('Введены не все данные')
  else
  begin
    n:=StrToInt(edt1.Text);
    m:=StrToInt(edt2.text);
    coch:=fact(n) div (fact(m)*fact(n-m));
    lbl1.caption:='Число сочетаний = '+ FloatToStr(coch);
  end;

end;
end.
Ответить с цитированием
  #4  
Старый 20.11.2010, 19:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А чего тут понимать. Функция возвращает некоторый результат. Т.е. если тебе не надо сохранять это значение, то ты можншь просто использовать его в условии.
Ответить с цитированием
  #5  
Старый 20.11.2010, 19:41
iluxa1810 iluxa1810 вне форума
Новичок
 
Регистрация: 06.10.2010
Сообщения: 51
Репутация: 10
По умолчанию

Спасибо.Как я понимаю отличие функции от процедуры это то ,что процедура может вывести более 1 значения,а функция только 1 ?
Но я все равно понять не могу ,что означает эта строка else if not Provinputint(key) then key:=chr(0);
И за счет чего функция не дает писать буквы?Ведь там же не написано ,что если функция False ,то не пишем символ ,а если True,то пишем .Там просто присваивание и все.
Ответить с цитированием
  #6  
Старый 20.11.2010, 21:13
kalinochkind kalinochkind вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 15
Репутация: 12
По умолчанию

Процедура вообще ничего не возвращает. Она что-то делает.

else if not Provinputint(key) then key:=chr(0); означает, что если кнопка-цифра или энтер, то отобразить ее в edit-е. В других случаях она становится нулем.

Последний раз редактировалось kalinochkind, 20.11.2010 в 21:18.
Ответить с цитированием
  #7  
Старый 20.11.2010, 21:21
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от iluxa1810
И за счет чего функция не дает писать буквы?
Переменная Key содержит код нажатой клавиши, Key := Chr(0) заменяет его на 0 (который не соответствует ни одной клавише) и получается что как-будто ничего и не нажималось.
Ответить с цитированием
  #8  
Старый 21.11.2010, 14:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Функция ProvInputInt сделана для проверки ввода. Т.е. если переданный в эту функция параметр ch является цифрой, символом табуляции (Tab) или символом перевода каретки (Enter) тогда функция вернет значение Истина иначе Ложь
Можно несколько оптимизировать код этой функции так:
Код:
function Provinputint (ch:char):boolean;
begin
 Provinputint := ch in ['0'..'9',#8,#13];
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025