Ordinamento Scopo del programma Il programma simula lordinamento

  • Slides: 15
Download presentation
Ordinamento

Ordinamento

Scopo del programma • Il programma simula l’ordinamento di oggetti in scaffali • Si

Scopo del programma • Il programma simula l’ordinamento di oggetti in scaffali • Si immagina di avere 4 scaffali ad ognuno dei quali viene associato un tipo di oggetti • Gli oggetti vengono acquisiti disordinatamente dal sistema così come vengono dati dall’operatore • Il compito del programma è quello di sistemare tutti gli oggetti al proprio posto • Gli oggetti sono multipli di 4 in modo tale che per ogni scaffale venga assegnato lo stesso numero di oggetti • Il programma dovrebbe ordinare oggetti uguali nello stesso scaffale e tutti in ugual numero • Se in uno scaffale si trovano oggetti uguali di numero maggiore del previsto, sicuramente ci sarà uno scaffale dove il numero di oggetti è minore • Gli oggetti in più in uno scaffale vengono sistemati nello scaffale dove gli oggetti sono di meno ma non saranno tutti uguali

Es: disordine libri pupazzi giocattoli fumetti

Es: disordine libri pupazzi giocattoli fumetti

Es: ordine libri pupazzi giocattoli fumetti

Es: ordine libri pupazzi giocattoli fumetti

Struttura del programma • Il programma è formato da tre parti fondamentali: il main

Struttura del programma • Il programma è formato da tre parti fondamentali: il main e due subroutine void insertion e void mostra. Scaffali • Nel main vengono acquisiti i dati e vengono richiamate le due subroutine • La subroutine insertion ordina i dati secondo gli scaffali di appartenenza • La subroutine mostra. Scaffali mostra a video i dati

Struttura dati • I dati vengono dichiarati in un array di interi il cui

Struttura dati • I dati vengono dichiarati in un array di interi il cui massimo numero è 400 • Il valore degli array deve andare da 1 a 4 • Al numero 1 si associa quaderno, al numero 2 si associa giocattolo al numero 3 si associa fumetto e al numero 4 pupazzo • Il confronto tra i dati è quindi fatto tra numeri interi che vanno da 1 a 4

Acquisizione dati for (i=0; i<tot; i++){ do{ printf("ninserisci l'oggetto %d : ", i+1); scanf("%d",

Acquisizione dati for (i=0; i<tot; i++){ do{ printf("ninserisci l'oggetto %d : ", i+1); scanf("%d", &oggetti[i]); }while(oggetti[i]<1 || oggetti[i]>4); } Il numero dei dati è tot; essi vengono indicizzati dal numero progressivo i Gli oggetti vengono acquisiti per ogni ciclo; se il dato ha un valore <1 oppure valore >4, si richiede l’inserimento, altrimenti si avanza di una unità il ciclo for

Acquisizione dati i=1 a[i] no no 1<a[i]<4? i<tot? si i=i+1 si

Acquisizione dati i=1 a[i] no no 1<a[i]<4? i<tot? si i=i+1 si

Ordinamento

Ordinamento

Ordinamento int temp; /* Indice temporaneo per scambiare elementi */ int prossimo; int attuale;

Ordinamento int temp; /* Indice temporaneo per scambiare elementi */ int prossimo; int attuale; for (prossimo=1; prossimo<tot; prossimo++){ temp=oggetti[prossimo]; attuale=prossimo-1; while ((attuale>=0) && (oggetti[attuale]>temp)){ oggetti[attuale+1]=oggetti[attuale]; attuale=attuale-1; } oggetti[attuale+1]=temp; }

Pseudocodice Per prossimo=1…. . tot{ temp ←oggetti[prossimo] attuale ←prossimo – 1 while attuale >

Pseudocodice Per prossimo=1…. . tot{ temp ←oggetti[prossimo] attuale ←prossimo – 1 while attuale > 0 e oggetti[attuale] > temp do {oggetti[attuale+1] ←oggetti[attuale] attuale←attuale-1 } oggetti[attuale+1] ←temp

Ordinamento • Il confronto dei dati è fatto a due • Ogni elemento viene

Ordinamento • Il confronto dei dati è fatto a due • Ogni elemento viene confrontato con il precedente • Se il dato attuale è maggiore o uguale al precedente, non viene fatto lo scambio altrimenti viene fatto • Se i dati sono n e sono già ordinati, il numero di iterazioni è pari a n; se il disordine è massimo, il numero di iterazioni è pari a n*n

Flow chart prossimo← 1 fine si Prossimo>tot? no temp ← Oggetti[prossimo] attuale← prossimo-1 Attuale>0?

Flow chart prossimo← 1 fine si Prossimo>tot? no temp ← Oggetti[prossimo] attuale← prossimo-1 Attuale>0? && oggetti[attuale]>temp ? si Oggetti[attuale+1] ←oggetti[attuale] attuale ←attuale-1 no Oggetti[attuale+1] ←temp Prossimo=prossimo+1

esempio

esempio

esempio

esempio