Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Научите меня создавать функцию


Автор: Hellen 28.1.2009, 21:16
Правильно я понимаю: - 
Функция служит для хранение одной или несколько процедур.
Я пишу процедуры, запихиваю в функцию и по мере надобности вызываю их......???
Расскажите пжлста,  или лучше пример, где я объявляю и тд.
В каких ситуациях необходимо создавать классы? и как создавать.
Опять же пример помог бы.......

Спасибо!

Автор: SneG0K 28.1.2009, 21:33
Эммм... Классы тебе пока рановато будет.

А вот тебе пример самой простой функции, которая возвращает квадрат от переданного ей числа
Код

{$APPTYPE CONSOLE}

function quad(number:integer):integer; // Обьявляем функцию
begin // Начало тела функции
  Result := number * number; // Result служит для возврата значения.
end;  // Конец 

begin
  writeln(quad(15)); // Вызываем функцию и выводим результат
end.


А вообще возьми любой справочник по паскалю и сразу все поймешь.

Автор: Hellen 28.1.2009, 21:55
Функцию где объявляем? 

Автор: Данкинг 28.1.2009, 22:01
Hellen, так сколько и какие именно книги по Дельфи прочитала? smile 

Цитата(Hellen @  28.1.2009,  21:55 Найти цитируемый пост)
Функцию где объявляем?  

Что значит где? В программе.  smile 

Код

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    BitBtn1: TBitBtn;
    SpeedButton1: TSpeedButton;
    Opener: TOpenDialog;
    Label1: TLabel;
    Conn: TADOConnection;
    ...
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    function is_date(sss:string):boolean;//наши функции
    function is_ch(sss:string):boolean;
    function oneto25(sss:string):string;
  end;


Добавлено через 46 секунд
Цитата(Hellen @  28.1.2009,  21:16 Найти цитируемый пост)
Функция служит для хранение одной или несколько процедур.

 smile  smile  smile  smile  smile 

Автор: Hellen 28.1.2009, 22:39
Код

public
  function proba(sss:string):string;

  end;
 Почему выдает ошибку?

Добавлено через 4 минуты и 12 секунд
текст ошибки:-
Unsatisfied forward or external declaration: 'TForm........

Добавлено через 5 минут и 44 секунды
может её в типе надо сначало описать?

Автор: Данкинг 28.1.2009, 22:54
Цитата(Hellen @  28.1.2009,  22:39 Найти цитируемый пост)
Почему выдает ошибку?

Потому что надо было всё же книжки для начала почитать  заголовок функции ты объявила, а саму функцию (и чего ты от неё хочешь) не написала.  smile 

Автор: Christoph 28.1.2009, 23:38
ыыы эта девочка, меня напоминает  smile 

Автор: Christoph 29.1.2009, 00:22
Цитата(Данкинг @ 28.1.2009,  22:01)
Hellen, так сколько и какие именно книги по Дельфи прочитала? smile 

Цитата(Hellen @  28.1.2009,  21:55 Найти цитируемый пост)
Функцию где объявляем?  

Что значит где? В программе.  smile 

Код

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    BitBtn1: TBitBtn;
    SpeedButton1: TSpeedButton;
    Opener: TOpenDialog;
    Label1: TLabel;
    Conn: TADOConnection;
    ...
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    function is_date(sss:string):boolean;//наши функции
    function is_ch(sss:string):boolean;
    function oneto25(sss:string):string;
  end;


Добавлено @ 22:02
Цитата(Hellen @  28.1.2009,  21:16 Найти цитируемый пост)
Функция служит для хранение одной или несколько процедур.

 smile  smile  smile  smile  smile

Это ты объявил метод, а функцию стоило бы объявить за пределами класса 


Код

type
  TForm1 = class(TForm)
   ...
end;
  function Fun: Integer;  // описание функции

implementation
{$R *.dfm}

// реализация этой функции
function Fun:Integer;
begin
  Result:=5;  // Вот тут идет само тело функции, тут можешь писать любой код
end;



функция - это подпрограмма, которое после завершения возращает значение

И еще тут тебе SneG0K, неправильный написал пример,функции нужен результирующий тип , как я уже говорил функция возращает значение, значит будет так

