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

Problem praca domowa rozdział 21

Ostatnio zmodyfikowano 2016-01-16 23:49
Autor Wiadomość
wirusomaniak
Temat założony przez niniejszego użytkownika
Problem praca domowa rozdział 21
» 2016-01-16 22:32:15
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void wczytaj( int t[], int R )
{
    short i = 0;
    do {
        cout << "podaj liczbe nr:" <<( i + 1 ) << "\n:";
        cin >> t[ i ];
        cout << "ERROR: " << cin.fail() << endl;
        cin.clear();
        cin.sync();
        i++;
    } while( i < R );
   
}
void wypisz( int t[], int R )
{
    int i = 0;
    do
    {
        cout << "wylosowana nr." <<( i + 1 ) << "to: " << t[ i ] << endl;
        i++;
    } while( i < R );
   
}
int losowanie( int t[], int R, int i )
{
    do
    {
        int liczba = rand();
        if( liczba == t[ i ] )
        {
            i++;
            return liczba;
        }
    } while( i < R );
   
    return 0;
   
}
bool czyBylaWylosowana( int liczba, int t[], int ile )
{
    if( ile <= 0 )
         return false;
   
   
    int i = 0;
    do
    {
        if( liczba == t[ i ] )
             return true;
       
       
        i++;
    } while( i < ile );
   
    return false;
}
int main()
{
    srand( time( NULL ) );
    int tablica[ 3 ];
    int wylosowane[ 2 ];
    int wylosowanych = 0;
    int ile = 0;
    wczytaj( tablica, 3 );
    do
    {
        int liczba = losowanie( tablica, 3, ile );
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 2 );
   
    wypisz( wylosowane, 2 );
    return 0;
}
Program się kompiluje wszystko w porządku ale bo wykonaniu funkcji wczytaj nic dalej się nie dzieje, dlaczego?. Bo jakoś nie umiem znaleźć niezgodności.
P-143608
carlosmay
» 2016-01-16 22:42:55
Deklarujesz, że funkcje 'wczytaj', 'wypisz' oraz 'losowanie' będą zwracać wartość,
tymczasem tego nie robią.
Ma to niezdefiniowane zachowanie.
P-143610
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2016-01-16 22:49:29
Poprawiłem. Ale po skompilowaniu nadal nic się nie dzieje po wykonaniu funkcji wczytaj.
P-143612
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2016-01-16 23:18:10
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void wczytaj( int t[], int R )
{
    short i = 0;
    do {
        cout << "podaj liczbe nr:" <<( i + 1 ) << "\n:";
        cin >> t[ i ];
        cout << "ERROR: " << cin.fail() << endl;
        cin.clear();
        cin.sync();
        i++;
    } while( i < R );
   
}
int losowanie()
{
    return( rand() % 10 ) + 0;
   
}
bool czyBylaWylosowana( int liczba, int t[], int ile )
{
    if( ile <= 0 )
         return false;
   
   
    int i = 0;
    do
    {
        if( liczba == t[ i ] )
             return true;
       
       
        i++;
    } while( i < ile );
   
    return false;
}
int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowane[ 8 ];
    int wylosowanych = 0;
    wczytaj( tablica, 10 );
    do
    {
       
        int liczba = losowanie();
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            cout << "wylosowana nr." <<( wylosowanych + 1 ) << "to: " << tablica[ liczba ] << endl;
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 8 );
   
    return 0;
}
Doszedłem do wniosku, że tamten sposób myślenia nie objął dobrego kierunku więc wpadłem na inny pomysł i nieco zmodyfikowałem kod po skompilowaniu program spełnił oczekiwania :)
P-143615
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2016-01-16 23:49:09
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void wypisz( int t[], int R )
{
    int i = 0;
    do
    {
        cout << "wylosowana nr." <<( i + 1 ) << "to: " << t[ i ] << endl;
        i++;
    } while( i < R );
   
}
void wczytaj( int t[], int R )
{
    short i = 0;
    do {
        cout << "podaj liczbe nr:" <<( i + 1 ) << "\n:";
        cin >> t[ i ];
        cout << "ERROR: " << cin.fail() << endl;
        cin.clear();
        cin.sync();
        i++;
    } while( i < R );
   
}
int losowanie( int t[] )
{
    return t[( rand() % 10 ) + 0 ];
   
}
bool czyBylaWylosowana( int liczba, int t[], int ile )
{
    if( ile <= 0 )
         return false;
   
   
    int i = 0;
    do
    {
        if( liczba == t[ i ] )
             return true;
       
       
        i++;
    } while( i < ile );
   
    return false;
}
int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowane[ 8 ];
    int wylosowanych = 0;
    wczytaj( tablica, 10 );
    do
    {
       
        int liczba = losowanie( tablica );
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 8 );
   
    wypisz( wylosowane, 8 );
    return 0;
}
To jest ostateczny kod chyba bo tamten nie zapisywał wylosowanej do tablicy wylosowanych. Temat zamykam i przepraszam że założyłem tak szybko temat dłużej pomyślałem i w końcu sam doszedłem do rozwiązania problemu.
P-143616
« 1 »
  Strona 1 z 1