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

Losowanie bez powtorzen - nie moge znalezc bledu

Ostatnio zmodyfikowano 2015-10-12 16:21
Autor Wiadomość
carlosmay
» 2015-10-11 15:52:31
if( !los == liczba[ c ] )
 
 Priorytety operatorów. Jeśli nie wiesz nie pamiętasz, który jest wykonywany pierwszy determinujesz kolejność nawiasami.
if( !( los == liczba[ c ] ) )
 
W twoim przykładzie jest tak:
1. zmienna los jest negowana (np. los = 5 -> los = 0) lub (los = 0 -> los = 1)
2. porównujesz zanegowaną zmienną los do wartości z tablicy, ale zmienna los po zanegowaniu może mieć tylko dwie wartości ( 0 lub 1).

Poza tym reszta kodu też jest do poprawienia, mimo
los == liczba[ c ]
 i tak program wpisuje do tablicy tą wartość i przechodzi do następnego elementu.

Wskazówka:
- losowanie los
- iterujesz przez cała tablice
- zapis do tablicy po wyjściu z pętli, jeśli dojdzie do końca (jeśli nie powtórz losowanie)
P-138416
danielpadewski
Temat założony przez niniejszego użytkownika
» 2015-10-11 22:34:04
przepraszam ze znowu to pisze ale jestem chyba na tyle malo inteligentny ze nie potrafie znalezc rozwiązania , uważam że powinienem umieć rozwiązac taki problem i rozumieć działanie programu (analizując go juz n-ty raz ciągle myśle że wszystko powinno być dobrze )
P-138459
carlosmay
» 2015-10-11 22:47:55
C/C++
for( i = 0; i < 5; i++ )
{
    do {
        a = false;
        los =( rand() % 6 ) + 5;
        for( c = 0; los != liczba[ c ] && c <= i; c++ ) { } // sprawdza czy liczba jest w tablicy
        if( i ==( c - 1 ) ) liczba[ i ] = los; // jesli petla dotarla do konca zapisz los do tablicy
        else a = true; // jesli nie wroc do ponownego losowania
       
    } while( a );
   
}
for( int i = 0; i < 5; i++ ) // wypisz wynik
     cout << liczba[ i ] << " ";

cout << endl;

Rób wszystko po kawałku. Używaj debugera, bardzo ułatwia zadanie.
P-138461
danielpadewski
Temat założony przez niniejszego użytkownika
» 2015-10-12 13:31:11
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
    int tab[ 5 ];
    int los;
    bool status = true;
    srand( time( NULL ) );
    for( int i = 0; i < 5; i++ )
    {
        do
        {
            status = true;
            los =( rand() % 5 ) + 1;
            for( int z = 0; z < i || z == i; z++ )
            {
                if( los == tab[ z ] )
                {
                    status = false;
                }
            }
        } while( status == false );
       
        tab[ i ] = los;
    }
    for( int b = 0; b < 5; b++ )
    {
        cout << tab[ b ] << endl;
    }
    return 0;
}


ze świeżym mózgiem zasiadłem do komputera i postanowiłem od nowa napisać program , "chyba" działa poprawnie , szczerze mówiąc tak średnio rozumiem czym się różni ten kod od poprzedniego ale może to dlatego że nie skupiałem się nad tym już
P-138472
pekfos
» 2015-10-12 16:21:31
C/C++
z < i || z == i
Po co z == i? Pod tym indeksem nie masz jeszcze niczego zapisanego.
P-138475
1 « 2 »
Poprzednia strona Strona 2 z 2