Код

{$APPTYPE CONSOLE}

function quad(number:integer):integer; // Обьявляем функцию
begin // Начало тела функции
  Result := number * number; // Result служит для возврата значения.
end;  // Конец 

begin
  writeln(quad(15)); // Вызываем функцию и выводим результат
end.



Автор: Данкинг 29.1.2009, 00:36
Цитата(Christoph @  29.1.2009,  00:22 Найти цитируемый пост)
функция - это подпрограмма, которое после завершения возращает значение

А на C++ есть даже функции, которые ничего не возвращают, т.е. void. smile

Добавлено через 38 секунд
Цитата(Christoph @  29.1.2009,  00:22 Найти цитируемый пост)
Это ты объявил метод, а функцию стоило бы объявить за пределами класса 

Ну да, но суть ясна. smile 

Автор: Christoph 29.1.2009, 00:45
А можно такое и на делфи...хотя имхо чуть глупо

Код

function Fun(i:integer):integer;
begin
  ShowMessage(IntToStr(i));
end;


Функция ничего не возращает)

Автор: THandle 29.1.2009, 01:13
Эта функция возвращает результат в виде значения типа Integer. 
в с++ void функции это, считай, наши процедуры. 
вообще - функция эта та же самая процедура, толька возвращающая результат. Например в математике в той же задана функция y = f(x), f - функция, x - параметр функции, у - результат. 
вообще народ тут о книжках правильно говорит, надо читать)))

зы: первый пост с телефона)))     

Автор: SneG0K 29.1.2009, 01:46
Так, вот тока без наездов. С телефона не удобно писать было.

Начни с простого. С юнитов, из чего они состоят и т.д. Создавай *.dpr файл и в нем пиши. А то формы далеко не доведут.

Автор: Akella 29.1.2009, 02:20
Код

unit uOptions;

interface

uses
  Windows, Messages, SysUtils, 

type
  TfmOptions = class(TForm)
    dxStatusBar1: TdxStatusBar;
    cxGroupBox1: TcxGroupBox;
    vgOptions: TcxVerticalGrid;
    vgOptionsCategoryFTP: TcxCategoryRow;
    btnApply: TcxButton;
    btnCancel: TcxButton;
    btnOK: TcxButton;
...
  private

    procedure GetProfiles();
    procedure ReadParams();
  public

    procedure SaveOptions();
  end;

var
  fmOptions: TfmOptions;

implementation

{$R *.dfm}



procedure TfmOptions.GetProfiles();
begin
 with TRegistry.Create do
   try
     RootKey := HKEY_CURRENT_USER;
     OpenKey(ProfilesPath, True);
     GetKeyNames(TcxComboBoxProperties(vgOptionsProfiles.Properties.EditProperties).Items);
   finally
     CloseKey;
     Free;
   end;
end;


procedure TfmOptions.ReadParams();
begin
//твой код
end;




Цитата(Hellen @  28.1.2009,  21:16 Найти цитируемый пост)
Функция служит для хранение одной или несколько процедур.
Я пишу процедуры, запихиваю в функцию и по мере надобности вызываю их......???


Нет, основное отличие функции от процедуры в том, что функция возвращает какой-то результат
например
Код

function GetValue(a,b:integer):integer;

function GetValue(a,b:integer):integer;
begin
  result := a+b;
end;


c := GetValue(10, 20);// в переменной с будет 30


Добавлено через 53 секунды
А процедура не может возвращать никаких результатов, в ней могут происходить какие-то действия,  но результатов она не вернёт.

Автор: Данкинг 29.1.2009, 02:41
Цитата(THandle @  29.1.2009,  01:13 Найти цитируемый пост)
в с++ void функции это, считай, наши процедуры. 

Но, как я понимаю, в C++ понятия "процедура" всё же нет. smile 

И осмелюсь повторить свой вопрос:  smile 
Цитата(Данкинг @  28.1.2009,  22:01 Найти цитируемый пост)
Hellen, так сколько и какие именно книги по Дельфи прочитала?

 smile

