Procedury rozumiem na czym polegają ale nie potrafię zrozumieć idei funkcji. Przecież procedury także nam zwracają to co między begin i end jest w procedurze, możemy w procedurze napisać tak by wyliczało i wypisywało coś, to wypisanie wywołamy wywołując procedurę więc będziemy mieli zwrócony wynik. Czytam i czytam i wszystkie opisy funkcji są tak napisane że tylko ci co to już rozumieją zrozumieją. Może mi to ktoś wytłumaczyć?
Jak powinien wyglądać ten kod:
function a(imie,nazwisko:string):string;
begin
imie:= 'AAA';
nazwisko:= 'BBB';
write(imie,nazwisko);
end;
begin
Writeln('Nazywam się ' + a);
Readln;
end.
function a(imie,nazwisko:string):string; begin Result:=imie+' '+nazwisko; end;
begin
Writeln('Nazywam się ' + a('AAA','BBB'));
Readln;
end.
ale to trochę bez sensu to tak jak pisać funkcję która jedyne co robi to dodaje dwie liczby, z tym że niektórzy “eksperci” na tym forum uważają inaczej lub:
function a:string;
var imie,nazwisko:string
begin
Write('Podaj nazwisko: '); ReadLn(nazwisko);
Write('Podaj imie: '); ReadLn(imie);
Result:=imie+' '+nazwisko;
end;
begin
Writeln('Nazywam się ' + a);
Readln;
end.
To już ma trochę sensu jeżeli w programie kilkakrotnie i w różnych miejscach używasz wczytywania danych osobowych. Czasami też się stosuje się taki zabieg, jeżeli jakaś funkcja zrobiła się na tyle duża że przestała być czytelna, wtedy rozrzuca się jej treść na kilka krótszych procedur i funkcji.
Dawno nie programowałem w pascalu (radzie przerzucić się na c++) ale jest taka różnica: funkcja może zwracać jakąś wartość poprzez result, a procedura to tylko wydzielony fragment kodu. W innych językach programowania w ogóle nie istnieje możliwość deklarowania procedury (albo jest to nie popularne) zwykle używa się funkcji.
Wczoraj jak to czytałem to mnie ta teoria na początku przygniotła, później też nie miałem pojęcia o co biega albowiem teorii nie zrozumiałem. Napisane tak że ciężko zrozumieć jeśli nie ma sie pojęcia o tym.
Result z tego co widzę nie działa w pascalu, w delphi może działa.
Jak więc za pomocą funkcji wypisać zapętlone pięciokrotnie pętlą for, writeln(’'abc); lub jakiś tekst sformatowany?? Z tego co widze funkcja tylko wypisuje jedną wartość za pomocą nazwa_funkcji:=
ro w nowszych kompilatorach Pascala to jest alternatywa do
nazwa_funkci:=
trzeba w tytule pisać nie [Pascal] zaś [Pascal,przedpotopowy]
Nie wypisuje tylko zwraca, to wielka różnica.
Przede wszystkim różnica pomiędzy funkcją a procedurą polega na tym że z funkcji da się budować złożone obliczenia, np wyobraź sobie procedurę sqrt zamiast funkcji, zamiast:
Próbowałem skompilować ten kod w najnowszej wersji środowiska Turbo Pascal (7.01) i kompilator “wyrzucał” błąd (nie znaleziono identyfikatora). Tak samo było w najnowszej wersji kompilatora Free Pascal (2.2.2).