diferente functii si proceduri

Pascal este un limbaj imperativ, creat inițial pentru a ajuta la predarea noțiunilor de programare structurati studenților. Delphi, urmașul lui Pascal, este un mediu de dezvoltare pentru aplicații Windows. Delphi este primul limbaj de programare (Object Pascal, mai exact) care a îmbinat ușurința în programare a limbajelor de nivel înalt și puterea uneltelor de lucru de nivel scăzut într-un mediu RAD.

diferente functii si proceduri

Postby nutzu2010 » 24 Jun 2010, 19:36

care sunt diferentele dintre functii si proceduri?
eu stiu ca o functie returneaza ceva,in schimb procedura nu.
si cum imi dau seama ca trebuie sa folosesc functie sau procedura?
de exemplu aceasta problema:

Se consideră subprogramul numar, cu doi parametri, x şi nrp, care:
– primeşte prin intermediul parametrului, x, un număr natural nenul de cel mult 4 cifre;
furnizează prin intermediul parametrului nrp numărul de numere prime mai mici sau
egale cu x.
a) Scrieţi numai antetul subprogramului numar. (4p.)
b) Scrieţi programul Pascal care citeşte de la tastatură două numere naturale nenule de
cel mult 4 cifre, a şi b, şi prin apeluri utile ale subprogramului numar, se verifică dacă
intervalul determinat de a şi b conţine cel puţin un număr prim. Programul va afişa pe ecran
în caz afirmativ mesajul DA, iar în caz contrar mesajul NU. Prin intervalul determinat de a şi
b se înţelege intervalul [a,b] dacă a<b şi [b,a] în caz contrar.

eu am facut-o cu functie(pt ca mi-a zis cineva ca atunci cand apare cuvantul "furnizeaza" trebuie facuta cu functie) iar la rezolvari am vazut ca era cu procedura...
am testat-o in pascal si mi-a dat bine...deci cred ca e bine cu amandoua...
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: diferente functii si proceduri

Postby Dexter » 24 Jun 2010, 20:20

Probabil că nrp e un pointer sau o referinţă, iar subprogramul tau trebuie sa plaseze rezultatul la acea adresă, în loc să îl returneze. :-??
0,0p / 0 votes
User avatar
Dexter
Word
 
Joined: 04 Jan 2010
Location: Secret Lab
Status: 44.5

Re: diferente functii si proceduri

Postby nutzu2010 » 24 Jun 2010, 20:34

uitati si problema cum am rezolvat-o:
  1.  
  2. program calcul;
  3. var a,b,n,m,na,mb,e:integer;
  4. function numar(x,nrp:integer):integer;
  5. var i,j,k:integer;
  6. begin
  7. nrp:=0;
  8. for i:=2 to x do
  9. begin
  10. k:=0;
  11. for j:=2 to i div 2 do
  12. if i mod j=0 then k:=k+1;
  13. if k=0 then nrp:=nrp+1;
  14. end;
  15. numar:=nrp;
  16. end;
  17. begin
  18. readln(a,b);
  19. e:=0;
  20. na:=numar(a,n);
  21. mb:=numar(b,m);
  22. if na>mb then e:=na-mb
  23.          else e:=mb-na;
  24. if e<>0 then write('da')
  25.          else write('nu');
  26. readln;
  27. end.
  28.  

am zis ca daca [a,b] e un interval inseamna ca nr numerelor prime<=b trebuie sa contina si nr numerelor prime<=a
iar daca diferenta lor e diferita de 0 inseamna ca exita cel putin un nr prim in [a,b]
altfel nu exista niciun nr prim
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: diferente functii si proceduri

Postby DarkByte » 24 Jun 2010, 20:59

nutzu2010 wrote:... – furnizează prin intermediul parametrului nrp numărul de numere prime mai mici sau egale cu x. ...


Furnizeaza nu specifica neaparat functie, iar in contextul dat e destul vag. Ce e cert e faptul ca rezultatul (numar de numere prime) NU trebuie returnat care rezultat al unei functii, ci printr-un parametru prin adresa (furnizeaza prin intermediul parametrului nrp numarul ... ).

Un mic exemplu:
  1. function func_numar(var nrp: integer): integer;
  2. begin
  3.   nrp := 17; {aleator ales}
  4. end;
  5.  
  6. procedure proc_numar(var nrp: integer);
  7. begin
  8.   nrp := 17; {aleator ales}
  9. end;


Daca nu ai inteles ce-am spus, intreaba.

Bafta
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136

Re: diferente functii si proceduri

Postby nutzu2010 » 24 Jun 2010, 21:08

deci vrei sa spui ca daca subprogramul furnizeaza rezultatul prin intermediul unui parametru atunci trebuie sa folosim procedura,altfel folosim functie...

in acest exemplu ar trebui sa folosim functie,nu?

Elementele tabloului se afişează pe ecran, separate prin câte un spaţiu. (6p.)
4. a) Scrieţi definiţia completă a subprogramului dcm, cu doi parametri, care:
- primeşte prin parametrii a şi b două valori naturale din intervalul [1,30000]
- returnează o valoare naturală reprezentând cel mai mare număr care este atât divizor al lui a
cât şi divizor al lui b.
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: diferente functii si proceduri

Postby emi » 24 Jun 2010, 21:19

Daca subprogramul furnizeaza rezultatul prin intermediul unui parametru atunci trebuie sa folosim procedura, altfel folosim functie

In general da, si e de preferat. Dar asta nu inseamna ca nu ai voie sa folosesti functii cu parametrii prin referinta.

Scrieţi definiţia completă a subprogramului dcm, cu doi parametri, care:
- primeşte prin parametrii a şi b două valori naturale din intervalul [1,30000]
- returnează o valoare naturală reprezentând cel mai mare număr care este atât divizor al lui a
cât şi divizor al lui b.

In cazul de mai sus ai exemplu deja postat aici.
0,0p / 0 votes
User avatar
emi
Byte
 
Joined: 10 Apr 2010
Status: 18

Re: diferente functii si proceduri

Postby nutzu2010 » 24 Jun 2010, 21:19

aaaa...asa e...dar asta e criteriul dupa care folosim functie sau procedura,nu?
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: diferente functii si proceduri

Postby emi » 24 Jun 2010, 22:21

Am citeva recomandari:

1. Citeste enuntul problemei cu atentie, de obicei sugereaza si o rezolvare, chiar daca nu e optima.

2. Foloseste divide et impera cind planifici o rezolvare, adica imparti problema in subprobleme.
Detaliere:
Se cere sa se afiseze DA, daca in intervalul [a,b] sunt numere prime folosind subprogramul numar care contorizeaza cite numere prime sunt pina la x inclusiv.

  1. procedure numar(x: word; var nrp: word);
  2. begin
  3.   { seteaza nrp cite numere prime sunt pina la x }
  4. end;


ca sa numaram cite numere prime sunt pina la x ne ar fi de ajutor

  1. function este_prim(x: word): boolean;
  2. begin
  3.   { vezi discutia avuta pe privat }
  4. end;



3. Cind postezi cod in pascal, foloseste code=pascal intre [], si pune si tu alineat de 2 sau 4 spatii.
0,0p / 0 votes
User avatar
emi
Byte
 
Joined: 10 Apr 2010
Status: 18

Re: diferente functii si proceduri

Postby Adrian » 26 Jun 2010, 13:41

Porneste de la ideea ca un subprogram e o combinatie de: intrari (parametri), iesiri (sub diferite forme - fisiere, variabile modificate, etc) si codul care face legatura dintre ele doua. In mod normal, daca in interiorul functiei modifici valorile parametrilor transmisi, la iesirea din codul subprogramului valorile variabilelor din afara vor reveni la cele initiale. Atunci se pune problema cum poti sa calculezi niste valori care sa ajunga la exterior?

Functie - intoarce o valoare accesibila la modul valoare := functie(parametri)
Procedura - nu intoarce o valoare in acest fel; procedura poate fi folosita pentru iesiri in afara memoriei programului tau (deci nu va modifica variabilele din afara ei si va afisa rezultatele pe ecran, in fisiere, etc...) sau pentru iesiri in interiorul memoriei programului tau prin modificarea unor variabile in interiorul codului ei - si aici intervin pointerii care iti permit sa faci modificarile asupra unuia dintre parametri permanente.

In contextul dat poti sa iti dai seama ca se cere o procedura prin "furnizeaza PRIN INTERMEDIUL PARAMETRULUI NRP", adica rezultatul calculului va fi returnat printr-unul dintre parametri. Cum asta este singura iesire a subprogramului si ea este returnata printr-un parametru, vei folosi o procedura. Daca se spunea doar ca "furnizeaza numarul de numere etc...", fara a se specifica faptul ca prin parametru, ai fi putut folosi si o functie.
0,0p / 0 votes
User avatar
Adrian
Byte
 
Joined: 04 May 2010
Status: 13.5


Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests