PDA

Visualizza la versione completa : Programma vettori


Anna87_m
04-03-2009, 19:33
Ciao,
dovrei fare un programma che legge un numero (fino a quando non digito zero) e crea dinamicamente un vettore ordinandolo.Io ho fatto questo ma non giusto.
# include <stdio.h>
# include <stdlib.h>

int *insert(int *pi, int i, int x)
{ int t,j,temp;
if (i==0)
{pi= (int *) malloc (sizeof(int));
pi[i]=x;}
else
{
pi=(int*)realloc(pi, (i+1) * sizeof(int));
for(t=i; t>=0;t--)
for(j=0;j<t;j++)
{if (pi[j]>pi[j+1])
{temp=pi[j];
pi[j] = pi[j+1];
pi[j+1]=temp;}

}
pi[t]=x;
}
return pi;

}
void stampa(int *pi,int i)
{int j;
for(j=0; j<=i;j++)
printf("%d \n",pi[j]);

}


int main ()
{ int x,i;
int *p=NULL;

i=0;
do
{ printf("inserisci il numero (si termina con zero)");
scanf(" %d", &x);
if (x!=0)
{
p= insert (p,i,x);
i++;
}
} while (x!=0);

stampa(p, i);
system("pause");
return 0;

}
spero che qualcuno possa aiutarmi.

MrX87
04-03-2009, 19:56
ciao ho guardato un p il codice e mi pare che sia corretto, hai solo dimenticato che nella funzione di insert() nell'else hai messo:


pi[t]=x;

mentre secondo me va benissimo se lo metti prima che ordini il vettore:


...
else {
pi=(int*)realloc(pi,(i+1) * sizeof(int));
pi[i] = x;
for(t=i; t>=0;t--) {
for(j=0;j<t;j++) {
if (pi[j]>pi[j+1]){
temp=pi[j];
pi[j] = pi[j+1];
pi[j+1]=temp;
}
}
}
}
...

e infine un'altra cosa, nella stampa non ciclare fino a i:


j<=i;

ma cilca solo fino a j < i;

oregon
04-03-2009, 20:09
Non pi[t] ma pi[i] ... devi scrivere nell'else

pi=(int*)realloc(pi, (i+1) * sizeof(int));

pi[i]=x;

... le due for ...

Anna87_m
04-03-2009, 20:13
Grazie:)

Loading