[ amanteo @ 21.07.2009. 22:05 ] @
Code zadatka:

Code:

program Parametri;

var 
{globalne promenljive}
a,b:integer;   

{definisanje procedure}
procedure Q(x:integer;var y:integer);  {formalni parametri(X-vrednosni,Y-promenjivi)}
begin
y:=x+1;
end;

{glavni program}
begin
a:=2;
b:=0;
Q(sqr(a)+a,b);   {poziv procedure Q}
writeln(b);
readln
end;



-Kada procedura prima parametre , to mora biti u formi X,Y...
-kapiram da X uzima vrednost 2 , a Y:=X+1 , dakle Y:=3
-Kada izvršim zadatak dobijam za rezultat b=7

Iz udžbenika:
Prenos po vrednosti se koristi za čisto ulazne parametre čiju vrednost u glavnom
programu potprogram ne treba da menja.
Zbog toga na mestu poziva parametra po vrednosti može da stoji i neki izraz.


Uopšte mi nije jasno zašto je vrednost izraza sqr(x) dodata vrednosti Y tj:
Zar Y nije jednak X+1 ,kakve veze ima izraz sqr(x) sa vrednošću Y ?

Ufff,verovatno sam mogao i bolje da pitam ali bi bogami potrajala formulacija,
hvala unapred na utrošenim živcima...



[ NemesisMMX @ 21.07.2009. 22:38 ] @
ovako

x ti je na ulazu u Q proceduru jednako sqr(a) + 2. Posto je a = 2, X dobija vrednost 6. Taj broj 6 ulazi u proceduru Q kao konstanta.

U proceduru Q b dobija vrednost X + 1. Posto je X = 6 b ce biti 7. Na ulazu u proceduru b je bio 0 ali posto si ga prosledio kao
var parametar, procedura ima pravo da ga menja i tako ces ti posle izvrsene procedure dobiti da je b = 7.

Sve je u redu.
Ne znam sta ti nije jasno: parametar X se unutra procedure ponasa nepromenjljivo, tako da si u proceduri
napisao X = X +1, posle njenog izvrsavanja ne bi dobio 7 nego bi isto imao 6. Za razliku od njega, parameta Y je promenjljiv
i zato Y = X + 1 vraca 7.
[ amanteo @ 22.07.2009. 00:15 ] @
Uhh,hvala neizmerno,konačno jasno...
Nisam znao da izraz sqr(x) smem da saberem sa vrednosnim parametrom X.
Potrebna je čitava večnost da shvatim sve sitnice,produžio si mi život,
O-U-1