RobaczeQ Temat założony przez niniejszego użytkownika |
Błędne wyświetlenie sumy przedziałów (możliwe złe zapisywanie przedziałów) » 2014-11-24 18:27:02 W tablicy T 10 elementowej zapisano ciąg liczb całkowitych (dodatnie i ujemne) Napisz funkcję która wyznaczy wartość sumy podciągu w tym ciągu. Podciąg należy rozumieć jako liczby sąsiadujące ze sobą. Przykład Dla ciągu {1,-1,2,-3,1,3,2} maksymalna suma wynosi 6 Próbowałem dość długo jednak gdy już byłem pewien, że wyszło to wyniki podawane przez "cmd" były złe, próbowałem zrobić prostszą wersję także z switch'em zamiast pętli, jednak wynik był tak samo zły.(Sądzę iż coś źle jest przy funkcji suma z przedziałów) Mógłby ktoś pomóc znaleźć błąd lub dać pomysł na inne rozwiązanie tego/lub samemu przerobienie tego. Z góry dziękuję za każdą pomoc :) #include <iostream> #define n 10 #include <ctime> #include <cstdlib> using namespace std; int T[ n ]; int mniejsze[ n ]; int suma_koniec[ n ]; void dane( int T[] ) { srand( time( NULL ) ); for( int i = 0; i < n; i++ ) { T[ i ] = rand() % 10; if( T[ i ] % 3 == 0 ) { T[ i ] =- T[ i ]; } } } void drukuj( int T[] ) { for( int i = 0; i < n; i++ ) { cout << T[ i ] << " "; } cout << endl; } void mniej_od_zera( int T[], int mniejsze[], int & j ) { j = 0; for( int i = 0; i < n; i++ ) { if( T[ i ] < 0 ) { mniejsze[ j ] = i; j++; } } } void drukuj1( int mniejsze[] ) { for( int i = 0; i < n; i++ ) { if( mniejsze[ i ] != 0 ) { cout << mniejsze[ i ] << " "; } } cout << endl; } int suma( int poczatek, int koniec, int T[] ) { int s = 0; for( int i = poczatek + 1; i < koniec; i++ ) { s += T[ i ]; } return s; } void drukuj2( int suma_koniec[] ) { for( int i = 0; i < n; i++ ) { { cout << suma_koniec[ i ] << " "; } } cout << endl; } int suma_max( int suma_koniec[] ) { int i = 0; float m = suma_koniec[ i ]; int k; for( int i = 1; i < n; i++ ) { if( suma_koniec[ i ] >= m ) { m = suma_koniec[ i ]; } } return m; }
int main() { int j; dane( T ); drukuj( T ); mniej_od_zera( T, mniejsze, j ); drukuj1( mniejsze ); cout << endl << j << endl; switch( j ) { case 0: suma_koniec[ 0 ] = suma( 0, n, T ); break; case 1: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], n, T ); break; case 2: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], n, T ); break; case 3: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], n, T ); break; case 4: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], mniejsze[ 4 ], T ); suma_koniec[ 4 ] = suma( mniejsze[ 4 ], n, T ); break; case 5: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], mniejsze[ 4 ], T ); suma_koniec[ 4 ] = suma( mniejsze[ 4 ], mniejsze[ 5 ], T ); suma_koniec[ 5 ] = suma( mniejsze[ 5 ], n, T ); break; case 6: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], mniejsze[ 4 ], T ); suma_koniec[ 4 ] = suma( mniejsze[ 4 ], mniejsze[ 5 ], T ); suma_koniec[ 5 ] = suma( mniejsze[ 5 ], mniejsze[ 6 ], T ); suma_koniec[ 6 ] = suma( mniejsze[ 6 ], n, T ); break; case 7: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], mniejsze[ 4 ], T ); suma_koniec[ 4 ] = suma( mniejsze[ 4 ], mniejsze[ 5 ], T ); suma_koniec[ 5 ] = suma( mniejsze[ 5 ], mniejsze[ 6 ], T ); suma_koniec[ 6 ] = suma( mniejsze[ 6 ], mniejsze[ 7 ], T ); suma_koniec[ 7 ] = suma( mniejsze[ 7 ], n, T ); break; case 8: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], mniejsze[ 4 ], T ); suma_koniec[ 4 ] = suma( mniejsze[ 4 ], mniejsze[ 5 ], T ); suma_koniec[ 5 ] = suma( mniejsze[ 5 ], mniejsze[ 6 ], T ); suma_koniec[ 6 ] = suma( mniejsze[ 6 ], mniejsze[ 7 ], T ); suma_koniec[ 7 ] = suma( mniejsze[ 7 ], mniejsze[ 8 ], T ); suma_koniec[ 8 ] = suma( mniejsze[ 8 ], n, T ); break; case 9: suma_koniec[ 0 ] = suma( 0, mniejsze[ 1 ], T ); suma_koniec[ 1 ] = suma( mniejsze[ 1 ], mniejsze[ 2 ], T ); suma_koniec[ 2 ] = suma( mniejsze[ 2 ], mniejsze[ 3 ], T ); suma_koniec[ 3 ] = suma( mniejsze[ 3 ], mniejsze[ 4 ], T ); suma_koniec[ 4 ] = suma( mniejsze[ 4 ], mniejsze[ 5 ], T ); suma_koniec[ 5 ] = suma( mniejsze[ 5 ], mniejsze[ 6 ], T ); suma_koniec[ 6 ] = suma( mniejsze[ 6 ], mniejsze[ 7 ], T ); suma_koniec[ 7 ] = suma( mniejsze[ 7 ], mniejsze[ 8 ], T ); suma_koniec[ 8 ] = suma( mniejsze[ 8 ], mniejsze[ 9 ], T ); suma_koniec[ 9 ] = suma( mniejsze[ 9 ], n, T ); break; case 10: suma_koniec[ 0 ] = 0; break; } cout << endl; drukuj2( suma_koniec ); cout << endl << suma_max( suma_koniec ); return 0; }
|