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

[Roz.2][Lekcja 21] Problem z warunkiem.

Ostatnio zmodyfikowano 2013-06-09 21:42
Autor Wiadomość
arszonto
Temat założony przez niniejszego użytkownika
[Roz.2][Lekcja 21] Problem z warunkiem.
» 2013-06-09 19:08:06
Witam, otóż moim zadaniem jest napisanie programu który wylosuje 10 liczb z przedziału 1-10 bez powtórzeń. Napisałem owy programik, i wszystko według mnie się zgadza. Jednak podczas testu liczby się powtarzają. Nie mam pojęcia co jest źle z moim warunkiem. Proszę o pomoc, oto kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int losowanie( int tabela[], int licznik )
{
    srand( time( NULL ) );
    do
    {
        tabela[ licznik ] =( rand() % 10 ) + 1;
        if( tabela[ licznik ] != tabela[ licznik + 1 ] )
        {
            licznik--;
        }
    } while( licznik > 0 );
   
}
int main()
{
    int tabela[ 11 ];
    int licznik = 10;
    losowanie( tabela, 10 );
    do
    {
        cout << tabela[ licznik ] << "   ";
        licznik--;
    } while( licznik > 0 );
   
}
Próbowałem też dodać:
C/C++
else
{
    licznik = licznik;
}
Ale nadal nie działa (chociaż w sumie... ten zapis nic nie zmienia).
P-85268
pekfos
» 2013-06-09 19:49:43
Powtarzają się, bo sprawdzasz tylko ostatnio wylosowaną liczbę, a nie wszystkie.
P-85269
arszonto
Temat założony przez niniejszego użytkownika
» 2013-06-09 19:58:13
Tak, tuż przed twoją wiadomością to zauważyłem :). Zastanawiam się teraz, co zrobić aby sprawdzało wszystkie. Czy w C++ jest jakaś komenda "przedział", bądź coś podobnego?
P-85270
pekfos
» 2013-06-09 20:03:04
Czy w C++ jest jakaś komenda "przedział", bądź coś podobnego?
Nie wymyślaj. I tak w zadaniu możesz użyć tylko tego, co już poznałeś w kursie.
P-85272
arszonto
Temat założony przez niniejszego użytkownika
» 2013-06-09 20:08:12
Hmmm... Racja troszkę się zapędziłem. Zamiast się uczyć, chciałem tylko rozwiązać zadanie... Cóż... Mógłbyś mi chociaż powiedzieć, czy w mniej więcej taki sposób jak to robię da się wykonać zadanie, czy jest to ślepa uliczka i powinienem poszukać innego rozwiązania?
P-85274
pekfos
» 2013-06-09 20:12:26
Da się.
P-85276
arszonto
Temat założony przez niniejszego użytkownika
» 2013-06-09 21:24:28
Udało mi się napisać taki kod. W teorii powinno wszystko działać, ale przy testach losowane są kosmiczne liczby wychodzące poza zakres. O co może chodzić? Zamieszczam kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
bool sprawdzanie( int tabela[], int licznik, int aktualna )
{
    int numer = 0;
    if( licznik == 0 )
         return( true );
   
    do
    {
        if( tabela[ numer ] == aktualna )
             return( false );
       
        numer++;
    } while( numer < licznik );
   
    return( true );
}
int main()
{
    int tabelaliczb[ 10 ];
    int licznik = 0;
    int aktualna;
    do
    {
        aktualna =( rand() % 10 ) + 1;
        if( sprawdzanie( tabelaliczb, licznik, aktualna ) == true );
       
        {
            tabelaliczb[ licznik ] = aktualna;
            licznik++;
            cout << tabelaliczb[ licznik ] << " ";
        }
    } while( licznik < 10 );
   
}
P-85282
pekfos
» 2013-06-09 21:26:05
Wyświetlasz liczby, które nie zostały jeszcze wylosowane, bo za wcześnie zwiększasz licznik.
P-85283
« 1 » 2
  Strona 1 z 2 Następna strona