Wypełnianie tablicy dynamicznej wartościami powyżej średniej
Ostatnio zmodyfikowano 2016-05-07 08:02
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 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>? |
|
michal11 |
» 2016-05-07 01:23:12 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. |
|
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. 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;
|
|
carlosmay |
» 2016-05-07 01:41:52 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). int dynam_idx = 0; for( int i = 0; i < n; i++ ) { if( tablica[ i ] > sredniaArytm ) { ptr[ dynam_idx++ ] = tablica[ i ]; } } |
|
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ć. |
|
« 1 » |