Phorum.ro
Your Avatar Welcome to Phorum.ro!
If you haven't registered yet, click here!
Attention Visitor:
You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.
Du-te înapoi   Phorum.ro > Web Design & Web Development > Programare > Altele

Răspunde
 
Thread Tools Moduri de afișare
Vechi 16.10.2009   #1
void
16-Bit Member
 
void's Avatar
 
Data înregistrării: 14.10.2009
Vârsta: 20
Mesaje: 14
Rep Power: 3
void is on a distinguished road
Implicit Apelare procedura nelamurire

am programul:

Cod:
program p12;
var m,n: integer; k:real;
procedure P(x:integer; var y:integer; var z:real);
begin
  x:=y+2; y:=x*2; z:=x+y/2;
end;
begin
   m:=1; n:=0; k:=2;
   P(m,n,k); writeln(m,' ',n,' ',k:3:0);
   P(n,m,k); writeln(m,' ',n,' ',k:3:0);
   P(m,m,k); writeln(m,' ',n,' ',k:3:0);
   P(n,n,k); writeln(m,' ',n,' ',k:3:0);
end.
trebuie sa spun ce va afisa in urma executie programul (fara ca sa am un compilator), eu calculasem:

prima apeare: m=2, y = 2, z = 2;
a doua apelare: m = 4, y = 8, z = 6
a treia apelare: m=6, y = 12, z = 9

am compilat si am rulat programul si am vazut ca rezultatul difera multe. va rog sa imi explicati care e diferenta dintre decalarearea varibilei cu `var` inainte si fara si sa imi spuneti cum merg aici calculele.
void is offline   Reply With Quote
Sponsored Links
Vechi 16.10.2009   #2
SiskOZ
64-Bit member
 
SiskOZ's Avatar
 
Data înregistrării: 06.09.2006
Locație: Omul cu napolitane
Mesaje: 319
Rep Power: 6
SiskOZ is on a distinguished road
Implicit

var este globala .. si fara e doar in interioru procedurei .. parca asa ceva
__________________
1. My understanding of women goes only as far as the pleasures.
2. Nature intended women to be our slaves. They are our property.
---
3. Love is an irresistible desire to be irresistibly desired.
---
INSANE VANITY
SiskOZ is offline   Reply With Quote
Vechi 16.10.2009   #3
void
16-Bit Member
 
void's Avatar
 
Data înregistrării: 14.10.2009
Vârsta: 20
Mesaje: 14
Rep Power: 3
void is on a distinguished road
Implicit

in urma executie programului se afiseaza rezultatele:

1 4 4
6 4 6
16 4 16
16 12 12

eu cand am calculat ma gandeam ca variabilele care au var, adica y si z de fiecare data cand se apeleaza functia iau valoare din nou, adica y = 0, z = 2. iar lui x ii ramane valoare care a avuto in apelul anterior.

insa nu inteleg cum se executa procedura si cum se afiseaza,se apeleaza

p(1,0,2); si se afiseaza 1 4 4

cum adica se afiseaza 1 cand x = 0 + 2 ?
__________________
-Tip: Notebook (HP 530)
-Procesor: Intel Core Duo T2700 (2.17Ghz)
-Ram: 2 GB ram
-Placa video: Intel Media Graphics Accelerator 950
-Sistem de operare: Ubuntu 9.04 Jaunty Jackalope
-Monitor: 15.4" WXGA (1280x800)
void is offline   Reply With Quote
Vechi 16.10.2009   #4
SiskOZ
64-Bit member
 
SiskOZ's Avatar
 
Data înregistrării: 06.09.2006
Locație: Omul cu napolitane
Mesaje: 319
Rep Power: 6
SiskOZ is on a distinguished road
Implicit

x este variabila locala si nu influenteaza pe m daca il faci variabila globala atunci o sa il influenteze pe m . schimbandui valoarea
__________________
1. My understanding of women goes only as far as the pleasures.
2. Nature intended women to be our slaves. They are our property.
---
3. Love is an irresistible desire to be irresistibly desired.
---
INSANE VANITY
SiskOZ is offline   Reply With Quote
Vechi 16.10.2009   #5
Luxian
Spamofob
 
Luxian's Avatar
 
Data înregistrării: 26.06.2006
Locație: Timișoara
Vârsta: 25
Mesaje: 395
Rep Power: 6
Luxian is on a distinguished road
Trimite un mesaj prin Yahoo pentru Luxian
Implicit

