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 :/ ... |
|
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. |
|
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? |
|
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. |
|
pekfos |
» 2014-07-25 16:31:06 int help =( rand() % 2 ) + 0;
Dlaczego z zakresu 0 - 2? Ano, dlatego że tablica ma 3 elementy |
To 0 - 1. |
|
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:
#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ć. |
|
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.. 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. |
|
Daedra Temat założony przez niniejszego użytkownika |
» 2014-07-27 10:30:19 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...
#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? |
|
« 1 » 2 |