infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Constantin Dogaru din Februarie 20, 2013, 18:33:26



Titlul: Problema medie aritmetica
Scris de: Constantin Dogaru din Februarie 20, 2013, 18:33:26
Bun. o problema banala care nu-mi afiseaza rezultatul dorit din motive necunoscute.
algoritmul este urmatorul:

#include <iostream>

using namespace std;

int main()
{ int n,a[100],i,s=0;
float ma=0;
cin>>n;
for(i=0;i<n;i++)
cin>>a;
for(i=0;i<n;i++)
s=s+a;
ma=s/n;
cout<<ma;
 return 0;
}


Ideea e ca imi calculeaza media aritmetica ca si cand as fi declarat-o cu int,desi ea e cu float.Nu-mi calculeaza cu virgula si nu inteleg de ce.Stiu ca am mai facut
problema asta de mai multe ori si a mers,am uitat eu ceva sau care e problema?


Titlul: Răspuns: Problema medie aritmetica
Scris de: Pirtoaca George Sebastian din Februarie 20, 2013, 18:41:17
Tu declari variabila s float, dar operatiile se executa pe int. Inlocuieste asta
Cod:
ma=s/n;
cu
Cod:
ma=(float)s/n;
si o sa mearga. Succes!  :ok:


Titlul: Răspuns: Problema medie aritmetica
Scris de: Constantin Dogaru din Februarie 20, 2013, 18:47:32
Mersi,dar la liceu am facut si asa si a mers si folosesc acelasi compilator.Pana acum nu mi-a facut nicio problema cel de acasa,e codeblocks-ul din pachetul oji.
Deci nu e corect cum am scris eu?


Titlul: Răspuns: Problema medie aritmetica
Scris de: Pirtoaca George Sebastian din Februarie 20, 2013, 18:48:09
Nu, nu e corect.
Asta se mai intampla si cand faci suma a doua numere , fiecare int, suma care depaseste int.
Trebuie sa scrii:
Cod:
 int a, b;
long long s;
s = 0LL + a + b
sau
Cod:
s = (long long) a + b
Ideea e ca compilatorul executa operatiile pe int, nu conteaza tipul variabilei.


Titlul: Răspuns: Problema medie aritmetica
Scris de: Constantin Dogaru din Februarie 20, 2013, 19:10:49
am descoperit care era greseala,de ce-mi mergea inainte si acum nu mai merge.
Trebuie si s-ul declarat tot cu float pentru ca o valoare de tip intreg pe alta valoare de tip intreg va da tot un intreg si nu asta-i rezultatul pe care il urmaresc.
float ma=0,s=0; si totul e bine