[C++] Jak usunąć z tablicy powtarzające się elementy?

angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

Mam takie zadanie: "Utwórz n-elementową tablicę jednowymiarową. Usuń z tej tablicy wszystkie powtarzające się liczby tzn z tablicy o wyrazach \(\displaystyle{ 4, 1, 22, 1, 3, 6, 7, 6, 6, 7, 4, 8}\) powinna powstać tablica \(\displaystyle{ 22,3,8}\). Czy znaleziona sekwencja jest posortowana?". Napisałam tyle programu jednak nie wiem jak usunąć te powtarzające się elementy z tablicy. Muszę użyć funkcji, a nie wiem jakiej. Oczywiście potrzebuję najbardziej banalnego pomysłu. Pomocy.

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void wypisz (const int* poczatek, const int *wartownik);
void losuj (int *poczatek, int *wartownik, int a, int b);


int main()
{
	srand(time(0));
	
	cout<<"Podaj liczbe elementow tablicy : ";
	int n;
	cin>>n;
	cout<<"Podaj konce przedzialu z jakiego bedziemy losowac liczby do tablicy [p,q]
";
	cout<<"p = ";
	int p;
	cin>>p;
	cout<<"q = ";
	int q;
	cin>>q;
	if (p>q)
	{
	   		int pom=p; 
	   		p=q;
	   		q=pom;
	}
	if (n>0)
	{
		int *A=new int[n];
		if (A!=NULL)
		{
			losuj (A, A+n, p,q);
			cout<<"Wylosowana tablica : 
";
			wypisz (A,A+n);
		}
		delete []A;
		A=NULL;
	}
	cout<<endl<<endl;
	system("pause");
	return 0;
}

void wypisz (const int* poczatek, const int *wartownik)
{
	while (poczatek<wartownik)
	{
		cout<<*poczatek<<"	";
		poczatek++;
	}
}

void losuj (int *poczatek, int *wartownik, int a, int b)
{
	int pom=b-a+1;
	while (poczatek<wartownik)
	{
		*poczatek=rand()%pom+a;
		poczatek++;
	}
}
Ostatnio zmieniony 27 maja 2012, o 09:26 przez Afish, łącznie zmieniany 2 razy.
Powód: Kod w [code][\code]!
Scorpio123
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 11 sty 2012, o 16:09
Płeć: Mężczyzna
Lokalizacja: Dobrodzień
Pomógł: 3 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Scorpio123 »

Najłatwiejsze to chyba będzie stworzenie kolejnej tablicy, o tych samych rozmiarach i umieszczanie tam niepowtarzających się elementów.
1.Na pole 1: wstawiasz pierwszy początkowej element tablicy
2.Na pole 2 i dalej: sprawdzasz czy druga liczba początkowej tablicy jest różna od wcześniejszych liczb nowej tablicy, jeśli tak, to wstawiasz ją na to pole i przechodzisz na pole następne, jeśli nie sprawdzasz kolejną liczbę początkowej tablicy
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

Rozumiem o co chodzi, ale kompletnie nie wiem jak to zapisać.
Scorpio123
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 11 sty 2012, o 16:09
Płeć: Mężczyzna
Lokalizacja: Dobrodzień
Pomógł: 3 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Scorpio123 »

Trochę Cię naprowadzę, resztę sama zrobisz

powiedzmy że t[] będzie naszą nową tablicą
l,k będą licznikami tablic kolejno starej i nowej
x będzie zmienną typu bool
teraz działanie

Kod: Zaznacz cały

t[0]=A[0];
k=1;
for (int l=1; l<n; l++)
{
x=0;
for (int j=0; j<k; j++)
{if (A[l]==t[j]) x=1;}   
if (x==0) { t[k]=A[l]; k++;}   
}

jeśli x==1 to nie robi nic, bo taki wyraz już był
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

ale to jest opis osobnej funkcji tj. losuj, wypisz, czy fragment funkcji main? bo troszkę nie czaje
Scorpio123
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 11 sty 2012, o 16:09
Płeć: Mężczyzna
Lokalizacja: Dobrodzień
Pomógł: 3 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Scorpio123 »

To jest funkcja właściwa, w tablicy t[] będą niepowtarzające się liczby.
Algorytm powinien być dobry, Ty musisz tą funkcję "wkomponować" w resztę programu-stworzyć funkcję, wprowadzić zmienne, zrobić tablicę dynamiczną i wskaźniki(jeśli to wymagane), na końcu musisz wyświetlić pierwszych k-elementów t[], ja właściwie dałem sam algorytm, który równie dobrze mogłem przedstawić w schemacie blokowym
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

aż mnie głowa rozbolała od nadmiaru informacji...
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Afish »

Najłatwiej będzie wykorzystać std::map albo inny kontener tego rodzaju.
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

Nie mówi mi to zbyt wiele
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Afish »

Przejeżdżasz po tablicy i dodajesz każdy element do mapy jednocześnie go zliczając, następnie przejeżdżasz po mapie i wypisujesz te elementy, które mają krotność 1.
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

a czy po prostu nie możesz napisać gotowej funkcji?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Afish »

Mogę, ale wolę dać Ci wskazówkę. Googluj za std::map oraz STL.
Ewentualnie jak to jest za trudne, to po prostu zrób dwie zagnieżdżone pętle i po sprawie.
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

To błagam o gotową odpowiedź. Jest to zadanie tylko na zaliczenie i to będzie moja ostatnia przygoda z programowaniem. BŁAGAM ^^
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: Afish »

Gotowca nie będzie.
angelika-mirowska
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 26 maja 2012, o 19:36
Płeć: Kobieta
Lokalizacja: Wrocław

[C++] Jak usunąć z tablicy powtarzające się elementy?

Post autor: angelika-mirowska »

taa... dużo zrozumiałam po polsku mam problem z programowaniem, a po angielsku zrozumiem... tia...
ODPOWIEDZ