Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Отличие функции от процедуры   Найти похожие ветки 

 
l4m3r   (2005-12-21 17:55) [0]

Привет!
вот я седня протупил. учительница по информатике вместо того чтоб нормально засчитать мне лабу решила вдруг спросить чем отличается функция от процедуры. я ответил что типа функция возвращает значение, а процедура нет (переменные с var не в счет). Она грит еще есь а я не могу вспомнить =(


 
ПЛОВ ©   (2005-12-21 17:58) [1]

названием еще, наверно - function и procedure :)

Глянь для общего развития С. Там только функции, прикинь!!! :)))


 
alex_*** ©   (2005-12-21 18:27) [2]

следствием того что ф-ция возвращает зн-ие, есть возможность использования её в выражениях. Может она это хотела услышать?


 
Kerk ©   (2005-12-21 18:28) [3]

l4m3r   (21.12.05 17:55)
я ответил что типа функция возвращает значение, а процедура нет


Больше ничем.


 
Digitman ©   (2005-12-21 18:34) [4]


> l4m3r


"Банан" по инф-ке тебе в любом случае светит.

Но у тебя ЗДЕСЬ есть шанс раз и навсегда разобраться и понять все что касается этой галиматьи (процедуры-функции  какие-то там хреновы, мало-ли еще кто что выдумал ..) ..


 
Джо ©   (2005-12-21 18:36) [5]

Функция тоже может НЕ возвращать значение.
Вопрос на самом деле исключительно в синтаксисе конкретного языка, единого понятие нет.


 
Kerk ©   (2005-12-21 18:38) [6]

Джо ©   (21.12.05 18:36) [5]
Вопрос на самом деле исключительно в синтаксисе конкретного языка, единого понятие нет.


Эт. точно
Процедура - это функция, которая возвращает void :))


 
Джо ©   (2005-12-21 18:51) [7]


> [6] Kerk ©   (21.12.05 18:38)
> Процедура - это функция, которая возвращает void :))

Итого, имеем: введение понятия "процедура" — это на самом деле введение лишней сущности, ибо хватает и функций, возвращающих void.
С другой стороны, имеем: введение понятия "void" — это также введение лишней сущности, ибо достаточно иметь функции и процедуры, без всяких лишних абстракций.
;->


 
vrem   (2005-12-21 18:56) [8]

>Она грит еще есь а я не могу
Спросил бы в тот момент. Запоминается лучше :)


 
l4m3r   (2005-12-21 18:58) [9]

наверное отвечу что функцию можно использовать в выражениях. пасиб за флейм ))


 
Alexander Panov ©   (2005-12-21 19:02) [10]

l4m3r   (21.12.05 18:58) [9]

function b: Integer;
begin
 Result := 2*2;
end;

procedure a(parm: Integer);
begin
 ShowMessage(IntToStr(parm));
end;

Используем:

a(b);

Процедура используется в выражении ;)


 
Джо ©   (2005-12-21 19:03) [11]


> [9] l4m3r   (21.12.05 18:58)
> наверное отвечу что функцию можно использовать в выражениях.
>

Хе-хе, процедуру тоже можно использовать в выражениях :P


 
Джо ©   (2005-12-21 19:04) [12]

И я тоже примерчик заготовил:
procedure Proc; begin end;
...
var
 P: procedure;
...
 P  := Proc; // чем не выражение? ;)


 
TUser ©   (2005-12-21 19:40) [13]

Имхо - переживи такую училку. Ибо еще много таких будет.


 
Igorek ©   (2005-12-21 20:07) [14]

Функцию можно использовать как rvalue и lvalue. Процедуру - нет.


 
Igorek ©   (2005-12-21 20:08) [15]

+ как expression


 
Джо ©   (2005-12-21 20:29) [16]


>  [15] Igorek ©   (21.12.05 20:08)
> + как expression

См. [10], [12].


 
Lamer@fools.ua ©   (2005-12-21 20:35) [17]

>>Джо ©   (21.12.05 19:04) [12]

Это не процедура, а её адрес.

>Джо ©   (21.12.05 20:29) [16]
Ну и где там процедура как lvalue?


 
Lamer@fools.ua ©   (2005-12-21 20:37) [18]

Тьфу. Igorek меня запутал. Нельзя использовать функцию как lvalue.


 
Джо ©   (2005-12-21 20:39) [19]


>  [17] Lamer@fools.ua ©   (21.12.05 20:35)
> Это не процедура, а её адрес.

Операция взятия адреса (замаскированный @) — это, собственно, тоже можно расценивать как "выражение", не се па?


 
Igorek ©   (2005-12-21 20:40) [20]


> Lamer@fools.ua ©   (21.12.05 20:37) [18]

Можно, если функция возвращает ссылочный тип.


 
Lamer@fools.ua ©   (2005-12-21 20:47) [21]

>>Igorek ©   (21.12.05 20:40) [20]

lvalue означает, AFAIR, нахождение слева от знака присваивания. Поэтом с трудом представляю, что Вы имеете в виду. Можно пример?


 
Igorek ©   (2005-12-21 21:25) [22]


> Lamer@fools.ua ©   (21.12.05 20:47) [21]

// cpp1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;

