[C++] Dziwne zachowanie przy przesyłaniu tablicy do funkcji.
Ostatnio zmodyfikowano 2016-04-15 14:23
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. #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//////////////////////////////// #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 ]
|
|
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): #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ę. |
|
erde Temat założony przez niniejszego użytkownika |
Podziękowania » 2016-04-15 14:23:30 Wielkie dzięki za pomoc, Pozdrawiam |
|
« 1 » |