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

Zadanie 26

Ostatnio zmodyfikowano 2015-03-16 21:33
Autor Wiadomość
Czdum
Temat założony przez niniejszego użytkownika
Zadanie 26
» 2015-03-15 18:52:47
Witam serdecznie. Otóż spróbowałem zrobić zadanie domowe z tego rozdziału polegające na :
Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób.

Tak więc najpierw spróbowałem to zrobić kompletnie o swojemu i otóż mój program zadziałał prawidłowo (tak wiem że wiek nie jest zabezpieczony, ale nie to jest celem tego ćwiczenia)
C/C++
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    string tablicazimionami[ 2 ], tablicaznazwiskami[ 2 ];
    int tablicazwiekiem[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        cout << "Podaj imie" << endl;
        cin >> tablicazimionami[ i ];
        cout << "Podaj nazwisko" << endl;
        cin >> tablicaznazwiskami[ i ];
        cout << "Podaj wiek" << endl;
        cin >> tablicazwiekiem[ i ];
    }
    for( int i = 0; i < 2; i++ )
    {
        cout << "Dane osoby " << i + 1 << " : " << endl;
        cout << tablicazimionami[ i ] << " " << tablicaznazwiskami[ i ] << " " << tablicazwiekiem[ i ] << endl;
    }
    system( "PAUSE" );
    return EXIT_SUCCESS;
}

Następnie spróbowałem zrobić to wg tego co jest napisane dokładnie w instrukcji do ćwiczenia i zrobiłem to tak:
C/C++
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
void wczytajOsobe( string & imie, string & nazwisko, int & wiek )
{
    cout << "Podaj imie" << endl;
    cin >> imie;
    cout << "Podaj nazwisko" << endl;
    cin >> nazwisko;
    cout << "Wpisz wiek" << endl;
    cin >> wiek;
}
void wypiszOsobe( string imie, string nazwisko, int wiek )
{
    cout << "Podane dane: " << endl;
    cout << imie << " " << nazwisko << " " << wiek << endl;
}
int main()
{
    string imie[ 2 ];
    string nazwisko[ 2 ];
    int wiek[ 2 ];
    for( int i = 0; i < 2; i++ )
         wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    for( int i = 0; i < 2; i++ )
         wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
Ale nie do końca rozumiem dlaczego używa się tu referencji, a także czemu nie deklarujemy tablicy i byłbym wdzięczny, gdyby ktoś mi to wytłumaczył. Z góry dzięki za odpowiedź.
P-128482
tristan
» 2015-03-15 19:42:58
Referencji używasz dlatego, że wewnątrz funkcji chcesz zmienić wartość zmiennej spoza funkcji. Przy normalnym wywołaniu, funkcja tworzy sobie kopię zmiennych na własny użytek i ich zmiana byłaby widoczna wyłącznie wewnątrz funkcji. Żeby wyprowadzić wartość poza funkcję, masz do wyboru:

a) zmienne globalne -- zło, zło, zło...
b) mechanizm zwracania wartości z funkcji (return), ale wtedy musiałbyś zwracać strukturę
c) przekazanie do funkcji wskaźnika
d) zastosowanie referencji
P-128487
Gage
» 2015-03-16 21:33:07
Kilka dni temu również zadałem pytanie odnośnie tego zadania, bo nie rozumiałem, skąd ta referencja.
Wystarczyło pojąć, że przecież tablica=tablica[0], a to jest jedna ZMIENNA, a nie tablica, przez co nie jest przekazywana w oryginale poprzez wskaźnik, tylko kopiowana oraz usuwana zaraz po wykonaniu funkcji.
P-128590
« 1 »
  Strona 1 z 1