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

[c++] Losowanie liczb, wypisywanie oraz wybieranie największej i najmniejszej z nich

Ostatnio zmodyfikowano 2015-10-30 17:08
Autor Wiadomość
Euvarios
Temat założony przez niniejszego użytkownika
[c++] Losowanie liczb, wypisywanie oraz wybieranie największej i najmniejszej z nich
» 2015-10-30 15:48:54
Witam ponownie, znów pojawił się problem w moim kodzie, ma on robić póki co następujące rzeczy: wylosowanie 10 niepowtarzających się liczb, wypisanie ich i wybranie z nich największej i najmniejszej. Kodzik napisałem jednak okazało się, że ma on problem z ostatnim zadaniem (wybraniem iMax i iMin), z kompilatora wynika, że jest to jakiś błąd z operatorem jednak nie mogę nic znaleźć. Poniżaj wklejam kod, prosiłbym o wyróżnienie błędu oraz ewentualne podanie możliwość naprawienia go. Z góry dziękuje...

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

int losowanie()
{
    return(( std::rand() % 100 ) + 1 );
}

bool sprawdzanie_powtarzalnosci( int tablica[], int wylosowane, int liczba_wylosowana )
{
    int i = 0;
   
    if( wylosowane == 0 )
         return false;
   
    do
    {
        if( tablica[ i ] == liczba_wylosowana )
             return true;
       
        i++;
       
    } while( i < wylosowane );
   
    return false;
}

void wypisanie( int tablica[] )
{
    int i;
    int x = 1;
   
    for( i = 0; i < 10; i++ )
    {
        std::cout << x << " liczba: " << tablica[ i ] << std::endl;
        x++;
    }
}

int iMax( int tablica[] )
{
    int i;
    int indeks1 = 0;
    int indeks2 = 1;
   
    for( i = 0; i < 9; i++ )
    {
        if( tablica[ indeks1 ] > tablica[ indeks2 ] )
             indeks2++;
        else
        {
            indeks1 = indeks2;
            indeks2++;
        }
    }
   
    if( tablica[ indeks1 ] > tablica[ indeks2 ] )
         return tablica[ indeks1 ];
    else
         return tablica[ indeks2 ];
   
}

int iMin( int tablica[] )
{
    int i;
    int indeks1 = 0;
    int indeks2 = 1;
   
    for( i = 0; i < 9; i++ )
    {
        if( tablica[ indeks1 ] < tablica[ indeks2 ] )
             indeks2++;
        else
        {
            indeks1 = indeks2;
            indeks2++;
        }
    }
   
    if( tablica[ indeks1 ] < tablica[ indeks2 ] )
         return tablica[ indeks1 ];
    else
         return tablica[ indeks2 ];
   
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowane = 0;
    int liczba_tymczasowa;
   
    do
    {
        liczba_tymczasowa = losowanie();
       
        if( sprawdzanie_powtarzalnosci( tablica, wylosowane, liczba_tymczasowa ) == false )
        {
            tablica[ wylosowane ] = liczba_tymczasowa;
            wylosowane++;
        }
       
    } while( wylosowane < 10 );
   
    wypisanie( tablica );
    std::cout << "" << std::endl;
    std::cout < "Najwieksza liczba to: " << iMax( tablica ) << std::endl << std::endl;
    std::cout < "Najmniejsza liczba to: " << iMin( tablica ) << std::endl << std::endl;
   
    return 0;
}
P-139382
carlosmay
» 2015-10-30 16:33:56
Przekaż też rozmiar tablicy

C/C++
int max = iMax( tablica, 10 );

//...funkcja

int iMax( int tab[], int roz )
{
    int temp = tab[ 0 ];
    int i = 1;
    do {
        if( tab[ i ] > temp; )
             temp = tab[ i ];
       
        i++;
    } while( i < roz );
   
    return temp;
}
 Analogicznie dla iMin.
P-139383
Euvarios
Temat założony przez niniejszego użytkownika
» 2015-10-30 16:58:34
Przekształciłem funkcję iMax i iMin na tę podaną przez ciebie (była dużo krótsza ale robiła to samo), jednak problem jest ciągle ten sam, oto ten nowy kod:

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

int losowanie()
{
    return(( std::rand() % 100 ) + 1 );
}

bool sprawdzanie_powtarzalnosci( int tablica[], int wylosowane, int liczba_wylosowana )
{
    int i = 0;
   
    if( wylosowane == 0 )
         return false;
   
    do
    {
        if( tablica[ i ] == liczba_wylosowana )
             return true;
       
        i++;
       
    } while( i < wylosowane );
   
    return false;
}

void wypisanie( int tablica[] )
{
    int i;
    int x = 1;
   
    for( i = 0; i < 10; i++ )
    {
        std::cout << x << " liczba: " << tablica[ i ] << std::endl;
        x++;
    }
}

int iMax( int tablica[], int rozmiar )
{
    int i = 1;
    int temp = tablica[ 0 ];
   
    do
    {
        if( tablica[ i ] > temp )
             temp = tablica[ i ];
       
        i++;
    } while( i < rozmiar );
   
    return temp;
}

int iMin( int tablica[], int rozmiar )
{
    int i = 1;
    int temp = tablica[ 0 ];
   
    do
    {
        if( tablica[ i ] < temp )
             temp = tablica[ i ];
       
        i++;
    } while( i < rozmiar );
   
    return temp;
}


int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowane = 0;
    int liczba_tymczasowa;
   
    do
    {
        liczba_tymczasowa = losowanie();
       
        if( sprawdzanie_powtarzalnosci( tablica, wylosowane, liczba_tymczasowa ) == false )
        {
            tablica[ wylosowane ] = liczba_tymczasowa;
            wylosowane++;
        }
       
    } while( wylosowane < 10 );
   
    wypisanie( tablica );
    std::cout << "" << std::endl;
    std::cout < "Najwieksza liczba to: " << iMax( tablica, 10 ) << std::endl << std::endl;
    std::cout < "Najmniejsza liczba to: " << iMin( tablica, 10 ) << std::endl << std::endl;
   
    return 0;
}

A to log z kompilatora:
screenshot.sh/oBDwtltbQ6tQ0
P-139387
carlosmay
» 2015-10-30 17:06:12
C/C++
std::cout < "Najwieksza liczba;  [/cpp]  
operator wyj ś cia to '<<'
P-139388
Euvarios
Temat założony przez niniejszego użytkownika
» 2015-10-30 17:08:39
Chryste panie... Jestem idiotą... Tak to jest jak takie pierdółki mogą zniszczyć cenny czas na szukanie błędów... Dzięki za pomoc, temat zamykam...
P-139389
« 1 »
  Strona 1 z 1