problem z sumowaniem liczb mniejszych od podanej
Ostatnio zmodyfikowano 2020-11-28 15:09
neonek571 Temat założony przez niniejszego użytkownika |
problem z sumowaniem liczb mniejszych od podanej » 2020-11-28 01:04:43 Witam Mam problem z sumowaniem kolejnych liczb mniejszych od podanych przez użytkownika. Kod działa poprawnie, gdy poda się 1 liczbę. Dla większej ilości suma jest ta sama i często wykracza poza ilość elementów w tablicy. Program ma wyglądać tak, że użytkownik poda np liczby 45, 67, 89 i program ma policzyć ile jest w tablicy liczb mniejszych od każdej z podanych. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int main() { int ile; cout << "Ile liczb naturalnych chcesz zobaczyc?" << " "; cin >> ile; int tab[ ile ]; srand( time( NULL ) ); for( int i = 0; i < ile; i++ ) { tab[ i ] = rand() % 100 + 1; cout << tab[ i ] << " "; } cout << endl << "Mozesz sprawdzic ile liczb z wyswietlonych jest mniejszych od podanej przez Ciebie liczby." << endl << "Ile chcesz podac takich liczb?" << " "; int ile_l; cin >> ile_l; cout << "podaj te liczby" << " "; int suma = 0; int tab_l[ ile_l ]; for( int i = 0; i < ile_l; i++ ) { cin >> tab_l[ i ]; } cout << endl << "liczby mniejsze od " << endl; for( int i = 0, j = 0; i < ile; ++i ) { for( j = 0; j < ile_l; ++j ) { if( tab[ i ] < tab_l[ j ] ) { cout << tab_l[ j ] << ": " << tab[ i ] << endl; suma++; } } } for( int i = 0; i < ile_l; ++i ) { cout << "liczb mniejszych od " << tab_l[ i ] << " jest " << suma << endl; } return 0; }
|
|
pekfos |
» 2020-11-28 11:23:35 for( int i = 0; i < ile_l; ++i ) { cout << "liczb mniejszych od " << tab_l[ i ] << " jest " << suma << endl; } Popatrz na ten kod bez kontekstu i widać że wypisujesz ile_l jakichś liczb i przy każdej podajesz ten sam wynik suma. Wynik wychodzi większy od rozmiaru tablicy, bo używasz go ponownie bez wyzerowania. |
|
nanoant20 |
» 2020-11-28 11:31:38 dodam ze swojej strony, że to jest błędne for( int i = 0, j = 0; i < ile; ++i ) { for( j = 0; j < ile_l; ++j ) { if( tab[ i ] < tab_l[ j ] ) {
powinno być for( int i = 0; i < ile_l; ++i ) { for( int j = 0; j < ile; ++j ) { if( tab[ j ] < tab_l[ i ] ) { i powinna być alokowana pamięć na tablice a raczej na 2 tablice |
|
neonek571 Temat założony przez niniejszego użytkownika |
» 2020-11-28 13:51:04 nanoant20 nie rozumiem tej zamiany, wytlumaczysz? |
|
neonek571 Temat założony przez niniejszego użytkownika |
» 2020-11-28 13:52:33 pekfos problem w tym, ze nie wiem do konca jak wyzerowac sume po kazdej liczbie |
|
nanoant20 |
» 2020-11-28 14:41:45 ile - reprezentuje wszystkie wygenerowane liczby ile_l - reprezentuje wszystkie liczby szukane 1 petlą pobieram 1 liczbę szukaną z tab_l[ile_l]. a 2 pętlą przechodzę po całej tablicy tab[ile] po każdym przebiegu pętli, czyli przez tab[ile], resetujemy sumę, ustawiamy na 0 suma = 0; alokowanie pamieci: Zarządzanie pamięcią new, deletefor( int i = 0; i < ile_l; ++i ) { cout << endl << "liczby mniejsze od " << tab_l[ i ] << endl; for( int j = 0; j < ile; ++j ) { if( tab[ j ] < tab_l[ i ] ) { cout << tab_l[ i ] << ": " << tab[ j ] << endl; suma++; } } cout << "liczb mniejszych od " << tab_l[ i ] << " jest " << suma << endl; suma = 0; } |
|
neonek571 Temat założony przez niniejszego użytkownika |
» 2020-11-28 15:09:58 nanoant20 dziękuję ;) |
|
« 1 » |