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 » |