RISOLTO Procedura ordina array

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Vito-

Utente Attivo
Messaggi
193
Reazioni
15
Punteggio
43
Ciao, sapreste dirmi perche quando stampo mi stampa tanti zeri quanti sono i numeri che inserisco?
Penso che il problema sia nell'ultimo for


C:
#include <stdio.h>
#define LungMax 10

void ordinaTabella(int array[LungMax])
{
    int i,j;
    for(i=0;i<LungMax-1;i++)
    {
        for(j=0;j<LungMax-i-1;j++)
        {
            if(array[j]>array[j+1])
            {
                int tmp=array[j];
                array[j]=array[j+1];
                array[j+1]=tmp;
            }
        }
    }
}

int main()
{
    int array[LungMax], num,i=0;

    printf("Inserisci massimo 10 numeri interi diversi da zero:\n");
    scanf("%d", &num);

    while(num!=0 && i<LungMax)
    {
        array[i]=num;
        i++;
        scanf("%d", &num);
    }

    ordinaTabella(array);

    for(int g=0;g<LungMax;g++)
    {
        printf("%d", array[g]);
    }

    return(0);
}
 
Ultima modifica:
Piu che penso sono certo che sia li, ma non so cosa mettere al posto di LungMax per farlo funzionare anche quando metto meno di 10 numeri
 
Dovresti dichiarare dopo l'array e quindi avere int array[num]; (prende il nome di VLA, Variable Length Array questo tipo di allocazione).

Comunque il bubble sort puoi anche farlo partire con il ciclo interno uguale a j=i+i. Ovviamente anche qui dovrai usare "num" come limite e non la lunghezza massima.
 
Dovresti dichiarare dopo l'array e quindi avere int array[num]; (prende il nome di VLA, Variable Length Array questo tipo di allocazione).

Comunque il bubble sort puoi anche farlo partire con il ciclo interno uguale a j=i+i. Ovviamente anche qui dovrai usare "num" come limite e non la lunghezza massima.
in che senso dichiararlo dopo?
 
Questo:

C:
int main()
{
    int num, i=0;

    printf("Inserisci massimo 10 numeri interi diversi da zero:\n");
    scanf("%d", &num);
    int array[num];
    .........
 
Scusami, ora ho più tempo per articolare meglio.

Hai due strade.
La prima è leggere la dimensione massima dell'array, e dichiararlo come ti ho mostrato sopra. Così avrà come dimensione il nr di elementi che dovrà contenere.

La seconda è tenere tu un contatore: usi una variabile che vai a incrementare a ogni inserimento. Questo valore dovrai passarlo poi alle altre funzioni e lo utilizzerai come "lunghezza dell'array".
Chiaramente mentre inserisci i valori dovrai verificare che il tuo contatore sia inferiore al LungMax.
 
Scusami, ora ho più tempo per articolare meglio.

Hai due strade.
La prima è leggere la dimensione massima dell'array, e dichiararlo come ti ho mostrato sopra. Così avrà come dimensione il nr di elementi che dovrà contenere.

La seconda è tenere tu un contatore: usi una variabile che vai a incrementare a ogni inserimento. Questo valore dovrai passarlo poi alle altre funzioni e lo utilizzerai come "lunghezza dell'array".
Chiaramente mentre inserisci i valori dovrai verificare che il tuo contatore sia inferiore al LungMax.
L'ho sistemato cosi e funziona. é corretto?


C:
#include <stdio.h>
#define LungMax 10

void ordinaTabella(int array[LungMax], int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(array[j]>array[j+1])
            {
                int tmp=array[j];
                array[j]=array[j+1];
                array[j+1]=tmp;
            }
        }
    }
}

int main()
{
    int array[LungMax], num,i=0, n=0;
    char nomeFile[15];
    FILE *fp;

    printf("Inserisci massimo 10 numeri interi diversi da zero:\n");
    scanf("%d", &num);

    while(num!=0 && i<LungMax)
    {
        array[i]=num;
        i++;
        n++;
        scanf("%d", &num);
    }

    ordinaTabella(array,n);

    for(int g=0;g<n;g++)
    {
        printf("%d\t", array[g]);
    }

    return(0);
}
 
Si, a occhio mi sembra corretto.
Potresti "migliorare" il bubble sort, ma va bene anche così.
 
È la prima volta che lo uso e l'ho preso su internet, ancora devo capire bene come funziona.
Per il resto ti ringrazio!

Inviato da Redmi 5 Plus tramite App ufficiale di Tom\'s Hardware Italia Forum

Non abituarti male visto che stai imparando (hai tempo in seguito per farlo...).
Con il bubble sort hai un indice su un elemento e un altro indice sul successivo. Ogni volta controlli se il precedente è maggiore del successivo, se lo è, li scambi.

Comunque guardando meglio il tuo codice, non ti serve nemmeno la variabile n, puoi utilizzare direttamente i.
 
Non abituarti male visto che stai imparando (hai tempo in seguito per farlo...).
Con il bubble sort hai un indice su un elemento e un altro indice sul successivo. Ogni volta controlli se il precedente è maggiore del successivo, se lo è, li scambi.

Comunque guardando meglio il tuo codice, non ti serve nemmeno la variabile n, puoi utilizzare direttamente i.
Ma puoi spiegarmi come funzionano i due cicli for nel bubble sort perche non riesco a capirlo
 
Ma puoi spiegarmi come funzionano i due cicli for nel bubble sort perche non riesco a capirlo

Il concetto del BubbleSort è questo.
Tieni un indice i sul primo elemento. Il secondo for inizia da j inizializzata alla posizione successiva, i+1.
Il funzionamento è semplice: ogni iterazione del ciclo esterno ordina un valore (in posizione i+1). Servono due cicli perchè ogni elemento deve essere confrontato con tutti gli altri dell'insieme.

Ecco perchè non serve che il ciclo interno inizi sempre da 0: quando sarai all'indice i, i valori da 0 a i-1 saranno ordinati (in quanto inferiori), quindi ha senso confrontare il valore all'indice i con tutti i valori in posizioni maggiori di i, poichè ancora non sono stati ordinati.
 
Quello non e' un Bubble Sort, infatti dubito perfino che funzioni. Dove hai trovato quel codice (poiché piedi come funzioni deduco non lo hai scritto tu)
 
Quello non e' un Bubble Sort, infatti dubito perfino che funzioni. Dove hai trovato quel codice (poiché piedi come funzioni deduco non lo hai scritto tu)

Di averlo copiato l'ha detto qualche post sopra, infatti gli consigliavo di scriversele le cose, specie visto che sta imparando.

Comunque perché non è bubble sort? Non è scritto proprio bene, ma a me sembra comunque bubble sort.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top