PROBLEMA CODICE INSERTION SORT C

Iprogrammer

Nuovo Utente
27 Apr 2020
2
0
1
Ciao a tutti!
Premetto che ho iniziato da poco a studiare il linguaggio di programmazione C, però sono a conoscenza delle basi fondamentali per capire un semplice codice.
Ho un problema con il codice che dovrebbe effettuare l'insertion sort di alcuni valori di input forniti dall'utente. Il codice è il seguente:

C:
/*

 * codice per insertion sort

 * descrizione: https://it.wikipedia.org/wiki/Insertion_sort

 */

#include <stdio.h>

#include <stdlib.h>

#define MAX_INPUT 10

void estrai_dati(int ac, char **av, int *vett, int *lung)

{

    *lung = ac - 1;

    for (int i = 0; i < *lung; ++i)

        vett[i] = atoi(av[i+1]);

}

void fai_spazio(int posizione, int *vett, int lung)

{

    for (int j = lung - 1; j > posizione; ++j)

        vett[j] = vett[j-1];

}

void inserisci(int nuovo_dato, int num_dati_ord, int *vett)

{

    if (num_dati_ord = 0)  { // il vettore è vuoto, facile

        vett[0] = nuovo_dato;

        return;

    }

    for (int i = 0; i < num_dati_ord; ++i)  {

        if (nuovo_dato < vett[i])  {

            // sposta da vett[i] in poi di un posto sulla destra

            // prima di inserire il nuovo_dato

            fai_spazio(i, vett, num_dati_ord);

            vett[i] = nuovo_dato;

            return;

        }

    }

}

void ordina_dati(const int *dati_non_ordinati, int *dati_ordinati)

{

    int num_dati = sizeof(dati_non_ordinati) / sizeof(dati_non_ordinati[0]);

    for (int i = 0; i < num_dati; ++i)

        inserisci(dati_non_ordinati[i], i, dati_ordinati);

}

void stampa_vettore(const int *vett, int lung)

{

    for (int i = 0; i < lung; ++i)

        printf("%d ",vett[i]);

    printf("\n");

}

int main(int argc, char **argv)

{

    if (argc > MAX_INPUT + 1) {

        printf("Numero massimo di input %d\n", MAX_INPUT);

        return -1;

    }

    int dati_input[MAX_INPUT] = {0};

    int dati_ordinati[MAX_INPUT] = {0};

    int num_dati = 0;

    estrai_dati(argc, argv, dati_input, &num_dati);

    ordina_dati(dati_input, dati_ordinati);

    stampa_vettore(dati_ordinati, num_dati);

    return 0;

}
Se per esempio inserisco i valori "2 9 1 4 3 6" l'output finale mi restituisce "0 0 0 0 0 0" invece di "1 2 3 4 6 9".
Non capisco dov'è il problema e quali siano gli errori.
Qualcuno può aiutarmi?

Grazie.
 

marino51

Utente Attivo
28 Feb 2013
2.920
164
63
Lombardia
ho fatto copia/incolla del tuo codice e l'ho compilato, ottenendo una fila di errori,
come mai ?
Codice:
Vettore.C
Vettore.C(21) : error C2062: type 'int' unexpected
Vettore.C(21) : error C2065: 'i' : undefined
Vettore.C(21) : error C2143: syntax error : missing ';' before ')'
Vettore.C(25) : warning C4100: 'av' : unreferenced formal parameter
Vettore.C(25) : warning C4100: 'vett' : unreferenced formal parameter
Vettore.C(31) : error C2062: type 'int' unexpected
Vettore.C(31) : error C2065: 'j' : undefined
Vettore.C(31) : error C2143: syntax error : missing ';' before ')'
Vettore.C(35) : warning C4100: 'vett' : unreferenced formal parameter
Vettore.C(35) : warning C4100: 'lung' : unreferenced formal parameter
Vettore.C(49) : error C2062: type 'int' unexpected
Vettore.C(49) : error C2065: 'i' : undefined
Vettore.C(49) : error C2143: syntax error : missing ';' before ')'
Vettore.C(65) : error C2059: syntax error : '}'
 

marino51

Utente Attivo
28 Feb 2013
2.920
164
63
Lombardia
dopo le correzioni più semplici,
Codice:
Vettore.C
Vettore.C(107) : error C2109: subscript on non-array
Vettore.C(107) : error C2059: syntax error : '{'
Vettore.C(109) : error C2109: subscript on non-array
Vettore.C(109) : error C2059: syntax error : '{'
Vettore.C(113) : warning C4047: 'argument' : different levels of indirection
Vettore.C(113) : warning C4024: 'estrai_dati' : different types : parameter 3
Vettore.C(115) : warning C4047: 'argument' : different levels of indirection
Vettore.C(115) : warning C4024: 'ordina_dati' : different types : parameter 1
Vettore.C(115) : warning C4047: 'argument' : different levels of indirection
Vettore.C(115) : warning C4024: 'ordina_dati' : different types : parameter 2
Vettore.C(117) : warning C4047: 'argument' : different levels of indirection
Vettore.C(117) : warning C4024: 'stampa_vettore' : different types : parameter 1