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

Rozdział 21 Zadania 1 Problem z powtórzeniami

Ostatnio zmodyfikowano 2022-06-30 09:33
Autor Wiadomość
piratek
Temat założony przez niniejszego użytkownika
Rozdział 21 Zadania 1 Problem z powtórzeniami
» 2022-06-25 13:10:37
Utknąłem od kilku dni na liczbach losowych i nie mogę ruszyć dalej. Zauważyłem, że to jest pierwsza rzecz w tym kursie, które sprawia mi niesamowitą trudność. Nie potrafię wymyślić, jak powinienem uniknąć powtórzeń.

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

void Wczytaj3Liczby( int * tablica )
{
   
int licznik = 0;
   
   
do
   
{
       
cin >> tablica[ licznik ];
       
licznik++;
   
} while( licznik < 3 );
   
}

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

int main()
{
   
srand( time( NULL ) );
   
int tablica[ 3 ];
   
int licznik = 0;
   
   
Wczytaj3Liczby( tablica );
   
   
do
   
{
       
int WylosujPrzedzialTablicy = WylosujPrzedzialtablicy();
       
cout << tablica[ WylosujPrzedzialTablicy ] << endl;
       
licznik++;
   
} while( licznik < 2 );
   
}
P-179566
pekfos
» 2022-06-25 14:15:07
Ostatnio miałeś więcej kodu
Rozdział 21 jak uniknąć powtórzeń?
P-179567
OfEl
» 2022-06-30 09:33:41
Zauważyłem, że to jest pierwsza rzecz w tym kursie, które sprawia mi niesamowitą trudność. Nie potrafię wymyślić, jak powinienem uniknąć powtórzeń.
do swojego programu zaimplementować musisz sobie już sam

Listing 1. tablica
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;

int main()
{
   
constexpr int N = 6; // ilosc losowanych
   
unsigned seed = time( 0 ); // pobranie czasu systemowego
   
srand( seed ); // wprowadzenie ziarna do generatora liczb losowych
   
int tab[ N ] { 0 }; // tablica N-elementowa
   
   
for( int i = 0; i < N; ) {
       
// wylosowanie liczby
       
tab[ i ] = rand() % 10 + 1; // zakres 1-10
        // sprawdzenie, czy sie ona nie powtarza
       
bool czyBylaWylosowana = false;
       
       
for( int k = 0; k < i; ++k ) {
           
if( tab[ k ] == tab[ i ] )
           
{
               
czyBylaWylosowana = true;
               
break;
           
}
        }
       
// jezeli sie nie powtarza, przechodzimy do nastepnej liczby
       
if( !czyBylaWylosowana ) ++i;
       
   
}
   
   
for( unsigned int i = 0; i < N; ++i )
       
 cout << tab[ i ] << " ";
   
   
cout << '\n';
   
sort( tab, tab + N );
   
   
cout << '\n';
   
for( unsigned int i = 0; i < N; ++i )
       
 cout << tab[ i ] << " ";
   
   
cout << '\n';
   
return 0;
}

Listing 2. vector
C/C++
#include <iostream>
#include <algorithm>
#include <random>
#include <vector>

using namespace std;

template < typename T >
ostream & operator <<( ostream & os, const vector < T > & v )
{
   
if( !v.empty() )
   
{
       
typename vector < T >::const_iterator it = v.begin();
       
for(;( it != v.end() ) &&( os << * it );( ++it ),(( it < v.end() ) ?( os << ", " )
            :(
os << " " ) ) )
       
{ }
    }
   
return os;
}

int main()
{
   
constexpr int first { 1 }, last { 20 }, n { 10 };
   
std::random_device rd;
   
std::mt19937 gen( rd() );
   
std::uniform_int_distribution < > dist( first, last );
   
vector < int > v;
   
v.reserve( n );
   
std::vector < int >::iterator it;
   
   
for( int i { 0 }; i < n; )
   
{
       
auto el = dist( gen );
       
it = std::find( v.begin(), v.end(), el );
       
if( it == v.end() ) { v.push_back( el ); ++i; }
       
    }
   
std::sort( v.begin(), v.end() );
   
cout << v;
   
cout << '\n';
   
cout << '\n';
   
return 0;
}
// Copyright (c) 2022 by OfEl. All Rights Reserved.
// Permission for personal, educational or non-profit use is granted provided
// this copyright and notice are included in its entirety and remains unaltered.
// All other uses must receive prior permission in written of the author of OfEl

Listing 3. set
C/C++
#include <iostream>
#include <set>
#include <random>
#include <cmath>

using namespace std;

template < typename T >
ostream & operator <<( ostream & os, const set < T > & s )
{
   
if( !s.empty() )
   
{
       
typename set < T >::const_iterator it = s.begin();
       
for(;( it != s.end() ) &&( os << * it );( ++it ),(( it != s.end() ) ?( os << ", " )
            :(
os << " " ) ) )
       
{ }
    }
   
return os;
}

int main()
{
   
constexpr int first { 1 }, last { 20 };
   
std::random_device rd;
   
std::mt19937 gen( rd() );
   
std::uniform_int_distribution < > dist( first, last );
   
   
std::set < int > s;
   
for(; s.size() < log2( 1024 );( s.size() < sqrt( 100 ) ) ? cout << ""
       
: cout << s )
   
{
       
s.insert( dist( gen ) );
   
}
   
   
cout <<( char )( 0x0A );
   
return log10( 1 );
}




P-179577
« 1 »
  Strona 1 z 1