27/04/20 19:40
Iprogrammer
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:
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.
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:
/* * 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.
aaa