Статистики за ученици

Да се въведат брой ученици и оценките им по даден предмет и да се отпечата:

  • средният успех на класа
  • най-високата и най-ниската оценка
  • броят на отличниците в класа
  • номерата на учениците с двойки
Публикувано в 11в с етикети . Постоянна връзка.

5 коментара по Статистики за ученици

  1. Явор Войнов каза:
    //Bez proverki za vyvedenite ocenki
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    
    { int n;
          cout<<"Vyvedete broi uchenici: ";
       cin>>n;
        int uchenik[n], i;
      for (i=0; i<n; i++){
          cout<<"Vyvedete ocenka po informatika na uchenik No:"<<i+1<<"=";
          cin>>uchenik[i];
      }
    
    {double srar=0, sum=0, br=0;
    for (i=0; i<n; i++){
    br++;
    sum+=uchenik[i];
    srar=sum/br;
    }
            cout<<setprecision(2)
            <<setiosflags(ios::fixed);
    cout<<"Sredniqt uspeh na klasa e:"<<srar<<endl;
    }
    int min=uchenik[0], max=uchenik[0];
    for (i=0; i<n; i++)
        if (uchenik[i]<min)
        min=uchenik[i];
    for (i=0; i<n; i++)
        if (uchenik[i]>max)
        max=uchenik[i];
        cout<<"Min= "<<min<<" Max="<<max<<endl;
    
    int otlichnici=0;
    
    for (i=0; i<n; i++)
    if (uchenik[i]==6)
    otlichnici++;
    cout<<"Otlichnicite v klasa sa "<<otlichnici<<" na broi"<<endl;
    
    cout<<"Uchenici sys slaba ocenka - No: ";
    for (i=0; i<n; i++)
    {if (uchenik[i]==2)
    cout<<i+1<<" ";
    }
    }
    
    • Данаил каза:

      Добре и вярно! С някои предложения за оптимизации:
      ред 22 – трябва да е след цикъла – няма смисъл да е в него
      ред 29 – може да започваш сравнението от елемент 1, защото нулевия вече си присвоил на min и max

      И два въпроса:
      1) Може ли всичко това да се направи само с един цикъл?
      2) Може ли да се направи без използване на масив?

  2. Явор Войнов каза:
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
     double broiu, brotl=0, brocenka=0, ocenka, sum=0, omin=6, omax=0, srar;
     cout<<"Vyvedete broqt na uchenicite: ";
     cin>>broiu;
     while (brocenka<broiu){
    cout<<"Vyvedete ocenka na uchenik No: "<<brocenka+1<<" >> ";
    cin>>ocenka;
    brocenka++;
    sum+=ocenka;
    srar=sum/brocenka;
    if (ocenka>omax)
        omax=ocenka;
    if (ocenka<omin)
        omin=ocenka;
    if (ocenka==6)
        brotl++;
     }
     cout<<setprecision(2)
            <<setiosflags(ios::fixed);
    cout<<"Sredniqt uspeh na klasa e: "<<srar<<endl;
    cout<<"Nai-niskata ocenka e: "<<omin<<endl;
    cout<<"Nai-visokata ocenka e: "<<omax<<endl;
    cout<<"Broqt otlichnici e: "<<brotl<<endl;
    }
    
    • Данаил каза:

      Браво, много добре! Само средният успех няма смисъл да го смяташ в цикъла, защото след всяка итерация го преизчисляваш пак. И не е нужно да се ползва double всичко – реалните типове данни заемат повече памет, операциите с тях са по-бавни и енергоемки, освен това съхраняват приблизителни стойности, а не точни. За малки числа и малък обем информация няма да усетиш разлика, но за много големи ще е от значение.

  3. Явор Войнов каза:

    Благодаря за съветите по задачата, както по първото, така и по второто решение. Честно казано, srar=sum/brocenka; го пляснах отново в цикъла по инерция и се усетих чак след като я публикувах и препрочетох. Относно променливите, незнайно защо, когато декларирам само srar като double а останалите променливи като int, ми дава грешни стойности за средния успех.
    int broiu, brotl=0, ocenka, omin=6, omax=0;
    double brocenka=0, sum=0, srar;
    Това ми оправи проблема, но след дъжд – качулка :)

Вашият коментар