• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kopiowanie wartości tablic bez powtórzeń

Cloud VPS
0 głosów
3,180 wizyt
pytanie zadane 22 listopada 2016 w C i C++ przez Medium0 Nowicjusz (120 p.)

Witam. Prosiłbym o ukierunkowanie mnie odnośnie mojego problemu z tym drobnym programikiem. Otóż mam napisany program który losuje liczby z zakresu podanego przez użytkownika (ilość również podaje użytkownik). Program losuje liczby z powtórzeniami i odkłada je do tablicy a potem wyświetla jej zawartość. Kwestia taka żeby w następnej kolejności liczby z tej tablicy przekopiować do następnej, nowo utworzonej i bez powtórzeń. Przykład - jeśli w pierwszej tablicy mamy 10 liczb z zakresu 0 - 10 np. 1, 3, 5, 5, 3, 6, 8, 6, 2, 4 to w nowej tablicy powinny znaleźć się tylko 1, 3, 5, 6, 8, 2 i 4 czyli musimy pozbyć się powtórzeń i wyświetlić zawartość tej nowej tablicy. Domyślam się że trzeba będzie tu zastosować pętle w pętli i użyć jakiegoś ifa do sprawdzenia ale nie jestem w stanie tego napisać na ten moment. Może mnie ktoś nakierować? Zależy mi na jak najbardziej samodzielnym rozwiązaniu problemu. Wklejam kod programu:

 

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <time.h>

using namespace std;


int main()
{
    int x, y, z, a;
    int liczby[100000];
    int tab[100000];
    
	srand(time(NULL));

    cout << "GENERATOR LICZB PSEUDOLOSOWYCH" << endl;
    cout << "------------------------------" << endl;
	cout << "Zakres dolny: ";
    cin >> x;
    cout << "Zakres gorny: ";
    cin >> y;
    cout << "Ile liczb wylosowac? ";
    cin >> z;
    
	for(int i=0; i<z; i++)
    {
        a = rand()%(y-x+1)+x;
        liczby[i] = a;   
    }
    
    cout << "Wylosowane numery: ";
        
	for(int i=0; i<z; i++)
    {
        cout << liczby[i] << " ";
    }
    return 0;
}

 

komentarz 22 listopada 2016 przez unknown Nałogowiec (39,560 p.)

1 odpowiedź

0 głosów
odpowiedź 22 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
edycja 22 listopada 2016 przez lnkoc
Na początek w pierwsze miejsce nowej tabeli np. tab przypisujesz wartość zerowego elementu tabeli liczby (bo ten element nie wystąpił wcześniej) i jakiś zdefiniowany licznik iterujesz na 1. Następnie dla każdego elementu tablicy liczby mniejszego od z (np. pętla for) sprawdzasz czy dany element wystąpił wcześniej - dla każdego elementu od 0 do < licznik (w drugiej pętli). Jeśli nie wystąpił licznik iterujesz i wpisujesz liczbę do tabeli - tab.

Spróbuj to zapisać.
komentarz 25 listopada 2016 przez Medium0 Nowicjusz (120 p.)
przywrócone 25 listopada 2016 przez HaKIM
Szczerze mówiąc nie bardzo rozumiem jak to umiejscowić. Po mojej pierwszej pętli for w której losuje liczby i przypisuje do tablicy robię przypisanie liczby[0] = tab[0]. Zdefiniowany licznik iteruje na 1 czyli tworzę nową pętle for np. (j=1; j<z; j++) i w niej zapisuje takiego ifa - if(liczby[i] < z) i dalszej części nie potrafię zapisać w tym momencie. Mógłbyś mi to jeszcze jaśniej pokazać? Przerabiam na bieżąco kursy z c++ i wydaje mi się że o pętlach wiem dużo a niestety mam z tym problem chyba.
komentarz 25 listopada 2016 przez Medium0 Nowicjusz (120 p.)
przywrócone 25 listopada 2016 przez HaKIM
Jeszcze jedno - w momencie przypisania zerowego miejsca tablicy liczby do zerowego miejsca tablicy tab wyświetla mi 0. Co jest nie tak?
komentarz 25 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
edycja 25 listopada 2016 przez lnkoc
int iterator =0; 
bool powtorzony = false; 
tab[0] = liczby [0]; 
iterator++; 
for(int i = 1; i < z; i++) { 
     for(int j = 0; j < iterator; j++) { 
         if(tab[j] == liczby[i]) powtorzony = true; 
     } 
     if(!powtorzony) {
          tab[iterator] = liczby[i]; 
          iterator++;
     } 
     else { 
          powtorzony = false; 
     } 
}

Spróbuj z tym kodem. Masz poprawny warunek na if-a i jego obsługę - wpisanie do tabeli niepowtarzającego się elementu. W tabeli tab jest "iterartor" niepowtarzających się elementów.

komentarz 25 listopada 2016 przez Medium0 Nowicjusz (120 p.)
edycja 25 listopada 2016 przez Medium0
Dzięki. Wszystko działa jak należy tylko chciałbym zrozumieć dokładnie działanie tego kodu. Ogólnie chciałem się obejść bez funkcji bool bo nie do końca jeszcze rozumiem jak ona działa ale chyba to ogarnę.
komentarz 25 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
Zmienna typu bool jest warunkiem sprawdzenia czy dany element wystąpił. Jeśli wystąpił otrzymuje wartość true i dana liczba nie jest dopisywana do tablicy tab, jeśli nie wystąpił to zmienna jest równa false i dana liczba jest dopisywana do tablicy tab (na podstawie spełnionego warunku). Iterator jest po to abyś wiedział ile jest niepowtarzających się liczb w tablicy tab, bo nie musi ona być pełna takich liczb.

Podobne pytania

0 głosów
4 odpowiedzi 3,969 wizyt
0 głosów
0 odpowiedzi 385 wizyt
pytanie zadane 25 grudnia 2019 w Inne języki przez kamasazi98 Początkujący (410 p.)
0 głosów
1 odpowiedź 396 wizyt
pytanie zadane 26 września 2015 w C# przez jegor377 Stary wyjadacz (13,230 p.)

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...