Добавлено через 6 минут и 9 секунд
Цитата(SneG0K @  28.1.2009,  21:33 Найти цитируемый пост)
А вообще возьми любой справочник по паскалю и сразу все поймешь.

Взять мало, ещё нужно этот справочник осилить. smile  smile  smile  smile  smile 

А вообще, прикольная тема. smile 

Автор: de_Nis 29.1.2009, 12:09
Hellen, скачай электронную книжку 
Культин Н. Б.  Основы программирования в Delphi 7 (598 c).pdf
В ней прочти раздел "Стандартные функции" (с. 70) и "Глава 6. Процедуры и функции" (с.183). Очень доступно изложен материал. (Неплохо прочесть эту книгу всю, мне очень понравилась).
Думаю, вопросов в этой теме задавать больше не будешь, так как все станет ясно и понятно.

Автор: Hellen 29.1.2009, 17:36
Цитата

Hellen, так сколько и какие именно книги по Дельфи прочитала?

Delphi 7 Наиболее полное руководство (Анатолий Хоменко, Владимир Гофман, Евгений Мещеряков, Владимир Никифоров.)


и ещё Флёнова читала.

Автор: Данкинг 29.1.2009, 17:42
Цитата(Hellen @  29.1.2009,  17:36 Найти цитируемый пост)
и ещё Флёнова читала. 

У Фленова ничего нет про функции разве?

Автор: Rrader 29.1.2009, 17:49
Hellen, ты скажи главное, разобралась, как функции создавать? smile 

Автор: Hellen 29.1.2009, 17:49
Цитата

функции ты объявила, а саму функцию не написала.

Вот я и хочу понять порядок действий. в каком разделе объявляем, в каком пишем в каком вызываем.
Что такое приват или  публик можно не объяснять.........

Добавлено через 1 минуту и 26 секунд
Цитата

ты скажи главное, разобралась, как функции создавать?
НЕ а smile 

Автор: morpheyushka 29.1.2009, 18:03
Цитата(Hellen @  29.1.2009,  17:49 Найти цитируемый пост)
НЕ а

Начни с книги, а потом вопросы задавай, а то у Данкинга сейчас приступ начнется smile 

Автор: Rrader 29.1.2009, 18:06
Вот http://www.delphicode.ru/delphi/procedures.htm совсем небольшенькая статья по этому вопросу. Обязательно нужно читать книжки. Теория функций и процедур - чрезвычайно объемная тема.

Автор: Hellen 29.1.2009, 18:06
Цитата

а то у Данкинга сейчас приступ начнется
 Нуу   я  в  процессе  понимания.

Данкин прими пока валидольчику.........

Автор: Hellen 29.1.2009, 21:49
Я создала процедуру "Procces":
Код

procedure TForm1.Procces;
var
klon:integer;
begin
klon:=10
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
edit1.Text:='';
end;
end.

Как мне проверить что klon равен 10ти?

Добавлено через 1 минуту и 45 секунд
я хочу понять как мне вызвать созданную процедуру.

Код

  public
  procedure Procces;

Автор: Данкинг 29.1.2009, 22:35
Цитата(morpheyushka @  29.1.2009,  18:03 Найти цитируемый пост)
а то у Данкинга сейчас приступ начнется

ыыы smile  smile  smile 

Цитата(Hellen @  29.1.2009,  17:49 Найти цитируемый пост)
НЕ а 

Прочитай книгу ещё раз. smile 

Цитата(Hellen @  29.1.2009,  21:49 Найти цитируемый пост)
я хочу понять как мне вызвать созданную процедуру.

Написать её имя в нужном месте, к примеру, в твоём примере процедура вызывается по клику на кнопке:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
process;
end;

ЗЫ: Уже процедуру? smile А функции как же?! smile  smile  smile 

Автор: Hellen 29.1.2009, 22:42
Цитата

Прочитай книгу ещё раз
Почитала.

Цитата

А функции как же?! 
Я медленно  подхожу к процедуре........

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
process;
Edit1.text:=IntTostr(process);//  как мне посмотреть результат???
end;


Добавлено через 48 секунд
Я медленно  подхожу к Функции ........

Добавлено через 3 минуты и 14 секунд
Вот я подшла уже к функции

