Funkce – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce – Pascal – Fórum – Programujte.comFunkce – Pascal – Fórum – Programujte.com

 

Adrian
~ Anonymní uživatel
12 příspěvků
21. 8. 2007   #1
-
0
-

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?

Nahlásit jako SPAM
IP: ...–
Geany
~ Anonymní uživatel
18 příspěvků
21. 8. 2007   #2
-
0
-
Nahlásit jako SPAM
IP: ...–
Laaca0
Stálý člen
22. 8. 2007   #3
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
DOS-u-akbar
Adrian
~ Anonymní uživatel
12 příspěvků
23. 8. 2007   #4
-
0
-

Dekuju moc

Nahlásit jako SPAM
IP: ...–
Adrian
~ Anonymní uživatel
12 příspěvků
23. 8. 2007   #5
-
0
-

To : meli jsme to udelat asi to treti moznosti..rikam, me moc nejdou funkce s parametrama..taky moc nechapu, kdy se tam davaj pred paramatrama ve funkce slovo va

Nahlásit jako SPAM
IP: ...–
Adrian
~ Anonymní uživatel
12 příspěvků
23. 8. 2007   #6
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
26. 8. 2007   #7
-
0
-

...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?

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Adrian
~ Anonymní uživatel
12 příspěvků
28. 8. 2007   #8
-
0
-

hele diky moc, jenom nechapu kdy se to pouziva volanim odkazem. Jo hele a nemelo by to byt spis funkce?, protoze funkce vraci hodnotu....

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
29. 8. 2007   #9
-
0
-

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í.

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
30. 8. 2007   #10
-
0
-

Samozřejmě, parametry s var i bez něj fungují v procedurách i ve funkcích úplně stejně.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý