Welcome, Guest. Please login or register.

Autor Subiect: Problema informatică: media aritmetică  (Citit de 3653 ori)

0 Membri şi 1 Vizitator vizualizează acest subiect.

Ayumi

  • Vizitator
Problema informatică: media aritmetică
« : Octombrie 31, 2011, 11:10:33 p.m. »
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 !
« Ultima Modificare: Noiembrie 01, 2011, 11:35:08 a.m. de Scientia »

Offline tavy

  • Experimentat
  • ***
  • Mesaje postate: 544
  • Popularitate: +26/-26
Răspuns: Problema informatică: media aritmetică
« Răspuns #1 : Octombrie 31, 2011, 11:34:38 p.m. »
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;
}
« Ultima Modificare: Noiembrie 01, 2011, 11:35:35 a.m. de Scientia »

Ayumi

  • Vizitator
Răspuns: Problema informatică: media aritmetică
« Răspuns #2 : Octombrie 31, 2011, 11:40:31 p.m. »
 Da,va multumesc.  :)
« Ultima Modificare: Noiembrie 01, 2011, 11:36:14 a.m. de Scientia »