• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program losujący bez powtórzeń - user wpisuje 10 liczb - 8 z tego powinno sie wyswietlic BEZ POWTORZEN

VPS Starter Arubacloud
0 głosów
345 wizyt
pytanie zadane 25 marca 2019 w C i C++ przez vog Początkujący (370 p.)
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

////# ____1______wpisz użytkowniku_____________________

void wpisz(int tab[])
{
    int i=0;
    do{
        cin >> tab[i];
        i++;
    }while(i < 10);
}
/////////////////////////////////////
////#  _____2______ machina losujaca 1-100____________

int losuj()
{
    return (rand()%100)+1;
}
////////////////////////////////////
////#  _____3______ sprawdzenie czy wylosowano zgodnie z wyborem usera____________

bool sprawdzam(int w_liczba, int User[], int Dwiee[])
{
    int i=0;

  do{
    if(w_liczba != User[i])
        i++;
    else
        return false;

  }while(i < 10);
return true;
}
//////////////////////////////////
////#  _____2______ sprawdzenie czy nie ma powtorek_________________

bool czy_pasuje(int wylos, int Userr[], int Osemka[])
{
    int y=0;

    do{
        if( wylos != Osemka[y])
            {
            return false;
            }
        y++;
    }while( y < 8 );
    return true;
}





int main()
{
 srand(time(NULL));

    int Wpisano[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
    int Dwie[8];
    int z = 0;

   // wpisz(Wpisano);

    do{

        int wylosowana = losuj();

        if( sprawdzam( wylosowana, Wpisano, Dwie ) == false )
        {
            if( czy_pasuje( wylosowana, Wpisano, Dwie )== false )
            {
                Dwie[z] = wylosowana;
                    cout << Dwie[z] << ", ";
                    z++;
            }
        }
    }while( z < 8);




cout << "koniec programu" << endl;
return 0;
}

No tutaj ułatwiłem na razie trochę sobie robotę żeby nie wpisywać przy testowaniu liczb za kazdym razem...

 

Szukam od 1,5 h źródła problemu. Wciąż mój program powtarza wyświetlane liczby. To jest ćwiczenie ze stronki cpp0x.pl kursu C++ Poziom 2. liczby losowe bez powtórzeń -> w zasadzie ostatnie zadanie nr 2. Zmieniam kod, próbuję co tylko mi przychodzi do głowy, niestety przyda się jednak pomoc mądrzejszej głowy. 

Dzięki z  góry i niecierpliwie czekam na odp jak to zrobić :) Rozbiłem niemal wszystko na mniejsze funkcje dla wygody, mam nadzieję że kod w miarę przejrzysty, staram się nad tym również pracować. 

komentarz 25 marca 2019 przez kalczur Gaduła (4,320 p.)
Nie wiem dlaczego ale masz 10 liczb, losujesz jedną tak długo aż będzie równa którejś z podanych i dopiero działasz dalej...
W funkcji "czy_pasuje" sprawdzasz czy ta liczba jest różna od któregoś elementu z tablicy "dwie" która jest wypełniona losowymi wartościami więc zawsze warunek się spełni.

1 odpowiedź

0 głosów
odpowiedź 25 marca 2019 przez kalczur Gaduła (4,320 p.)
edycja 25 marca 2019 przez kalczur

Nadal nie wiem jaki sens ma ten program ale ok. Trzymaj 

 


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

////# ____1______wpisz użytkowniku_____________________

void wpisz(int tab[])
{
    int i=0;
    do{
        cin >> tab[i];
        i++;
    }while(i < 10);
}
/////////////////////////////////////
////#  _____2______ machina losujaca 1-100____________

int losuj()
{
    return (rand()%101);
}
////////////////////////////////////
////#  _____3______ sprawdzenie czy wylosowano zgodnie z wyborem usera____________

bool sprawdzam(int w_liczba, int User[])
{
    int i=0;

    do{
        if(w_liczba != User[i])  i++;
        else  return true;

    }while(i < 10);

    return false;
}
//////////////////////////////////
////#  _____2______ sprawdzenie czy nie ma powtorek_________________

bool czy_pasuje(int wylos, int Osemka[])
{
    int y=0;

    do{
        if( wylos == Osemka[y])  return false;
        y++;
    }while( y < 8 );

    return true;
}



int main()
{
 srand(time(NULL));

    int Wpisano[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
    int Dwie[8];
    int z = 0;

   // wpisz(Wpisano);

    do{
        int wylosowana = losuj();

        if( sprawdzam(wylosowana, Wpisano) )
        {
            if( czy_pasuje(wylosowana, Dwie) )
            {
                Dwie[z] = wylosowana;
                cout << Dwie[z] << ", ";
                z++;
            }
        }
    }while( z < 8);

cout << "koniec programu" << endl;
return 0;
}

 

komentarz 25 marca 2019 przez vog Początkujący (370 p.)
Zdążyłem już rozwiązać problem rozpisałem realizację krok po kroku na kartce i pomogło. Aaale dzięki...

Podobne pytania

+1 głos
1 odpowiedź 530 wizyt
pytanie zadane 25 czerwca 2016 w C i C++ przez Jardee Początkujący (420 p.)
0 głosów
3 odpowiedzi 280 wizyt
pytanie zadane 11 września 2015 w C i C++ przez balti Obywatel (1,040 p.)

92,831 zapytań

141,771 odpowiedzi

320,817 komentarzy

62,159 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...