PDA

Visualizza la versione completa : [C] Acquisizione vettore e stampa dei tre valori massimi


robe92
05-03-2012, 20:14
Il problema che riscontro è nell'output: non riesco a capire perché nei tre valori massimi mi stampa anche lo 0 (consiglio un'esecuzione tramite compilatore per capire meglio il problema)

#include <stdio.h>
#define max 100
/*PROTOTIPI*/
void input(int v[], int *dim);
void sort(int v[], int dim);
void swap(int *x, int *y);
void output(int v[], int dim);
/*FUNZIONE PRINCIPALE*/
main() {
int v[max];
int dim;
input(v, &dim);
sort(v, dim);
output(v, dim);
return 0;
}
/*INPUT*/
void input(int v[], int *dim) {
int num;
*dim=0;
do {
printf("Immetti numero: ");
scanf("%d", &num);
v[(*dim)++]=num;
}
while((num!=0) && (*dim<max));
if(num==0) (*dim)--;
}
/*SORT*/
void sort(int v[], int dim) {
int i, j;
for(i=0;i<dim-1;i++) {
for(j=i+1;j<dim;j++) {
if(v[i]>v[j]) swap(&v[i], &v[j]);
}
}
}
/*SWAP*/
void swap(int *x, int *y) {
int temp;
temp=*x;
*x=*y;
*y=temp;
}
/*OUTPUT*/
void output(int v[], int dim) {
int i;
for(i=0;i<dim;i++) {
printf("%d ", v[i]);
}
printf("\nI valori massimi sono: %d %d %d", v[i-2], v[i-1], v[i]);
}
Vi ringrazio

oregon
06-03-2012, 01:10
Deve essere



printf("\nI valori massimi sono: %d %d %d", v[i-3], v[i-2], v[i-1]);

robe92
06-03-2012, 09:25
ci avevo già pensato ma non capisco perché si fa così.. eppure io nell'input ho già detto di decrementare la dimensione nel caso in cui ci sia lo zero, perché lo stampa lo stesso?

oregon
06-03-2012, 09:55
Originariamente inviato da robe92
ci avevo già pensato ma non capisco perché si fa così..

Pensaci bene ... rifletti sul valore che ha la variabile i alla fine del ciclo for.

robe92
06-03-2012, 14:38
se il ciclo for è descritto così for(i=0;i<dim;i++) arriva fino a dim-1 no? tant'è che mi stampa a video il vettore escludendo l'elemento zero

oregon
06-03-2012, 14:41
Ma quando termina, nelle righe seguenti, la variabile i vale dim

robe92
06-03-2012, 14:52
quindi si incrementa ancora un'ultima volta?

oregon
06-03-2012, 14:54
Ovviamente sì ... altrimenti come fa a vedere che non è più <dim ?

(a parte che questo è il funzionamento standard di ogni costrutto for ... di ogni linguaggio)

robe92
06-03-2012, 14:58
e allora quando scrivo for(i=0;i<=dim;i++)?

oregon
06-03-2012, 15:49
Dai ... mi sembra ovvio

Loading