Cześć.
Jestem początkujący, przygodę z programowaniem rozpocząłem niedawno na studiach.
Dostałem do napisania zadanie. W treści chodzi o losowe przypisanie 100 ocen książki, wypisanie tablicy, posortowanie, obliczenie średniej, mediany, która ocena występowała najczęściej, oraz histogram.
Proszę o sprawdzenie mojego kodu i wytłumaczenie, dlaczego zawsze jako najczęstszą ocenę wyświetla 10? Z resztą jakoś sobie poradziłem.
Sprawdzałem już różne źródła, kod przepisany z innych działających programów w moim nie działa, wciąż wyświetla 10.
Mój kod:
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
#define student 100 // dyrektywa definiujaca, liczba studentow oceniajaca ksiazke - 100
const int IleOcen = 11; // liczba ocen do wyboru (przedzial od 0 do 10)
void FunkcjaLosujacaZczasu(){srand(time(0));}
void LosowanieOcen (int*, int);
void PokazTablice (int*, int);
float SredniaOcen (int*, int);
void SortowanieTablicyOcen (int*, int);
float MedianaOcen (int*, int);
void NajczestszaOcena (int*);
int IlePoszczegolnychOcen (int*, int, int);
string Gwiazdka (int);
void HistogramGwiazdek (int*, int, int);
int main ()
{
int tab[student] = {0};
int ocena[IleOcen] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
float SredniaArytmetyczna;
float MedianaZocen;
FunkcjaLosujacaZczasu();
LosowanieOcen(tab, student);
cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
cout << "Oceny wystawione przez studentow: " << endl << endl;
PokazTablice(tab, student);
cout << endl << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
SortowanieTablicyOcen(tab, student);
cout << "Oceny wystawione przez studentow po posortowaniu od najnizszych do najwyzszych: " << endl << endl;
PokazTablice(tab, student);
cout << endl << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
SredniaArytmetyczna = SredniaOcen(tab, student);
cout << "Srednia arytmetyczna wystawionych ocen: " << SredniaArytmetyczna << endl << endl;
cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
MedianaZocen = MedianaOcen(tab, student);
cout << "Mediana wystawionych ocen: " << MedianaZocen << endl << endl;
cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
NajczestszaOcena (ocena);
cout << endl << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
cout << "Histogram wystawionych ocen skladajacy sie z '*':" << endl << endl;
HistogramGwiazdek(tab, student, IleOcen);
cout << endl << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl << endl;
return 0;
}
void LosowanieOcen (int* tab, int liczba)
{
for (int i = 0; i < liczba; i++)
tab[i] = rand()%(11);
}
void PokazTablice (int *tab, int liczba)
{
for (int i = 0; i < liczba; i++)
{
cout << setw(2) << tab[i] << " ";
if ((i+1) % 10 == 0)
{
cout << endl;
}
}
}
void SortowanieTablicyOcen (int *tab, int liczba)
{
for (int i = 0; i < liczba - 1; i++)
for (int j = 0; j < liczba - i - 1; ++j)
if (tab[j] > tab[j + 1])
swap(tab[j], tab[j + 1]);
}
float SredniaOcen (int *tab, int liczba)
{
float suma = 0;
for (int i = 0; i < liczba; i++)
suma += tab[i];
float srednia = suma / liczba;
return srednia;
}
float MedianaOcen (int *tab, int liczba)
{
if (liczba % 2 == 0)
return ((tab[liczba / 2] + ((tab[(liczba / 2) - 1]))) / 2.);
else
return tab [liczba / 2];
}
void NajczestszaOcena(int ocena[])
{
int Najczestsza = 0;
for (int i = 0; i <= 10 ; i++)
{
Najczestsza = max(Najczestsza, ocena[i]);
}
cout << "Najczestsze oceny: ";
for (int i = 0; i <= 10; i++)
{
if (ocena[i] == Najczestsza)
{
cout << i << ' ';
}
}
cout << endl ;
}
int IlePoszczegolnychOcen (int *tab, int ocena, int liczba)
{
int Ile = 0;
for (int i = 0; i < liczba; i++)
if (tab[i] == ocena)
Ile++;
return Ile;
}
string Gwiazdka (int ilosc)
{
string gwiazdki = "";
for (int i = 0; i < ilosc; i++)
gwiazdki += '*';
return gwiazdki;
}
void HistogramGwiazdek (int *tab, int liczba, int IleOcen)
{
int ilosc;
string gwiazdki;
for (int i = 0; i < IleOcen; i++)
{
ilosc = IlePoszczegolnychOcen(tab, i, liczba);
gwiazdki = Gwiazdka(ilosc);
cout << setw(2) << i << ": " << gwiazdki << endl;
}
}