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

Liczba wystąpień z rzędu

Ostatnio zmodyfikowano 2017-05-25 18:08
Autor Wiadomość
nopedope
Temat założony przez niniejszego użytkownika
Liczba wystąpień z rzędu
» 2017-05-24 12:12:23
Witam serdecznie,
Piszę program, w którym mam za zadanie zliczyć ilość wystąpień liczby w stu elementowej tablicy z rzędu. Muszę wyniki przekazać do tablicy, by móc potem zrobić algorytm ze znajdowaniem maksymalnego elementu, by dowiedzieć się która liczba najdłużej występuje z rzędu np: 0011222234433=liczba 2 najdłużej występuje z rzędu. <algorytm znajdowania maksimum później zrobię, najpierw chcę tablicę tab2, która będzie miała wyniki zliczonych powtórzeń dla wszystkich liczb od 0 do 9)

C/C++
z_rzedu( int * tab ) //zaimportowana tablica ze 100 elementami pseudolosowymi
{
    int rozmiar;
    int * tab2 = new int[ rozmiar ];
    int licznik = 0;
    int j, k = 0;
    while( k < 10 ) //k to poszukiwana liczba która bedzie sie powtarzac ,od 0 do 9
    {
       
        licznik = 0; //zlicza liczbe powtorzen (zeruje na poczatku petli
        //by od nowa zliczala dla liczb od 0 do 9
        for( int i = 0, j = 0; i < 99, j < rozmiar; i++ )
        {
            if( tab[ i ] == tab[ i + 1 ] )
                 licznik++;
            else if( tab[ i ] != tab[ i + 1 ] && licznik != 0 )
            {
                tab2[ j ] = licznik;
                j++;
            }
        }
        rozmiar = j;
        for( int z = 0; z < rozmiar; z++ )
        {
            cout << tab2[ z ] << "   ";
        }
        cout << "liczba " << k << " wystapila z rzedu " << tab2[ rozmiar ] << " razy.\n";
        k++;
    }
}



Wiem że mam coś źle z tablicą dynamiczną, bo wywala błąd "terminate called after throwing an  instance of 'std::bad_alloc'.
P-161514
hit
» 2017-05-24 12:18:54
Ja bym zmienił podejście. Jeśli chcesz wiedzieć tylko to, która cyfra wystąpiła w najdłuższym ciągu, to możesz zapamiętywać pierwszą cyfrę, zliczać jej wystąpienia do momentu trafienia innej cyfry, wtedy zapisać sobie jaka to była cyfra i ile razy wystąpiła ( w osobnych zmiennych, które wyświetlisz na końcu ). Skoro trafiłeś na inną cyfrę niż zliczana, to zerujesz tymczasową zmienną i liczysz do ponownego trafienia innej cyfry. Następnie porównujesz to z zapisanymi wcześniej danymi. Jeśli było więcej wystąpień to je nadpisujesz, jeśli nie to zliczasz dla kolejnej nowej cyfry. Może trochę niejasno to opisałem ale to chyba dużo szybsze i krótsze.
P-161516
ArgonZapan
» 2017-05-25 02:17:41
C/C++
int rozmiar;
int * tab2 = new int[ rozmiar ];

Kompilator nie wie że ma być 100 :P

btw. ten rozmiar albo bym przekazywał jako 2 parametr do funckji, albo odgórnie, ustawić 100 np.

int zrzedu( int tab[ 100 ] ) { }
lub
int zrzedu( int * tab, size_t rozmiar )
P-161555
hit
» 2017-05-25 10:14:45
Jeśli rozmiar jest z góry podany to nie widzę sensu używania wskaźników. Wkleję Ci to co opisałem w drugim komentarzu:

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

using namespace std;

int main() {
    srand( time( NULL ) );
    int rozmiar = 100;
    int tab[ rozmiar ];
   
    int cyfra = - 1, ile = 0;
    int cyfra_tmp = - 1, ile_tmp = 0;
    for( int i = 0; i < rozmiar; i++ )
         tab[ i ] = rand() % 10;
   
    for( int i = 0; i < rozmiar; i++ )
    { cout << tab[ i ];
        if( tab[ i ] != cyfra_tmp )
        {
            if( ile_tmp > ile )
            {
                ile = ile_tmp;
                cyfra = cyfra_tmp;
            }
            cyfra_tmp = tab[ i ];
            ile_tmp = 1;
        }
        else
             ile_tmp++;
       
    }
    cout << "\ncyfra: " << cyfra << endl;
    cout << "lw: " << ile << endl;
   
   
    return 0;
}

Edit:
Przykład, który podałem zadziała błędnie jeśli najdłuższy będzie ostatni ciąg - należałoby to sprawdzać po zakończeniu pętli. Jednak nie wiem, czy w ogóle chcesz zmieniać podejście także na razie to zostawiam. ;)
P-161559
nopedope
Temat założony przez niniejszego użytkownika
» 2017-05-25 18:08:57
Ooo dokładnie o to mi chodziło :) Kombinowałam ze wskaźnikami, bo chciałam utworzyć drugą tablicę z samymi wynikami wszystkich cyfr ile razy się powtórzyły (stąd nieznany rozmiar, bo nie wiadomo ile razy doszło do powtórzeń), a potem znaleźć największy element. Ale Twoje rozwiązanie jest o wiele łatwiejsze, dziękuję bardzo za pomoc i pozdrawiam :)
P-161567
« 1 »
  Strona 1 z 1