Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.015 c
3-1132587938
gsa
2005-11-21 18:45
2006.01.15
Delphi5 + ODAC


14-1134900234
Piter
2005-12-18 13:03
2006.01.15
Выдержки из логов одной IRC-сети


3-1132235404
CasperR
2005-11-17 16:50
2006.01.15
ODAC for Delphi 2005


2-1135462785
kizam
2005-12-25 01:19
2006.01.15
как обявить CreateOleObject?


14-1135026250
Bot
2005-12-20 00:04
2006.01.15
Программа для подмены драйвера минипорта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский