varianta 73 sII bac 2009 neintensiv

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.

varianta 73 sII bac 2009 neintensiv

Postby nutzu2010 » 08 Jun 2010, 20:49

am urmatoarea problema:
Ce se va afişa în urma executării subprogramului
alăturat, la apelul F(56);? (6p.)
  1.  
  2. procedure F(x:integer);
  3. begin
  4.   if x<>0 then
  5.      begin
  6.      F(x div 2);
  7.      write (x mod 10)
  8.      end;
  9. end;
  10.  

mie imi afiseaza 13748
am vazut la raspunsuri ca trebuie sa-mi afiseze 137486
de ce trebuie sa-l afisez si pe 6?
eu stiu(asa mi-a explicat profa') ca daca trebuie sa afisez ceva dupa apelul F ,o sa le afisez in ordine inversa...adica o ia inapoi pana la f(56) si afiseaza 56 mod 10?
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: varianta 73 sII bac 2009 neintensiv

Postby smith » 08 Jun 2010, 20:54

Pai da ... o ia inapoi pana la 56.

Eu imi imaginez functiile recursive ca niste papusi dinalea rusesti matriosca. Sau imi mai imaginez ca codul se "dilata" si dupa ce termina sa creasca, revine inapoi la forma initiala.

56<-28<-14<-7<-3<-1
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: varianta 73 sII bac 2009 neintensiv

Postby nutzu2010 » 08 Jun 2010, 21:07

ok...deci el o iau inapoi pana la 56 si scrie x mod 10
dar de ce sare peste f(x div 5) ?
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: varianta 73 sII bac 2009 neintensiv

Postby v0id » 08 Jun 2010, 22:40

Eu ma uit de 5 minute la ultima intrebare si nu inteleg ce vrei sa spui cu "f(x div 5)". Poti sa fii mai explicit te rog?
Poate sunt eu prea obosit...
0,0p / 0 votes
A good coder is never on holiday - he may be working on a different machine, that's about as far as it gets.
User avatar
v0id
Word
 
Joined: 05 Jan 2010
Location: 127.0.0.1
Status: 39.5

Re: varianta 73 sII bac 2009 neintensiv

Postby Adrian » 08 Jun 2010, 23:17

si eu m-am uitat lung si am presupus ca vrea sa intrebe de ce nu se executa ultimul write, ala de 56 mod 10... pentru ca asta am inteles ca e problema lui... desi am dat copy-paste in delphi si la mine merge perfect :|
0,0p / 0 votes
User avatar
Adrian
Byte
 
Joined: 04 May 2010
Status: 13.5

Re: varianta 73 sII bac 2009 neintensiv

Postby smith » 09 Jun 2010, 09:01

nutzu2010 wrote:ok...deci el o iau inapoi pana la 56 si scrie x mod 10
dar de ce sare peste f(x div 5) ?


X div 5? cred ca ai vrut sa spui X div 2 .
Sa o luam pas cu pas.
Asta e acelasi cod copiat sa iti fie la indemana:
  1.  procedure F(x:integer);
  2.  begin
  3.    if x<>0 then
  4.       begin
  5.       F(x div 2);
  6.       write (x mod 10)
  7.       end;
  8.  end


X1,X2,X3,X4,X5,X6,X7 - sunt x-urile din procedura F() . Le-am notat asa pentru ca sunt variabile diferite! De fiecare data cand este apelata procedura F() se aloca memorie speciala pentru un X (adica se face loc in memorie pentru variabila x din procedura). Numarul de dupa X arata adancimea recursiunii.

  1. begin
  2. Se apeleaza procedura f(56);
  3. X1 devine 56.
  4. Este X1 diferit de 0?  DA->
  5.     |begin
  6.     |Se apeleaza procedura f(28);
  7.     |X2 devine 28.
  8.     |Este X2 diferit de 0? DA->
  9.     |    |begin
  10.     |    |Se apeleaza procedura f(14);
  11.     |    |X3 devine 14.
  12.     |    |Este X3 diferit de 0? DA->
  13.     |    |    |begin
  14.     |    |    |Se apeleaza procedura f(7);
  15.     |    |    |X4 devine 7.
  16.     |    |    |Este X4 diferit de 0? DA->
  17.     |    |    |    |begin
  18.     |    |    |    |Se apeleaza procedura f(3);
  19.     |    |    |    |X5 devine 3.
  20.     |    |    |    |Exte X5 diferit de 0? DA->
  21.     |    |    |    |    |begin
  22.     |    |    |    |    |Se apealeaza procedura f(1);
  23.     |    |    |    |    |X6 devine 1.
  24.     |    |    |    |    |Este X6 diferit de 0? DA->
  25.     |    |    |    |    |    |begin
  26.     |    |    |    |    |    |Se apeleaza procedura f(0);
  27.     |    |    |    |    |    |X7 devine 0.
  28.     |    |    |    |    |    |Este X7 diferit de 0? NU->
  29.     |    |    |    |    |    |    | inapoi un nivel  {aici cred ca te referi ca sare }
  30.     |    |    |    |    |    |Scrie X6 mod 10 {adica 1}
  31.     |    |    |    |    |    |end;
  32.     |    |    |    |    |Scrie X5 mod 10 {adica 3}
  33.     |    |    |    |    |end;
  34.     |    |    |    |Scrie X4 mod 10 {adica 7}
  35.     |    |    |    |end;
  36.     |    |    |Scrie X3 mod 10 {adica 4}
  37.     |    |    |end;
  38.     |    |Scrie X2 mod 10 {adica 8}
  39.     |    |end;
  40.     |Scrie X1 mod 10 {adica 6}
  41.     |end;
  42. end;


Aici poti observa cum creste codul daca il "desfaci".
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: varianta 73 sII bac 2009 neintensiv

Postby Adrian » 09 Jun 2010, 11:06

@nutzu
Scuze dar eu cred ca functionez in logica inversa... eu am presupus ca "mie imi afiseaza X" inseamna ca ai compilat si rulat codul si ti-a afisat rezultatul gresit... am dreptate sau nu?
0,0p / 0 votes
User avatar
Adrian
Byte
 
Joined: 04 May 2010
Status: 13.5

Re: varianta 73 sII bac 2009 neintensiv

Postby nutzu2010 » 09 Jun 2010, 16:49

Adrian wrote:@nutzu
Scuze dar eu cred ca functionez in logica inversa... eu am presupus ca "mie imi afiseaza X" inseamna ca ai compilat si rulat codul si ti-a afisat rezultatul gresit... am dreptate sau nu?

Nu l-am compilat... eu doar l-am gandit dupa acea functie recursiva pentru ca la Bac nu o sa am un compilator....
Si da, acolo am gresit eu, nu e "x div 5", ci "x div 2" (cred ca m-am grabit , ma scuzati)


L.E. (-- 09 Jun 2010, 15:17 --)

Ms smith, am mai inteles cat de cat... deci cand trebuie sa afiseze, o ia inapoi si scrie "x mod 10", inclusiv pentru 56.
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0

Re: varianta 73 sII bac 2009 neintensiv

Postby Adrian » 09 Jun 2010, 16:58

OK, am inteles... e ok sa incerci sa le gandesti dar cred ca ti-ar fi util si un compilator... incearca de exemplu sa rulezi programul anterior si sa pui niste mesaje din loc in loc pentru a vedea unde e programul tau si ce executa... ca sa iti faci o idee de modul in care se apeleaza functiile si ruleaza instructiunile... de exemplu, ai putea sa pui un mesaj de "Apelez functia F pentru x=..." inainte de apel si un "Revenit din apel F pentru x=..." dupa... asa poti sa vezi mai OK modul in care se realizeaza apelurile astea in realitate... pe deasupra, de fiecare data cand modifici o functie cred ca vei intelege mai bine ce si cum functioneaza (pentru ca trebuie sa te gandesti exact unde sa pui mesajele in asa fel incat sa-ti ofere cat mai multe informatii si sa nu iti umple nici consola pe degeaba)... e o idee si-ti recomand sa o incerci cand nu intelegi functionalitatea programului.
0,0p / 0 votes
User avatar
Adrian
Byte
 
Joined: 04 May 2010
Status: 13.5

Re: varianta 73 sII bac 2009 neintensiv

Postby nutzu2010 » 09 Jun 2010, 17:12

ok...mersi mult...am incercat si e mai bine asa...
0,0p / 0 votes
User avatar
nutzu2010
Bit
 
Joined: 27 Feb 2010
Status: 0


Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests