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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-11-26 23:37:55

  sqrtek - Użytkownik

sqrtek
Użytkownik
Skąd: /bin/true
Zarejestrowany: 2012-06-14

[c++] Wypisywanie wartości powtarzających się z tablicy

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:

Kod:

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:

Kod:

#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;
}

"Nie pozwól by zgiełk opinii innych ludzi, zagłuszył Twój wewnętrzny głos" ~ Steve Jobs

Offline

 

#2  2012-11-27 12:26:27

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

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.


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#3  2012-11-27 19:32:41

  caro_cenzura - Użytkownik

caro_cenzura
Użytkownik
Zarejestrowany: 2012-08-29

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

@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)


Daj człowiekowi rybę, nakarmisz go na jeden dzień. Naucz go łowić, a nakarmisz go na całe życie.

Offline

 

#4  2012-11-27 20:43:40

  sqrtek - Użytkownik

sqrtek
Użytkownik
Skąd: /bin/true
Zarejestrowany: 2012-06-14

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

Trochę zmodyfikowałem ten kod w taki sposób :) I myślę że teraz powinien działać jak należy.

Kod:

  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 }

"Nie pozwól by zgiełk opinii innych ludzi, zagłuszył Twój wewnętrzny głos" ~ Steve Jobs

Offline

 

#5  2012-11-28 12:20:35

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

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 ;)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#6  2012-11-28 20:06:36

  caro_cenzura - Użytkownik

caro_cenzura
Użytkownik
Zarejestrowany: 2012-08-29

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

@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)


Daj człowiekowi rybę, nakarmisz go na jeden dzień. Naucz go łowić, a nakarmisz go na całe życie.

Offline

 

#7  2012-11-28 20:32:39

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

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 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.


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#8  2012-11-28 23:23:49

  caro_cenzura - Użytkownik

caro_cenzura
Użytkownik
Zarejestrowany: 2012-08-29

Re: [c++] Wypisywanie wartości powtarzających się z tablicy

Dzięki za odpowiedź!
Na szczęście jeszcze nie tak źle ze mną, bo suma summarum się domyśliłem ;)


Daj człowiekowi rybę, nakarmisz go na jeden dzień. Naucz go łowić, a nakarmisz go na całe życie.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)