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

zwracanie przez funkcję kilku wartości

Ostatnio zmodyfikowano 2015-11-20 16:51
Autor Wiadomość
Filippo9669
Temat założony przez niniejszego użytkownika
zwracanie przez funkcję kilku wartości
» 2015-11-17 13:27:59
cześć.
co prawda moją przygodę z C++ zacząłem kilka lat temu, ale robiłem mało i teraz mam zamiar wziąć się za to porządnie. jednym z problemów, jakie napotkałem, jest właśnie zwracanie przez funkcję kilku wartości. niby przewija się to w tematach, jakie znalazłem, ale nigdzie nie jest jasno opisane co i dalczego. domyślam się, że należy skorzystać z wskaźników. jednak tutaj moje pomysły się kończą. prosiłbym o możliwie szczegółową pomoc.

pozdrawiam serdecznie,
Filip.
P-140284
Szadziu
» 2015-11-17 13:51:29
Wskaźniki:

C/C++
void function( int * i, int * j )
{
    i = new int( 3 );
    j = new int( 5 );
}


referencje:

C/C++
void function( int & i, int & j )
{
    i = 2;
    j = 3;
}
P-140286
Monika90
» 2015-11-17 13:55:00
Można zwrócić krotkę czyli tuple, krotki są opisane tutaj http://en.cppreference.com/w​/cpp/utility/tuple

Gdy często zwracasz ten sam zestaw danych to możesz zdefiniować własną strukturę i zwracać ją. To jest lepsze niż krotka bo ma własną nazwę i pola mają nazwy.

A w tych wypadkach gdy wszystkie wartości są tego samego typu, to masz std::array albo std::vector.
P-140288
Filippo9669
Temat założony przez niniejszego użytkownika
» 2015-11-19 23:57:55
dzięki za pomoc. może podam przykład. wczytuję w funkcji dane z pliku do tablicy dynamicznej i określam ich liczbę, po czym chciałbym przekazać te dane (tzn. wartości kolejnych elementów tablicy i ich liczbę) do funkcji, która je jakoś zmodyfikuje, nie wiem, obliczy średnią wartość. problem w tym, że nie wiem, jak przekazać te wartości.

C/C++
int * wczytanie()
{
    int tmp1 = 0;
    int * tab1 = new int[ tmp1 ];
   
   
    ifstream plik1;
    plik1.open( "liczby1.txt" );
    while( !plik1.eof() )
    {
        plik1 >> tab1[ tmp1++ ];
    }
   
    plik1.close();
   
   
    return( tab1 );
}

proszę, nie gańcie, jeśli kod jest nieprzyzwoity, to ostatnia wersja, nad którą się bawię. niewiele umiem.

pozdrawiam.
P-140416
michal11
» 2015-11-20 09:26:01
Najlepiej w tym przypadku uzyj std::vector<>
P-140419
Filippo9669
Temat założony przez niniejszego użytkownika
» 2015-11-20 09:28:46
mógłbyś jakoś pokazać, jak się w tym przypadku posłużyć?
P-140420
Filippo9669
Temat założony przez niniejszego użytkownika
» 2015-11-20 11:52:50
okej, jeszcze raz. mam taki oto kod:

C/C++
int * wczytanie1()
{
    int tmp1;
    int * tab1 = new int[ tmp1 ];
    int a;
   
    ifstream plik1;
    plik1.open( "liczby1.txt" );
    while( !plik1.eof() )
    {
        plik1 >> tab1[ tmp1 ];
        cout << tab1[ tmp1 ] << endl;
        tmp1++;
    }
   
    plik1.close();
   
    a = sizeof( tab1 );
   
    delete[] tab1;
   
    return( tab1 );
}

int najwiekszy()
{
    int najw; /*zmienna do przechowywania najwiekszego elementu*/
    for( int i = 0; i < /*liczba wczytanych elementow w poprzedniej funkcji*/; i++ )
    {
        if( /*kolejny element tablicy z poprzedniej funkcji*/ > najw ) /*ten element*/ = najw;
        else najw;
       
    }
   
    return najw;
   
}

funkcja wczytująca dane z pliku do tablicy dynamicznej i przekazująca tę tablicę do drugiej funkcji, która np. będzie wyszukiwać i zwracać jej największy element. trudność, jaką mam, to przekazanie tej tablicy z funkcji wczytanie do funkcji najwiekszy.
P-140424
carlosmay
» 2015-11-20 12:10:11
C/C++
a = sizeof( tab1 );

delete[] tab1;

return( tab1 );
}
 tutaj usuwasz tablicę nim ją zwrócisz.
Jeśli chcesz dalej z niej korzystać nie możesz tego zrobić.
Przekazanie tej tablicy do funkcji 'najwiekszy()': wywołaj tą funkcję a tablicę przekaż w argumencie.
P-140425
« 1 » 2
  Strona 1 z 2 Następna strona