Varianta 003, s III - afisare

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 003, s III - afisare

Postby andreiandreiq » 07 Jan 2011, 16:47

Am urmatoarea problema:

2. Pentru definiţia alăturată a subprogramului f, ce se afişează ca urmare a apelului f(26);?

  1. procedure f (x:integer);
  2. begin
  3.   if x>0 then
  4.   begin
  5.     write('x'); f(x div 3); write('y')
  6.   end
  7. end;


Sa imi spuna cineva ce ii afiseaza dupa ce rezolva. :D
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Varianta 003, s III - afisare

Postby Dexter » 07 Jan 2011, 17:58

Este vorba de apeluri recursive ale funcţiei f.
  1. >Apel iniţial: f(26)
  2. >Afişează: 'x'
  3.     >>Apelează: f(8)
  4.     >>Afişează: 'x'
  5.         >>>Apelează: f(2)
  6.         >>>Afişează: 'x'
  7.             >>>>Apelează: f(0) -- nu se execută nicio comandă
  8.         >>>-- înapoi la f(2), din f(0)
  9.         >>>Afişează: 'y'
  10.     >>-- înapoi la f(8), din f(2)
  11.     >>Afişează: 'y'
  12. >-- înapoi la f(26), din f(8)
  13. >Afişează: 'y'
  14.  
  15. Rezultat: xxxyyy 
1p / 1 votes
User avatar
Dexter
Word
 
Joined: 04 Jan 2010
Location: Secret Lab
Status: 44.5

Re: Varianta 003, s III - afisare

Postby andreiandreiq » 07 Jan 2011, 18:21

Deci de fiecare data se rezolva pana la apelul functiei f, fac doar:
  1.  begin
  2.      write('x'); f(x div 3);


Si dupa ce ajung la f(0) trec la write('y').

Poti sa imi explici te rog si problema de mai jos, sa ma prind si eu cum se rezolva problemele de recursivitate.

2. Pentru subprogramul f definit alăturat, ce se afişează ca urmare a apelului f(15,2);?

  1. procedure f (n,x:integer);
  2. begin
  3.   if x>n then write('*')
  4.   else
  5.   begin f(n,x+4); write(x mod 10) end
  6. end;
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Varianta 003, s III - afisare

Postby Dexter » 07 Jan 2011, 19:08

     În exemplul al doilea, n rămâne neschimbat (deci pentru f(15,2), n va rămâne 15).
     Pe ramura else a condiţiei, apelul f(n,x+4) este înaintea comenzii write (x mod 10), deci întâi se va apela f recursiv, de mai multe ori, până la condiţia de oprire, iar apoi, pe măsură ce se părăseşte fiecare apel, se afişează x mod 10, adică restul împărţirii lui x la 10.
  1. >Apelează: f(15, 2)
  2.     >>Apelează: f(15, 6)
  3.         >>>Apelează: f(15, 10)
  4.             >>>>Apelează: f(15, 14)
  5.                 >>>>>Apelează: f(15, 18)
  6.                 >>>>>Afişează: * -- condiţia de oprire x>n
  7.  
  8.             >>>> -- înapoi la f(15, 14)
  9.             >>>>Afişează: 4
  10.  
  11.         >>> -- înapoi la f(15, 10)
  12.         >>>Afişează: 0
  13.  
  14.     >> -- înapoi la f(15, 6)
  15.     >>Afişează: 6
  16.  
  17. > -- înapoi la f(15, 2)
  18. >Afişează: 2
  19.  
  20. Se afişează: *4062
1p / 1 votes
User avatar
Dexter
Word
 
Joined: 04 Jan 2010
Location: Secret Lab
Status: 44.5

Re: Varianta 003, s III - afisare

Postby andreiandreiq » 07 Jan 2011, 19:23

Mersi :D
Am rezolvat eu una:

Pentru definiţia alăturată a subprogramului f, ce se afişează ca urmare a apelului f(10);?

  1. procedure f (b:integer);
  2. begin
  3.   if 3<=b then
  4.   begin
  5.     f(b-2); write(‘*’)
  6.   end
  7.   else
  8.     write(b)
  9. end;


Se afiseaza: 2****

Cred ca ii bine :-?
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33


Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests