infoarena

Comunitate - feedback, proiecte si distractie => Off topic => Subiect creat de: FMIAnita Liviu din Februarie 14, 2010, 13:54:28



Titlul: Problema cu o problema...
Scris de: FMIAnita Liviu din Februarie 14, 2010, 13:54:28
Salutari,eu deranjez din nou...mi-a dat un prieten o problema care suna cam asa: Se citesc de la tastatura numerele a,b,c.Ordoneti crescator numerele a,b,c , in functie de numarul de divizori.
Dupa ce m-am scremut umpic,am scris asta:
Cod:
//Se citesc 3 variabile: a,b,c;Afisati-le in ordinea crescatoare a numarului de divizori
#include <iostream.h>
#include <math.h>
int main(){
int a,b,c,radical,i,nr_a,nr_b,nr_c;
nr_a=0;nr_b=0;nr_c=0;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"c=";cin>>c;
radical=static_cast<int>(sqrt(a));
for(i=2;i<=radical;i++){
if(a%i==0){
nr_a=nr_a+1;}
}
radical=static_cast<int>(sqrt(b));
for(i=2;i<=radical;i++){
if(b%i==0){
nr_b=nr_b+1;}
}
radical=static_cast<int>(sqrt(c));
for(i=2;i<=radical;i++){
if(c%i==0){
nr_c=nr_c+1;}
}
/*aici s-a terminat numararea divizorilor numerelor a,b,c
tot ce urmeaaza reprezinta ordonarea celor 3 numere,in functie de numarul de divizori*/
if(nr_a<=nr_b && nr_a<=nr_c){
cout<<c<<", "; //cica pe aceasta linie de cod ar fii eroarea...
if (nr_b <= nr_c){
cout<<b", ";
cout<<c<<", ";}
else{
cout<<c<<", ";
cout<<b<<", ";}
}
else{
if (nr_b<=nr_a && nr_b<=nr_c){
cout<<b<<", ";
if (nr_a<=nr_c){
cout<<a<<", ";
cout<<c<<", ";}
else{
cout<<c<<", ";
cout<<a<<", ";}}
if (nr_c<=nr_a && nr_c<=nr_b){
cout<<c<<", ";
if (nr_a<=nr_b){
cout<<a<<", ";
cout<<b<<", ";}
else{
cout<<b<<", ";
cout<<a<<", ";}
}
}
return 0;}


insa de aici in colo nu am mai avut ce-i face...de la undeva la 8 erori,rusie sa-mi fie ca scriam (nr_a<=nr_b) && (nr_a<=nr_c) ,in loc de (nr_a<=nr_b && nr_a<=nr_c),insa omu' din greseli invata :D,am coborat la o eroare ,am bagat si niste static_cast-uri (sa scap de o parte din warninguri,ca ma ofticau)...insa acea eroare care a ramas imi cam da batai de cap...imi poate spune cineva ce am gresit?
PS: Am precizat pe cod la ce linie imi indica, compilatorul eroarea ,care suna cam asa : syntax error before string constant ...pur si simplu nu ii pot da de capat...
PPS:Tin sa il rog pe cel care doreste sa ma ajute,sa nu modifice sursa prea tare,ca sa pot intelege,fiindca asta e si ideea...


Titlul: Răspuns: Problema cu o problema...
Scris de: alexandru din Februarie 14, 2010, 14:04:18
Tin sa te anunt ca eroarea nu-i acolo ci cu vreo 2 linii mai jos
Cod:
cout<<b", "; //aici e eroarea
Corect ii
Cod:
cout<<b<<", ";
Ai putea folosi o functie care sa determine divizori unui numar ( daca tot cautai "probleme cu functii" :P )
ps: Nu-i mai simplu radical=(int)sqrt(...) decat sa scri static_cast<int> ?


Titlul: Răspuns: Problema cu o problema...
Scris de: FMIAnita Liviu din Februarie 14, 2010, 15:08:49
multumesc mult :D dupa ce am postat mi-am dat seama ca ar merge cu funtii,insa m-am gandit sa o las asa,daca tot era postata in forma asta :D oricum,in 15 minute o fac cu functie...si multumesc mult pentru gasirea erorii...eu m-am dat cu capu de tastatura vro 20 de minute,si tot nu am gasit nimic :D


Titlul: Răspuns: Problema cu o problema...
Scris de: Pripoae Teodor Anton din Februarie 14, 2010, 18:23:57
Tin sa te anunt ca eroarea nu-i acolo ci cu vreo 2 linii mai jos
Cod:
cout<<b", "; //aici e eroarea
Corect ii
Cod:
cout<<b<<", ";
Ai putea folosi o functie care sa determine divizori unui numar ( daca tot cautai "probleme cu functii" :P )
ps: Nu-i mai simplu radical=(int)sqrt(...) decat sa scri static_cast<int> ?

floor(sqrt(...)). Cast-ul la int iti rotunjeste la cel mai apropiat intreg.


Titlul: Răspuns: Problema cu o problema...
Scris de: alexandru din Februarie 14, 2010, 19:06:05
vrei sa zici ca pentru 5.66674 ar rontuji la 6 (cast-ul) ? Nu, tot la 5 :)


Titlul: Răspuns: Problema cu o problema...
Scris de: Andrei Grigorean din Februarie 14, 2010, 19:17:59
Tin sa te anunt ca eroarea nu-i acolo ci cu vreo 2 linii mai jos
Cod:
cout<<b", "; //aici e eroarea
Corect ii
Cod:
cout<<b<<", ";
Ai putea folosi o functie care sa determine divizori unui numar ( daca tot cautai "probleme cu functii" :P )
ps: Nu-i mai simplu radical=(int)sqrt(...) decat sa scri static_cast<int> ?

floor(sqrt(...)). Cast-ul la int iti rotunjeste la cel mai apropiat intreg.

Castul la int te scapa de partea fractionara.


Titlul: Răspuns: Problema cu o problema...
Scris de: Pripoae Teodor Anton din Februarie 14, 2010, 20:53:26
Mdea, asa e. Nu stiu de ce aveam eu impresia ca e cum am zis. N-am prea incercat sa fac cast la int asa. Foloseam floor sau ceil. Oricum, nu sunt sigur ca e standard treaba asta. Tin minte ca o data, acu ceva timp imi busea la o faza de genul.


Titlul: Răspuns: Problema cu o problema...
Scris de: Andrei Grigorean din Februarie 14, 2010, 21:14:15
Stiu ca exista un standard pentru conversia floating point -> int.


Titlul: Răspuns: Problema cu o problema...
Scris de: Radu Grigore din Februarie 22, 2010, 14:37:16
Cast la int rotunjeste catre zero.
Vezi 6.3.1.4 (pagina 43): http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf