Help me!!!!!!

Sk_Anonymous
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);
}

Risposte
vict85
Ci sono un po' di cose che non capisco...

/************************************************/ 
/* 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...

_luca.barletta
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.

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