PDA

Visualizza la versione completa : Semplice funzione in C. Errore?


scoy97
19-12-2016, 17:24
La funzione deve prendere un array di interi ordinati ed eliminare i duplicati, restituendo n, lunghezza del nuovo array.



#include <stdio.h>


int eliminaDuplicati(int v[], int n) {
int i, k, found=0;


for(i=0; i<n; i++) {


do {
if (v[i+1]==v[i])
found=1;
else {
found=0;
k=i+1;
for(k; k<n-1; k++)
v[k]=v[k+1];
n=n-1;
}
} while(found==0);
}
return n;
}


void main() {
int a[8];
int i;
int m;
printf("Inserisci i numeri del vettore: ");
for (i=0; i<8; i++)
scanf("%d", &a[i]);
m=8;
m=eliminaDuplicati(a, m);
for(i=0; i<m; i++)
printf("%d ", a[i]);
printf("%d", m);
}

oregon
19-12-2016, 21:59
... e puoi dirci altro? Cosa succede? Errori? Malfunzionamenti?


E il codice, inseriscilo tra tag CODE ...

scoy97
19-12-2016, 22:49
Inserisci gli 8 numeri nell-array, poi chiude il programma dopo qualche secondo di attesa senza darmi neanche un return

oregon
20-12-2016, 09:45
Inserisci gli 8 numeri nell-array, poi chiude il programma dopo qualche secondo di attesa senza darmi neanche un return

Ragiona sul fatto che i+1 alla fine del ciclo va oltre la fine dell'array

scoy97
22-12-2016, 11:23
Ragiona sul fatto che i+1 alla fine del ciclo va oltre la fine dell'array

Grazie della "dritta"! Provo a risolvere

scoy97
22-12-2016, 11:43
#include <stdio.h>
int eliminaDuplicati(int v[], int n) {
int i, k, found=0;
for(i=0; i<n; i++) {
do {
if (v[i+1]!=v[i])
found=1;
else {
found=0;
for(i; i<n-1; i++)
v[i]=v[i+1];
n=n-1;
}
} while(found==0);
}
return n;
}
void main() {
int a[8];
int i;
int m;
printf("Inserisci i numeri del vettore: ");
for (i=0; i<8; i++)
scanf("%d", &a[i]);
m=8;
m=eliminaDuplicati(a, m);
for(i=0; i<m; i++)
printf("%d ", a[i]);
printf("%d", m);
}

Ho provato a fare questa modifica. Inserendo i numeri
1 3 3 6 7 7 7 9
Mi stampa
1 3 6 7 7 7 9 7

scoy97
22-12-2016, 12:30
Se posso sfrutto l'occasione per avere un chiarimento su questo esercizio ( in realtà una parte di esso ) sui puntatori

#include <stdio.h>
#define MAXDIM 20
typedef struct {
int val[MAXDIM];
int dim;
} vettore;
int acquisciSequenza(vettore *pv, int numMax) {
int i=0;
(*pv).dim=0;
int temp=0;
printf("Inserisci interi positivi in un vettore di max %d elementi oppure '-1' per terminare", numMax);
while(i<numMax && temp>=0) {
scanf("%d", &temp);
(*pv).val[(*pv).dim]=temp;
(*pv).dim++;
i++;
}
if (i==numMax)
return 1;
if (temp<0)
return 0;
}
void main() {
vettore a;
acquisciSequenza(&a, 10);
}



Il codice è corretto. Un chiarimento: nel main devo usare '&' perché devo passare alla funzione non un array, il cui passaggio per indirizzo sarebbe implicito, bensì una struttura che contiene un array.
Se non usassi il passaggio per indirizzo quale sarebbe l'effetto? Un ritorno di 1 o 0, ma con nessuna modifica del mio vettore principale a? Grazie dell'aiuto!

Loading