Buongiorno, sto cercando di creare un programma che caricato un vettore, mi restituisca il vettore ordinato e senza la copia degli elementi.
Ad esempio
inserisco 2,4,1,1,4,2,3,3,4 e mi restituisca 1,2,3,4;
Ho scritto questo codice:
#include <stdio.h>
#define MAXDIM 19
int elemv(void);
void carica(int vet[], int n);
int comp(int vet[], int n);
int ordina(int vet[], int n);
void del_copy(int vet[], int n);
void stampa(int vet[], int n, int max);
int main(void)
{
int n, vet[MAXDIM], max;
n = elemv();
carica(vet, n);
max = comp(vet, n);
stampa(vet, n, max);
return 0;
}
int elemv(void)
{
int n;
printf("\nQuanti elementi vuoi inserire nel vettore?\n");
scanf("%d", &n);
while(n<1 || n>MAXDIM)
{
printf("Non puoi inserire %d, inserisci un numero compreso tra 1 e %d (compresi)\n", n, MAXDIM);
scanf("%d", &n);
}
return n;
}
void carica(int vet[], int n)
{
int i;
for(i=0; i<n; i++)
{
printf("Inserisci il %d elmento ---> ", i+1);
scanf("%d", &vet[i]);
}
}
int comp(int vet[], int n)
{
int max;
max = ordina(vet, n);
del_copy(vet, n);
return max;
}
int ordina(int vet[], int n)
{
int i, j, save, max;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(vet[i]>vet[j])
{
save = vet[i];
vet[i] = vet[j];
vet[j] = save;
}
}
}
max=vet[n-1];
return max;
}
void del_copy(int vet[], int n)
{
int i, j, save, max, cont=0;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(j+1<n)
{
if(vet[i]==vet[j])
{
if(vet[i]!=vet[j+1])
{
vet[j]=vet[j+1];
save=vet[j+1];
}
else
{
cont = cont+1;
}
}
else
break;
}
}
for(j=i+1; j<cont+1; j++)
{
vet[j]=save;
}
}
}
void stampa(int vet[], int n, int max)
{
int i;
for(i=0; i<n; i++)
{
if(vet[i]!=max)
{
printf("| %d ", vet[i]);
}
else
{
printf("| %d |\n", vet[i]);
break;
}
}
}
Questo codice funziona se inserisco pochi elementi nel vettore, ma appena inserisco una decina di elementi mi da errore di segmentazione, vorrei capire cosa significa questo tipo di errore e da cosa è dovuto.
Io credo che l'errore sia nella funzione del_copy
void del_copy(int vet[], int n)
{
int i, j, save, max, cont=0;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(j+1<n)
{
if(vet[i]==vet[j])
{
if(vet[i]!=vet[j+1])
{
vet[j]=vet[j+1];
save=vet[j+1];
}
else
{
cont = cont+1;
}
}
else
break;
}
}
for(j=i+1; j<cont+1; j++)
{
vet[j]=save;
}
}
}
Grazie in anticipo.