Hej.
Czy mogłby mi ktoś napisać w C samą funkcję zwracającą liczbę unikatowych elementów tablicy np. int'ów w możliwie najkrótszy i możliwie prosty sposób. Czy należy tworzyć zawsze tablicę pamiętającą dotychczasowe elementy?
Ilosc unikatowych wartosci
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Ilosc unikatowych wartosci
Kod: Zaznacz cały
int unique( int *tab, int range )
{
int i,j,found;
int fill=1;
int *tmp=malloc( range*siezof(int) );
tmp[0]=tab[0];
for( i=1;i<range;++i )
{
found=0;
for( j=0;j<fill;++j )
if( tab[i]==tmp[j] )
{
found=1;
break;
}
if( !found )
tmp[fill++]=tab[i];
}
free(tmp);
return fill;
}
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Ilosc unikatowych wartosci
Tablicy jako tako nie mozna zwracac. Co najwyzej mozna zrobic przekazywanie jej przez wskaznik jako argument funkcji:
Dajesz mu wskaznik na tablice, jej rozmiar oraz wskaznik na ta z unikatami. Jesli druga istnieje to ja kasuje i tworzy od nowa w maksymalnych rozmiarach. Pozniej jest zapelniana przez wartosci. Mozna to zrobic przez dynamiczna allokacje i wtedy nie bedzie marnotrawstwa pamieci, no ale zostawiam tak POZDRO
Kod: Zaznacz cały
int unique( int *tab, int range, int *out )
{
int i,j,found;
int fill=1;
if( out ) free( out );
out=malloc( range*siezof(int) );
out[0]=tab[0];
for( i=1;i<range;++i )
{
found=0;
for( j=0;j<fill;++j )
if( tab[i]==out[j] )
{
found=1;
break;
}
if( !found )
out[fill++]=tab[i];
}
free( out );
return fill;
}