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: #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! |
|
cyklopek11 |
» 2013-05-26 15:14:19 |
|
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. :)
|
|
sprd123 Temat założony przez niniejszego użytkownika |
» 2013-05-26 15:39:45 Pomoze ktos? :)
Bardzo prosze :) |
|
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? :) |
|
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. |
|
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. |
|
Monika90 |
» 2013-05-26 17:30:19 Przekazywanie przez wskaźnik już masz, ponieważ void suma_wektorow( int rozmiar, float wektor1[], float wektor2[], float wektor3[] );
znaczy dokładnie to samo co void suma_wektorow( int rozmiar, float * wektor1, float * wektor2, float * wektor3 );
void wypisz_macierz( int wiersze, int kolumny, float macierz[][ nmax ] )
to samo co void wypisz_macierz( int wiersze, int kolumny, float( * macierz )[ nmax ] )
etc... |
|
« 1 » 2 |