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

Lekcja 21, problem z pierwszym zadaniem.

Ostatnio zmodyfikowano 2011-12-14 13:24
Autor Wiadomość
Lukaso358
Temat założony przez niniejszego użytkownika
Lekcja 21, problem z pierwszym zadaniem.
» 2011-12-10 21:56:42
Witam, po dowiedzeniu się o obsłudze tej strony jeśli chodzi o tekst, piszę, że mam już napisany program, lecz nie wylosowuje mi dwóch z podanych liczb, tylko jakieś nie wiadomo z skąd wzięte.
  • Oto program:
    C/C++
    #include <iostream>
    #include <cstdlib>
    #include <ctime>


    int wczytajLiczbe( int t[], int ile ) // Funkcja wczytujaco - weryfikujaca ( poprawnosc wprowadzanych danych ).
    {
        int a;
        int i = 0;
        do
        {
            std::cout << "Podaj liczbe nr. " << i + 1 << " :";
            std::cin >> a;
           
            if( std::cin.good() == true )
            {
                t[ i ] = a;
                i++;
            }
            else
            {
                std::cout << "Podana liczba jest niepoprawna.";
            }
           
            std::cin.clear();
            std::cin.sync();
        } while( i < ile ); // 'ile' jest rownowazne z 'wielkoscTablicy'.
       
        return t[ 3 ];
    }
    bool czyBylaWylosowana( int t[], int ile, int b[], int x )
    {
        if( ile <= 0 )
             return false;
       
        int i = 0;
        do
        {
            if( b[ x ] == b[ x - 1 ] )
                 return true;
           
            i++;
        } while( i < ile );
       
        return false;
    }

    int wylosuj()
    {
        return( rand() % 3 ) + 0;
    }

    int main()
    { int b1[ 2 ];
        int x1 = 0;
        int x2 = 0;
        int ile1 = 3;
        int wylosowane[ 5 ];
        int tablica[ 3 ];
        int c = 0;
        int liczba;
        int wczytaj = wczytajLiczbe( tablica, ile1 );
        do
        { int liczba = wylosuj();
            return liczba;
            int ile1 = 0;
            if( czyBylaWylosowana( tablica, ile1, b1, x1 == false ) )
            {
                b1[ ile1 ] = tablica[ c ];
                return b1[ ile1 ];
                ile1++;
                c++;
            } //if
        } while( ile1 < 3 );
       
        ile1 = 0;
        do
        {
            std::cout << b1[ ile1 ] << std::endl;
            ile1++;
        } while( ile1 < 3 );
       
        return 0;
    }
    Dobrze by było, gdybyście poprawili błędy.
P-45432
malan
» 2011-12-10 22:52:08
Dobrze by było, gdybyście poprawili błędy.
Może frytki do tego?

1. http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

2.
C/C++
return t[ 3 ];
Co to ... jest? O.o

3.
C/C++
f( b[ x ] == b[ x - 1 ] )
return true;
Co Ty chciałeś tutaj zrobić?

4. Dalej nie mam zamiaru patrzeć, bo...
C/C++
do
{ int liczba = wylosuj();
    return liczba; // ?
    //...
}

C/C++
if( czyBylaWylosowana( tablica, ile1, b1, x1 == false /* ? */ ) )
{
    b1[ ile1 ] = tablica[ c ];
    return b1[ ile1 ]; // ?
    ile1++;
    c++;
} //if
P-45435
pekfos
» 2011-12-11 16:58:59
Dobrze by było, gdybyście poprawili błędy.
No, było by. aktualnie nie jest dobrze..
P-45500
Wienzu
» 2011-12-12 15:24:52
Również posiadam problem z zadaniem pierwszym w tym zadaniu. Problem jednak jest trochę innej natury. Program działa (?). Po wielokrotnym sprawdzeniu faktycznie podaje dwie liczby z wybranych.
Coś tutaj nie działa albo ja czegoś nie rozumiem, tablica ma elementy max do t[2] a zarówno "a" jak i "b" może przyjąć wartości od 0 do 3, co mogłoby dać mi wynik t[3]... mimo to program działa dobrze i właśnie gdy zmienię w funkcji losuj rand()%(indeks-1) to losuje tylko od 1 do 2.
Czy chodzi o właściwość funkcji rand()?

Przepraszam bardzo za wygląd wiadomości ale nie mam po prostu pojęcia jak wstawić te ramki a nigdzie na stornie nie umiem też znaleźć podpowiedzi w tej sprawie.
C/C++
#include <iostream>
#include <ctime>
using namespace std;

int losuj( int indeks )
{
    return rand() %( indeks );
}

int porownaj( int t[], int indeks, int pierwszaLiczba )
{
    int b;
    do
    {
        b = losuj( indeks );
    } while( pierwszaLiczba == b );
   
    return b;
}

int main()
{
    srand( time( 0 ) );
    int t[ 3 ];
    int a, b;
    do { //pętla aby nie trzeba było go za każdym razem na nowo uruchamiać
        cout << "Podaj trzy liczby i zatwierdz kazda ENTERem:" << endl;
        cin >> t[ 0 ] >> t[ 1 ] >> t[ 2 ];
        a = losuj( 3 ); //a jest wskaźnikiem na komórkę pierwszej liczby
        b = porownaj( t, 3, a );
        cout << "Pierwsza liczba: " << t[ a ] << endl;
        cout << "Druga liczba: " << t[ b ] << endl;
    } while( a < 10 );
   
    return 0;
}
Pozdrawiam.
P-45543
malan
» 2011-12-12 20:21:41
@Wienzu: na tym forum nie tworzymy tematów w temacie. Jeden problem to jeden temat. Masz problem? Załóż swój temat :)
P-45568
Lukaso358
Temat założony przez niniejszego użytkownika
Dzięki.
» 2011-12-14 13:24:54
Dzięki Wienzu za podpowiedź.
Temat zamykam.
P-45622
« 1 »
  Strona 1 z 1