Help me!!!!!!
sapreste aiutarmi con questo programma?????....Lo scopo è quello di acquisire una serie di elementi e di ordinarli tramite l'algoritmo insertsort....grazie mille..giocala88 disperato..
/************************************************/
/* programma che ordina un 'array (insertosort) */
/************************************************/
#include
#include
int insertsort(int a[],
int n);
int main()
{
int conta_passi, e_1, e_2, *a, n, i;
/* acquisire elementi array */
printf("Acquisire primo elemento array: ");
scanf("%d", &e_1);
printf("Acquisire secondo elemento array: ");
scanf("%d", &e_2);
/* inizializza array */
for(i = 0; i <= 10 ; i+1);
{
printf("\n%d\n", i);
}
insertsort(a, conta_passi);
printf("\npassi = %d\n", conta_passi);
return(0);
}
/* insertsort */
int insertsort(int a[],
int n)
{
int valore_ins,
i,
j,
conta_passi = 0;
for (conta_passi = 1, i = 1;
conta_passi++, (i < 10);
conta_passi++, i++)
{
for(conta_passi++, valore_ins = a, j = i - 1;
conta_passi++, ((j >= 0) && (a[j] > valore_ins));
conta_passi++, j--)
{
a[j + 1] = a[j];
conta_passi++;
}
if(j + 1 != i)
{
a[j + 1] = valore_ins;
conta_passi = +2;
}
conta_passi++;
}
return(conta_passi);
}
/************************************************/
/* programma che ordina un 'array (insertosort) */
/************************************************/
#include
#include
int insertsort(int a[],
int n);
int main()
{
int conta_passi, e_1, e_2, *a, n, i;
/* acquisire elementi array */
printf("Acquisire primo elemento array: ");
scanf("%d", &e_1);
printf("Acquisire secondo elemento array: ");
scanf("%d", &e_2);
/* inizializza array */
for(i = 0; i <= 10 ; i+1);
{
printf("\n%d\n", i);
}
insertsort(a, conta_passi);
printf("\npassi = %d\n", conta_passi);
return(0);
}
/* insertsort */
int insertsort(int a[],
int n)
{
int valore_ins,
i,
j,
conta_passi = 0;
for (conta_passi = 1, i = 1;
conta_passi++, (i < 10);
conta_passi++, i++)
{
for(conta_passi++, valore_ins = a, j = i - 1;
conta_passi++, ((j >= 0) && (a[j] > valore_ins));
conta_passi++, j--)
{
a[j + 1] = a[j];
conta_passi++;
}
if(j + 1 != i)
{
a[j + 1] = valore_ins;
conta_passi = +2;
}
conta_passi++;
}
return(conta_passi);
}
Risposte
Ci sono un po' di cose che non capisco...
Ho lasciato i commenti che avevo fatto ma poi mi sono reso conto che il tuo insertsort ha dentro uno strano metodo per contare i passaggi... Ma il fatto è che il codice macchina non farà esattamente quel numero di operazioni... e comunque ha più senso contare solamente confronti e scambi che non possono non avvenire.
In ogni caso ora non ho la testa di controllare l'algoritmo...
/************************************************/ /* programma che ordina un 'array (insertosort) */ /************************************************/ #include <stdio.h> #include <stdlib.h> /* NON C'E' motivo di spezzarlo e senza indentazioni rendi più difficile la lettura int insertsort(int a[], int n); int main() { int conta_passi, e_1, e_2, *a, n, i; /* acquisire elementi array */ printf("Acquisire primo elemento array: "); scanf("%d\n", &e_1); printf("Acquisire secondo elemento array: "); scanf("%d\n", &e_2); /* inizializza array */ /* 1. Hai messo un ; dopo il for */ /* 2. Qui NON hai inizializzato un bel niente hai solo scritto a schermo i numeri da 0 a 10 */ /* 3. Puoi scrivere ++i, i++, 1+=1 oppure i = i+1 ma il tuo i+1 non fa nulla o meglio calcola i+1 ma non lo memorizza da nessuna parte (lo fa senza modificare i) */ /* 4. Ho scritto i<11 invece di i<=10 ma il tuo non è un errore */ for(i = 0; i < 11 ; i++) { printf("\n%d\n", i); /* [...] */ } /* Un solo commento, anche se a[] è simile *a i due non sono esattamente la stessa cosa */ /* Il primo fa in modo che il compilatore gli dia della memoria, l'altro, quando nasce, è un puntatore a una postazione casuale della memoria */ /* se vuoi usarlo come array devi usare malloc o new */ insertsort(a, conta_passi); printf("\npassi = %d\n", conta_passi); /* Io non ho mai sentito che si potesse usare return(0);*/ return 0; } /* insertsort */ int insertsort(int a[], int n) { int valore_ins, i, j, conta_passi = 0; /* Ma stai cercando di vincere il premio in un concorso di codice offuscato? Che ci fa quel conta passi++ dopo le inizializzazioni? Quanto aumenta conta_passi a turno? */ for (conta_passi = 1, i = 1; (i < 10); conta_passi+=2, i++) { /* come sopra, e in più lo metti anche nelle inizializzazioni :Confused: */ for(conta_passi++, valore_ins = a[i], j = i - 1; ((j >= 0) && (a[j] > valore_ins)); conta_passi+=2, j--) { a[j + 1] = a[j]; /* anche qui :shock: ma il for lo fa già da solo (non te l'ho spostato)*/ conta_passi++; } if(j + 1 != i) { a[j + 1] = valore_ins; conta_passi = +2; } /* Ma non eri sicuro che te lo facesse, con questo conta_passi aumenta di 3 alla volta */ conta_passi++; } /* come l'altro return */ return conta_passi; }
Ho lasciato i commenti che avevo fatto ma poi mi sono reso conto che il tuo insertsort ha dentro uno strano metodo per contare i passaggi... Ma il fatto è che il codice macchina non farà esattamente quel numero di operazioni... e comunque ha più senso contare solamente confronti e scambi che non possono non avvenire.
In ogni caso ora non ho la testa di controllare l'algoritmo...
Si risponda solo su questo topic:
http://www.matematicamente.it/forum/array-vt28140.html
e invito l'autore a non aprire nuovi topic sullo stesso argomento.
http://www.matematicamente.it/forum/array-vt28140.html
e invito l'autore a non aprire nuovi topic sullo stesso argomento.