int& f(int& a){ return a; }

int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
cout << a;
f(a) = 2;
cout << a;
return 0;
}


 
Lamer@fools.ua ©   (2005-12-21 21:50) [23]

>>Igorek ©   (21.12.05 21:25) [22]

Понятно. C"шный изврат :-)


 
Gero ©   (2005-12-21 22:54) [24]


> Digitman ©   (21.12.05 18:34)
> "Банан" по инф-ке тебе в любом случае светит.

Это еще почему?


 
wicked ©   (2005-12-21 23:31) [25]

> Lamer@fools.ua ©   (21.12.05 21:50) [23]

> >>Igorek ©   (21.12.05 21:25) [22]
> Понятно. C"шный изврат :-)

во первых, си++ - ный........
а во вторых, очень даже удобно - можно перегружать operator[] и иметь вполне цивильные конструкции без лишних извратов........ :-P


 
Lamer@fools.ua ©   (2005-12-22 00:27) [26]

>>wicked ©   (21.12.05 23:31) [25]

>во первых, си++ - ный........
Сипостинкрементный изврат... бр-р-р-р-р.
:-)

Хотя я и в Delphi могу извратиться:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   FA: Integer;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function Test(var A: Integer): PInteger;
begin
 Result := @A;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FA := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Inc(Test(FA)^);
 ShowMessage(IntToStr(FA));
end;

end.


:-~~~
;-)

>>Igorek ©   (21.12.05 21:25) [22]
>>wicked ©   (21.12.05 23:31) [25]

Кстати, это частный случай — когда возвращается ссылочное значение (или ссылка, как правильно?). В общем случае функция не может быть lvalue даже в C/C++, так? Или я опять ламерю?


 
Marser ©   (2005-12-22 00:29) [27]


> Хотя я и в Delphi могу извратиться:

Только зачем? ;-)


 
wicked ©   (2005-12-22 00:35) [28]


> Кстати, это частный случай — когда возвращается ссылочное
> значение (или ссылка, как правильно?). В общем случае функция
> не может быть lvalue даже в C/C++, так? Или я опять ламерю?

в общем случае, афаик, да, не может быть lvalue.... тут играет роль тип возвращаемого значения.... можно поэкспериментировать - функция как lvalue должна сработать при возврате ссылки или при перекрытом operator = у возвращаемого типа...... во втором случае - уже действительно изврат, хотя и небесполезный местами - можно реализовывать безымянные обьекты-прокси для выполнения всяких "подводных" нужных задач.....


 
Lamer@fools.ua ©   (2005-12-22 07:52) [29]

>>Marser ©   (22.12.05 00:29) [27]

Как зачем? Шоб доказать, шо C/C++ мастдай, а Delphi рулез ;o)

>>wicked ©   (22.12.05 00:35) [28]

Значит, я был прав в [18]. Нельзя ж ведь частные случаи каких-либо языков распостранять на определение в целом. Хотя подозреваю, что сабджевый вопрос вообще имеет смысл только для конкретного языка, поскольку в C/C++ и понятия-то такого нету "процедура", вроде.

>>Джо ©   (21.12.05 20:39) [19]

>Операция взятия адреса (замаскированный @) — это, собственно, тоже можно расценивать как "выражение", не се па?
Расценивать-то можно как угодно, только вот сама процедура тут и ни при чём, IMHO.


 
Карелин Артем ©   (2005-12-22 08:08) [30]


> Digitman ©   (21.12.05 18:34) [4]

Просвети меня, я между ними разницы не вижу, кроме того, что процедура частный случай функции.


 
Иван Шихалев ©   (2005-12-22 09:28) [31]

До кучи:
В классическом Паскале функция может использоваться только в выражениях.


 
Чапаев ©   (2005-12-22 11:45) [32]


> Просвети меня, я между ними разницы не вижу, кроме того,
>  что процедура частный случай функции

Функция -- процедура, возвращающая единственное значение. То бишь функция -- частный случай процедуры.


 
Igorek ©   (2005-12-22 13:57) [33]


> Lamer@fools.ua ©   (21.12.05 21:50) [23]
> >>Igorek ©   (21.12.05 21:25) [22]
>
> Понятно. C"шный изврат :-)

Это не Сишный изврат. Существует понятие "ссылочный тип". Поддеживается многими языками.


 
Игорь Шевченко ©   (2005-12-22 14:08) [34]


> вот я седня протупил


Стране нужны дворники


 
Igorek ©   (2005-12-22 15:06) [35]

+
function GetButton: TButton; begin ... end;
...
GetButton.Caption := "blablabla";

Это уже другой случай - ссылка на обьект, а не на переменную.



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.05 c
6-1127764469
nevalex
2005-09-26 23:54
2006.01.15
поиск компьютеров в сети


9-1122904615
Novouralsk
2005-08-01 17:56
2006.01.15
Псевдо анимация


2-1135261368
kotbazilio
2005-12-22 17:22
2006.01.15
Помогите составить запрос


2-1135331222
РУДЗ
2005-12-23 12:47
2006.01.15
Использование ShortCut


2-1135155643
Дмитрий_177
2005-12-21 12:00
2006.01.15
Про динамический массив