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.