Mam vymyslet funkci, ktera vyhleda UMISTENI nejvetsi polozky v poli. Prisel uz jsem na to jak to udelat, ale vubec nevim jak to dat do funkce..priznam se ze moc neumim funkce ani procedury s parametrama. Nevite kde je to nekde dobre popsany prosim?
Fórum › Pascal
Funkce
google -- http://www.google.cz/search?hl=cs&client=firefox-a&rls=org.mozilla%3Acs%3Aofficial&q=pascal+procedura+funkce&btnG=Hledat&lr=
jinak by to mohlo byt popsany v kdejakych serialech a tutorialech o pascalu napr na pcsvet, builder, programujte...
a k te uloze -- http://www.gymnachod.cz/~preclik/czech/mff_mgr/tp_parametry.htm ;)
Postup se liší podle toho, jakým způsobem se do funkce zadává pole, případně vyžaduje-li funkce konkrétní typ pole, nebo obecné pole:
1)funkce používá konkrétní pole
const maxpole = 10;
var pole=array[0..maxpole] of integer;
Function Nejvetsi:integer;
var a,b,c:integer;
begin
c:=0;
b:=pole[0];
for a:=1 to maxpole do if pole[a]>b then begin b:=pole[a];c:=a;end;
Nejvetsi:=c;
end;
begin
writeln('Nejvetsi z pole POLE je prvek c.',Nejvetsi);
readln;
end.
2)funkce používá pole pevně určeného rozsahu
const maxpole = 10;
type tpole=array[0..maxpole] of integer;
var pole:tpole;
Function Nejvetsi(pole:tpole):integer;
var a,b,c:integer;
begin
c:=0;
b:=pole[0];
for a:=1 to maxpole do if pole[a]>b then begin b:=pole[a];c:=a;end;
Nejvetsi:=c;
end;
var p:array[0..10] of integer;
begin
writeln('Nejvetsi z pole P je prvek c.',Nejvetsi(p));
readln;
end.
3)funkce používá pole s otevřeným intervalem:
Function Nejvetsi(pole:array of integer):integer;
{Dulezite - tento zpusob zadani, ze pole je indexovane vzdy od nuly - tedy array[0..neco]}
var a,b,c:integer;
begin
c:=0;
b:=pole[0];
for a:=1 to High(pole) do if pole[a]>b then begin b:=pole[a];c:=a;end; {High je vestavena funkce na urceni horniho rozsahu pole}
Nejvetsi:=c;
end;
var p:array[0..10] of integer;
begin
writeln('Nejvetsi z pole P je prvek c.',Nejvetsi(p));
readln;
end.
Takhle jsem to udelal podle tvy rady....
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Nejvetsi(Pole : array of integer) : integer;
var
i,max,umisteni : integer;
begin
for i:=1 to 10 do Pole[i]:=Random(11);
max:=0;
for i:=1 to 10 do
if max<Pole[i] then
begin
max:=Pole[i];
umisteni:=i;
end;
nejvetsi:=umisteni;
end;
var
Pole : array[1..10] of integer;
begin
writeln('Nejvetsi prvek ', nejvetsi(Pole));
readln;
end.
...taky moc nechapu, kdy se tam davaj pred paramatrama ve funkce slovo var...
Když tam var nedáš, tak se parametr volá hodnotou. Když jo, tak odkazem. To znamená (předvedu na příkladu):
program ukazka_volani_odkazem;
procedure Pricti5(var x:integer);
Begin
x:=x+5; {var tam je, takze se ted zvetsi primo promenna, kterou predame jako parametr}
End;
var g:integer;
BEGIN
g:=10;
pricti5(g); {ovlivni se primo promenna g}
writeln('vyslo: ',g); {vyjde 15}
readln;
END.
program ukazka_volani_hodnotou;
procedure Nepricti5(x:integer);
Begin
{var tam neni, takze se v procedure vytvori lokalni promenna, do ktere
se zkopiruje hodnota promenne, kterou predame jako parametr}
x:=x+5; {timhle se ovlivni jenom ta lokalni promenna, ktera se na konci procedury zase zapomene}
End;
var g:integer;
BEGIN
g:=10;
nepricti5(g); {skutecna promenna g tentokrat zmenena nebude}
writeln('vyslo: ',g); {vyjde 10}
readln;
END.
Stačí takhle?
Moje stránka.
Funkce to být nemusí - proto je tam ten VAR.
Volání odkazem můžeš použít v případě kdy potřebuješ z podprogramu vytáhnout víc hodnot (např. 3). Klasická funkce vrací jen jednu, ale pomocí odkazů můžeš přímo např. v proceduře naplnit těch proměnných víc. Nebo když nechceš aby si podprogram dělal lokální kopie proměnných - používá se u obrovských datových typů u kterých by jsi pak zbytečně plýtval paměť.
Prostě VAR pracuje s tou původní proměnnou "zvenku" a bez VAR pracuješ pouze s její kopií.
Samozřejmě, parametry s var i bez něj fungují v procedurách i ve funkcích úplně stejně.
Moje stránka.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Volání funkce z jiné třídy ukazatelem typu obecné funkce — založil pretis
šablonová funkce jako členská funkce třídy - jde to? — založil yaqwsx
C Funkce jako parametr funkce — založil František Brámek
Moderátoři diskuze