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

funkcja zwracajaca wartosc maks

Ostatnio zmodyfikowano 2013-01-12 13:50
Autor Wiadomość
rooker
Temat założony przez niniejszego użytkownika
funkcja zwracajaca wartosc maks
» 2013-01-11 23:57:50
Troche dzisiaj szaleje z pytaniami na forum ;) A wiec tak mam napisać procedurę zwracającą przez referencję indeksy komórki zawierającej największy element i zrobiłem to jednakże wyskakuje błąd programu, może ktoś to sprawdzić?

C/C++
void indeksymaks( int t[ n ][ m ], int & imaks, int & jmaks )
{
    imaks = 0;
    jmaks = 0;
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            if( t[ i ][ j ] > t[ imaks ][ jmaks ] )
            { t[ imaks ][ jmaks ] = t[ i ][ j ]; }
            imaks++;
            jmaks++;
           
           
        }
    }
}
P-73640
jsc
» 2013-01-12 00:14:49
Jak wygląda reszta programu i jaki jest log błędu.
P-73642
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-12 09:38:06
Program się uruchami, pojawia się konsola i po chwili się wyłącza. Oto caly program:

C/C++
using namespace std;
const int n = 5;
const int m = 6;

void wypelnij( int t[ n ][ m ], int a, int b )
{ for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            t[ i ][ j ] =( rand() %( b - a ) + a );
        }
    } }
void wypisz( int t[ n ][ m ] )
{ for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            cout << t[ i ][ j ] << "  ";
        }
        cout << endl;
    } }
void indeksymaks( int t[ n ][ m ], int & imaks, int & jmaks )
{
    imaks = 0;
    jmaks = 0;
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            if( t[ i ][ j ] > t[ imaks ][ jmaks ] )
            { t[ imaks ][ jmaks ] = t[ i ][ j ]; }
            imaks++;
            jmaks++;
           
           
        }
    }
}

int main()
{
    int t[ n ][ m ];
    int imaks, jmaks;
    wypelnij( t, 50, 3 );
    wypisz( t );
    indeksymaks( t, imaks, jmaks );
    cout << endl << "imaks=" << imaks << endl;
    cout << endl << "jmaks" << jmaks << endl;
   
   
   
   
    return 0;
}
P-73644
unimator
» 2013-01-12 10:11:07
Nie powinno być tak w pętli?
C/C++
if( t[ i ][ j ] > t[ imaks ][ jmaks ] )
{ imaks = i; jmaks = j; }

Bo w końcu interesują nas tylko indeksy a nie wartości.

C/C++
if( t[ i ][ j ] > t[ imaks ][ jmaks ] )
{ t[ imaks ][ jmaks ] = t[ i ][ j ]; } ]
Coś takiego nadpisze Ci obecny "maksymalny" element czyli zmodyfikuje tablicę. Funkcja zwracająca wartość maksymalną nie może czegoś takiego robić.

C/C++
imaks++;
jmaks++;
A tego to już kompletnie nie rozumiem. Co to ma niby robić :D?
P-73645
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-12 10:22:43
dobra dzięki, już poprawiłem błędy i wszystko działa.
P-73646
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-12 10:49:27
A teraz napisałem funkcje zwracający maksymalny elemnt za pomoca struktury i moje pytanie brzmi dlaczego musze tutaj użyc tego
return'a id bo nie do konca to rozumiem.



C/C++
indeks maks2( int t[ n ][ m ] )
{
    indeks id;
    id.imaks = 0;
    id.jmaks = 0;
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            if( t[ i ][ j ] > t[ id.imaks ][ id.jmaks ] )
            {
                id.imaks = i;
                id.jmaks = j;
            }
        }
    } return id;
}
P-73647
unimator
» 2013-01-12 11:43:05
Bo Twoja funkcja zwraca typ o nazwie "struktura" (patrz nagłówek funkcji). A każda funkcja (z wyjątkiem void) powinna coś zwracać.
P-73649
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-12 12:08:32
To jeszcze jedno pytanie. Czy funkcja typu int moze zwracac zmienne typu char?
P-73653
« 1 » 2
  Strona 1 z 2 Następna strona