emanuel.98 Posted October 14, 2015 Report Posted October 14, 2015 (edited) Salutare tuturor!Astazi am dat un test la informatica,si vreau sa va intreb pe voi daca este corect modul in care am rezolvat un exercitiu pe care l-am avut la test:Cerinta: Se citeste un numar natural n de 3 cifre distincte.Sa se afiseze cel mai mic numar de trei cifre care se poate forma cu cifrele numarului dat.Rezolvarea mea(pseudocod):startciteste na<- (n/100) %10 b<- (n/10) %10 c<- n%10 (am calculat cifrele numarului aici) daca a>b && b>0 atunci aux<- a , a<-b , b<- aux daca a>c && c>0 atunci aux<- a, a<-c, c<- aux daca b>c atunci aux<- b, b<-c , c<-aux (am ordonat cifrele numarului aici)scrie a*100+b*10+c (am scris numarul dupa ordonarea cifrelor aici)stopIn mod normal din cate am inteles ar trebui la sfarsit pusa conditia "daca a==0 scrie "eroare"(pentru ca numarul nu mai e de trei cifre),altfel scrie a*100+b*10+c"La mine problema e "de ce am pus b>0 si c>0".Dupa cum m-am gandit eu,conditiile acelea previn interschimbarea dintre a si b respectiv dintre a si c daca b sau c sunt egale cu 0,ca altfel daca se interschimbau,indiferent daca b sau c erau egale cu 0 sau nu,putea sa devina un numar de 2 cifre sau ,in cazuri particulare, de o cifra.Astfel evit sa mai pun conditia cu a==0 deoarece,dupa algoritmul meu,cifra a nu poate sa devina 0 dupa ordonarea crescatoare a cifrelor numarului n.Voi ce parere aveti?E corect?E gresit?Am uitat sa scriu ceva?Va rog sa imi spuneti in comentarii PS:Sorry for the long postPPS: Daca trebuia pusa problema in categoria "Ajutor",imi cer scuze. Edited October 14, 2015 by emanuel.98 Quote
theeternalwanderer Posted October 14, 2015 Report Posted October 14, 2015 In mod normal din cate am inteles ar trebui la sfarsit pusa conditia "daca a==0 scrie "eroare"(pentru ca numarul nu mai e de trei cifre),altfel scrie a*100+b*10+c"^ asta este o rezolvare lenesa care nu respecta cerintaRezolvarea ta este corecta si conform cerintei.Programul ar trebui sa iti dea o eroare doar in cazul in care datele de intrare nu sunt in numar natural de 3 cifre. Quote
emanuel.98 Posted October 14, 2015 Author Report Posted October 14, 2015 Multumesc theeternalwanderer.Imi cer scuze,a fost o greseala de a mea.Era acolo "Daca a==0 atunci aux<-a,a<-b,b<-aux",adica se interschimba cu valoarea lui bPresupun ca ambele solutii sunt bune Quote
m3gatr0n Posted October 14, 2015 Report Posted October 14, 2015 Salut,Eu as face asa in locul tau:1. Verific daca input-ul meu se afla in intervalul [123,789], daca nu => eroare2. Verific input-ul sa fie un numar natural (adica 123, nu 123,45)! Aici poti permite orice tip de numar, daca folosesti tipul de date corect, in functie de limbajul de programare folosit (adica daca-ti rotunjeste 123,49 la 124 si 123,51 la 126).3. Extrag fiecare numar introdus si le definesc fiecaruia o variabila separata/pun intru vector (iarasi, in functie de limbaj).4. Aplic algoritmul de cautare a celui mai mic numar (sortare de orice fel vrei tu, iarasi, in functie de limbajul folosit)5. Reconstruiesc cele 3 numere pe baza valorilor obtinute din algoritm6. Afisez rezultatul7. Comentez codul si il testez8. Beau o bereDaca vrei mai detaliat de-atat, spune si te rezolv. Quote
emanuel.98 Posted October 14, 2015 Author Report Posted October 14, 2015 Multumesc m3gatr0n Pare mai viabila solutia ta insa cred ca depaseste putin nivelul meu de programator Cand ai spus "Extrag fiecare numar" nu te-ai referit cumva la cifra? Quote
m3gatr0n Posted October 14, 2015 Report Posted October 14, 2015 Multumesc m3gatr0n Pare mai viabila solutia ta insa cred ca depaseste putin nivelul meu de programator Cand ai spus "Extrag fiecare numar" nu te-ai referit cumva la cifra?Ba da, ma refeream la cifra.De ce zici ca depaseste nivelul tau? Pentru punctele 1,2 si 4 faci functii si aia e.Bafta!PS: Niste sfaturi: -inainte de a scrie o singura linie de cod gandeste-te la ceea ce vrei sa faci si CUM; pana nu iti e clar, n-are rost sa te apuci-foloseste debugger-ul la maxim pana stapanesti limbajul, te va ajuta mult-declara variabilele cu cap, astfel incat daca-ti citesti codul peste o luna sa stii ce face-testeaza fiecare varianta ce-ti vine in minte si trateaza user-ul ca un neavizat-ramai curios-cauta sa intelegi logica, inveti solutia pe de rost-citeste help-ul ca sa intelegi ce face o instructiune; limbajul e doar o unealta, nimic mai mult-citeste si cauta sa intelegi coduri scrise de altii, te va ajuta sa vezi stiluri diferite -daca te blochezi, fa o pauza si revino dupa cateva minute cu mintea clara-cauta ajutor de la altii mai buni ca tine, doar asa poti inainta Quote
andrei98M Posted October 14, 2015 Report Posted October 14, 2015 ordonezi cifrele din numar, simplest solution Quote
emanuel.98 Posted October 15, 2015 Author Report Posted October 15, 2015 Multumesc pentru sfaturi Andrei,nu poti sa le ordonezi pur si simplu,poate sa devina un numar,cum am zis,de doua cifre sau o cifra si se duce problema. Quote