Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: vectori...?  (Citit de 2404 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
fsanzi
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« : Martie 04, 2012, 09:14:41 »

deci incercam sa fac o problema cu vectori si m-am lovit de asta: "...unde MA este media aritmetica a elementelor vectorului INTREGI". vectorul imi zice sa-l initializez cu float.
deci, se ridica intrebarea... cum verific care elemente sunt intregi???
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #1 : Martie 04, 2012, 09:31:47 »

Pare lipsita de sens intrebarea ta. Ai putea posta intregul enunt ca sa te putem ajuta mai bine.

Un mod de a testa daca un numar real este intreg e urmatorul:

Cod:
double EPS = 0.00...001;

if (fabs(x - floor(x+0.5)) < EPS) {
...
}

Codul verifica daca numarul real este "cat vrei tu de aproape" de cel mai apropiat intreg. Ca sa verifici daca cele doua numere sunt foarte apropiate, testezi daca diferenta lor in modul este foarte mica. floor(x+0.5) returneaza cel mai aproape intreg. (Din cate stiu, C++ nu are o functie pentru a rotunji un numar real.)
« Ultima modificare: Martie 05, 2012, 18:00:13 de către Paul-Dan Baltescu » Memorat

Am zis Mr. Green
fsanzi
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #2 : Martie 04, 2012, 09:53:40 »

uite enuntul intreg:
Se citeste de la tastatura un vector v cu n componente reale.
  Sa se construiasca 2 vectori:
 - primul: va contine elementele vectorului v strict mai mari decat MA
 - al doilea: elementele lui v strictmai mari decat MA
 MA= media aritmetica a elementelor intregi din vector
Memorat
darkseeker
De-al casei
***

Karma: 29
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« Răspunde #3 : Martie 04, 2012, 18:04:48 »

O alta metoda de a verifica daca un numar este intreg este urmatoarea :
Cod:
if(x - int(x) == 0)
  cout<<"x este numar intreg";
else
  cout<<"x este numar real \ intreg";
Int(x) reprezinta partea intreaga a lui x .
Memorat
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #4 : Martie 05, 2012, 14:01:28 »

O alta metoda de a verifica daca un numar este intreg este urmatoarea :
Cod:
if(x - int(x) == 0)
  cout<<"x este numar intreg";
else
  cout<<"x este numar real \ intreg";
Int(x) reprezinta partea intreaga a lui x .

Aceasta este aceiasi metoda ca cea prezentata de Paul pentru ca int(x) este aproximativ acelasi lucru cu floor(x), diferenta fiind ca in primul caz avem ca rezultat un int iar in al doilea un double, pe langa faptul ca nu funtioneaza prea bine in practica.
Pentru ca valorile reale sunt stocate ca aproximari atunci cand sunt implicate in operatii apar erori de calcul. Destul de des vom ajunge sa avem stocat in variabila x valoarea 3.99999...98 in loc de a avea 4. Depinde foarte mult de felul in care aceste operatii sunt implementate de compilator si poti sa fii sigur ca depind semnificativ intre gnu gcc, mingw gcc, visual c si borland c. Compilatoarele moderne sunt mai destepte si isi dau seama mai bine ce fel de valoari sunt stocate in variabilele de tip double dar poti sa experimentezi putin in borland c ca sa observi cum acest cod nu rezolva bine problema.
Codul lui Paul este varianta sigura de a testa daca o variabila double stocheaza un intreg.

O alta varianta de a vedea ce numere sunt intregi in cazul problemei tale este de a citi partea intrega si partea fractionara a valorilor in variabile intregi separate. Presupunand ca numele iti sunt date cu zecimale poti avea ceva de genul:
Cod:
scanf("%d.%d", &partea_reala, &partea_fractionara);
if (partea_fractionara == 0) {
   [ avem un intreg ]
}
Atunci cand nu stii cum ti se dau numerele poti sa scrii astfel:
Cod:
scanf("%s", string);
if (sscanf(string, "%d.%d", &partea_reala, &partea_fractionara) == 1 || partea_fractionara == 0) {
  [ avem un intreg]
}
Memorat
darkseeker
De-al casei
***

Karma: 29
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« Răspunde #5 : Martie 05, 2012, 17:23:16 »

 @Stefan eu am testat-o in mingw si mi s-a parut ca se comporta bine , nu am luat in considerare ca persoana care intreaba ar putea folosi alt compilator . Oricum multumesc pentru explicatii si imi cer scuze pentru eventualele neplaceri create .
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #6 : Martie 05, 2012, 18:03:58 »

O alta metoda de a verifica daca un numar este intreg este urmatoarea :
Cod:
if(x - int(x) == 0)
  cout<<"x este numar intreg";
else
  cout<<"x este numar real \ intreg";
Int(x) reprezinta partea intreaga a lui x .
]

De fapt, ce nu e bine la codul tau este ca nu functioneaza corect daca x e "putin sub" numarul intreg. De exemplu, daca x = 3.99999998, atunci int(x) = 3 si deci testul va esua.

Imi place ideea lui Stefan. Wink
Memorat

Am zis Mr. Green
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines