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

[C++] Przekazywanie argumentów funkcji przez referencję i wskaźnik

Ostatnio zmodyfikowano 2013-05-26 21:18
Autor Wiadomość
sprd123
Temat założony przez niniejszego użytkownika
[C++] Przekazywanie argumentów funkcji przez referencję i wskaźnik
» 2013-05-26 14:58:37
Witam!

Napisalem takie sobie programik:

C/C++
#include <iostream>
using namespace std;

const int mmax = 100;
const int nmax = 100;

void wczytaj_macierz( int wiersze, int kolumny, float macierz[][ nmax ] )
{
    int i, j;
   
    for( i = 0; i < wiersze; i++ )
    for( j = 0; j < kolumny; j++ )
    {
        cout << "Podaj element [" << i + 1 << "][" << j + 1 << "]:" << endl;
        cin >> macierz[ i ][ j ];
    }
}

void wypisz_macierz( int wiersze, int kolumny, float macierz[][ nmax ] )
{
    int i, j;
   
    for( i = 0; i < wiersze; i++ )
    { for( j = 0; j < kolumny; j++ )
             cout << macierz[ i ][ j ] << "  ";
       
        cout << endl;
    }
}

void suma_wektorow( int rozmiar, float wektor1[], float wektor2[], float wektor3[] )
{
    int i;
    for( i = 0; i < rozmiar; i++ )
         wektor3[ i ] = wektor2[ i ] + wektor1[ i ];
   
}

void srednie( int rozmiar, float wektor[], int numer )
{
    int i, iloscd, iloscu;
    float sredniad, sredniau;
   
    sredniad = 0; sredniau = 0; iloscd = 0; iloscu = 0;
   
    for( i = 0; i < rozmiar; i++ )
    {
        if( wektor[ i ] >= 0 )
        {
            sredniad = sredniad + wektor[ i ];
            iloscd++;
        }
        if( wektor[ i ] < 0 )
        { sredniau = sredniau + wektor[ i ];
            iloscu++;
        }
    }
   
    if( iloscd > 0 )
    {
        cout << "Srednia liczb dodatnich w kolumnie " << numer << ":" << endl;
        cout << sredniad / iloscd;
    }
   
    else
         cout << "Brak liczb dodatnich w kolumnie " << numer << endl << endl;
   
    if( iloscu > 0 )
    {
        cout << "Srednia liczb ujemnych w kolumnie " << numer << ":" << endl;
        cout << sredniau / iloscu;
    }
   
    else
         cout << "Brak liczb ujemnych w kolumnie " << numer << endl << endl;
   
}


float minimum( int rozmiar, float wektor[] )
{
    int i;
    float min;
   
    min = wektor[ 0 ];
   
    for( i = 1; i < rozmiar; i++ )
    {
        if( wektor[ i ] < min )
             min = wektor[ i ];
       
    }
    return min;
}

int main()
{
    int m, n, i;
    float A[ mmax ][ nmax ]; float B[ mmax ]; float C[ mmax ];
   
    cout << "Witaj w programie!" << endl;
    cout << "Podaj ilosc wierszy macierzy A (<= " << mmax << "):" << endl;
    cin >> m;
    cout << "Podaj ilosc kolumn macierzy A (<=" << nmax << "):" << endl;
    cin >> n;
   
   
    if( m > 0 && n > 0 && m <= mmax && n <= nmax )
    {
        wczytaj_macierz( m, n, A );
        cout << "Macierz, ktora podales ma postac:" << endl;
        wypisz_macierz( m, n, A );
       
        suma_wektorow( n, A[ 0 ], A[ m - 1 ], C );
        cout << "Suma ostatniego i pierwszego wiersza macierzy wynosi:" << endl;
       
        for( i = 0; i < n; i++ )
             cout << C[ i ] << "  ";
       
        for( i = 0; i < m; i++ )
             C[ i ] = A[ i ][ 1 ];
       
        srednie( m, C, 2 );
       
        for( i = 0; i < m; i++ )
             B[ i ] = minimum( n, A[ i ] );
       
        cout << "Wektor utworzony z wartosci minimalnych w wierszach macierzy to:" << endl;
        for( i = 0; i < m; i++ )
             cout << B[ i ] << "   ";
       
    }
   
    else
         cout << "Podano zly rozmiar macierzy!" << endl;
   
    return 0;
}

Chciałbym nauczyc się przekazywania parametrow do funkcji za pomoca referencji i wskaznikow.

Czy mógłby mi ktoś miły przerobić podfunkcje o nazwie "srednie" i odpowiadajace jej czesc w mainie, tak aby parametry do niej były przekazywane

a) jeden przez wskaznik
b) jeden przez referencje

a ktorys z intow niech zostanie tak jak jest, czyli przez wartosc :)

Bardzo mi to pomoze, bo tyle sie slucha o wskaznikach a malo kto potrafi to dobrze wyltumaczyc. A na przykladzie napewno pojdzie mi to lepiej, zwlaszcza ze sam ten programik pisalem.


Pozdrawiam!
P-83979
cyklopek11
» 2013-05-26 15:14:19
A kurs C++ ze strony przerobił w całości?
szczególnie:
 24. Przekazywanie argumentów funkcji przez referencję (lekcja)

Literaturę typu Grębosz, Prata lub inne traktujące o podstawach C++ pod ręką ma ?

P-83984
sprd123
Temat założony przez niniejszego użytkownika
» 2013-05-26 15:17:51
Przyznam szczerze, ze nie korzystalem z tego kursu C++ tutaj na stronie.

To co dotychczas umiem to wynioslem z laboratoriów.

Przeczytam zaraz ten link co mi podales. Dziekuje.

Natomiast miedzy czasie jesli to nie bedzie problemem,  dalej prosze o zmodyfikowanie tej funkcji. Bo zywe przyklady działają najlepiej - lepiej niz lteratura. :)



P-83987
sprd123
Temat założony przez niniejszego użytkownika
» 2013-05-26 15:39:45
Pomoze ktos? :)

Bardzo prosze :)
P-83991
DejaVu
» 2013-05-26 15:47:34
Chciałbym nauczyc się przekazywania parametrow do funkcji za pomoca referencji i wskaznikow.
Skoro chcesz się nauczyć i dostałeś materiały edukacyjne to dlaczego oczekujesz, że dostaniesz gotowe rozwiązanie? :)
P-83992
sprd123
Temat założony przez niniejszego użytkownika
» 2013-05-26 15:54:42
Poniewaz niewiele z tych materiałów rozumiem...

a mysle, ze jak ktos w tym siedzi to dla niego dopisanie kilku gwiazdek nie stwarza problemu a mi by naprawdę wielce pomogło.

Myślałem, że od tego jest dział pomocy na forum.

Pomocy na zasadzie wpisania w google wskazniki i referencje mogę sobie udzielic sam. Natomiast niestety pokazania jak dziala to na konkretnym programie, google mnie nie nauczy.
P-83993
cyklopek11
» 2013-05-26 16:09:24
Leń z Ciebie straszny!
Jestem w trakcie lektury książki Stephen Prata "Język C++. Szkoła programowania" wydanie VI.
Wszedłem sobie przypadkiem na stronę helionu, aby zobaczyć jaki przykładowy rozdział jest udostępniony darmowo.
I jak BYK jest to rozdział  8, gdzie wszystko to o co pytasz jest wytłumaczone łącznie z przykładowym kodem (szczególnie strona 347).
Zacznij od strony 342.
Praktyka w programowaniu jest bardzo ważna. Ale bez kursowej/książkowej wiedzy o "gramatyce" języka C++ daleko nie zajedziesz.
P-83995
Monika90
» 2013-05-26 17:30:19
Przekazywanie przez wskaźnik już masz, ponieważ
C/C++
void suma_wektorow( int rozmiar, float wektor1[], float wektor2[], float wektor3[] );
znaczy dokładnie to samo co
C/C++
void suma_wektorow( int rozmiar, float * wektor1, float * wektor2, float * wektor3 );

C/C++
void wypisz_macierz( int wiersze, int kolumny, float macierz[][ nmax ] )
to samo co
C/C++
void wypisz_macierz( int wiersze, int kolumny, float( * macierz )[ nmax ] )
etc...
P-84003
« 1 » 2
  Strona 1 z 2 Następna strona