[C++]błędne wyliczanie liczby minimalnej i maksymalnej z poszczególnych serii. Lekcja 9, zadanie nr.7
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[C++]błędne wyliczanie liczby minimalnej i maksymalnej z poszczególnych serii. Lekcja 9, zadanie nr.7

AutorWiadomość
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.
C/C++
#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;
}
P-110130
» 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 ];

P-110132
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ą.

P-110134
» 2014-05-16 21:00:49
W lekcji 9. nie ma zadania nr 7.

Niepoprawnie tworzysz tablice.
P-110146
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.
P-110206
» 2014-05-17 19:19:23
To jak mam tworzyć te tablice. Przez new?
Albo przez vector<>.
P-110207
Temat założony przez niniejszego użytkownika
» 2014-05-18 11:49:59
To teraz mam
C/C++
#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ć?
P-110259
» 2014-05-18 12:02:54
C/C++
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.

C/C++
else continue;

I tak po tym nic nie ma..
P-110260
« 1 » 2
 Strona 1 z 2Następna strona