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

Problem z zadaniem domowy - Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2014-07-28 21:18
Autor Wiadomość
Daedra
Temat założony przez niniejszego użytkownika
Problem z zadaniem domowy - Losowanie bez powtórzeń
» 2014-07-25 12:46:36
"1. Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje. "

Czy ktoś mógłby mi zdradzić swoje wizje, sposób myślenia rozwiązania problemu? Mowa głównie o losowaniu podanych wcześniej liczb. Jak według was można to zrobić? Mile widziane przykłady dla analizy. Pytam gdyż niestety ale nie mogę na to wpaść sam :/ ...
P-114334
kubek3898
» 2014-07-25 15:09:09
Wczytujesz liczby do tablicy. Następnie losujesz jakąś liczbę z tablicy. Niech będzie to liczba '2'. Następnie tę liczbę zapisujesz (lub nawet lepiej, jej indeks) do jakieś pomocniczej zmiennej i wypisujesz na ekran. Powtarzasz losowanie, tym razem jednak sprawdzając czy wylosowana liczba (lub jej indeks), nie jest równa(y) tej(mu) zapisanej(mu). Jeśli nie, normalnie wypisujesz. Jeśli tak, losujesz dopóki liczba (indeks) != wylosowanej liczbie.

Tak pisane na szybko, lecz wydaje mi się że myślenie poprawne.
P-114335
Daedra
Temat założony przez niniejszego użytkownika
» 2014-07-25 15:48:38
"Następnie losujesz jakąś liczbę z tablicy" I tu pojawia się problem. Wprowadzam 3 liczby do tablicy i moim pytaniem jest jak napisać kod źródłowy tak aby wylosował z tych trzech podanych nasze dwie liczby?
P-114338
kubek3898
» 2014-07-25 16:23:20
Coś ala:

int help =( rand() % 3 ) + 0;

Później możesz:

cout << tab[ help ];

Już masz zrobione pierwsze losowanie. Teraz wystarczy wylosować drugi raz, i sprawdzić czy się powtarza :)

@edit

A, tak przepraszam. Poprawione.
P-114345
pekfos
» 2014-07-25 16:31:06
C/C++
int help =( rand() % 2 ) + 0;

Dlaczego z zakresu 0 - 2? Ano, dlatego że tablica ma 3 elementy
To 0 - 1.
P-114346
Daedra
Temat założony przez niniejszego użytkownika
» 2014-07-25 17:17:39
Nie wierzę w to, jak mogło mi to umknąć. Właśnie kłania się moje kreatywne myślenie... Dzięki za pomoc :)


Edit:
Jest jeszcze jedna sprawa:

C/C++
/*
    Napisz program, który wczyta 3 liczby podane przez uzytkownika do tablicy, a nastepnie wylosuje 2 z nich bez powtórzen.
    Wynik wypisz na ekran. Postaraj sie napisac ten program w oparciu o funkcje.
*/

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int podawanie( int tab[], int element )
{
    int a;
   
    cout << "Podaj 3 liczby" << endl;
    do
    {
        tab[ element ] = a;
        cin >> a;
        cin.clear();
        cin.sync();
       
        element++;
    } while( element < 3 );
   
    cout << endl;
}

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

int sprawdzenie()
{
   
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 3 ];
    int ele_tab;
    ele_tab = 0;
   
    podawanie( tablica, ele_tab );
   
   
    sprawdzenie();
   
}



Ktoś mógłby zaproponować jak wykonać sprawdzenie wylosowanej liczby? W sumie najfajniej byłoby gdyby ktoś bazując na widocznym kodzie dokończył ten program, mógłbym go wtedy lepiej przeanalizować.
P-114356
pekfos
» 2014-07-26 12:09:34
Losujesz jedną, a potem w pętli drugą, aż będzie różna od pierwszej? Kreatywne myślenie..

C/C++
tab[ element ] = a;
cin >> a;
Co to ma być?

W sumie najfajniej byłoby gdyby ktoś bazując na widocznym kodzie dokończył ten program
Nie licz na to.
P-114410
Daedra
Temat założony przez niniejszego użytkownika
» 2014-07-27 10:30:19
C/C++
tab[ element ] = a;
cin >> a;

Jest to funkcja w której następuje wczytanie 3 liczb podanych przez użytkownika do tablicy



Edit:
Za cholerę nie mogę tego pojąć i zrobić jak należy...


C/C++
/*
    Napisz program, który wczyta 3 liczby podane przez uzytkownika do tablicy, a nastepnie wylosuje 2 z nich bez powtórzen.
    Wynik wypisz na ekran. Postaraj sie napisac ten program w oparciu o funkcje.
*/

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void wczytywanie_liczb( int * tablica, int element, int liczba )
{
    cout << "Podaj 3 liczby" << endl;
    do
    {
        cin >> liczba;
        cin.clear();
        cin.sync();
        tablica[ element ] = liczba;
        element++;
    } while( element < 3 );
   
    element = 0;
    cout << "Podales ";
    do
    {
        cout << tablica[ element ] << ", ";
        element++;
    } while( element < 3 );
   
    cout << endl;
}

int losowanie_elementu_tablicy()
{
    return(( rand() % 2 ) + 0 );
}

bool sprawdzenie( int wylosowanab, int wylosowana )
{
    if( wylosowana != wylosowanab )
         return false;
    else
         return true;
   
}

int main()
{
    srand( time( NULL ) );
    int tab[ 3 ];
    int ele = 0;
    int licz = 0;
   
    wczytywanie_liczb( tab, ele, licz );
   
    int los, losb, nr;
    nr = 1;
   
    los = losowanie_elementu_tablicy();
    cout << nr << ".Wylosowano: " << tab[ los ] << endl;
    do
    {
        losb = losowanie_elementu_tablicy();
        if( sprawdzenie( losb, los ) == false )
        {
            nr++;
            cout << nr << ". Wylosowano: " << tab[ losb ] << endl;
        }
       
    } while( nr < 2 );
   
}


To wszystko co udało mi się wymyślić. Nie wystarczy że wszystko jest prawie robione na dłuższą drogę to nie działa do końca jak powinno. Nie proszę was z lenistwa o pomoc, męczę się już z tym kilka dni. Nie potrafię po prostu zrobić systemu który by sprawdzał czy liczba się nie powtórzyła. Czy ktoś może napisać jakiś kod od siebie?
P-114435
« 1 » 2
  Strona 1 z 2 Następna strona