Dan2ra Temat założony przez niniejszego użytkownika |
Typ fukcji, a return. » 2016-01-23 18:57:28 Witam, oto fragment mojego kodu: #include <iostream> #include <cstdlib>
using namespace std;
struct macierz { int wiersze; int kolumny; int wsp[ 10 ][ 10 ]; };
macierz wyznacznik()
{ int wynik; macierz ABC; wynik = ABC.wsp[ 0 ][ 0 ] + ABC.wsp[ 1 ][ 0 ]; return wynik; }
chciałbym funkcją liczyć wyznacznik macierzy 3x3, ale kompilator wywala błąd: error: could not convert 'wynik' from 'int' to 'macierz'| gdzie jest błąd?? |
|
pekfos |
» 2016-01-23 19:10:51 Od kiedy wyznacznik macierzy liczy się z niczego i jest macierzą? |
|
bombatom69 |
» 2016-01-23 19:12:26 Dla C++ nie ma znaczenia co chcesz zrobić tylko jak to robisz. Deklarujesz w nagłówku funkcji, że będziesz zwracał obiekt klasy macierz a zwracasz liczbę int i tutaj jest problem.
Inne pytanie jest takie, czy jesteś pewien, że typ int wystarczy do wyznacznika? Oczywiście C++ nie będzie protestował w tej sprawie ale Ty pewnie tak :) |
|
Dan2ra Temat założony przez niniejszego użytkownika |
» 2016-01-23 19:27:20 Jestem b. początkujący. Dzięki za podpowiedz. Teraz kompilator wywala błąd w innym miejscu programu, a mianowicie: case 4: { A = wczytaj(); wyznacznik( A ); wypisz( A ); }
błąd: undefined reference to `wyznacznik(macierz)' czy to jest problem tego typu, że przekazuję typ macierz do funkcji typu int?? |
|
bombatom69 |
» 2016-01-23 19:31:08 Kompilator dość grzecznie informuje Cię, że nie posiada takiej funkcji jaką wywołujesz. Przeczytaj jeszcze raz poradę pekfosa i koniecznie poczytaj jeszcze raz rozdział o funkcjach w kursie/książce/czymkolwiek z czego się uczysz. |
|
Dan2ra Temat założony przez niniejszego użytkownika |
» 2016-01-27 19:27:51 Proszę o oświecenie. Dlaczego program zamiast pokazać wyznacznik, pokazuję zadaną do liczenia wyznacznika macierz? KOD: #include <iostream> #include <cstdlib>
using namespace std;
struct macierz { int wiersze; int kolumny; int wsp[ 10 ][ 10 ]; };
void wypisz( struct macierz ABC ); macierz wczytaj(); macierz suma( macierz A, macierz B ); macierz roznica( macierz X, macierz Y ); macierz iloczyn( macierz X, macierz Y ); int wyznacznik( macierz ABC );
int main()
{ int liczba; macierz A, B, S, R1, R2, I, W; cout << endl << "Co chcesz zrobic z macierzami?" << endl << endl; cout << "1. Dodac." << endl; cout << "2. Odjac." << endl; cout << "3. Pomnozyc." << endl; cout << "4. Liczyc wyznacznik macierzy 3x3." << endl << endl; cout << "Wybor: "; cin >> liczba; system( "cls" ); cout << endl; switch( liczba ) { case 1: { cout << "Podaj dane macierzy A: " << endl << endl; A = wczytaj(); cout << endl << "Podaj dane macierzy B: " << endl << endl; B = wczytaj(); system( "cls" ); cout << endl << "MACIERZ A:" << endl << endl; wypisz( A ); cout << endl << "MACIERZ B:" << endl << endl; wypisz( B ); S = suma( A, B ); cout << endl << "SUMA: " << endl << endl; wypisz( S ); break; } case 2: { cout << "Podaj dane macierzy od ktorej chcesz odjac: " << endl << endl; A = wczytaj(); cout << endl << "Podaj dane macierzy odejmowanej: " << endl << endl; B = wczytaj(); system( "cls" ); cout << endl << "MACIERZ A:" << endl << endl; wypisz( A ); cout << endl << "MACIERZ B:" << endl << endl; wypisz( B ); R1 = roznica( A, B ); cout << endl << "ROZNICA: " << endl << endl; wypisz( R1 ); break; } case 3: { cout << "Podaj dane macierzy A: " << endl << endl; A = wczytaj(); cout << endl << "Podaj dane macierzy B: " << endl << endl; B = wczytaj(); system( "cls" ); cout << endl << "MACIERZ A:" << endl << endl; wypisz( A ); cout << endl << "MACIERZ B:" << endl << endl; wypisz( B ); cout << endl << "ILOCZYN: " << endl << endl; I = iloczyn( A, B ); wypisz( I ); break; } case 4: { W = wczytaj(); wyznacznik( W ); wypisz( W ); break; } } return 0; }
void wypisz( struct macierz ABC ) { for( int i = 0; i < ABC.wiersze; i++ ) { for( int j = 0; j < ABC.kolumny; j++ ) { cout.width( 5 ); cout << ABC.wsp[ i ][ j ]; } cout << endl; } }
macierz wczytaj() { macierz ABC; cout << "Liczba wierszy: "; cin >> ABC.wiersze; cout << "Liczba kolumn: "; cin >> ABC.kolumny; cout << endl; for( int i = 0; i < ABC.wiersze; i++ ) for( int j = 0; j < ABC.kolumny; j++ ) { cout << "Podaj wspolczynnik [" <<( i + 1 ) << "] , [" <<( j + 1 ) << "]: "; cin >> ABC.wsp[ i ][ j ]; } return ABC; }
macierz suma( macierz A, macierz B ) { macierz wynik; if(( A.kolumny != B.kolumny ) ||( A.wiersze != B.wiersze ) ) { cout << "## Inne wymiary!!"; exit( 1 ); } for( int i = 0; i < A.kolumny; i++ ) { for( int j = 0; j < A.wiersze; j++ ) { wynik.wsp[ i ][ j ] = A.wsp[ i ][ j ] + B.wsp[ i ][ j ]; } } return wynik; }
macierz roznica( macierz X, macierz Y ) { macierz wynik; if(( X.kolumny != Y.kolumny ) ||( X.wiersze != Y.wiersze ) ) { cout << endl << "## Inne wymiary!!"; exit( 1 ); } for( int i = 0; i < X.kolumny; i++ ) { for( int j = 0; j < X.wiersze; j++ ) { wynik.wsp[ i ][ j ] = X.wsp[ i ][ j ] - Y.wsp[ i ][ j ]; } } return wynik; }
macierz iloczyn( macierz X, macierz Y ) { macierz Z; if( X.kolumny == Y.wiersze ) { for( int i = 0; i < X.kolumny; i++ ) { for( int j = 0; j < Y.wiersze; j++ ) { Z.wsp[ i ][ j ] = 0; for( int k = 0; k < X.kolumny; k++ ) { Z.wsp[ i ][ j ] = Z.wsp[ i ][ j ] +( X.wsp[ i ][ k ] * Y.wsp[ k ][ j ] ); } } } } else { cout << "Nie mozna pomnozyc! Liczba kolumn pierwszj macierzy" << endl; cout << "jest inna niz liczba wierszy drugiej." << endl; } return Z; }
int wyznacznik( macierz ABC )
{ int wynik; wynik =( ABC.wsp[ 0 ][ 0 ] + ABC.wsp[ 1 ][ 0 ] + ABC.wsp[ 2 ][ 2 ] ) +( ABC.wsp[ 1 ][ 0 ] + ABC.wsp[ 2 ][ 1 ] + ABC.wsp[ 0 ][ 2 ] ) +( ABC.wsp[ 2 ][ 0 ] + ABC.wsp[ 0 ][ 1 ] + ABC.wsp[ 1 ][ 2 ] ) -( ABC.wsp[ 0 ][ 2 ] + ABC.wsp[ 1 ][ 1 ] + ABC.wsp[ 2 ][ 0 ] ) -( ABC.wsp[ 1 ][ 2 ] + ABC.wsp[ 2 ][ 1 ] + ABC.wsp[ 0 ][ 0 ] -( ABC.wsp[ 2 ][ 2 ] + ABC.wsp[ 0 ][ 1 ] + ABC.wsp[ 1 ][ 0 ] ) ); return wynik; }
|
|
bombatom69 |
» 2016-01-27 21:04:48 Odwróćmy pytanie: dlaczego Twoim zdaniem powinien zrobić to co napisałeś?
Na przyszłość: prezentuj tylko właściwe fragmenty kodu. Nikt w internecie nie ma czasu z gumy. |
|
Dan2ra Temat założony przez niniejszego użytkownika |
» 2016-01-28 14:53:01 Zakładam, że błąd jest tutaj: { W = wczytaj(); wyznacznik( W ); wypisz( W ); break; }
program pokazuję po prostu wczytaną macierz W, bo funkcja zwraca typ int i z macierzą W nic się nie dzieje. Jeśli mam racje to nie wiem jak sobie z tym poradzić. edit: OK, dałem po prostu w funkcji cout<<wynik; a funkcje wypisz wyrzuciłem: int wyznacznik( macierz ABC )
{ int wynik; wynik =( ABC.wsp[ 0 ][ 0 ] * ABC.wsp[ 1 ][ 1 ] * ABC.wsp[ 2 ][ 2 ] ) +( ABC.wsp[ 1 ][ 0 ] * ABC.wsp[ 2 ][ 1 ] * ABC.wsp[ 0 ][ 2 ] ) +( ABC.wsp[ 2 ][ 0 ] * ABC.wsp[ 0 ][ 1 ] * ABC.wsp[ 1 ][ 2 ] ) - ( ABC.wsp[ 0 ][ 2 ] * ABC.wsp[ 1 ][ 1 ] * ABC.wsp[ 2 ][ 0 ] ) -( ABC.wsp[ 1 ][ 2 ] * ABC.wsp[ 2 ][ 1 ] * ABC.wsp[ 0 ][ 0 ] ) -( ABC.wsp[ 2 ][ 2 ] * ABC.wsp[ 0 ][ 1 ] * ABC.wsp[ 1 ][ 0 ] ); cout << a; return wynik; }
Jest to dobre rozwiązanie? |
|
« 1 » 2 3 |