Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

dominanta z tablicy

Ostatnio zmodyfikowano 2016-10-31 09:26
Autor Wiadomość
xslayer00
Temat założony przez niniejszego użytkownika
dominanta z tablicy
» 2016-10-30 14:17:19
Musze napisać na zajęcia taki program
[spoiler]
ZADANIE
Grupę 100 studentów Informatyki poproszono o ocenę praktyk odbytych w firmie XXX.
Każdy student mógł przyznać ocenę od 0 do 10.
Zadeklarować N –elementową np.100-elementową tablicę student typu int.
1. Wylosować elementy tej tablicy z przedziału <0, 10>.
2. Wypisać wylosowaną tablicę.
3. Obliczyć średnią ocenę, którą dali studenci.
4. Obliczyć medianę (środkowa wartość w posortowanej tablicy, w przypadku parzystej
liczby elementów tablicy jest to średnia dwóch środkowych wartości).
5. Obliczyć ile studentów przyznało każdą z ocen.
W tym celu zadeklarować 11 -to elementową tablicę ocena, i-ty element tej tablicy
zawiera ilość studentów którzy dali tę ocenę.
6. Obliczyć którą ocenę studenci przyznali największą ilość razy. Jeżeli było kilka takich
ocen wypisać wszystkie.
7. Narysować histogram złożony z '*'.
Histogram pokazuje liczebności poszczególnych grup.
Program podzielić na funkcje. Rozmiar tablicy ustalić za pomocą dyrektywy definiującej
[/spoiler]

Poradziłem sobie z pierwszymi 5 podpunktami ale mam problem z 6. Mam wrażenie że jest coś zle z algorytem sortującym ale sam nie wiem.Mój kod wygląda tak:

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <time.h>
#define g 100

using namespace std;

void losuj( int student[], int n );
void wypisz( int student[], int n );
float srednia( int student[], int n );
void podsumowanie( int student[], int ocena[], int n );
void sortowanie( int student[], int n );



int main()
{
    int student[ g ];
    int ocena[ 11 ] = { 0 };
    int tab1[ 11 ] = { 0 };
    srand( time( 0 ) );
    losuj( student, g );
    cout << "Elementy tablicy: " << endl;
    wypisz( student, g );
    srednia( student, g );
    podsumowanie( student, ocena, g );
    sortowanie( student, g );
   
    return 0;
}

void losuj( int student[], int n )
{
    srand( time( NULL ) );
    for( int i = 0; i < n; i++ )
         student[ i ] = rand() % 11;
   
}

void wypisz( int student[], int n )
{
    for( int i = 0; i < n; i++ )
         cout << "  " << student[ i ];
   
}

float srednia( int student[], int n )
{
    int s;
    for( int i = 0; i < 100; i++ )
         s = s + student[ i ];
   
    cout << endl << "Srednia to: " << s / 100 << endl;
}

void podsumowanie( int student[], int ocena[], int n )
{
    int naj = 0;
    for( int i = 0; i < 100; i++ )
    { ocena[ student[ i ] ] ++; }
    cout << "Podsumowanie: " << endl;
    wypisz( ocena, 11 );
    cout << endl;
   
   
   
    int j = 0;
    for( int i = 0; i < 11; i++ )
    { if( ocena[ i ] >= ocena[ j ] ) j = i; }
    cout << "Dominanta jest liczba " << student[ j ] << endl;
}




void sortowanie( int student[], int n )
{
    for( int i = 0; i < n; i++ )
    for( int j = 1; j < n - i; j++ )
    if( student[ j - 1 ] > student[ j ] )
         swap( student[ j - 1 ], student[ j ] );
   
    int mediana;
    mediana =( student[( n - 1 ) / 2 ] + student[ n / 2 ] ) / 2;
    cout << endl << "Mediana wynosi: " << mediana;
}
P-153054
michal11
» 2016-10-31 09:26:16
1. 2 razy wywołujesz srand, wystarczy raz na początku maina.
2. wypisywanie 100 el. może nie być najlepszym pomysłem, może lepiej wypisywać pierwsze 10 i ostanie 10 ?
3. w funkcji srednia s ma niezainicjowaną wartość czyli trzyma śmieci, ta funkcja nic nie zwraca a według deklaracji powinna, wywal stąd wypisywanie czegokolwiek na ekran, ta funkcja powinna tylko liczyć. Magic number w pętli
4. funkcja podsumowanie jest bez sensu, robi za dużo, nazwa nic nie mówi, magic numbers.
5. w zadaniu nie ma nic o tym, że sam masz napisać funkcję sortującą, skoro tak to możesz skorzystać z sort()

main zdaniem main powinien wyglądać tak:
C/C++
int main()
{
    srand( time( 0 ) );
   
    const int g = 100; //zamaist define (edit. doczytałem temat jednak musi być define, także pomiń to)
    const int maxOcena = 11;
    int student[ g ];
    losujOceny( student, g, 0, maxOcena - 1 );
    cout << "Elementy tablicy: " << endl;
    wypisz( student, g );
    cout << srednia( student, g ) << endl;
    sort( student, student + g );
    wypisz( student, g );
    cout << mediana( student, g ) << endl;
   
    int ocena[ maxOcena ] { 0 };
    ocenyStudnetow( student, g, ocena );
    wypisz( ocena, maxOcena );
   
    int maxIloscOcen[ maxOcena ] { 0 };
    int ileMaxOcen = najwyzszeOceny( ocena, maxOcena, maxIloscOcen );
    wypisz( maxIloscOcen, ileMaxOcen );
   
    rysujHistogram( ocena, maxOcena );
   
    return 0;
}

w sumie to została ci tylko implementacja tych funkcji.
P-153089
« 1 »
  Strona 1 z 1