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

Wypełnianie tablicy dynamicznej wartościami powyżej średniej

Ostatnio zmodyfikowano 2016-05-07 08:02
Autor Wiadomość
locf
Temat założony przez niniejszego użytkownika
Wypełnianie tablicy dynamicznej wartościami powyżej średniej
» 2016-05-06 23:18:31
Witam
mam wypełnić tablice dynamiczną wartościami powyżej średniej z tablicy statycznej wypełnionej losowymi liczbami
C/C++
tablica[ n ]

C/C++
int rozmiarTabDynam = 0;
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
         rozmiarTabDynam++;
   
}

cout << " rozmiar tablicy dynamicznej to ";
cout << rozmiarTabDynam << endl;

int * ptr = new int[ rozmiarTabDynam ];
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
    {
        ptr[ i ] = tablica[ i ];
    }
}

for( int i = 0; i < rozmiarTabDynam; i++ )
{
    cout << ptr[ i ] << " ";
}
cout << endl;

Np.
Tablica statyczna wypełniona losowymi liczbami
42 68 35 1 70
25 79 59 63 65
6 46 82 28 62
92 96 43 28 37

srednia to 51.35
 
rozmiar tablicy dynamicznej to 10, bo jest 10 liczb powyżej średniej

5506224 68 1868788833 1769406573 70 1547322173 79 59 63 65

Pomiędzy wylosowanymi liczbami mam „śmieci”, które są oczywiście większe od średniej, więc są drukowane.
Jak w tablicy dynamicznej zapisać tylko liczby z przedziału <średnia, granica losowania>?
P-147999
michal11
» 2016-05-07 01:23:12
C/C++
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
    {
        ptr[ i ] = tablica[ i ];
    }
}

ta pętla jest bez sensu, wartości do ptr przypisujesz tylko jeżeli wartości w tablicy są większe od średniej, czyli nie zawsze (dlatego dostajesz śmieci), tu powinieneś losować dla każdego elementu wartość, czyli pętla powinna być do i<rozmiarTabDynam, bez ifa, i daj tu losowanie z przedziału który cię interesuje, może być najprostszy rand() albo lepiej std::random.
P-148001
locf
Temat założony przez niniejszego użytkownika
» 2016-05-07 01:31:12
ale ja mam już zapełnioną tablicę statyczną liczbami i muszę przepiać do tablicy dynamicznej tylko te, które są powyżej średniej.

C/C++
for( int i = 0; i < n; i++ )
{
    tablica[ i ] = d + rand() %( g + 1 - d );
}

for( int i = 0; i < n; i++ )
{
    cout << tablica[ i ] << " ";
    licznik++;
   
    if( licznik == k )
    {
        cout << endl;
        licznik = 0;
    }
}

double suma = 0;
double sredniaArytm = 0;
for( int i = 0; i < n; i++ )
{
    suma += tablica[ i ];
}

sredniaArytm = suma / n;
cout << "suma to " << suma << endl;
cout << "srednia to " << sredniaArytm << endl;

int rozmiarTabDynam = 0;
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
         rozmiarTabDynam++;
   
}

cout << " rozmiar tablicy dynamicznej to ";
cout << rozmiarTabDynam << endl;

int * ptr = new int[ rozmiarTabDynam ];
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
    {
        ptr[ i ] = tablica[ i ];
    }
}

for( int i = 0; i < rozmiarTabDynam; i++ )
{
    cout << ptr[ i ] << " ";
}
cout << endl;
P-148002
carlosmay
» 2016-05-07 01:41:52
C/C++
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
    {
        ptr[ i ] = tablica[ i ];
    }
}
Tablica ptr (ma) może mieć mniejszy rozmiar niż tablica źródłowa, więc nie możesz jej indeksować
tak jak źrodłowej, bo wyjdziesz poza zakres. Poza tym niektóre pola są pomijane przy przypisywaniu (elemety śmieci).

C/C++
int dynam_idx = 0;
for( int i = 0; i < n; i++ )
{
    if( tablica[ i ] > sredniaArytm )
    {
        ptr[ dynam_idx++ ] = tablica[ i ]; // przechodzi do następnego elementu dopiero po przypisaniu
    }
}
P-148003
locf
Temat założony przez niniejszego użytkownika
» 2016-05-07 08:02:45
Dzięki bardzo carlosmay !!!!!!!!
To jeszcze nie koniec zadania. Może resztę sam uda mi się wykonać.
P-148004
« 1 »
  Strona 1 z 1