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

rozdzial 21 zadanie domowe

Ostatnio zmodyfikowano 2017-04-06 07:28
Autor Wiadomość
Chowan
Temat założony przez niniejszego użytkownika
rozdzial 21 zadanie domowe
» 2017-03-27 00:37:46
nie wiem dlaczego wyrzuca mi 2 liczbę nie wiadomo skąd, pytałem wcześniej o podobne zadanie i zastosowałem się do tamtych wskazówek, sprawdzałem kod częściami i coś jest źle chyba w funkcji sprawdzającej albo w warunku if w funkcji main bo jak wypisze 2 na 3 liczby takie same to sprawdzając kilka razy to losuje mi jednak 2 te same liczby czasem. dodatkowo czasem losuje jakąś duza liczbę, która nie jest zadeklarowana w tablicy. edit z ta liczba duza chyba sobie poradziłem.


C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
//1. 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.

void wczytanie( int tablica[] )
{
    cout << "Podaj 3 losowe liczby: ";
    for( int i = 0; i < 3; i++ )
    {
        cin >> tablica[ i ];
    }
}
int losowanie()
{
    return rand() % 3;
}
bool sprawdzanie( int tablica[], int liczba, int ile_liczb )
{
    for( int i = 0; i < ile_liczb; i++ )
    {
        if( tablica[ i ] == liczba )
             return false;
       
        i++;
    }
   
    return true;
}
int main()
{ srand( time( NULL ) );
    int tablica[ 3 ];
    int tab[ 2 ];
    wczytanie( tablica );
    for( int i = 0; i < 2; )
    {
        int liczba = tablica[ losowanie() ];
        if(( sprawdzanie( tablica, liczba, i ) ) == true )
        { tab[ i ] = liczba;
            i++; }
    }
    for( int i = 0; i < 2; i++ )
    {
        cout << "liczba " << i + 1 << " = " << tab[ i ];
    }
    return 0;
}
P-159460
karambaHZP
» 2017-03-27 00:54:02
C/C++
for( int i = 0; i < 2; i++ )
{
    int liczba = tablica[ losowanie() ];
    if(( sprawdzanie( tablica, liczba, i ) ) == true )
    { tab[ i ] = liczba;
        i++; }
}
inkrementujesz zmienną
i
 niezależnie od wyniku sprawdzania liczby,
a w chwili wykonania instrukcji
if
 inkrementujesz dwukrotnie.
P-159461
Chowan
Temat założony przez niniejszego użytkownika
» 2017-03-27 01:01:01
poprawiłem to chwile wcześniej zanim napisałeś i załatwiło to problem dziwnych liczb(jak sprawdzałem wcześniej czy wczytywanie i zapis sam działa to mi zostało), ale dalej przy podaniu 2 z 3 liczb takich samych to warunek sprawdzający nie działa i zwraca mi czasem liczby z powtórzeniem w dalszym ciagu.

probowalem zamienic petle for na

C/C++
int i = 0;
do
{
    int liczba = tablica[ losowanie() ];
    if(( sprawdzanie( tablica, liczba, i ) ) == true )
    { tab[ i ] = liczba;
        i++;
    }
} while( i < 2 &&( tab[ 0 ] = tab[ 1 ] ) );

to wywala dziwne liczby
P-159462
karambaHZP
» 2017-03-27 10:53:41
C/C++
bool sprawdzanie( int tablica[], int liczba, int ile_liczb )
{
    for( int i = 0; i < ile_liczb; i++ )
    {
        if( tablica[ i ] == liczba )
             return false;
       
        i++;
    }
   
    return true;
}
Ten sam problem z inkrementacją. Sprawdzasz tylko co drugi element tablicy.

edti:
Co się stanie jeśli użytkownik poda trzy razy tą samą liczbę?
Zabezpiecz program przed podawaniem takich samych liczb,
lub dopuść taką możliwość i opieraj się na niepowtarzających się indeksach.
P-159469
Chowan
Temat założony przez niniejszego użytkownika
» 2017-03-29 12:00:54
co do 3 tych samych liczb to bez sensu bo nie o to chodzi w zadaniu, ale tez się nad tym zastanawiałem. A dwie liczby wpisac trzeba takie same bo jak inaczej sprawdzić czy losuje bez powtórzeń. Po posiedzeniu dużo godzin nad tym udało mi sie zrobić i sie nie powarzają. Bład był w funkcji in main(), w warunku sprawdzającym pobrałem tablice 3 elementową. Po zamianie jej na tablice 2 elementowa zawsze losuje dwie różne liczby przynajmniej w tych kilkunastu razach, kiedy odpalałem program dla testu. Sprawdzałem na kolejnym zadaniu i 8/10 elementów losuje bez powtórzeń.
P-159567
carlosmay
» 2017-03-29 15:43:20
co do 3 tych samych liczb to bez sensu bo nie o to chodzi w zadaniu
Czyżby? Trzy elementy tablicy to trzy różne liczby, a że mają taką samą wartość tu już inna sprawa. karambaHZP dał dobry przykład.
P-159572
Chowan
Temat założony przez niniejszego użytkownika
» 2017-04-05 13:01:37
to w takim wypadku wypadałoby od razu zabezpieczyć przed wprowadzaniem liter itp... przerost formy nad treścią. Wprowadzenie dwóch liczb takich samych jest potrzebne, aby sprawdzić czy funkcja losuje naprawdę bez powtórzeń czyli czy spełnia założenia z zadania.
P-159801
carlosmay
» 2017-04-05 14:18:08
to w takim wypadku wypadałoby od razu zabezpieczyć przed wprowadzaniem liter itp
To nie jest konieczne, ale nie zaszkodzi. Czy zabezpieczenie się przed użytkownikiem "yeti" jest przerostem
formy nad treścią sam sobie odpowiedz.
Wpisanie trzech takich samych wartości spowoduje zawieszenie programu, więc warto o tym pomyśleć.

Wprowadzenie dwóch liczb takich samych jest potrzebne, aby sprawdzić czy funkcja losuje naprawdę bez powtórzeń czyli czy
Wystarczy wylosować dwie z dwóch, aby to zweryfikować.
P-159802
« 1 » 2
  Strona 1 z 2 Następna strona