Да се въведат брой ученици и оценките им по даден предмет и да се отпечата:
- средният успех на класа
- най-високата и най-ниската оценка
- броят на отличниците в класа
- номерата на учениците с двойки
Да се въведат брой ученици и оценките им по даден предмет и да се отпечата:
[c] за С++ програми [/c]
[pascal] за паскал [/pascal]

за Къде се намира точка
за Вмъкване и изтриване на елемент *
за Позицията на X




за Броят на максималните елементи




за Броят на максималните елементи
за Пари за закуска




за Ученици с дадена оценка




за По-големи от средното| П | В | С | Ч | П | С | Н |
|---|---|---|---|---|---|---|
| « февр. | ||||||
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
//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) Може ли да се направи без използване на масив?
#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 всичко – реалните типове данни заемат повече памет, операциите с тях са по-бавни и енергоемки, освен това съхраняват приблизителни стойности, а не точни. За малки числа и малък обем информация няма да усетиш разлика, но за много големи ще е от значение.
Благодаря за съветите по задачата, както по първото, така и по второто решение. Честно казано, srar=sum/brocenka; го пляснах отново в цикъла по инерция и се усетих чак след като я публикувах и препрочетох. Относно променливите, незнайно защо, когато декларирам само srar като double а останалите променливи като int, ми дава грешни стойности за средния успех.
int broiu, brotl=0, ocenka, omin=6, omax=0;
double brocenka=0, sum=0, srar;
Това ми оправи проблема, но след дъжд – качулка :)