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

[C++] Dziwne zachowanie przy przesyłaniu tablicy do funkcji.

Ostatnio zmodyfikowano 2016-04-15 14:23
Autor Wiadomość
erde
Temat założony przez niniejszego użytkownika
[C++] Dziwne zachowanie przy przesyłaniu tablicy do funkcji.
» 2016-04-15 12:57:22
Witam,
rozwiązuje zadanie którego daną jest N elementowa tablica int-ów.
Mam znaleźć equilibrium, czyli element (konkretniej jego indeks) dla którego wszystkie elementy na lewo ( czyli o mniejszym indeksie ) zsumowane ze sobą są równe wszystkim zsumowanym elementom na prawo ( czyli o indeksie większym ).

Rozwiązanie ma zostać zrealizowane w postaci funkcji. Rozwiązanie działa kiedy jest wrzucone w mainie natomiast kiedy chce zrobić z tego funkcję zaczynają dziać się przysłowiowe cuda wianki. Sprawdzałem kilka razy i wydaje mi się że przesyłam tablicę właściwie. Nie bardzo jest z resztą chyba gdzie zrobić błąd, w końcu nazwa tablicy to adres jej zerowego elementu.

Bardzo Proszę o pomoc i z góry dziękuje.

C/C++
#include <cstdlib>
#include <iostream>

using namespace std;

int solution( int A[] );

int main( int argc, char * argv[] )
{
    int t[] = { - 1, 3, - 4, 5, 1, - 6, 2, 1, 1 };
   
    int wynik = solution( t );
    cout << wynik << endl;
   
   
   
   
   
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
//*******************************************************************************************************************
int solution( int A[] )
{
    int left = A[ 0 ];
    int right = 0;
    int i;
    for( i = 2; i !=( sizeof( A ) / sizeof( A[ 0 ] ) ); i++ )
    {
        cout << "wczytuje do righta element " << A[ i ] << endl;
        right += A[ i ];
    }
    cout << " po wczytaniu pierwszych danych left = " << left << " a right = " << right << endl;
   
    i = 1;
    while( left != right && i !=( sizeof( A ) / sizeof( A[ 0 ] ) ) )
    {
        cout << "jestem w petli" << endl;
        left = left + A[ i ];
        right = right - A[ i + 1 ];
        i++;
        cout << "left = " << left << " right = " << right << endl;
    }
    if( right = left )
         cout << "sa rowne na equilibrium = " << i << endl;
    else
         cout << "nie sa rowne" << endl;
   
    return i;
}

                                 //////////DZIALAJACE W MAINE PONIZEJ////////////////////////////////




C/C++
#include <cstdlib>
#include <iostream>

using namespace std;

int main( int argc, char * argv[] )
{
    int A[] = { - 1, 3, - 4, 5, 1, - 6, 2, 1, 1 };
   
    int left = A[ 0 ];
    int right = 0;
    int i;
    for( i = 2; i !=( sizeof( A ) / sizeof( A[ 0 ] ) ); i++ )
    {
        cout << "wczytuje do righta element " << A[ i ] << endl;
        right += A[ i ];
    }
    cout << " po wczytaniu pierwszych danych left = " << left << " a right = " << right << endl;
   
    i = 1;
    while( left != right && i !=( sizeof( A ) / sizeof( A[ 0 ] ) ) )
    {
        cout << "jestem w petli" << endl;
        left = left + A[ i ];
        right = right - A[ i + 1 ];
        i++;
        cout << "left = " << left << " right = " << right << endl;
    }
    if( right = left )
         cout << "sa rowne na equilibrium = " << i << endl;
    else
         cout << "nie sa rowne" << endl;
   
   
   
   
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}[ / i ][ / i ][ / i ]
P-147292
Rashmistrz
» 2016-04-15 13:25:28
Emmm... w przyszłości korzystaj ze znaczników [cpp] ... [/cpp],
bo inaczej to topornie się czyta kod.

Przeanalizuj kod (również skompiluj i sprawdź co wypisze):
C/C++
#include <iostream>

int funkcja( int tab[] )
{
    return sizeof( tab );
}

int main()
{
    int test[ 8 ];
    std::cout << sizeof( test ) << ' ' << funkcja( test );
}

Wyjaśnieniem tego jest to, że funkcja nie otrzymuje całej tablicy,
a wyłącznie wskaźnik na jej pierwszy element.
W mainie masz rozmiar faktycznej tablicy,
a w funkcji masz rozmiar wskaźnika na tą tablicę.
P-147293
erde
Temat założony przez niniejszego użytkownika
Podziękowania
» 2016-04-15 14:23:30
Wielkie dzięki za pomoc,
Pozdrawiam
P-147297
« 1 »
  Strona 1 z 1