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

Lekcja 21. Losowanie tych samych indeksów...

Ostatnio zmodyfikowano 2012-05-23 23:17
Autor Wiadomość
Trust
Temat założony przez niniejszego użytkownika
Lekcja 21. Losowanie tych samych indeksów...
» 2012-05-22 23:21:41
Witam !

Głowię się nad losowaniem indeksów. w funkcji wypisz losują sie te same indeksy jest do ciągle indeks o wartości 3.
Dlaczego ?
C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;


int losowanie( int min, int max )
{
    int l;
    l =( rand() %( max - min ) + 1 ) + min;
    return l;
}

int wpisz( int t[], int i )
{
    do
    {
        cin >> t[ i ];
        i++;
    } while( i != 3 );
   
}
int wypisz( int t[], int l )
{
    int indeks = 0;
    do
    {
        l = losowanie( 0, 2 );
        cout << " " << t[ l ];
        indeks++;
        l = 0;
    } while( indeks != 2 );
   
}
int main()
{
   
    int tablica[ 3 ], los = 0;
   
    wpisz( tablica, 0 );
    wypisz( tablica, los );
   
   
   
   
    system( "pause" );
    return 0;
}
P-57202
DejaVu
» 2012-05-22 23:24:40
Przemyśl funkcję wypisującą.
P-57203
Trust
Temat założony przez niniejszego użytkownika
» 2012-05-22 23:44:07
Nic więcej tu chyba nie wymyślę. Jak zmieniłem tak jaki widać niżej program tak samo się zachowuje. Wyrzuca ostatnia cyfrę dwa razy.

C/C++
int wypisz( int t[] ) // int t[] tablica o indeksie 3.
{
    int indeks = 0, l;
    do
    {
        l = losowanie( 0, 2 ); // wywołuje funkcje losowanie liczba startowa to 0 liczb w przedziale 2+1.
        cout << " " << t[ l ]; // wypisuje zawartość tablicy o danym indeksie l
        indeks++;
        // l=0; <- to jest niepotrzebne.
    } while( indeks != 2 );
   
}
P-57204
DejaVu
» 2012-05-22 23:48:34
Przeanalizuj funkcję wypisującą WIELOKROTNIE lub napisz ją jeszcze raz bo jest w niej błąd. Każdą linijkę przeanalizuj (nawet oczywistą).
P-57205
ison
» 2012-05-23 00:20:36
Błędu w funkcji wypisz jako takiego nie ma, DejaVu chyba chodziło o to, że miało być losowanie bez powtórzeń a ty tego nie sprawdzasz.
Losuje ci zawsze t[2] bo pierwsze 2 randy modulo 3 akurat zawsze zwracają 2, możesz określić ziarno randa zależnie od czasu, wrzuć gdzieś na początek programu
srand( time( 0 ) );
 i problem minie.
Poza tym
l =( rand() %( max - min ) + 1 ) + min;
 tu +1 jest w złym miejscu
P-57206
DejaVu
» 2012-05-23 01:26:11
Eh...
C/C++
int wypisz( int t[], int l )
{
    int indeks = 0;
    do
    {
        l = losowanie( 0, 2 );
        cout << " " << l;
        indeks++;
        l = 0;
    } while( indeks != 200 );
   
}
Wywołaj sobie taką funkcję, przemyśl czy aby na pewno wszystko gra. Uwagi zamieszczone przez kolegę wyżej są słuszne. A ja ze swojej strony mogę dodać, że w Twoim kodzie na pierwszy rzut oka odczytywałem inną intencję niż to co miałeś w zamyśle, więc niezbyt trafne podpowiedzi Ci dawałem :P (sorry, mój błąd - rutyna niszczy człowieka...).
P-57207
Trust
Temat założony przez niniejszego użytkownika
» 2012-05-23 23:17:17
noo normalnie LOL ... nie dodałem
C/C++
srand( time( 0 ) );
i się tyle męczę. ehhh Teraz będę pamiętał. :) Dotychczas wiedziałem, ze to musi być, ale jakoś... sami widzicie ;p

A ten "+1" to gdzie ma być? Wiem, ze musi być na pewno, bo liczb w przedziale musi być +1.



A już wiem, jak to "+1" wyrzuciłem i dałem w
C/C++
int los = losowanie( 0, 3 );

drugi argument jako 3i działa :) Teraz mogę zacząć pisać losowanie dwóch liczb bez powtórzeń. :)

Dzięki za pomoc :)

Pozdroo
P-57254
« 1 »
  Strona 1 z 1