Invocazione di funzione

Sk_Anonymous
Ciao raga...ho un piccolo problema...(ma d'altronde cm sempre cn questa programmazione in C)!!!Il seguente algoritmo (so già ke presenterà degli errori) non vuole ordinarmi l'array...sarà ke sbaglio l'invicazione di funzione????...sapreste farlo partire esattamente???...grazie mille....!!!

#include
#include

void insertsort(int a[],
int n);
int main()
{
int a[] = {23, 12, 9, 1, 54, 31};
int *iPtr, k;


iPtr = a;

for(k = 0; k < 6; k++)
{
printf("\n-> %d\n", a[k]);

}
insertsort(a, *iPtr);
printf("Array ordinato: %d", a);



return(0);

}

void insertsort(int a[],
int n)
{
int valore_ins,
i,
j;

for(i = 1;
(i < n);
i++)
{
for(valore_ins = a, j = i -1;
((j <= 0) && (a[j] > valore_ins));
j--)
a[j + 1] = a[j];
if (j + 1 != i)
a[j + 1] = valore_ins;
}
}

Risposte
lorven
"giocala88":
Ciao raga...ho un piccolo problema...(ma d'altronde cm sempre cn questa programmazione in C)!!!Il seguente algoritmo (so già ke presenterà degli errori) non vuole ordinarmi l'array...sarà ke sbaglio l'invicazione di funzione????...sapreste farlo partire esattamente???...grazie mille....!!!

#include
#include

void insertsort(int a[],
int n);
int main()
{
int a[] = {23, 12, 9, 1, 54, 31};
int *iPtr, k;


iPtr = a;

for(k = 0; k < 6; k++)
{
printf("\n-> %d\n", a[k]);

}
insertsort(a, *iPtr);
printf("Array ordinato: %d", a);



return(0);

}

void insertsort(int a[],
int n)
{
int valore_ins,
i,
j;

for(i = 1;
(i < n);
i++)
{
for(valore_ins = a[j], j = i -1;
((j <= 0) && (a[j] > valore_ins));
j--)
a[j + 1] = a[j];
if (j + 1 != i)
a[j + 1] = valore_ins;
}
}

Nell'ultimo for è errata la condizione: for(valore_ins = a, j = i -1;((j <= 0) && (a[j] > valore_ins)); j--)
E non ho capito iPtr: se ti serve la lunghezza di un array a, basta calcolare sizeof(a)/sizeof(a[0])

Sk_Anonymous
Non ho capito bene...nell'ultimo for cosa devo cambiare???...mi faresti vedere in riferimento alla mia implementazione????cmq iPtr l'ho tolto a quanto pare nn serve ad un ****!!!!...(grazie x l'aiuto dato fino adesso)...PS. ma la mia invocazione sta bene così???...grazie mille lovern...

IMPLEMENTAZIONE C:

#include
#include

void insertsort(int a[],
int n);
int main()
{
int a[] = {23, 12, 9, 1, 54, 31};
int k;




for(k = 0; k < 6; k++)
{
printf("\n-> %d\n", a[k]);

}
insertsort(a, k);
printf("Array ordinato: %d", a);



return(0);

}

void insertsort(int a[],
int n)
{
int valore_ins,
i,
j;

for(i = 1;
(i < n);
i++)
{
for(valore_ins = a, j = i -1;
((j <= 0) && (a[j] > valore_ins));
j--)
a[j + 1] = a[j];
if (j + 1 != i)
a[j + 1] = valore_ins;
}
}

lorven
"giocala88":
Non ho capito bene...nell'ultimo for cosa devo cambiare???...mi faresti vedere in riferimento alla mia implementazione????cmq iPtr l'ho tolto a quanto pare nn serve ad un C :-D !!!!...(grazie x l'aiuto dato fino adesso)...PS. ma la mia invocazione sta bene così???...grazie mille lorven...
...

Avevo sottolineato l'errore; comunque, invece di j<=0, va posto j>=0.
Un'altra cosa: la stampa del vettore non mi pare corretta.
Infine: il tuo codice, scusami, mi risulta poco leggibile; ne posto sotto spoiler una versione riveduta e corretta, da consultare naturalmente
solo come extrema ratio :-)

Sk_Anonymous
lovern6un genio grazie mille...cmq l'implementazione di insertsort era del prof...quindi nn ero io ke sbagliavo nella funzione main...ma il prof nell'implementare l'algoritmo di insertsort...grazie mille...
PS. e se invece volessi inserire io gli elementi di un array(senza naturamente dichiararli)...si potrebbe fare???

lorven
"giocala88":
...
PS. e se invece volessi inserire io gli elementi di un array(senza naturamente dichiararli)...si potrebbe fare???

E' sufficiente la solita lettura in ciclo degli elementi del vettore: qualcosa del genere, che scrivo in pseudocodifica:
leggi n //dimensione array
per i che va da 0 a n-1
        inizio
        scrivi "immetti elemento vettore"
        leggi a(i)
        fine 

Tu scrivila in C :-)

Sk_Anonymous
oh genio del C...ascolta ho un piccolo problema cn il tuo pseudocodice...nn è che ptresti tradurlo tu in codice C...
grazie mille...ciao

vict85
"giocala88":
oh genio del C...ascolta ho un piccolo problema cn il tuo pseudocodice...nn è che ptresti tradurlo tu in codice C...
grazie mille...ciao


Parte ovvia...

printf("Immetti la dimensione dell'array\n");
scanf("%d", &n);


Creiamo un array...

Versione dinamica
int *p = (int *) malloc (n * sizeof(int));

Versione VLA
int a[n];


dopo di che c'é un semplice for con dentro la lettura degli elementi...
Solo una cosa: lettura elemento i-esimo
versione dinamica
scanf("%d", p+i);

vesione VLA
scanf("%d", &array[i]);



P.S: per la chiamata:
insertsort(p, n);

o
insertsort(a, n);

Sk_Anonymous
grazie mille vict 85....

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.