Invocazione di funzione
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;
}
}
#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
"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])
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;
}
}
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;
}
}
"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!!!!...(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

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???
PS. e se invece volessi inserire io gli elementi di un array(senza naturamente dichiararli)...si potrebbe fare???
"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

oh genio del C...ascolta ho un piccolo problema cn il tuo pseudocodice...nn è che ptresti tradurlo tu in codice C...
grazie mille...ciao
grazie mille...ciao
"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);
grazie mille vict 85....