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

[Lekcja 21] jedna z liczb jest z kosmosu

Ostatnio zmodyfikowano 2011-10-29 10:09
Autor Wiadomość
fufelek
Temat założony przez niniejszego użytkownika
[Lekcja 21] jedna z liczb jest z kosmosu
» 2011-10-28 20:18:39
Witam ponownie :)

a więc, kto mi wytłumaczy, co robię źle, że program sam wpisuje do tablicy "z kosmosu" czasem jedną, czasem więcej liczb?

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int losujemy() {
    return( rand() % 10 ) + 1;
} //losujemy

//2. Sprawdzam, czy wylosowana liczba przypadkiem wczeœniej ju¿ nie pad³a;
bool sprawdzam( int s_tablica[], int s_liczba, int s_ile ) {
    if( s_ile <= 0 ) {
        return false;
    }
   
    int i;
    i = 0;
    do { //4. Je¿eli wylosowana liczba pad³a wracam do kroku 1.
        if( s_tablica[ i ] == s_liczba ) {
            return true; }
        i++;
    } while( i < s_ile );
   
    return false;
} //sprawdzam

int main() {
    int tablica[ 5 ];
    int liczba;
    int ile;
    srand( time( NULL ) );
   
    //wpisuje do tablicy bez powtorzen
    ile = 0;
    do { //1. Losujê liczbê z przedzia³u od 1 do 10;
        liczba = losujemy();
       
        //3. Je¿eli wylosowana liczba nie pad³a zapisujê j¹ do puli liczb wylosowanych
        if( sprawdzam( tablica, liczba, ile ) == false ) {
            tablica[ ile ] = liczba;
        } //if
        ile++; //i zwiêkszam liczbê wylosowanych liczb.
    } while( ile < 4 ); //5. Sprawdzam, czy wylosowa³em ju¿ 5 liczb. Je¿eli nie - przechodzê do punktu 1.
   
    //wypisuje tablice
    ile = 0;
    do {
        cout << tablica[ ile ] << '\n';
        ile++;
    } while( ile < 5 );
   
} //main

Dzięki za wszelką pomoc.
P-42941
DejaVu
» 2011-10-28 20:20:44
C/C++
while( ile < 4 );

P-42942
fufelek
Temat założony przez niniejszego użytkownika
» 2011-10-28 20:22:22
sprawdzałem to, jeśli zmienię na 5, to i tak losuje kosmos. A rozumiem to tak, że jeśli dam 5, to wyjdę poza tablicę (bo jest przecież od 0)
P-42943
SeaMonster131
» 2011-10-28 20:27:21
A rozumiem to tak, że jeśli dam 5, to wyjdę poza tablicę (bo jest przecież od 0)

while( zmienna < 5 );
  to zmienna musi być:
..,0,1,2,3,4

Masz 5 elementów? :)

Jeżeli dasz <= to wtedy będzie: ..,0,1,2,3,4,5 czyli wyjdziesz poza tablice ;p A co do kosmosu to sie nie przyglądałem ;p
P-42945
fufelek
Temat założony przez niniejszego użytkownika
» 2011-10-28 20:36:25
czas odpowiedzi na forum zaskoczył mnie mocno :)

w każdym razie nadal mam z tym problem, losuje mi dziwne liczby i w dodatku czasem powtarza liczbę 1... kombinuję z while, ale to nic nie daje.
P-42947
ison
» 2011-10-28 23:20:37
C/C++
do { //1. Losujê liczbê z przedzia³u od 1 do 10;
    liczba = losujemy();
   
    //3. Je¿eli wylosowana liczba nie pad³a zapisujê j¹ do puli liczb wylosowanych
    if( sprawdzam( tablica, liczba, ile ) == false ) {
        tablica[ ile ] = liczba;
    } //if
    ile++; //i zwiêkszam liczbê wylosowanych liczb.
} while( ile < 4 ); //5. Sprawdzam, czy wylosowa³em ju¿ 5 liczb. Je¿eli nie - przechodzê do punktu 1.

zauważ co się dzieje gdy liczba się powtarza, lecisz dalej pomimo tego, że nic nie napisałeś na aktualnym indeksie tablicy
przenieś ile++ do ifa sprawdzającego czy liczba się nie powtarza
(i zmień while(ile<4) na while(ile<5))
P-42955
fufelek
Temat założony przez niniejszego użytkownika
» 2011-10-29 10:09:32
faktycznie, taki "drobny" błąd, a tyle krwi napsuł... wiedziałem, że coś jest nie tak z liczeniem powtórzeń, ale wydawało mi się, że to był problem po stronie
C/C++
do {
    if( s_tablica[ i ] == s_liczba )
         return true;
   
    i++;
} while( i < s_ile );
i wczoraj kombinowałem z modyfikacją tego kodu :)
Dzięki za pomoc!
P-42973
« 1 »
  Strona 1 z 1