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

[ROZDZIAŁ 20] Funkcja, a słowo kluczowe return. Problem ze zrozumieniem przykładu.

Ostatnio zmodyfikowano 2014-09-30 14:32
Autor Wiadomość
Madzialena
Temat założony przez niniejszego użytkownika
[ROZDZIAŁ 20] Funkcja, a słowo kluczowe return. Problem ze zrozumieniem przykładu.
» 2014-09-30 13:43:15
Witam. Mam pewien problem ze zrozumieniem poniższego przykładu:

C/C++
#include <iostream>

void wyswietl( int tablica[], int ile )
{
    if( ile <= 0 )
    {
        std::cout << "Tablica jest pusta." << std::endl;
        return;
    } //if
   
    int i = 0;
    do
    {
        std::cout << tablica[ i ] << ", ";
        i++;
    } while( i < ile );
   
    std::cout << std::endl;
}

int dopisz( int iLiczba, int tablica[], int ile )
{
    tablica[ ile ] = iLiczba;
    ile++;
    return ile; //zwraca ile jest elementów po dodaniu nowego
}

int main()
{
    int liczbaElementow = 0;
    int tablicaLiczb[ 10 ];
    wyswietl( tablicaLiczb, liczbaElementow );
   
    liczbaElementow = dopisz( 123, tablicaLiczb, liczbaElementow );
    wyswietl( tablicaLiczb, liczbaElementow );
   
    liczbaElementow = dopisz( 321, tablicaLiczb, liczbaElementow );
    wyswietl( tablicaLiczb, liczbaElementow );
    return 0;
}

Dokładniej z funkcją "dopisz". Rozumiem przeprowadzaną przez nią operację, ale mam problem z pojęciem jej... "struktury". Jak zachodzi dopisywanie nowej liczby oraz zwiększanie liczby elementów tablicy. Dlaczego zmienna "ile" zostaje powiększona o 1 po a nie przed dopisaniem nowej liczby - tj. przed:

C/C++
tablica[ ile ] = iLiczba;

Z góry dziękuję za poświęcony czas.
P-117799
stryku
» 2014-09-30 14:12:11
Nie wiem czy rozumiesz wskaźniki. Jak masz tablice
int tablicaLiczb[ 10 ];
 to ona reprezentuje blok dziesięciu komórek w pamięci czyli załóżmy takie coś:
[ | | | | | | | | | ]
.
Jak przekazujesz nazwę tablicy do funkcji
wyswietl( tablicaLiczb, liczbaElementow );
 to przekazujesz wskaźnik na pierwszy element.
Masz też zmienną
int liczbaElementow = 0;
 i ją zerujesz na samym początku(bo nie masz nic w tablicy. Jak wiesz indeksowanie tablicy zaczyna się od zera w C++, więc żeby odwołać się do elementu drugiego czyli
[ |x| | | | | | | | ]
 wpiszesz
tablicaLiczb[ 1 ]
No i teraz przejdziemy do funkcji.
Przy pierwszym wywołaniu masz takie rzeczy

tablicaLiczb [ | | | | | | | | | ]
liczbaElementow("ile" w funkcji) 0
Więc jak zrobisz
tablicaLiczb[ ile ];
 to odwołujesz się do elementu pierwszego:

[ | | | | | | | | | ]
 ^
do tego
Wpisujesz tam 123 i zwiększasz ile o 1 i zwracasz te ile.
Masz takie coś:
liczbaElementow = dopisz( 123, tablicaLiczb, liczbaElementow );
czyli to co zwracasz z funkcji przypisujesz do zmiennej
liczbaElementow

Przy drugim wywołaniu masz:

tablicaLiczb [123| | | | | | | | | ]
liczbaElementow("ile" w funkcji) 1
Więc jak zrobisz
tablicaLiczb[ ile ];
 to odwołujesz się już do elementu drugiego:

[123| | | | | | | | | ]
     ^
do tego
Wpisujesz tam 321 i zwiększasz ileo 1 i zwracasz te ile.

czyli po dwóch wywołaniach masz

tablicaLiczb [123|321 | | | | | | | | ]
liczbaElementow 2

i tak w kółko możesz[/code][/code]
P-117802
Madzialena
Temat założony przez niniejszego użytkownika
» 2014-09-30 14:32:55
Super. Rozjaśniłeś mi trochę sprawę.
Dziękuję za pomoc!
P-117806
« 1 »
  Strona 1 z 1