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

Rozdział 21-niedziałający przyapdek

Ostatnio zmodyfikowano 2017-09-08 13:26
Autor Wiadomość
sebekxp
Temat założony przez niniejszego użytkownika
Rozdział 21-niedziałający przyapdek
» 2017-09-05 19:16:07
Witam mam problem odnośnie zadania domowego z rozdziału 21. Program napisalem po dłuższysz  zastanowieniu, działa wszystko jak nalezy poza jednym przypadkiem (gdy wczytam 3 takie same liczby).Wg mnie program powinien wylosowac wtedy minimum jedna liczbe, lecz funkcja losujaca zakończy sie wtedy i tylko wtedy gdy wylosuje 2 rożne lioczby a w przyapdku 3 takich samych nigdy sie nie zakonczy i program nic losuje żadnej liczby. Z pomoca przyszedł mi kolega i powiedział zebym napisał funkcję sprawdzającą ile jest rożnych wylosowanych liczb  i wtedy dostosowal liczbe losowanych liczb. Ale juz od paru dni głowie się z taka funkcja i nic nie działa :/ Pytanie moje brzmi czy da się zrobić taka funkcję  z wiedzą zdobyta z tych 21 rozdziałow ? Jak tak to prosze o jakies wskazówki jak to moge zrobic. Z góry Dziękuję!
Kod programu:
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

void wczytaj( int tab[] )
{
    int i = 0;
    do
    {
        cin >> tab[ i ];
        i++;
    } while( i < 3 );
   
}

bool wylosuj( int bat[], int iLiczba, int tab[], int ile ) //wszystko dobrze
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
   
    do {
        if( bat[ i ] == tab[ iLiczba ] )
             return true;
       
        i++;
       
    } while( i < ile );
   
    return false;
   
}

int losowanie()
{
    return( rand() % 3 ) + 0;
}

int main()
{
    srand( time( 0 ) );
    int wczytane[ 3 ];
    int wylosowanych[ 3 ];
    int wylosowane = 0;
   
    cout << "Wczytaj 3 liczby :" << endl;
   
    wczytaj( wczytane );
   
   
    cout << "Losujemy 2 z nich bez powtorzen : " << endl;
   
   
    do {
        int liczba = losowanie();
        if( wylosuj( wylosowanych, liczba, wczytane, wylosowane ) == false )
        {
            wylosowanych[ wylosowane ] = wczytane[ liczba ];
            wylosowane++;
        }
       
    } while( wylosowane < 2 );
   
    wylosowane = 0;
    do
    {
        cout << wylosowanych[ wylosowane ] << endl;
        wylosowane++;
    } while( wylosowane < 2 );
   
   
    return 0;
}
P-164617
mateczek
» 2017-09-05 20:05:12
zależy co chcesz osiągnąć. Zwyczajnie nie da się wylosować dwóch różnych liczb jeśli wszystkie są identyczne.

1 sprawdzaj przy wczytywaniu czy liczby są różne i nie dopuść do wpisania identycznych
2 losuj Index tablicy te zawsze będą różne.
P-164618
sebekxp
Temat założony przez niniejszego użytkownika
Dobre rozumowanie ?
» 2017-09-07 17:18:28
moim założeniem było napisanie funkcji która sprawdzi ile jest różnych liczb w tablicy a potem zastosuje tą infirmacje w funkcjach z losowaniem. Problem ze sprawdzeniem czy liczby(jak napisał mateczek) sa identyczne ma jedna wade poniewaz gdy wprowadzimy 2 liczby takie same, a 3 inna to program powinen nam wylosowac 2 liczby rozne bez problemu,  taki program sprawdzajacy miałby sens ale gdyby dopuszczał do wpisanoa 2 takich samych liczb, dobrze myślę ?
P-164660
pekfos
» 2017-09-07 19:37:58
Jakby program nie dopuszczał wpisania 2 takich samych liczb, to faktycznie nie było by sensu w sprawdzaniu potem, ile jest różnych liczb w tablicy, bo wszystkie są wtedy różne.
P-164679
sebekxp
Temat założony przez niniejszego użytkownika
Czyli co dalej ?
» 2017-09-07 21:55:47
Mogę uznać ze zadanie zostało wykonane poprawnie(raczej nie bo nie działa jeden przypadek) ? Czy raczej próbowac zrobić funkcje, która nie dopuszcza do wprowadzenia  takich samych liczb ? (Bo z funkcja ktora zlicza ile jest rożnych liczb będzie o wiele ciężej,tak coś czujęi nie do konca wiem jak sie za nią zabrać)
P-164712
mateczek
» 2017-09-08 13:26:22
Nie ma co się rozkminiać nad zadaniem ćwiczebnym. Jeśli masz 3 pudelka i w dwóch jest cukier w trzecim mąka. losujesz po prostu pudełka a co w środku Cie nie obchodzi !!!

PS.jak chcesz załadować w tablice tylko różne liczby to np takie rozwiązanie.I w kontenerze masz tylko różne liczby. A rozmiar kontenera mówi Ci ile różnych liczb masz zapakowanych
C/C++
#include <iostream>
#include <set>
using namespace std;

int main()
{
    srand( time( NULL ) );
    set < int > konterner;
    for( int i = 0; i < 15; i++ ) {
        int liczba = rand() % 15;
        cout << liczba << " ";
        konterner.insert( liczba );
    }
    cout << endl;
    cout << konterner.size();
}
P-164724
« 1 »
  Strona 1 z 1