Код

 function TForm1.Procces;
begin
Procces:=ds*sd;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
Procces(10,5);
edit1.Text:='';//  Опятьже  как плучить результат???
end;
end.


Добавлено через 4 минуты и 19 секунд
Код

 public
  function Procces(sd,ds:integer):integer;

Автор: Данкинг 29.1.2009, 22:46
Цитата(Hellen @  29.1.2009,  22:42 Найти цитируемый пост)
Edit1.text:=IntTostr(process)

ЫЫЫЫ!!! smile  smile  smile  smile  smile  smile И валидола нет, как назло... smile 

Цитата(Hellen @  29.1.2009,  22:42 Найти цитируемый пост)
как мне посмотреть результат???

В данном случае - никак. Если хочешь что-то посмотреть (в твоём, повторяю, случае), то в процедуре Proccess укажи явно:

Код

procedure TForm1.Procces;
begin
Edit1.text:='ЫЫЫЫ';
end;

Автор: Hellen 29.1.2009, 22:49
Я уже почти разобралась, маленький пинок в нужном направлении и я у цели..........плииииз

Автор: Данкинг 29.1.2009, 22:49
Код

function TForm1.Procces(iii:integer):integer;
begin
result:=10;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(process(10));
end;


Автор: Hellen 29.1.2009, 22:50
Цитата

В данном случае - никак
это в процедуре ни как,  а в фунции???

Добавлено через 11 минут и 38 секунд
Код

function TForm1.Procces(iii:integer):integer;
begin
result:=10;// результ в обявлении или нет???
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(process(10));
end;


Как ты объявил функцию??  код полностью дай плиз

Добавлено через 14 минут и 24 секунды
Сначала мы объявляем функцию   
Код

function TForm1.Procces(iii:integer):integer;



потом описываем:-
function TForm1.Procces(iii:integer):integer;
begin
result:=10;
end;


Потом вызываем:-
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(process(10));
end;

Автор: Akella 29.1.2009, 23:06
Цитата(Hellen @  29.1.2009,  17:49 Найти цитируемый пост)
Что такое приват или  публик можно не объяснять.........

вот в привате или паблике напиши
Код

private 
  function MyFunc(a,b:integer):intger;

и не убирая курсора с этой строки нажми Ctrl+Shift+C и редактор кода сам тебе создаст в нужном месте реализацию функции, ты только внутренности заполнишь

Добавлено @ 23:07
Цитата(Hellen @  29.1.2009,  22:50 Найти цитируемый пост)
Как ты объявил функцию??  код полностью дай плиз 


обрати внимание на TForm1.
Цитата(Hellen @  29.1.2009,  22:50 Найти цитируемый пост)
function TForm1.Procces(iii:integer):integer;


это значит, что функция принадлежит форме Form1 и объявленна в паблике или прайвете вот так

Код

private
  function Procces(iii:integer):integer;

т.е. объявлена БЕЗ TForm1.

Добавлено через 8 минут и 38 секунд
Пойми. есть объявление, есть реализация, есть вызов.

Т.е. в паблике мы её объявляем

Код

public
  function Procces(iii:integer):integer;


ниже строк
Код

 implementation

{$R *.dfm}


пишем её реализацию, т.е внутренности:

Код

function TForm1.Procces(iii:integer):integer;
begin
   result:=iii;//это внутренности
end;



а теперь мы можем уже эту функцию где-нибудь вызвать, например, можно бросить кнопку на форму, дважды щёлкнуть по кнопке, сразу попадём в редактор кода

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Procces(777)));//вызовем её и получим окошко с текстом, где будет светиццо 777!
end;


Автор: Hellen 29.1.2009, 23:21
Цитата

и не убирая курсора с этой строки нажми Ctrl+Shift+C

Код

  public
  function Procces(ds,sd:integer):integer;
  end;
var
............................
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(Procces(7,2));
end;
function TForm1.Procces(ds,sd: integer): integer;
begin
result:=ds*sd
end;
end.

Вот теперь всё получилось и я наконец то поняла................. smile 
Спсибки всем и АймСори если чо не так........

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)