Ştiri:

Vă rugăm să citiţi Regulamentul de utilizare a forumului Scientia în secţiunea intitulată "Regulamentul de utilizare a forumului. CITEŞTE-L!".

Main Menu

Problema informatică: media aritmetică

Creat de Ayumi, Octombrie 31, 2011, 11:10:33 PM

« precedentul - următorul »

0 Membri şi 1 Vizitator vizualizează acest subiect.

Ayumi

Buna seara !
Am o problema de informatica : La un concurs , in juriu sunt n membri.Sa se determine ce nota a primit Marius stiind ca cea mai mica si cea mai mare nota nu sunt luate in calcul la stabilirea punctajului.Cu alte cuvinte,media aritmetica a numerelor ramase.
Am facut un program,dar problema e ca imi imparte la 0 si media e 0.

#include <iostream>
using namespace std;

int main()
{
   int n,nr,max,min,k,s = 0,i;//k = numarul de numere citite de la tastatura,s = suma
   float ma;//ma = media aritmetica
   
   cin >> n;
   
   for (i = 1;i <= n;i++) {
       
       cin >> nr;
       k++;
       
       max = nr;
       
       if (nr > max){
       max = nr;
       }
       
       min = nr;
       
       if (nr < min){
       min = nr;
       }
       while (nr != max && nr != min) s = s+nr;
       }
       ma = s/k;
       
       cout << "Media este " << ma;
       return 0;
}

Unde este greseala?Imi imparte la 0 si nu iese media aritmetica.  
                                                                                                                 Multumesc anticipat !

tavy

#1
Trecem peste faptul că codul este destul de greu de urmărit pentru că este prost urmărit.
Ce văd la prima vedere:

max = nr;
if (nr > max){
 max = nr;
}

Tu îi dai lui max valoarea nr, condiția din if nu se va mai îndeplini niciodată.
La fel cu

min = nr;
if (nr < min){
 min = nr;
}


Hai să încercăm așa:

int main(){
 int n,nr,i,s,min,max;
 float ma;
 cin>>n;
 s=0;
 max=0;//notele vor fi minim 1, suntem siguri că max este mai mic acum decat prima nota
 min=11;//notele vor fi maxim 10, suntem siguri că min este mai mare acum decât prima notă
 for(i=0;i<n;i++){//n citiri
   cin>>nr;
   s+=nr;
   if(nr>max)max=nr;
   if(nr<min)min=nr;
 }
 s-=(min+max);//scadem din suma nota minima si nota maxima
 ma=(float)s/(n-2);//pe s il facem float ca impartirea sa nu se faca intre intregi, avem n-2 note in suma pentru ca am scazut nota minima si nota maxima
 cout<<"Media este: "<<ma<<endl;
}

Ayumi

#2
 Da,va multumesc.  :)