Pseudocod. Eroare la afisare.

Această secţiune se ocupă cu programarea, fără a ţine cont de limbaj. Dacă vrei (sau trebuie) să înveți algoritmică, aici este locul potrivit. Descrieri şi idei de algoritmi, algoritmi clasici și întrebări pe baza acestora, toate vor fi postate aici.

Pseudocod. Eroare la afisare.

Postby Cosmin_NTG » 08 May 2011, 19:17

Salut! Am urmatorul pseudocod:
  1. citeste x (numar natural)
  2. y<-o
  3. repeta
  4.    y<-y*10+9-x%10
  5. pana cand x<=y sau y=0
  6. scrie y
  7.  

Problema este ca nu imi afiseaza corect atunci cand il implementez in C++ pentru valoarea 274 (cea indicata de problema).
Aceasta este transpunerea in C++:
  1. #include<iostream>
  2. using namespace std;
  3. int x,y;
  4. int main()
  5. {         cout<<"x=";
  6.           cin>>x;
  7.           y=0;
  8.           do
  9.           {
  10.               y=y*10+9-x%10;
  11.           }while((x<=y)||(y==0));
  12.           cout<<y;
  13.           return 0;
  14. }
  15.  

Eu am gandit in felul urmator:
  1.  
  2. x<-274
  3. y<-0
  4. respecta una dintre acele conditii, deci
  5. y<-0*10+9-4=0+5=5
  6. apoi iar, y<-5*10+9-4=50+5=55
  7. y<-55*10+9-4=550+5=555.
  8.  
Acum ar trebuie sa iasa din structura repetitiva si sa afiseze 555, dar el afiseaza 5. Asta inseamna ca iese din while dupa prima iteratie. Care sa fie problema?
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: Pseudocod. Eroare la afisare.

Postby smith » 08 May 2011, 19:19

Problema că nu ai transpus bine codul din pseudocod în C++.

Structura de tipul [repeat - până când] este echivalentă cu cea din pascal : [repeat - until].
DAR nu este echivalentă cu cea din C/C++ : [do - while] sau [repetă - cât timp].

Deci linia respectivă cred că ar trebui să fie:
  1. while( (x>y) && (y!=0) )


Mai departe nu m-am uitat să văd/testez.
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: Pseudocod. Eroare la afisare.

Postby DarkByte » 08 May 2011, 19:22

Cosmin_NTG wrote:
  1. #include<iostream>
  2. using namespace std;
  3. int x,y;
  4. int main()
  5. {         cout<<"x=";
  6.           cin>>x;
  7.           y=0;
  8.           do
  9.           {
  10.               y=y*10+9-x%10;
  11.           }while((x<=y)||(y==0));
  12.           cout<<y;
  13.           return 0;
  14. }
  15.  



Conditia de la do .. while se citeste asa : fa instructiuni cat timp (x <= y) SAU (y = 0) ... surpriza, x este mai mare decat y, asa ca iese dupa prima iteratie :)

L.E. smith a fost mai grabit, dar am zis sa las si explicatia mea ... :D
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Pseudocod. Eroare la afisare.

Postby Cosmin_NTG » 08 May 2011, 19:45

Va multumesc. Chiar maine am teza la informatica si nu stiam asta cu : "repeta...pana cand"(transpunerea) :-? .
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10


Return to Algoritmică

Who is online

Users browsing this forum: No registered users and 0 guests