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

[C++] Tablica typu rekordowego jako parametr funkcji

Ostatnio zmodyfikowano 2015-09-04 00:34
Autor Wiadomość
brandonlee
Temat założony przez niniejszego użytkownika
[C++] Tablica typu rekordowego jako parametr funkcji
» 2015-09-03 20:28:28
Witam,
próbuję przekazać tablicę z elemantami struktury jako parametr funkcji, niestety na wszystkei przykłady na jakie się natykam są dla każdej opcji oddzielnie. Próbowałem walczyć z & i *, ale wciąż poprawnie tabica wyświetla się tylko lokalnie z poziomu struktury z której została wczytana, aa z main już nie. Byłbym wdzięczny za jakąś podpowiedź, czego szukać, ew co doczytać - może jakiś mały przykład jak wykonywać działanie na tablicy tego typu przekazanej do funkcji.
Pozdrawiam.

Poniżej część kodu nad którym się męczę.

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

using namespace std;

const int n = 2;

struct SImieWiek
{
    string imie;
    int wiek;
};

void czytaj_tablice( SImieWiek tbl[][ n ] )
{
    cout << "Funkcja czytaj tablice" << endl;
    cout << "Wprowadz tablice do przetworzenia: " << endl;
    SImieWiek A[ n ];
   
   
    for( int i = 0; i < n; i++ )
    {
        cout << "Podaj imie: " << endl;
        cin >> A[ i ].imie;
        cout << "Podaj wiek: " << endl;
        cin >> A[ i ].wiek;
    }
    cout << "Aktualnie w tablicy znajduje sie: " << endl;
    for( int i = 0; i < n; i++ )
    {
        cout << "Imie: " << A[ i ].imie << ", wiek: " << A[ i ].wiek << endl;
    }
   
}

void pisz_tablice( SImieWiek tbl[][ n ], string nazwa )
{
    SImieWiek A[ n ];
    cout << nazwa << endl;
    for( int i = 0; i < n; i++ )
    {
        cout << "Imie: " << A[ i ].imie << ", wiek: " << A[ i ].wiek << endl;
       
    }
}

int main()
{
    SImieWiek tbl[ n ][ n ];
   
    cout << "Program glowny" << endl;
    czytaj_tablice( tbl );
    cout << endl;
   
   
    pisz_tablice( tbl, "Tablica oryginalna" );
    return 0;
}
P-137234
stevy
» 2015-09-03 21:19:44
C/C++
void czytaj( COS ** tablica, short wielkosc )
{ }

int main( void )
{
    short n = 2;
   
    COS tab[ n ][ n ];
   
    czytaj( tab, n );
   
}

może tak?
P-137240
brandonlee
Temat założony przez niniejszego użytkownika
» 2015-09-03 21:46:49
~stevy, dziękuję, ale nie bardzo to działa.
Chociaż co bardziej prawdopodobne, nie wiem jak to zaadaptować do programu.


||=== Build: Debug in 20150903 (compiler: GNU GCC Compiler) ===|
xxxxxxxxxxxxx\main.cpp||In function 'int main()':|
xxxxxxxxxxxxx\main.cpp|53|error: cannot convert 'SImieWiek (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'SImieWiek**' for argument '1' to 'void czytaj_tablice(SImieWiek**, short int)'|
xxxxxxxxxxxxx\main.cpp|57|error: cannot convert 'SImieWiek (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'SImieWiek (*)[2]' for argument '1' to 'void pisz_tablice(SImieWiek (*)[2], std::string)'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

W tej mojej pierwszej wersji wygląda to tak:
Jak można zrobić, żeby ta tablica, którą policzyła funkcja (poprawnie) była widoczna dla innych struktur?

C/C++
Program glowny
Funkcja czytaj tablice
Wprowadz tablice do przetworzenia:
Podaj imie:
abcde
Podaj wiek:
12
Podaj imie:
qwert
Podaj wiek:
34
Aktualnie w tablicy znajduje sie:
Imie: abcde, wiek: 12
Imie: qwert, wiek: 34

