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

[Lekcja 21] - interesujące zagadnienie

Ostatnio zmodyfikowano 2012-11-30 23:24
Autor Wiadomość
Totalq
Temat założony przez niniejszego użytkownika
[Lekcja 21] - interesujące zagadnienie
» 2012-11-25 20:06:35
Program działa poprawnie. Najważniejsza informacja. Zapis jest wprawdzie długi, ale wszystko co tylko się dało wyrzuciłem do osobnych funkcji, więc jestem umiarkowanie zadowolony.
Mam jedna pewną zagwozdkę.

Liczba, która ma zostać wylosowana musi pochodzić z tablicy. Ta część przebiegła bezproblemowo. Kolejnym warunkiem jest, aby się nie powtórzyła.

Zaasekurowałem się w ten sposób, że stworzyłem kolejną tablicę (odrzut[]) i po wylosowaniu pierwszej liczby zostaje ona wpisana właśnie do tej tablicy. Warunek jaki napisałem wygląda tak:

*****************

if( sprawdzenie( tablica , ile , liczba ) == true && odrzut[ 0 ] != liczba )

*****************

I tutaj pojawia się problem. Otóż przy pierwszym losowaniu w tejże tablicy (odrzut[]) nie ma jeszcze żadnej liczby, a właściwie to jest liczba, którą kompilator/program sobie przypisał(?!), a wartość zostaje dodana dopiero po wylosowaniu 1 liczby. Mam nadzieje, że nadążacie ;) Co jednak w przypadku, kiedy przed pierwszym losowaniu, jakimś cudem, ta przypisana(?!) liczba w tablicy odrzut[] będzie pokrywała się z pierwszą wylosowaną liczbą? A może w momencie kiedy tablica nie jest jeszcze uzupełniona, to program/kompilator traktuje ją jako pustą tablicę? Pogmatwane to, ale nie jestem w stanie tego rozgryść.

Pragnę, abyście stwierdzili czy mój tok rozumowania jest prawidłowy i czy program jest w porządku. Chodzi mi o ten jeden, konkretny przykład, gdzie do wylosowania są dwie liczby, bowiem przy większej ilości liczb do wylosowania przerobiłem kod dodając kolejną funkcję z tablicą.

C/C++
// Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń.
// Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.

#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;

int losowanie()
{
    return rand();
}

bool sprawdzenie( int t[], int ile, int liczba )
{
    int i = 0;
    do
    {
        if( t[ i ] == liczba )
             return true;
        else;
       
        i++;
       
    } while( i < ile );
   
    return false;
   
}

int wpisywanie( int t[], int ile )
{
    int i = 0;
    int x = 1;
    cout << "Podaj trzy liczby do tablicy:" << endl;
   
    do
    {
        cout << "Liczba nr" << x << ": ";
        cin >> t[ i ];
        i++;
        x++;
    } while( i < ile );
   
   
}


int wypisywanie( int t[], int ile )
{
    int i = 0;
    int x = 1;
    cout << "Wypisze wylosowane liczby" << endl;
   
    do
    {
        cout << "Liczba nr" << x << ": " << t[ i ] << endl;
        i++;
        x++;
    } while( i < ile );
   
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ];
    int wynik[ 2 ];
    int odrzut[ 1 ];
    int ilosc = 0;
    int ile = 3;
   
    wpisywanie( tablica, ile );
    cout << endl << "********************" << endl << endl;
   
   
    do
    {
       
        int liczba = losowanie();
       
        if( sprawdzenie( tablica, ile, liczba ) == true && odrzut[ 0 ] != liczba )
        {
            wynik[ ilosc ] = liczba;
            ilosc++;
            odrzut[ 0 ] = liczba;
        }
       
    } while( ilosc < 2 );
   
    wypisywanie( wynik, 2 );
   
   
    return 0;
}
 endl;
i++;
x++;
}while( i
P-69882
willhelm
» 2012-11-30 23:06:03
O ile dobrze pamiętam, to przy deklarowaniu zmiennej, kompilator wpisuje "NULL" czyli zero. To eliminuje niebezpieczeństwo o którym piszesz.

Poprawcie mnie jeśli się mylę...
P-70193
Admixior
» 2012-11-30 23:24:23
@up: zerami jet przypisywane tylko globalne zmienne (i chyba tez statyczne)

@temat:
jako parametr ile podajesz ile do teraz było zrobione
C/C++
bool sprawdzenie( int t[], int ile, int liczba )
{
    int i = 0;
    while( i < ile )
    {
        if( t[ i ] == liczba )
             return true;
        else;
       
        i++;
    }
   
    return false;
P-70194
« 1 »
  Strona 1 z 1