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

Porównanie dwóch tablic jednowymiarowych.

Ostatnio zmodyfikowano 2016-09-27 23:10
Autor Wiadomość
kamillo
Temat założony przez niniejszego użytkownika
Porównanie dwóch tablic jednowymiarowych.
» 2016-09-27 11:30:46
Witam,
nie potrafię sobie poradzić od dłuższego czasu z porównaniem dwóch tablic. Wpadłem na pomysł napisania totalizatora sportowego, ale nie potrafię przebrnąć porównania liczb wpisanych i liczb wylosowanych. Próbowałem porównać tablicę poprzez dwie zagnieżdżone pętle FOR, ale efekt był mizerny :( Dlatego wpadłem na pomysł wyciągania pojedynczych liczb z jednej tablicy i przyrównywania jej do n+1 pozycji drugiej tablicy. Sporadycznie program w dobrym momencie zwraca wartosc true funkcji porowananie() i nalicza punkty, ale nie wiem w którym miejscu jest jeszcze błąd. Wydaje mi się, że problemem może być kontrukcja pętli While w funkcji porownanie(), ale nie mam juz pomysłu jak ją inaczej przebudować.
Wiem, że jeszcze muszę to pozabezpieczać, przed błędami, typu złe dane, ale to już inna bajka ;)

Kod:
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int losowanie()
{
    return( rand() % 48 ) + 1;
}

bool sprawdzanie( int sprawdzone[], int pozycja, int wylosowana )
{
    int i = 0;
    while( i < pozycja )
    {
        if( sprawdzone[ i ] == wylosowana )
             return true;
       
        i++;
    } //while
    return false;
}

void wpisanie( int wpisane[] )
{
    cout << "Podaj szesc liczb: " << endl;
    for( int i = 0; i < 6; i++ )
         cin >> wpisane[ i ];
   
}

bool porownanie( int rowna, int sprawdzone[], int pozycja )
{
    int i = 0;
    while( i < pozycja )
    {
        if( sprawdzone[ i ] == rowna )
        {
            return true;
        }
        i++;
    }
    return false;
}

int main()
{
    srand( time( 0 ) );
    int losowane[ 6 ];
    int sprawdzone[ 6 ];
    int wpisane[ 6 ];
    int i = 0;
    int punkty = 0;
   
    while( i < 6 )
    {
        int wylosowana = losowanie();
        if( sprawdzanie( sprawdzone, i, wylosowana ) == false )
        {
            sprawdzone[ i ] = wylosowana;
            i++;
        } //if
    } //while
    wpisanie( wpisane );
    i = 0;
    while( i < 6 )
    {
        int rowna = wpisane[ i ];
        if( porownanie( rowna, sprawdzone, i ) == true )
        {
            punkty++;
        }
        i++;
    }
    cout << "Ilosc trafionych liczb to: " << punkty << endl << endl;
   
    for( int i = 0; i < 6; i++ )
         cout << sprawdzone[ i ] << ", ";
   
   
   
    /*
        losowanie
        sprawdzenie
        wpisanie 6-tki
        porownanie
        wypisanie wynikow
        */
}
P-152066
mateczek
» 2016-09-27 12:40:38
Co jest nie tak z porównywarką na dwóch pętlach for ??
C/C++
#include <iostream>
using namespace std;
int compare( int tab1[], int tab2[] ) {
    int punkty = 0;
    for( int i = 0; i < 6; i++ ) {
        for( int k = 0; k < 6; k++ ) {
            if( tab1[ i ] == tab2[ k ] ) punkty++;
           
        }
    }
    return punkty;
}

int main()
{
    int tab[ 6 ] = { 1, 2, 3, 4, 5, 6 };
    int tab1[ 6 ] = { 2, 1, 3, 6, 5, 4 };
    int tab3[ 6 ] = { 12, 1, 15, 23, 44, 54 };
    cout << compare( tab, tab1 ) << endl;
    cout << compare( tab1, tab3 ) << endl;
}
P-152067
karambaHZP
» 2016-09-27 14:25:21
C/C++
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

void showHitNumbers( const array < int, 6 >& arr1, const array < int, 6 >& arr2 )
{
    for( size_t i = 0; i < arr1.size(); ++i )
    {
        if( find( arr2.cbegin(), arr2.cend(), arr1[ i ] ) != arr2.cend() )
        {
            cout << arr1[ i ] << ' ';
        }
    }
}
int main()
{
    array < int, 6 > arr1 = { 1, 2, 3, 4, 5, 6 };
    array < int, 6 > arr2 = { 2, 1, 3, 6, 5, 4 };
    array < int, 6 > arr3 = { 12, 1, 15, 23, 44, 54 };
    showHitNumbers( arr1, arr2 );
    cout << '\n';
    showHitNumbers( arr1, arr3 );
}
P-152069
michal11
» 2016-09-27 15:27:51
Dodam jeszcze funkcje do sprawdzania czy jakikolwiek element jednej tablicy znajduje się w drugiej tablicy:
return std::find_first_of( arr1.cbegin(), arr1.cend(), arr2.cbegin(), arr2.cend() ) != arr1.cend();
P-152070
kamillo
Temat założony przez niniejszego użytkownika
» 2016-09-27 23:10:29
Bardzo dziękuje za pomoc ;) @Mateczek Ta moja podwójna pętla FOR była wcześniej bezmyślnie umieszczona w pętli while i to psuło wszystko, bo jeszcze dodatkowe 6 razy powtarzało.
P-152076
« 1 »
  Strona 1 z 1