Tablica oryginalna
Imie:, wiek: 2686712
Imie:, wiek: 4645073

Process returned 0( 0x0 ) execution time
    : 20.416 s Press any key to continue.
P-137241
michal11
» 2015-09-03 22:33:04
Jeżeli tablica jest statyczna to trzeba do funkcji przekazać również jej rozmiar, o tak:

void fun( int tab[][ 3 ] );

w tym wypadku nie ma znaczenia czy to jest tablica intów czy struktur czy czegokolwiek innego.
P-137243
brandonlee
Temat założony przez niniejszego użytkownika
» 2015-09-03 22:44:26
~michal11,
tak właśnie robię - widać w moim kodzie w pierwszym poście:

C/C++
void czytaj_tablice( SImieWiek tbl[][ n ] )

i

void pisz_tablice( SImieWiek tbl[][ n ], string nazwa )

kiedy main wywołuje czytaj_tablice - to wszystko wewnątrz tej funkcji działa - czyta tablice i poprawnie ją wyświetla, ale tylko wewnątrz niej - tylko co trzeba dodać/zmieć, żeby te poprawne wartości były widoczne np. z funkcji pisz_tablice? Bo teraz przy próbie odczytania są jakieś losowe cyfry.
P-137245
Monika90
» 2015-09-03 22:48:36
void pisz_tablice( SImieWiek tbl[][ n ], string nazwa )

parametr nazywa się tbl, a używasz jakiegoś A, które nie ma z tbl nic wspólnego
cout << "Imie: " << A[ i ].imie << ", wiek: " << A[ i ].wiek << endl;


W funkcji czytaj_tablice tak samo.
P-137246
brandonlee
Temat założony przez niniejszego użytkownika
» 2015-09-03 23:26:52
~Monika90,
dziękuję, ale niestety nic mi to nie mówi. Pozmieniałem A na tbl, pozmieniałem n na liczby, dodałem dodatkową pętlę for, dodałem wskaźnik i mnóstwo innych rzeczy - dalej bez rezultatu.
"A" używałem jako zmiennej dla struktury - faktycznie nie ma nic wspólnego z tbl, ale gdybym wiedział jak to poprawić to nie zawracałbym głowy na forum.
P-137248
Monika90
» 2015-09-03 23:52:50
Tak można to zrobić
C/C++
#include <iostream>
#include <cstdlib>

using namespace std;

const int n = 2;

struct SImieWiek
{
    string imie;
    int wiek;
};

void czytaj_tablice( SImieWiek tbl[][ n ] )
{
    cout << "Funkcja czytaj tablice" << endl;
    cout << "Wprowadz tablice do przetworzenia: " << endl;
   
    for( int j = 0; j < n; j++ )
    for( int i = 0; i < n; i++ )
    {
        cout << "Podaj imie: " << endl;
        cin >> tbl[ j ][ i ].imie;
        cout << "Podaj wiek: " << endl;
        cin >> tbl[ j ][ i ].wiek;
    }
    cout << "Aktualnie w tablicy znajduje sie: " << endl;
   
    for( int j = 0; j < n; j++ )
    for( int i = 0; i < n; i++ )
    {
        cout << "Imie: " << tbl[ j ][ i ].imie << ", wiek: " << tbl[ j ][ i ].wiek << endl;
    }
   
}

void pisz_tablice( SImieWiek tbl[][ n ], string nazwa )
{
    //to zrób sam
}

int main()
{
    SImieWiek tbl[ n ][ n ];
   
    cout << "Program glowny" << endl;
    czytaj_tablice( tbl );
    cout << endl;
   
   
    pisz_tablice( tbl, "Tablica oryginalna" );
    return 0;
}

Jak widzisz jest tam pętla zagnieżdżona w pętli i podwójne indeksy przy tbl, bo przecież używamy tablicy dwuwymiarowej.
P-137253
« 1 » 2
  Strona 1 z 2 Następna strona