Moderators Courage Posted February 19, 2013 Moderators Report Posted February 19, 2013 Le-am făcut bine? 1. Se citeşte un număr natural n. Să se verifice dacă inversul său este divizibil cu 8 şi să se afişeze un mesaj corespunzător. citeşte n aux <- n inv <- 0 -cât timp (aux!=0) execută | inv <- inv*10 + aux | aux <- aux/10 -[#] -dacă inv%8=0 atunci | scrie "numărul citit este divizibil cu 8" |altfel | scrie "numărul nu este divizibil cu 8" -[#] 2. Se cunosc cele n note ale elevilor clasei a IX-a A la informatică. Scrieţi un program care afişează nota minimă şi de câte ori apare. citeşte n min <- 0 aux <- n nr <- 0 -pentru i<- 1,n execută | -cât timp (aux!=0) execută | | -dacă aux < min atunci | | | min <- aux | | |altfel | | | nr <- nr+1 | | -[#] | | aux <- aux/10 | -[#] -[#] scrie aux, nr 3. Se citeşte un număr natural n. Să se afişeze cifra maximă şi de câte ori apare citeşte n max <- 0 aux <- n/10 nr <- 0 -cât timp (aux!=0) execută | -dacă aux > max atunci | | max <- aux | |altfel | | nr <- nr+1 | -[#] | aux <- aux/10 -[#] scrie max, nr 4. e citesc n numere naturale. Să se numere câte dintre ele au suma cifrelor un număr par citeşte n s <- 0 nr <- 0 -pentru i< 1,n execută | -cât timp (n!=0) execută | | s <- s + n | | n <- n/10 | -[#] | -dacă s%2 = 0 atunci | | nr <- nr+1 | -[#] -[#] scrie nr 5. Să se afişeze numerele din intervalul [a,b] care sunt palindrom, cu a şi b două numere naturale citite de la tastatură. citeşte a citeşte b inv <- 0 nr <- 0 -pentru i<- a,b execută | aux <- i | -cât timp (i!=0) execută | | inv <- inv*10 + aux | | aux <- aux/10 | -[#] | -dacă i=inv atunci | | scrie i | -[#] -[#]
+Graham777 Posted February 19, 2013 Report Posted February 19, 2013 Nu știu sigur cât de corectă 3. Celelalte par în regulă. 1
Moderators Courage Posted February 19, 2013 Author Moderators Report Posted February 19, 2013 Da, am bagat un aux <- aux/10 (uitasem de el )
Solution +Lus Posted February 19, 2013 Solution Report Posted February 19, 2013 Pentru prima, vezi ca nu ai facut inversul. Aux nu pleaca cu n, lui aux ii dai ultima cifra a lui n, si faci asta cat timp mai ai cifre in n, dupa care verifici daca se imparte la 8. A doua nu-mi dau seama, dar vezi ca min pleaca cu 10 (10 e nota maxima), si n reprezinta numarul de note, nu nota in sine. A 3a e gresit iar. Iti iei un max<-0, nr<-1, c<-0; trebuie sa scoti ultima cifra din n, o compari cu max, daca e mai mare, max<-c; n<-n/10; nr<-1 (aici ii dai 1 pentru ca, daca ultima cifra sa zicem ca e 0, atunci va fi egal cu max si va merge pe altfel, deci nr creste; daca urmatoarea cifra e mai mare ca max, nr o sa fie 2 deci va trebui sa plecam cu el iar 1); , altfel daca max=c cresti nr si n<-n/10; altfel n<-n/10. Afisezi si cam asta e. Ultima, aceeasi greseala. Ultima cifra inseamna numar%10 nu numarul insine (deci inv<-nv*10+aux%10). Si vezi ca tu verifici pe aux acolo nu pe i (pe cat timp). 1
Moderators Courage Posted February 19, 2013 Author Moderators Report Posted February 19, 2013 La prima aux e băgată de mine. La clasă lucrăm mereu direct cu n.
+Lus Posted February 19, 2013 Report Posted February 19, 2013 Nu conteaza, linia inv <- inv*10 + aux tot gresita e. Asta nu e inversul, pur si simplu i-ai dat lui inv numarul aux.
Moderators Courage Posted February 19, 2013 Author Moderators Report Posted February 19, 2013 Defapt era inv <- inv*10 + aux%10 codu masii
Moderators Courage Posted February 25, 2013 Author Moderators Report Posted February 25, 2013 1. Se citesc n numere naturale. Să se afişeze cele care sunt perfecte (un nr. este perfect dacă este egal cu suma divizorilor săi fără el însuşi). natural n, x, s, d, i citeşte n s <- 0 ┌pentru i <- 1,n execută | citeşte x | ┌pentru d <- 1,x/2 execută | | ┌dacă x%d=0 atunci | | | s <- s+d | | └■ | └■ | ┌dacă x=s atunci | | scrie x | └■ └■ 2) Se citesc n numere naturale. Să se calculeze suma celor care au exact 3 divizori proprii. natural n, i, s, d, p citeşte n p <- 0 s <- 0 ┌pentru i <- 1,n execută | citeşte x | ┌pentru d <- 2,x/2 execută | | ┌dacă x%d=0 atunci | | | s <- s+d | | └■ | └■ | ┌dacă s=3 atunci | | p <- p+x | └■ └■ scrie p3) să se afişeze numărul divizorilor fiecărui număr din intervalul [a,b] natural a, b, s, d, n, i citeşte a citeşte b p <- 0 s <- 0 ┌pentru x <- a,b execută | ┌pentru d <- 1,x execută | | ┌dacă x%d=0 atunci | | | s <- s+1 | | └■ | └■ | scrie s └■ Le-am făcut bine?
+Lus Posted February 26, 2013 Report Posted February 26, 2013 1.#include<iostream.h> int main() {int n, i=1, d, x, s=0; cin>>n; while(i<=n){ cin>>x; for(d=1;d<=x/2;d++) if(x%d==0) s=s+d; if(s==x) cout<<x<<" "; i++; s=0; } } 2.#include<iostream.h> int main() {int n, nr=0, i=1, d=2, x, s=0; cin>>n; while(i<=n){ cin>>x; while(d<=x/2) { if(x%d==0) nr++; d++; } if(nr==3) s=s+x; i++; d=2; nr=0; } cout<<s; } 3. Nu trebuie sa faci suma, trebuie sa numeri divizorii fiecarui numar din interval si sa afizes numarul. Arata cam asa, cred: #include<iostream.h> int main() {int a, b, i, d=1, nr=0; cin>>a>>b; for(i=a;i<=b;i++){ for(d=1;d<=i;d++) if(i%d==0) nr++; cout<<nr<<" "; nr=0; } } Sunt cam obosit, dar sper sa fie bune. Le transformi tu in pseudo. 1
+GodsOtherHand Posted February 26, 2013 Report Posted February 26, 2013 love is a verb Love is a doing word
Moderators Courage Posted February 26, 2013 Author Moderators Report Posted February 26, 2013 ala e c++?
+Lus Posted February 26, 2013 Report Posted February 26, 2013 Da, God, am vazut greseala intr-un final si am corectat, am uitat sa intorc nr cu 0, pe foaie imi iesea pentru ca in capul meu tot pleca cu 0.Da, fa-l in pseudocod.cin = citestewhile = cat timpdaca = ifcout = scrie= este atribuire== este =++ inseamna ca cresti cu 1. 1
+GodsOtherHand Posted February 26, 2013 Report Posted February 26, 2013 da. bag picioru, nush ceam facut, am vrut sa editez si so dat totu peste cap. in fine, vad ca ai corectat. love is a verb Love is a doing word
Moderators Courage Posted March 14, 2013 Author Moderators Report Posted March 14, 2013 Să se transforme în C++: citeşe x, z (numere naturale) y<-0 ┌repetă | y<-y*10+x | x<-[x/100] └până când x=0 ┌cât timp y*z>0 şi y=z execută | y<-[y/10] | z<-[z/10] └■ ┌dacă y+z=0 atunci | scrie 1 |altfel | scrie 0 └■Ce am făcut eu, arată cam aşa:#include <iostream> using namespace std; int main() { unsigned x,z,y; cout<<"x="; cin>>x; cout<<"z="; cin>>z; while (x==0) { y=y*10+x; x=x/100; } while (y*z==0 and y==z) { y=y/10; z=z/10; } if (y+z==0){ cout<<"1";} else{ cout<<"0";} return 0; } am făcut bine?
+Lus Posted March 14, 2013 Report Posted March 14, 2013 Pe primul while pune x!=0, pentru ca tu in pseudocod ai 'pana cand x=0'.PS: Nu-i nevoie sa pui acolade cand executa doar o chestie. (pe if acolo, pe else, si deobicei) 1
hiey19 Posted March 14, 2013 Report Posted March 14, 2013 Acolo ai repeta cat timp. Incearca cu un do while. 1
+Lus Posted March 14, 2013 Report Posted March 14, 2013 N-are importanta, tot structura repetitiva e. 1
hiey19 Posted March 14, 2013 Report Posted March 14, 2013 Stiu.O sa faca acelas lucru.Ziceam ca sa respecte pesudocodul. 1
+skyler_sdf Posted March 14, 2013 Report Posted March 14, 2013 Să se transforme în C++: citeşe x, z (numere naturale) y<-0 ┌repetă | y<-y*10+x | x<-[x/100] └până când x=0 ┌cât timp y*z>0 şi y=z execută | y<-[y/10] | z<-[z/10] └■ ┌dacă y+z=0 atunci | scrie 1 |altfel | scrie 0 └■ Ce am făcut eu, arată cam aşa: #include <iostream> using namespace std; int main() { unsigned x,z,y; cout<<"x="; cin>>x; cout<<"z="; cin>>z; while (x==0) { y=y*10+x; x=x/100; } while (y*z==0 and y==z) { y=y/10; z=z/10; } if (y+z==0){ cout<<"1";} else{ cout<<"0";} return 0; } am făcut bine? dupa cin>>z; y=0; do{ { y=y*10+x; x=x/100; } while (x==0); while (y*z==0 && y==z) { y=y/10; z=z/10; } if (y+z == 0){ cout<<"1"; } else{ cout<<"0"; } return 0; } 1
+Lus Posted March 14, 2013 Report Posted March 14, 2013 Spun din nou, while (x!=0), nu are cum sa-ti repete pe x==0. 1
Moderators Courage Posted March 27, 2013 Author Moderators Report Posted March 27, 2013 2. Se cunosc cele n note ale elevilor clasei a IX-a A la informatică. Scrieţi un program care afişează nota minimă şi de câte ori apare. Am facut: #include <iostream> using namespace std; int main() { unsigned n,x,i,max,nr; cout<<"Introduceti numarul de note: "; cin>>n; nr=-2; max=0; for (i=1;i<=n;i++) { cout<<"Introduceti o nota: "; cin>>x; if (x>max) { nr=nr+1; max=x; } } cout<<"Nota maxima este "<<max<<" si apare de "<<nr<<" ori."; return 0; } L-am testat, e bun, insa mi se pare cam pompos, din cauza ca lui nr a trebuit sa ii dau valoarea -2. Se poate ceva mai simplu?
+GodsOtherHand Posted March 27, 2013 Report Posted March 27, 2013 if (x>max) { nr=nr+1; max=x; } regandeste partea asta, nu e buana love is a verb Love is a doing word
+Lus Posted March 27, 2013 Report Posted March 27, 2013 Vezi ca ai facut maximul nu minimul, si ce a zis God.
+GodsOtherHand Posted March 27, 2013 Report Posted March 27, 2013 ah da, vazand variabila max, am zis ca maximul il vrei...banui ca a gresit la enunt, nu la problema.. love is a verb Love is a doing word
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now