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

Przekazywanie z funkcji 2 wartości w tablicy.

Ostatnio zmodyfikowano 2017-12-13 21:06
Autor Wiadomość
dartpizza88
Temat założony przez niniejszego użytkownika
Przekazywanie z funkcji 2 wartości w tablicy.
» 2017-12-13 18:50:05
Cześć mam drobny problem, mam stworzyć dynamiczną tablice, przekazać ją do funkcji i policzyć sumę parzystych wyrazów i zwrócić wynik.
Stworzyłem coś takiego
C/C++
#include <iostream>
using namespace std;


int * funkcja( int tab1[], int rozmiar );

int main()
{
   
   
   
    int r;
    cout << "Podaj wymiar tablicy A" << endl;
    cin >> r;
   
    int * tabA = new int[ r ];
    int * wsk = new int[ r ];
   
   
   
    cout << "Tablica A:" << endl;
   
    for( int i = 0; i < r; i++ )
    {
        cout << "Podaj wyraz" << endl;
        cin >> tabA[ i ];
       
    }
   
    wsk = funkcja( tabA, r );
    for( int i = 0; i < 2; i++ )
    {
       
        cout << wsk[ i ] << " ";
    }
   
    delete[] tabA;
    return 0;
}
int * funkcja( int tab1[], int rozmiar )
{
   
    int tab3[ 2 ];
    int p, np;
   
   
    for( int i = 0; i < rozmiar; i++ )
    {
        if( tab1[ i ] % 2 == 0 )
        {
            p += tab1[ i ];
           
        }
        else
        {
            np += tab1[ i ];
           
        }
    }
    tab3[ 0 ] = p;
    tab3[ 1 ] = np;
   
   
    return tab3;
   
}
Program oczywiście nie działa poprawnie, zwraca wartość z kosmosu ale sam sposób liczenia dział. Co trzeba poprawić/zmienić?
P-167877
nanoant20
» 2017-12-13 19:09:58
zacznijmy od tego, że tworzsz 2 tablice dynamiczne
C/C++
int * tabA = new int[ r ];
int * wsk = new int[ r ];
i dalej nie wiem czy ten wskaźnik chcesz ustawić na funkcje czy na tablce?
jeśli w kodzie widzę to
C/C++
for( int i = 0; i < 2; i++ )
{
   
    cout << wsk[ i ] << " ";
}
to wskażnik wsk powiniec być ustawiony na tabA
int * wsk = tabA;
P-167880
dartpizza88
Temat założony przez niniejszego użytkownika
» 2017-12-13 19:15:02
Czyli to ma tak wyglądać?
C/C++
int * tabA = new int[ r ];
int * wsk = tabA;
No tylko co dalej jest nie tak?
P-167881
Luq
» 2017-12-13 19:22:38
Zmienne p i np nie są zainicjowane. Zwracasz z funkcji adres tablicy lokalnej, co też jest błędem.

policzyć sumę parzystych wyrazów i zwrócić wynik
To czemu zliczasz też nieparzyste?
P-167883
dartpizza88
Temat założony przez niniejszego użytkownika
» 2017-12-13 19:30:19
Co do zliczania to przy przepisywaniu się pomyliłem mają być nieparzyste i parzyste, co do inicjalizacji moje przeoczenie. Co do zwracania, jak to przerobić by było ok? Program zlicza poprawnie parzyste, przy nie parzystych ciągle zwraca 1.
P-167884
Luq
» 2017-12-13 19:36:34
Może po prostu zwróć parę tych wartości
C/C++
#include <utility>

// ...

return std::make_pair( p, np );
P-167885
dartpizza88
Temat założony przez niniejszego użytkownika
» 2017-12-13 19:59:35
Kompilator nie chce tego łyknąć, "SumowanieNPiPwT.cpp|64|error: cannot convert 'std::pair<int, int>' to 'int*' in return|"
P-167887
Luq
» 2017-12-13 20:39:16
Bo nie zmieniłeś wartości zwracanej. Funkcja powinna zwracać std::pair<int, int>, a nie int*.
P-167888
« 1 » 2
  Strona 1 z 2 Następna strona