Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błędne wyświetlenie sumy przedziałów (możliwe złe zapisywanie przedziałów)

Ostatnio zmodyfikowano 2014-11-25 09:42
Autor Wiadomość
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 :)


C/C++
#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 );
   
    /*
    if (j==0)
    {
        suma_koniec[0]=suma(0,n,T);
    }
    if((mniejsze[0]==0) && (j!=0))
    {
        suma_koniec[0]=suma(1,n,T);
    }
    else
    {
        if (mniejsze[1]==0)
        {
            suma_koniec[0]=suma(0,mniejsze[1],T);
            suma_koniec[1]=suma(mniejsze[1],n,T);
        }
        else
        {
        suma_koniec[0]=suma(0,mniejsze[1],T);
   
            for (int i=1;i<n;i++)
            {
   
                {
                    suma_koniec[i]=suma(mniejsze[i],mniejsze[i+1],T);
                }
        suma_koniec[9]=suma(mniejsze[j-1],n,T);
            }
        }
    }
   
    */
    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;
}
P-121290
darko202
» 2014-11-25 09:42:42
prawdopodobnie Twój problem wynika, z tego że nie policzysz 
sumy(1,1,T);

C/C++
int suma( int poczatek, int koniec, int T[] )
{
    int s = 0;
    for( int i = poczatek + 1; i < koniec; i++ )
    {
        s += T[ i ];
    }
    return s;
}
P-121346
« 1 »
  Strona 1 z 1