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

Rozdział 21 zadanie 2

Ostatnio zmodyfikowano 2018-03-13 23:38
Autor Wiadomość
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
Rozdział 21 zadanie 2
» 2018-03-13 10:21:40
Przyznaje, że liczby losowe i losowe bez powtórzen to pierwszy temat z kursu który sprawia mi trudności właśnie próbuję napisać samodzielnie program do zadanka drugiego i na bierząco go kompiluje żeby sprawdzić czy wszystko idzie dobrze no i jest problem a wpatruje się w ten kod od godziny bez rezultatów i nie mam pojęcia czemu nie wychwytuje tego, że wpisuje drugi raz tą samo liczbę. Proszę o podpowiedź:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

bool sprawdzaniewpisywania( int t[], int x )
{
    int i = 0;
    do
    {
        if( t[ i ] == x )
             return false;
       
        i++;
    } while( i < 10 );
   
    return true;
}

void wpisywanie( int t[] )
{
    int i = 0, x;
    do
    {
        cout << "Podaj " << i + 1 << " liczbe." << endl;
        cin >> x;
        if( sprawdzaniewpisywania( t, x ) == true );
       
        t[ i ] = x;
        i++;
    } while( i < 10 );
   
}


int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowame[ 8 ];
   
    wpisywanie( tablica );
   
    int i = 0;
    do
    {
        cout << tablica[ i ] << endl;
        i++;
    } while( i < 10 );
   
    return 0;
}
P-169982
Monika90
» 2018-03-13 10:25:42
C/C++
if( sprawdzaniewpisywania( t, x ) == true );


O jeden średnik za dużo.
P-169983
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
średnik
» 2018-03-13 10:28:42
Dziękuję Monika, jednak pomimo braku średnika nadal można wpisywać dwie takie same liczby. Co jeszcze może być nie tak?
P-169984
Monika90
» 2018-03-13 10:36:39
Raczej tak powinno być:
C/C++
if( sprawdzaniewpisywania( t, x ) == true )
{
    t[ i ] = x;
    i++;
}
czyli zwiększasz i tylko wtedy gdy dopisałeś liczbę.
P-169985
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
» 2018-03-13 11:03:10
Pomogło :) Dzięki wielkie za pomoc :))

EDIT taki, że brnę dalej no i stworzyłem dalszą część która ma losować liczby z tej 10 wyrazowej tablicy i zapisywać je do tej 8 wyrazowej narazie zrobiłem to bez funkcji która ma sprawdzać czy się nie powtarzają, ale niestety jest jakiś problem bo sobie kompiluje to i wypisuje na ekran co mi sie zapisało do tablicy z wylosowanymi i za każdym uruchomieniem programu zapisuje mi inną liczbę ale do każdej komórki taką samą. Ktoś wie czemu?

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

bool sprawdzaniewpisywania( int t[], int x )
{
    int i = 0;
    do
    {
        if( t[ i ] == x )
             return false;
       
        i++;
    } while( i < 10 );
   
    return true;
}

void wpisywanie( int t[] )
{
    int i = 0, x;
    do
    {
        cout << "Podaj " << i + 1 << " liczbe." << endl;
        cin >> x;
        if( sprawdzaniewpisywania( t, x ) == true )
        {
            t[ i ] = x;
            i++;
        }
    } while( i < 10 );
   
}

void losowanie( int w[], int t[], int x )
{
    int i = 0;
    x = rand() % 10;
    do
    {
        w[ i ] = t[ x ];
        i++;
    } while( i < 8 );
   
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowane[ 8 ];
    int x;
   
    wpisywanie( tablica );
    losowanie( wylosowane, tablica, x );
   
    int i = 0;
    do
    {
        cout << tablica[ i ] << endl;
        i++;
    } while( i < 10 );
   
    cout << endl << endl;
    i = 0;
    do
    {
        cout << wylosowane[ i ] << endl;
        i++;
    } while( i < 8 );
   
    return 0;
}
P-169986
DieG
» 2018-03-13 21:49:19
W funkcji losowanie() używasz funkcji rand() tylko raz przed wejściem do pętli, czyli w pętli wykorzystywany jest tylko ten wylosowany element tablicy.

C/C++
x = rand() % 10; //przypisanie wartosci dzialania do zmiennej x
do
{
    w[ i ] = t[ x ]; //wartosc zmiennej x nie ulega zmianie w petli
    i++;
} while( i < 8 );



Podczas dalszej pracy nad przykładem zastanów się, czy któraś z już napisanych funkcji może okazać się pożyteczna w dalszej części programu. Często takie pytania oszczędzają pisania nadmiernej ilości kodu.
P-169996
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
Dziękuję
» 2018-03-13 23:38:35
Dzięki DieG za podpowiedź :)
P-169999
« 1 »
  Strona 1 z 1