adrian.lodz Temat założony przez niniejszego użytkownika |
[C++]błędne wyliczanie liczby minimalnej i maksymalnej z poszczególnych serii. Lekcja 9, zadanie nr.7 » 2014-05-16 18:07:09 Witam. Mam problem z napisaniem jednego z zadań z kursu. Tak jak w temacie rozchodzi się o zadanie nr.7 z lekcji 9-tej. Coś źle zrobiłem, ale nie wiem co. Poplątałem się trochę w tych pętlach. Pierwsza seria dobrze jest obliczona, a później już coś się psuje. #include<iostream> #include<conio.h> #include<vector> using namespace std; int main() { int ile_serii, ile_liczb; cout << "Podaj ilosc serii: "; cin >> ile_serii; cout << "Podaj ilosc liczb w serii: "; cin >> ile_liczb; int min[ ile_serii ]; int max[ ile_serii ]; int tab[ ile_liczb ][ ile_serii ]; for( int j = 0; j < ile_serii; j++ ) { system( "cls" ); for( int i = 0; i < ile_liczb; i++ ) { cout << "Podaj " << i + 1 << " liczbe, z " << j + 1 << " serii: "; cin >> tab[ i ][ j ]; } } system( "cls" ); min[ 0 ] = tab[ 0 ][ 0 ]; max[ 0 ] = min[ 0 ]; for( int j = 0; j < ile_serii; j++ ) { for( int i = 0; i < ile_liczb; i++ ) { if( min[ j ] > tab[ i ][ j ] ) { min[ j ] = tab[ i ][ j ]; max[ j ] = min[ j ]; } else continue; } } for( int j = 0; j < ile_serii; j++ ) { for( int i = 0; i < ile_liczb; i++ ) { if( max[ j ] < tab[ i ][ j ] ) max[ j ] = tab[ i ][ j ]; else continue; } } for( int i = 0; i < ile_serii; i++ ) { cout << "liczba min z serii " << i + 1 << ": " << min[ i ] << endl; cout << "liczba max z serii " << i + 1 << ": " << max[ i ] << endl << endl; } for( int j = 0; j < ile_serii; j++ ) { cout << endl; for( int i = 0; i < ile_liczb; i++ ) { cout << tab[ i ][ j ] << endl; } } getch(); return 0; }
|
|
Jacob99 |
» 2014-05-16 18:22:34 Chyba pomyliłeś kolejność. Zamiast int tab[ ile_liczb ][ ile_serii ]; powinno być int tab[ ile_serii ][ ile_liczb ]; |
|
adrian.lodz Temat założony przez niniejszego użytkownika |
» 2014-05-16 18:46:19 Tak, czy tak, problemu to nie rozwiązuje. I gdzie nie gdzie wywala nie wiadomo skąd jakąś liczbę. Chociaż zawsze tak pisałem, w innych programach, i nie miałem jakichś problemów z tym. Ale może i masz rację. Najpierw wiersze później kolumny. Czasem mi się to myli. Nawet jak zamienie ile_liczb z ile_serii miejscami, to i tak źle wylicza głównie liczbę minimalną.
|
|
pekfos |
» 2014-05-16 21:00:49 W lekcji 9. nie ma zadania nr 7.
Niepoprawnie tworzysz tablice. |
|
adrian.lodz Temat założony przez niniejszego użytkownika |
» 2014-05-17 19:15:01 Sory. Śmieszne, ale pomyliłem kursy. Zadanie jest na stronie http://www.cpp.jcom.pl/lekcja9.php To jak mam tworzyć te tablice. Przez new? Każdy co innego powie, co kurs to inaczej jakoś uczą, później mi się wszystko myli, i nie wiadomo co do czego i z czym. |
|
pekfos |
» 2014-05-17 19:19:23 To jak mam tworzyć te tablice. Przez new? |
Albo przez vector<>. |
|
adrian.lodz Temat założony przez niniejszego użytkownika |
» 2014-05-18 11:49:59 To teraz mam #include<iostream> #include<conio.h> #include<vector> using namespace std; int main() { int ile_serii, ile_liczb; cout << "Podaj ilosc serii: "; cin >> ile_serii; cout << "Podaj ilosc liczb w serii: "; cin >> ile_liczb; int * min = new int[ ile_serii ]; int * max = new int[ ile_serii ]; int ** tab = new int *[ ile_serii ]; for( int i = 0; i < ile_serii; ++i ) { tab[ i ] = new int[ ile_liczb ]; } for( int j = 0; j < ile_serii; j++ ) { system( "cls" ); for( int i = 0; i < ile_liczb; i++ ) { cout << "Podaj " << i + 1 << " liczbe, z " << j + 1 << " serii: "; cin >> tab[ j ][ i ]; } } system( "cls" ); min[ 0 ] = tab[ 0 ][ 0 ]; max[ 0 ] = min[ 0 ]; for( int j = 0; j < ile_serii; j++ ) { for( int i = 0; i < ile_liczb; i++ ) { if( min[ j ] > tab[ j ][ i ] ) { min[ j ] = tab[ j ][ i ]; max[ j ] = min[ j ]; } else continue; } } for( int j = 0; j < ile_serii; j++ ) { for( int i = 0; i < ile_liczb; i++ ) { if( max[ j ] < tab[ j ][ i ] ) max[ j ] = tab[ j ][ i ]; else continue; } } for( int i = 0; i < ile_serii; i++ ) { cout << "liczba min z serii " << i + 1 << ": " << min[ i ] << endl; cout << "liczba max z serii " << i + 1 << ": " << max[ i ] << endl << endl; } for( int j = 0; j < ile_serii; j++ ) { cout << endl; for( int i = 0; i < ile_liczb; i++ ) { cout << tab[ j ][ i ] << endl; } } for( int x = 0; x < ile_serii; ++x ) { delete[] tab[ x ]; } delete[] tab; delete[] min; delete[] max; getch(); return 0; } Wpiszę np. 4 serie po 5 liczb. Po kolei wpisuje 1,2,3,4... aż do 20. Liczba minimalna z drugiej serii wychodzi niby 0 a powinno być 6, i liczba minimalna z czwartej serii również wychodzi 0, a powinno być 16. reszta, dobrze wychodzi. Tablice utworzyłem dynamiczną, skoro nie można prościej. To co jest jeszcze nie tak? Nie wiem czy coś jest nie tak z linijką min[0]=tab[0][0]; Może tak być? |
|
pekfos |
» 2014-05-18 12:02:54 min[ 0 ] = tab[ 0 ][ 0 ]; max[ 0 ] = min[ 0 ];
|
Nadajesz wartości początkowe tylko dla pierwszej serii. Tablice utworzyłem dynamiczną, skoro nie można prościej. |
Można prościej, nawet podałem jak. I tak po tym nic nie ma.. |
|
« 1 » 2 |