locf Temat założony przez niniejszego użytkownika |
Najmniejsza i najwieksza wartość funkcji - tablica » 2016-01-25 14:31:05 Mam zadanie, zgodnie z którym mam napisać funkcję, która dla jakieś tablicy liczb rzeczywistych A[w][w] przekazuje przez parametry największą i najmniejszą wartość na głównej przekątnej. Próbowałem zrobić to z tablicą liczb rzeczywistych, ale kompilator zwraca problem, że nie może tego wykonać. Ktoś mógłby rzucić okiem i doradzić, co jest do poprawienia? #include <iostream> #include <cstdlib> #include <ctime> #include <cmath>
using namespace std;
const int n = 5;
int najwieksza( int A[ n ][ n ] ) { int najmniejsza = A[ 0 ][ 0 ]; int najwieksza = A[ 0 ][ 0 ]; for( int i = 0; i < n; i++ ) { if( A[ i ][ i ] > najwieksza ) najwieksza = A[ i ][ i ]; if( A[ i ][ i ] < najmniejsza ) najmniejsza = A[ i ][ i ]; } cout << "\nNajmniejsza to " << najmniejsza; cout << "\nNajwieksza to " << najwieksza; return najmniejsza; }
int main() { int A[ n ][ n ]; srand( time( 0 ) ); for( int i = 0; i < n; i++ ) for( int j = 0; j < n; j++ ) A[ i ][ j ] = rand(); cout << "\nTablica wczytana\n"; for( int i = 0; i < n; i++ ) { for( int j = 0; j < n; j++ ) { cout.width( 10 ); cout << A[ i ][ j ]; } cout << endl; } najwieksza( A ); return 0; }
|
|
carlosmay |
» 2016-01-25 14:52:51 Próbowałem zrobić to z tablicą liczb rzeczywistych, ale kompilator zwraca problem, że nie może tego wykonać. |
Czego nie może wykonać? Funkcja ma dwie funkcjonalności: - szuka max - szuka min. Zrób z tego dwie funkcje zwracające wartość max oraz min. Teraz funkcja zwraca minimalną, z którą i tak nic nie robisz. |
|
mateczek |
» 2016-01-25 15:38:46 funkcja jedzie po przekątnej!! z tablicy
2 10 0 12 1 14 12 33 5
największą zwróci 5 najmniejszą 1 |
|
locf Temat założony przez niniejszego użytkownika |
» 2016-01-25 17:22:08 Jeśli to ma być tablica liczb rzeczywistych, to chyba w zadaniu chodzi o zmiennoprzecinkowe, np. float więc jeśli zmienię kod na taki: float najwieksza( float A[ n ][ n ] )
to mam komunikat,że error: cannot convert 'int (*)[5]' to 'float (*)[5]' for argument '1' to 'float najwieksza(float (*)[5])' Nie mogę podzielić funkcji na dwie. Musi być jedna funkcja. Przy czym zastanawiałem się jak to zrobić, jeśli jedna funkcja ma zwrócić dwie wartości skoro jest jedno return ? Wyświetlam sobie te dwa ekstrema, więc częściowo realizuję polecenie. |
|
carlosmay |
» 2016-01-25 17:38:44 to mam komunikat,że error: cannot convert 'int (*)[5]' to 'float (*)[5]' for argument '1' to 'float najwieksza(float (*)[5])' |
To znaczy, że przekazujesz do funkcji inny typ niż odbierasz. Nie mogę podzielić funkcji na dwie. Musi być jedna funkcja. Przy czym zastanawiałem się jak to zrobić, jeśli jedna funkcja ma zwrócić dwie wartości skoro jest jedno return? |
Jest jedno return, ale może zwrócić powiązane ze sobą wartości, np. strukturę, choć w tym przypadku użyłbym min i max zadeklarowane w main() i przekazał do funkcji przez referencję. |
|
locf Temat założony przez niniejszego użytkownika |
» 2016-01-25 17:58:18 A mógłbyś pokazać jak wyglądałaby część kodu z tą referencją.Dopiero jestem po lekturze tego zagadnienia. Mniej więcej wiem o co chodzi. Czyli muszę zadeklarować w main , że float A[ n ][ n ] ,aby otrzymać float jako typ zwracany? |
|
carlosmay |
» 2016-01-25 18:09:50 Czyli muszę zadeklarować w main, że float A[ n ][ n ],aby otrzymać float jako typ zwracany? |
Tak. Referencje: void fun( int a, int & ref_b ) { a = 8; ref_b = a * 4; }
int main() { int a = 0; int b = 0; std::cout << a << ", " << b << std::endl; fun( a, b ); std::cout << a << ", " << b << std::endl; } |
|
locf Temat założony przez niniejszego użytkownika |
» 2016-01-25 18:29:49 Dzięki za pomoc ! |
|
« 1 » |