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

[C++] Wygenerowanie odpowiednich liczb losowych

Ostatnio zmodyfikowano 2014-12-29 00:53
Autor Wiadomość
pytalski
Temat założony przez niniejszego użytkownika
[C++] Wygenerowanie odpowiednich liczb losowych
» 2014-12-27 22:27:10
Witam wszystkich :)

Jestem początkującym w programowaniu i mam problem. Chcę wygenerować odpowiednie liczby losowe,niepodzielne przez 10. Niby mój kod działa, ale co jakiś czas pojawia się liczba minusowa(-858993460).Co jest nie tak?
C/C++
#include <iostream>
#include <ctime>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int main() {
    int a[ 200 ], d, g, z, u;
    cout << "Podaj ile elementow:" << endl; cin >> z;
    cout << "Podaj zakres generowanych wartosci <d,g>:";
    cin >> d >> g;
    srand( time( 0 ) );
    for( int i = 0; i < z; i++ )
    {
        u = d + rand() %( g - d + 1 );
        if( u % 10 != 0 )
             a[ i ] = u;
       
        cout << i + 1 << "." << a[ i ] << endl;
    }
    _getch();
    return 0;
 
P-123394
darko202
» 2014-12-27 22:42:39
problem jest w
 if( u % 10 != 0 ) 
     a[ i ] = u;
co jest w tablicy który pokazujesz jak if jest prawdą
P-123398
pytalski
Temat założony przez niniejszego użytkownika
» 2014-12-27 22:55:46
W tablicy jest liczba, której reszta jest z zakresu 1...9 (czyli jest niepodzielna przez 10). Więc nie wiem o co chodzi z tą ujemną liczbą :|
P-123402
lectre
» 2014-12-27 23:02:42
Zastanów się co zrobi program jeśli wylosowana liczba jest podzielna przez 10. A w zasadzie czego nie zrobi. Nie przypisze odpowiedniej komórce tablicy wylosowanej liczby. Zmienne lokalne, który nie zostały zdefiniowane inaczej przechowują tak zwane "śmieci". Stąd ta dziwna liczba w wynikach. Może lepiej byłoby użyć pętli do while?

C/C++
do
{
    //losowanie liczby
} while( wylosowana % 10 == 0 )
P-123405
pytalski
Temat założony przez niniejszego użytkownika
» 2014-12-27 23:27:33
@lectre Yhym, czyli tu był pies pogrzebany. Myślałem, że w przypadku gdy nie ma else a warunek jest fałszywy to następuje pomijanie zapisu.
Co do do while to raczej nie. Zależy mi właśnie, aby tyle elementów ile użytkownik poda, tyle było niepodzielnych przez 10. Jak można to spełnić?
P-123408
darko202
» 2014-12-27 23:43:09
zwiększyłeś iterator i++ w for, a tego nie chcesz
nie chcesz wyświetlać wtedy tablicy

pomyśl to co można zrobić ?
P-123411
lectre
» 2014-12-27 23:48:44
Myślałem, że w przypadku gdy nie ma else a warunek jest fałszywy to następuje pomijanie zapisu.


Jeśli warunek jest nie jest spełniony to instrukcja (lub blok instrukcji ujęty w klamry) nie jest wykonywana. Tak też jest w twoim programie.

Nie miałem na myśli abyś usunął pętlę for. Ona jest jak najbardziej w porządku. Miałem na myśli usprawnienie programu w ten sposób:

C/C++
for( int i = 0; i < z; i++ )
{
    do
    {
        u = d + rand() %( g - d + 1 );
        a[ i ] = u;
    } while( u % 10 == 0 );
   
    cout << i + 1 << "." << a[ i ] << endl;
}

Jak działa taki zapis: Ano program losuje liczby dla każdej komórki, aż zdarzy mu się wylosować 10. Wtedy powtarza losowanie, ale nadal dla tej samej komórki także wszystkie elementy tablicy zostaną wylosowane.
P-123412
pytalski
Temat założony przez niniejszego użytkownika
» 2014-12-28 00:15:20
@lecture Wielkie dzięki :) Czy dobrze rozumiem, że w przypadku, gdy pierwsza wylosowana liczba będzie podzielna przez 10 to zostanie ona zapisana w tablicy?

@darko202 Nie wiem czy dobrze myślę, ale chodzi Ci, by lekko oszukać generowanie liczb i jako else do if zapisać np. i--? Tylko co by się wydarzyło, gdyby pierwsza liczba była podzielna przez 10 - wysypanie programu?
P-123414
« 1 » 2
  Strona 1 z 2 Następna strona