Există 2 tipuri de parametrii la apelul unei funcții (și la proceduri e fix la fel):
  • transmiși prin valoare (fără var în față - default)
  • transmiși prin referință (precedați de var)
Parametrii transmiși prin valoare: au caracter temporar sau local, orice modificare asupra lor în cadrul funției se pierde la ieșirea din funcție.

Parametrii transmiși prin referință au caracter global. După apelarea funcției, variabilele transmise funcției prin referință își păstrează valoarea pe care a căpătat-o în funcție. Adică orice modificare asupra argumentelor transmise prin referință are caracter permanent și rămâne salvată și după terminarea apelului de funcție.

Sper să fi înțeles diferența și să nu îi fi încurcat între ei la faza cu / fără var în față.
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!"
Oo==oO | w210 owner
Luxian is offline   Reply With Quote
Vechi 17.10.2009   #6
void
16-Bit Member
 
void's Avatar
 
Data înregistrării: 14.10.2009
Vârsta: 20
Mesaje: 14
Rep Power: 3
void is on a distinguished road
Implicit

Citat:
În prealabil postat de Luxian Vezi mesajul
Există 2 tipuri de parametrii la apelul unei funcţii (şi la proceduri e fix la fel):
  • transmişi prin valoare (fără var în faţă - default)
  • transmişi prin referinţă (precedaţi de var)
Parametrii transmişi prin valoare: au caracter temporar sau local, orice modificare asupra lor în cadrul funţiei se pierde la ieşirea din funcţie.

Parametrii transmişi prin referinţă au caracter global. După apelarea funcţiei, variabilele transmise funcţiei prin referinţă îşi păstrează valoarea pe care a căpătat-o în funcţie. Adică orice modificare asupra argumentelor transmise prin referinţă are caracter permanent şi rămâne salvată şi după terminarea apelului de funcţie.

Sper să fi înţeles diferenţa şi să nu îi fi încurcat între ei la faza cu / fără var în faţă.
am inteles in mare parte despre ce e vorba insa la rezolvare pied firul:
P(m,n,k); writeln(m,' ',n,' ',k:3:0);

P(1,0,2)
x=0+2=2;
y=2*2 = 4
z = 2+4/2;
m=1 n=4 k=4

P(n,m,k); writeln(m,' ',n,' ',k:3:0);

P(4 – x,1 – y,4 - z)
x=y+2 = 1+2 = 3;
y=x*2 = 3*2 = 6
z = x+y/2 = 3+6/2;
m=6 n=3 k=6

P(m,m,k); writeln(m,' ',n,' ',k:3:0);
P(6 – m,6 – m, 6 – k)
x = 6 + 2 = 8;
y = 8*2 = 16
z = 16*8/2 = 64
m = 16 n = 3 k 64
unde gresesc ?
__________________
-Tip: Notebook (HP 530)
-Procesor: Intel Core Duo T2700 (2.17Ghz)
-Ram: 2 GB ram
-Placa video: Intel Media Graphics Accelerator 950
-Sistem de operare: Ubuntu 9.04 Jaunty Jackalope
-Monitor: 15.4" WXGA (1280x800)

Last edited by void; 17.10.2009 at 17:43:33.
void is offline   Reply With Quote
Vechi 17.10.2009   #7
SiskOZ
64-Bit member
 
SiskOZ's Avatar
 
Data înregistrării: 06.09.2006
Locație: Omul cu napolitane
Mesaje: 319
Rep Power: 6
SiskOZ is on a distinguished road
Implicit

p(y:integ , var x:interger)\
y=y+1
x=x*0
.......
z=1
m=89988234

p(z,m)
z va lua valoarea 1 deoarece este variabila y este varibila globala cu referire la z
m ramane la valoarea lui , deoare x este variabila locala , in interioru procerei , si nu schimba valoarea lui m .

daca nici acum nu ai intels .. incerca sa citesti teoria
__________________
1. My understanding of women goes only as far as the pleasures.
2. Nature intended women to be our slaves. They are our property.
---
3. Love is an irresistible desire to be irresistibly desired.
---
INSANE VANITY
SiskOZ is offline   Reply With Quote
Răspunde


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Moduri de afișare

Reguli de postare
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Pornit
emoticoanele sunt Pornit
Codul [IMG] este Pornit
Codul HTML este Oprit



Ora este GMT +3. Ora este acum 13:39:03.


Rulează cu: vBulletin Version 3.8.4
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Forum SEO by Zoints

XXXXXXXXXXXXXXXXXXX
Inactive Reminders By Icora Web Design