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 |