PROBLEMA [C] Problema codice insertion sort

Iprogrammer

Nuovo Utente
1
0
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 = 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)  {
               // sposta da vett in poi di un posto sulla destra
               // prima di inserire il nuovo_dato
               fai_spazio(i, vett, num_dati_ord);
               vett = 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, dati_ordinati);
}

void stampa_vettore(const int *vett, int lung)
{
     for (int i = 0; i < lung; ++i)
          printf("%d ",vett);
     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.
Il codice non è stato scritto da me però devo sistemarlo cercando di mantenere la stessa struttura cosi com'è ora.

Qualcuno può aiutarmi?
Se qualcuno è in grado di riscriverlo correttamente e postarlo ne sarei veramente grato perchè è da giorni che tento di trovare una soluzione ma non ci sono ancora riuscito! :muro:
 
Ultima modifica da un moderatore:

DispatchCode

Utente Attivo
1,152
759
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
Non so bene come fai a compilarlo, in quanto si vede ad occhio un errore:

C:
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, dati_ordinati);
}

C:
void inserisci(int nuovo_dato, int num_dati_ord, int *vett) {

Viene chiamata la funzione con un parametro che non è un puntatore a const int *.

Ma... assumendo che tu riesca non mi stupisce che ci siano tutti 0.
Le prime righe di inserisci() infatti hanno:

C:
     if (num_dati_ord = 0)  { // il vettore è vuoto, facile
          vett[0] = nuovo_dato;
          return;
     }

In pratica non avviene un confronto ma un assegnamento! Essendo 0 valutato come false, l'if non viene eseguito, e prosegue.
Sotto c'è il for, che non viene ovviamente eseguito vista la condizione (num_dati_ord sarà uguale a 0, così come il contatore del ciclo).
 
  • Like
Reactions: Mursey

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 29 22.1%
  • Gearbox

    Voti: 2 1.5%
  • Xbox & Bethesda

    Voti: 85 64.9%
  • Square Enix

    Voti: 10 7.6%
  • Capcom

    Voti: 6 4.6%
  • Nintendo

    Voti: 18 13.7%
  • Altro (Specificare)

    Voti: 11 8.4%

Discussioni Simili