Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Zabrałem się za pisanie program, który wczytuje losowe liczby do tablicy, a następnie wypisuje te powtarzające się.. program po części działa, lecz nie wiem jak go teraz poprawic gdy np. w tablicy są 3 te same liczby i aby wypisał mi je jako jedna liczba a nie jako 2.
Przykład:
Wartosci wczytane to: 7 3 9 7 1 10 10 6 10 5 Wartosc powtarzajaca sie to: 7 Wartosc powtarzajaca sie to: 10 Wartosc powtarzajaca sie to: 10
10 wypisuje 2 razy, a chciałbym aby to tylko raz wypisał, nawet jakby tam było pięć dziesiątek.
Oto kod programu:
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { const int rozmiar = 10; srand( time( NULL ) ); int i,j,b; int tab[rozmiar]; for ( i=0; i < rozmiar; i++ ) { tab[i] = (rand() % 10) + 1; } cout << endl; cout <<"Wartosci wczytane to: "; for ( i=0; i<rozmiar; i++) { cout << tab[i] << " "; } cout << endl; b=1; for( i=0; i<rozmiar; i++) { for(j=b; j<rozmiar; j++) { if( tab[i] == tab[j] ) { cout << "Wartosc powtarzajaca sie to: " << tab[i] << endl; break; } } b++; } return 0; }
Offline
1. Robisz kopie tej tablicy (tab1).
For po kopii tablicy (tab1):
2. Bierzesz pierwszą liczbę, lecisz do końca tablicy i wszędzie gdzie się powtarza wsadzasz wartość NULL (czy co tam się daje, żeby nic nie było)
3. Zapisujesz tą liczbę do nowej tablicy (tab2).
Koniec for'a
Wyświetlasz wartości z tablicy (tab2)
To tak na szybko.
Offline
@up
Hmm... Nie jestem pewien czy dobrze zrozumiałem Twój tok myślenia, ale jeśli tak, to twój algorytm wypisuje wszystkie liczny ze zbioru bez powtórzeń. sqrtek chciał wypisać tylko te powtarzające się. Wystarczy więc dodać boola do tego co napisałeś i do tab2 wrzucić tylko liczby, które się powtórzyły.
EDIT:
@sqrtek
Ja to jakoś tak widzę: http://ideone.com/Cy4vFy
Strasznie dawno nie kodowałem, więc może być trochę chaotycznie ale powinieneś zrozumieć. Zmodyfikowałem Twój kod przy okazji upiększając go pod siebie, jakiś taki nawyk ;)
PS Dzięki za ten post, bo jakoś się nie mogłem do powrotu do C++ przemóc.
Pozdrawiam,
caro_cenzura
Ostatnio edytowany przez caro_cenzura (2012-11-27 19:59:28)
Offline
Trochę zmodyfikowałem ten kod w taki sposób :) I myślę że teraz powinien działać jak należy.
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 const int rozmiar = 5; 7 int i,j; 8 int tab[rozmiar]; 9 int powt; 10 11 for ( i=0; i < rozmiar; i++ ) 12 { 13 cout << "Wczytaj " << i+1 << " element tablicy: "; 14 cin >> tab[i]; 15 } 16 17 for ( i=0; i<= rozmiar; i++ ) 18 { 19 powt = 0; 20 for ( j=0; j < rozmiar; j++ ) 21 { 22 if( i == tab[j] ) 23 { 24 powt=powt+1; 25 } 26 } 27 if ( powt > 1 ) 28 { 29 cout << "Wartosc powtarzajaca sie to: " << i << endl; 30 } 31 } 32 33 34 return 0; 35 }
Offline
caro_cenzura napisał(-a):
Hmm... Nie jestem pewien czy dobrze zrozumiałem Twój tok myślenia, ale jeśli tak, to twój algorytm wypisuje wszystkie liczny ze zbioru bez powtórzeń. sqrtek chciał wypisać tylko te powtarzające się. Wystarczy więc dodać boola do tego co napisałeś i do tab2 wrzucić tylko liczby, które się powtórzyły.
Źle rozumiesz ;)
Offline
@up
No kurczę z 5 razy czytałem. Nadal uważam, że wypisze niepowtarzające się liczby, a nie te które występują więcej niż raz w zbiorze. Chyba, że użyłeś skrótu myślowego i do tablicy tab2 wrzucasz tylko liczby, które przy przejeżdżaniu tablicy "zaliczyły NULL'a" .
Wyraźnie brakuje mi tam jednego warunku.
Jeśli możesz to wytłumacz dokładniej o co Ci chodziło, bo nie może mi to dać spokoju.
@Sqrtek
Podobnie w sumie to napisałem. Widzę, że zmieniłeś też generator liczb losowych xD Teraz są przynajmniej naprawdę losowe ;)
Pozdrawiam,
caro_cenzura
Ostatnio edytowany przez caro_cenzura (2012-11-28 20:12:03)
Offline
caro_cenzura napisał(-a):
@up
No kurczę z 5 razy czytałem. Nadal uważam, że wypisze niepowtarzające się liczby, a nie te które występują więcej niż raz w zbiorze. Chyba, że użyłeś skrótu myślowego i do tablicy tab2 wrzucasz tylko liczby, które przy przejeżdżaniu tablicy "zaliczyły NULL'a" .
Dokładnie tak.
/me napisał(-a):
...
2. Bierzesz pierwszą liczbę, lecisz do końca tablicy i wszędzie gdzie się powtarza wsadzasz wartość NULL (czy co tam się daje, żeby nic nie było)
3. Zapisujesz tą liczbę do nowej tablicy (tab2).
...
Może rzeczywiście trochę za szybko napisałem i za dużo skrótów, ale uprzedzałem:
/me napisał(-a):
To tak na szybko.
Offline
Dzięki za odpowiedź!
Na szczęście jeszcze nie tak źle ze mną, bo suma summarum się domyśliłem ;)
Offline
Strony: 1