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

Problem z największą liczbą w tablicy.

Ostatnio zmodyfikowano 2013-01-12 14:11
Autor Wiadomość
kanam99
Temat założony przez niniejszego użytkownika
Problem z największą liczbą w tablicy.
» 2013-01-11 17:25:03
Witam. Mam sobie taki kod:

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int max( int tablica[] )
{
    int ma = 0;
    for( int indeks = 0; indeks != 11; indeks++ )
    {
        if( ma < tablica[ indeks ] );
       
        ma = tablica[ indeks ];
    }
    return ma;
}

void od_konca( int tablica[], int ile )
{
    std::cout << "Tablica od konca:" << std::endl;
    for( int indeks = ile; indeks !=- 1; indeks-- )
         std::cout << tablica[ indeks ] << std::endl;
   
}

void wypiszTablice( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         std::cout << tablica[ indeks ] << std::endl;
   
}

void wypelnij( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         tablica[ indeks ] =( rand() % 20 ) + 10;
   
}

int main()
{
    srand( time( NULL ) );
    int dane[ 10 ];
    wypelnij( dane, 10 );
    wypiszTablice( dane, 10 );
    od_konca( dane, 9 );
    int m = max( dane );
    std::cout << m << std::endl;
    return 0;
}

I gdy dochodzi do funkcji "max", to zwraca ona jakąś niebotyczną, siedmiocyfrową wartość. Moje pytanie brzmi, czemu? Jak ta funkcja powinna wyglądać? Z góry dziękuję i życzę miłego weekendu.
P-73606
jsc
» 2013-01-11 17:39:34
Spróbuj zamienić:
C/C++
if( ma < tablica[ indeks ] );

ma = tablica[ indeks ];

na:
C/C++
if( ma < tablica[ indeks ] )
{
    ma = tablica[ indeks ];
}

A ta twoja niebotyczna sugerowałaby wyjście poza zakres tablicy i podanie śmieci, ale jak maiałaby z niego wychodzić tego widzę.
P-73610
pekfos
» 2013-01-11 17:42:15
C/C++
for( int indeks = 0; indeks != 11; indeks++ )
Ta pętla wykona się 11 razy, a nie 10. Tak powinno być:
C/C++
for( int indeks = 0; indeks < 10; indeks++ )
P-73612
jsc
» 2013-01-11 17:43:33
Rzeczywiście, źle spojrzałem.
P-73613
kanam99
Temat założony przez niniejszego użytkownika
» 2013-01-11 20:07:32
Dziękuję za wasze wskazówki. Aby wszystko działało, musiałem zmienić funkcję "max" w ten sposób:
C/C++
int max( int tablica[] )
{
   
    int ma = 0;
    for( int indeks = 0; indeks != 10; indeks++ )
    {
        if( ma > tablica[ indeks ] );
       
        {
            ma = ma;
        }
        if( ma < tablica[ indeks ] );
       
        {
            ma = tablica[ indeks ];
        }
    }
    std::cout << "Najwieksza liczba:" << ma;
    return ma;
}

a w funkcji main():

C/C++
int main()
{
    srand( time( NULL ) );
    int dane[ 10 ];
    wypelnij( dane, 10 );
    wypiszTablice( dane, 10 );
    od_konca( dane, 9 );
    max( dane );
    return 0;
}

Piszę, bo może się to komuś przydać. Sprawa zamknięta :)
P-73622
kanam99
Temat założony przez niniejszego użytkownika
» 2013-01-11 20:23:27
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int min( int tablica[] )
{
    int mi = 0;
    for( int indeks = 0; indeks != 10; indeks++ )
    {
        if( mi > tablica[ indeks ] );
       
        {
            mi = tablica[ indeks ];
        }
        if( mi < tablica[ indeks ] );
       
        {
            mi = mi;
        }
    }
    std::cout << "Najmniejsza liczba:" << mi;
    return mi;
}

int max( int tablica[] )
{
   
    int ma = 0;
    for( int indeks = 0; indeks != 10; indeks++ )
    {
        if( ma > tablica[ indeks ] );
       
        {
            ma = ma;
        }
        if( ma < tablica[ indeks ] );
       
        {
            ma = tablica[ indeks ];
        }
    }
    std::cout << "Najwieksza liczba:" << ma;
    return ma;
}

void od_konca( int tablica[], int ile )
{
    std::cout << "Tablica od konca:" << std::endl;
    for( int indeks = ile; indeks !=- 1; indeks-- )
         std::cout << tablica[ indeks ] << std::endl;
   
}

void wypiszTablice( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         std::cout << tablica[ indeks ] << std::endl;
   
}

void wypelnij( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         tablica[ indeks ] =( rand() % 20 ) + 10;
   
}

int main()
{
    srand( time( NULL ) );
    int dane[ 10 ];
    wypelnij( dane, 10 );
    wypiszTablice( dane, 10 );
    od_konca( dane, 9 );
    max( dane );
    min( dane );
    return 0;
}

Mała pomyłka. Ja już nie mam pomysłu co z tym zrobić. Obie funkcje podają taką samą wartość, i tylko czasami jednej z nich uda się wypisać właściwą dla niej wartość. Macie jakiś pomysł?
P-73623
jsc
» 2013-01-11 23:45:10
P-73638
kanam99
Temat założony przez niniejszego użytkownika
» 2013-01-12 11:50:35
Spoko. Dzięki.
P-73650
« 1 » 2
  Strona 1 z 2 Następna strona