gam3 Temat założony przez niniejszego użytkownika |
» 2018-11-13 17:58:59 Sprawdzałem i kończy się również na 0,1,2. Chyba że chodzi o coś innego? |
|
jankowalski25 |
» 2018-11-13 22:12:04 1. Do zmiennej los nie przypisujesz wartości początkowej, przez co w kolejnych krokach kopiujesz jakieś śmieci do poprzednia1 , a następnie do poprzednia2 . 2. Chodzi o taki przypadek: Całość zakończy się po wylosowaniu 0 1 przy założeniu, że przypadkowa wartość trafiająca do los będzie wynosiła -1. Co do rozwiązania: najprościej wylosować trzy liczby przed pętlą właśnie po to, aby nie kombinować z jakimiś magicznymi liczbami typu -1. Jakiej stałej byś nie wybrał, to i tak trafią się przypadki, gdzie po wczytaniu dwóch liczb całość się zakończy (bo ta trzecia będzie z góry ustalona i dobranie dwóch kolejnych jest trywialne, dla -1 są to właśnie 0 i 1). |
|
pekfos |
» 2018-11-14 16:59:58 Jakiej stałej byś nie wybrał, to i tak trafią się przypadki, gdzie po wczytaniu dwóch liczb całość się zakończy |
Nigdy nie wylosuje mniejszej liczby niż zero, wiec stałe mniejsze od -1 są bezpieczne. |
|
madpl1239 |
» 2018-11-14 19:40:15 Hmm.... z twojego pierwszego posta, miało wynikać że program losuje z przedziału <0, 10> tak długo aż wylosuje sekwencję 3 kolejnych liczb. To co teraz widzę chyba sporo odbiega od tzw. specyfikacji problemu?
Po prostu się pogubiłem jakiego algorytmu szukasz:))))
Pozdrawiam
|
|
pekfos |
» 2018-11-14 19:43:34 Dlaczego odbiega? |
|
madpl1239 |
» 2018-11-14 20:02:15 Cytuję:
gam3 napisał: Dzieki wielkie za podpowiedzi. Nie wiem czemu ciągle myślałem nad losowaniem w jednej zmiennej XD C/C++ #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int los, los2, los3; srand( time( NULL ) ); los = rand() % 11; los2 = rand() % 11; los3 = rand() % 11; while( los != 2 || los2 != 3 || los3 != 4 ) { los = rand() % 11; los2 = rand() % 11; los3 = rand() % 11; printf( "%3d\n", los ); printf( "%3d\n", los2 ); printf( "%3d\n", los3 ); } return 0; }
z tego algorytmu powyżej wynika, że liczby wylosowane mają być 2, 3 i 4:))) Chociaż mam wątpliwości co do poprawności warunku while. Bo z tego warunku wynika, że wystarczy spełnić np: pierwszy "los != 2" żeby ta alternatywa logiczna była prawdziwa i kompilator może już dalej wcale nie sprawdzać warunków:)))) czy to nie będzie "pluskwą"?
|
|
pekfos |
» 2018-11-14 21:00:02 z tego algorytmu powyżej wynika, że liczby wylosowane mają być 2, 3 i 4:))) |
To już zostało wyjaśnione. z tego warunku wynika, że wystarczy spełnić np: pierwszy "los != 2" żeby ta alternatywa logiczna była prawdziwa i kompilator może już dalej wcale nie sprawdzać warunków:)))) |
I co z tym nie tak? |
|
qwertyui |
» 2018-11-16 00:26:44 Moze nie jest to zbyt elegancie rozwiazanie, badz co badz wedlug mnie dziala i o to chodzilo autorowi: #include <stdio.h> #include <time.h> #include <stdlib.h>
using namespace std;
int main() { srand( time( 0 ) ); int frst, scnd, thrd, number; int i = 0; bool roll = true; while( roll ) { if( i == 0 ) { frst = rand() % 11; number = frst; } else if( i == 1 ) { scnd = rand() % 11; number = scnd; if( frst + 1 != scnd ) { i = 0; continue; } } else if( i == 2 ) { thrd = rand() % 11; number = thrd; if( scnd + 1 != thrd ) { i = 0; continue; } else roll = false; } printf( "%i \n", number ); i++; if( i > 2 ) i = 0; } printf( "\n\n%i\n", frst ); printf( "%i\n", scnd ); printf( "%i\n", thrd ); return 0; }
|
|
1 2 « 3 » |