Чим со по будизмов да те просветлам.
(Ако не знаеш за покажувачи време е да научиш.)
Прво и прво големина на низа не може да смениш. Низа има фиксна должина и не може да ја наголемиш ниту пак намалиш. То твојов случај алоцираш низа од 100 броеви на стак. Или пак 400 бајта. Во тие позиции во низата во кој што нема да ставиш број што си го прочитал ќе имаш џанк вредност.
Второ ако сакаш програмата да е поекономична прво читај ја променливата golemina па потоа динамички алоцирај меморија. (Што корист да алоцираш меморија за 100 броеви ако ти се потребни само 3. Или пак ако имаш 500 тогаш во твојов случај ќе имаш Segmentation Fault)
Трето програмата е неефикасна. О(N^3) алгоритам за отстранување дупликати е катастрофа. Сортирајја низата прво. Бидејќи ако имаш елемент x и ако има дупликат тогаш ако x има индекс i дупликатите ќе имаат индекси i + 1, i + 2 .... i + N.
Со тоа добибаш О(N logN) алгоритам.
Доле е кодот знам дека вака ти ги сечам нозете но еве ти пример за како тоа се пишува во Ц без memmory leaks.
PHP:
#include<stdio.h>
#include <stdlib.h>
#include <assert.h>
int compare (const void * a, const void * b) // Ova e funkcija za qsort sto e definirana vo stdlib.
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int golemina,i;
printf("Vnesi golemina\n");
scanf("%d", &golemina);
int* niza = (int *)malloc(sizeof(int) * golemina);
int* bez_duplikati = (int *)malloc(sizeof(int) * golemina);
assert(niza != NULL); //Alokacija upsesna. Vo slucaj da e neuspesna dobivas ERROR i avtomatski se stopira programata.
assert(bez_duplikati != NULL);
printf("Vnesete gi elementite na nizata:\n");
for(i = 0; i < golemina; i++)
scanf("%d", &niza[i]);
qsort (niza, golemina, sizeof(int), compare);
int len = 0; //len ne e golemina na niza tuku e postavena dolna granica za da ne printame dzank vrednosti.
bez_duplikati[len] = niza[0];
len++;
for(i = 1; i < golemina; i++) //Logikata za ova e vo postot.
if(niza[i - 1] != niza[i])
{
bez_duplikati[len] = niza[i];
len++;
}
for(i = 0; i < len; i++)
printf("%d ",bez_duplikati[i]);
free(bez_duplikati); //Ne sakas memmory leak, neli?
free(niza);
return 0;
}
Четврто, ставај празни место во кодот да го ебам. Некој треба да ти го чита кодот некој ден а не се збиено да е.
Толку од мене.