Skocz do zawartości


Pakrys

Rejestracja: 22 mar 2008
OFFLINE Ostatnio: 10 05 2012 09:11
-----

Moje tematy

Eliminacja powtarzających sie liczb w tablicy

09 05 2012 - 12:29

Opracowałem program do usuwania tych samych liczb z tablicy.
Program napisałem w języku C++ i kompilowałem w IDE Dev-Cpp.
Program został skompilowany bez błędu, ale nie eliminuje wszystkich powtarzających się liczb.
Aby łatwiej było dyskutować kod programu przedstawia się następująco:

// Usuwanie elementu z tablicy
//------------------------
#include <cstdlib>
#include <iostream>
#include <iomanip>
using namespace std;

int N = 10; // liczba komórek tablicy
int poz;
int v=0;

int main()
{
int a[]={1,4,8,2,8,1,13,7,1,5,6};
int a1=1;
cout <<"\n\n Usuwanie elementu z tablicy "<<endl<<endl;
int i;

// wypełniamy tablicę kolejnymi liczbami

cout <<" Wypelnienie tablicy liczbami"<<endl<<endl;
for(i = 0; i < N; i++)
{
cout <<" Przebieg "<< setw(2)<<i+1 <<". a["<<i<<"]="<<a[i]<<endl;
}
cout <<"\n\n Porownywanie liczb"<<endl<<endl;

//int v=0;
for(i = 0; i < N; i++)
{
cout <<" Przebieg "<< setw(2)<<i+1 <<". a["<<i<<"]="<<a[i]<<endl;
if (a[i]==a1)
{
v=v+1; //licznik występowania tej samej liczby
if (v>1)
{
poz=i;
cout <<"\n\n Usuwamy z tablicy pozycje oznaczona indeksem poz="<<poz<<" Licznik wystepowania liczby v="<<v<<endl<<endl;
cout <<" Przesuwamy komorki od a[poz+1] do a[N-1] o jedna pozycie do dolu "<<endl<<endl;

for (int u = poz; u < N - 1; u++)
{
a[u] = a[u + 1];
cout << " a["<<u<<"]="<<a[u]<<endl;
}
cout <<"\n\n Zbior liczb w tablicy po przesunieciu liczb "<<endl<<endl;
for (i = 0; i < N-1; i++)
{
cout <<" a["<<i<<"]="<<a[i]<<endl;
}

}
}
}

cout <<endl<<endl;
/*
// przesuwamy komórki od a[P+1] do a[N-1] o jedną w dół
cout <<" Usuwamy z tablicy pozycje oznaczona indeksem poz="<<poz<<endl<<endl;
cout <<" Przesuwamy komorki od a[p+1] do a[N-1] o jedna pozycie do dolu "<<endl<<endl;

for(i = poz; i < N - 2; i++)
{
a[i] = a[i + 1];
cout << " a["<<i<<"]="<<a[i]<<endl;
}
cout <<endl<<endl;
*/
// wyświetlamy zawartość tablicy
cout <<"\n\n Wyswietlamy zawartosc tablicy "<<endl<<endl;
for(i = 0; i < N-1; i++) cout << " a[" << i << "] = " << a[i] << endl;
cout<<endl<<endl;

system("PAUSE");
return 0;
}

Wydruk programu wygląda następująco:


Widać że pętla for ma 6-ść przebiegów. Na pierwszej powtarzającej się liczbie wykonuje przesuniecia indeksów tablicy, pokazuje jak wygląda tablica po przesunięciu indeksow i powinna kontynuować dalsze przebiegi aż do końca.
Ale tak się nie dzieje i nie wiem dlaczego. Pętla kończy działanie po 6-tym przebiegu.
Czy mógłby mi to ktoś wyjaśnić i zwrócić uwagę gdzie jest błąd.