/**********************************************************************************/
/* Programma per la gestione commerciale di una attivitā di vendita di Automobili */
/**********************************************************************************/
/***************************/
/* Autore: Luca Mencarelli */
/***************************/
/*****************************/
/* Inclusione delle Librerie */
/*****************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*****************************************/
/* Definizione delle costanti simboliche */
/*****************************************/
#define LUNG_STR 20 /* Costante per contenere i dati nei vettori di tipo stringa e nel vettore di tipo intero */
#define MAX_AUTO 2000 /* Costante per il numero massimo di AUTOMOBILI */
/************************/
/* Definizione dei tipi */
/************************/
/* Struttura dati automobile */
typedef struct automobile
{
char marca[LUNG_STR + 1]; /* Variabile Stringa per la marca dell'automobile */
char modello[LUNG_STR + 1]; /* Variabile Stringa per il modello dell'automobile */
char colore[LUNG_STR + 1]; /* Variabile Stringa per il colore dell'automobile */
char codice_telaio[LUNG_STR + 1]; /* Variabile Stringa per il codice del telaio dell'automobile */
int prezzo; /* Variabile Intera per il prezzo dell'automobile */
struct automobile *vettura_succ; /* Puntatore di tipo struttura dati alla vettura successiva */
struct automobile *vettura_prec; /* Puntatore di tipo struttura dati alla vettura precedente */
}automobile_t;
/********************************/
/* Dichiarazione delle funzioni */
/********************************/
/* Dichiarazione delle funzioni di utilitā per lista */
void inserisci(char [], char [], char [], char [], int, automobile_t **);
automobile_t *rimuovi_vettura(automobile_t *lista, char codice_telaio[]);
void scambia(automobile_t *a, automobile_t *b);
automobile_t *posizione_vettura(automobile_t *testa, int posizione);
void stampa_lista(automobile_t *lista);
void modifica_vettura(automobile_t *lista, int posizione);
/* Dichiarazione della funzione scegli_quicksort */
void scegli_quicksort(automobile_t *testa);
/* Dichiarazione delle funzioni quicksort */
void quicksort_prezzo(automobile_t *primo_elemento, int indice_sx, int indice_dx);
int ripartizione_prezzo(automobile_t* primo_elemento, int indice_sx, int indice_dx);
void quicksort_marca(automobile_t *primo_elemento, int indice_sx, int indice_dx);
int ripartizione_marca(automobile_t* primo_elemento, int indice_sx, int indice_dx);
void quicksort_modello(automobile_t *primo_elemento, int indice_sx, int indice_dx);
int ripartizione_modello(automobile_t* primo_elemento, int indice_sx, int indice_dx);
void quicksort_colore(automobile_t *primo_elemento, int indice_sx, int indice_dx);
int ripartizione_colore(automobile_t* primo_elemento, int indice_sx, int indice_dx);
void quicksort_codice_telaio(automobile_t *primo_elemento, int indice_sx, int indice_dx);
int ripartizione_codice_telaio(automobile_t* primo_elemento, int indice_sx, int indice_dx);
/* Dichiarazione delle funzioni di utilitā generale */
void media_prezzi(automobile_t *lista);
void mediana_prezzi(automobile_t *lista);
int conta_automobili(automobile_t* testa);
int somma_prezzi(automobile_t *testa);
void valutazione_sperimenta(automobile_t *lista, int n);
/* Definizione della funzione main */
int main(void)
{
/* Dichirazione delle variabili locali alla funzione */
char marca[LUNG_STR + 1]; /* Variabile Stringa per la marca dell'automobile */
char modello[LUNG_STR + 1]; /* Variabile Stringa per il modello dell'automobile */
char colore[LUNG_STR + 1]; /* Variabile Stringa per il colore dell'automobile */
char codice_telaio[LUNG_STR + 1]; /* Variabile Stringa per il codice del telaio dell'automobile */
int prezzo; /* Variabile Intera per il prezzo dell'automobile */
int scelta = 0; /* Lavoro: Variabile per la scelta da parte dell'utente */
int posizione = 0; /* Lavoro: Variabile per la posizione della vettura */
int num_vetture = 0; /* Lavoro: Numero vetture da inserire da parte dell'utente */
int i = 0; /* Lavoro: Indice di scorrimento ciclo for per l'inserimento di nuove vetture */
automobile_t *lista = NULL; /* Lavoro: Puntatore alla lista inizializzato a NULL quindi lista vuota */
/* Ciclo do-while per la scelta da effettuare da parte dell'utente */
do
{
printf("-----------BENVENUTO NEL PROGRAMMA DI GESTIONE VENDITE DI AUTOMOBILI------------\n");
printf("1)Carica l'elenco delle automobili.\n");
printf("2)Inserisci nuove informazioni su una nuova automobile.\n");
printf("3)Rimuovi una automobile dall'elenco.\n");
printf("4)Modifica informazioni di una automobile nell'elenco.\n");
printf("5)Ordinamento.\n");
printf("6)Stampa media e mediana del prezzo di tutte le automobili presenti in elenco.\n");
printf("7)Esci dal programma.\n");
printf("\nPrego fare una scelta: ");
if(scanf("%d", &scelta) == 1);
/* Controllo della scelta */
switch(scelta)
{
case 1:
{
/* Lettura del file di testo automobili.txt */
FILE *file_automobili = fopen("automobili.txt", "r");
/* controllo se il file esiste */
if(file_automobili == NULL)
{
printf("\nImpossibile aprire il file di testo automobili!\n");
printf("\nControllare che il file esista nella stessa cartella in cui si esegue il programma\n");
exit(0);
}
/* Visualizza l'elenco delle automobili */
printf("\n-----------------ELENCO AUTOMOBILI-------------------\n\n");
/* Ciclo for fino alla fine del file */
while(!feof(file_automobili))
{
if(fscanf(file_automobili, "%s\t%s\t%s\t%s\t%d", marca,
modello,
colore,
codice_telaio,
&prezzo) == 1);
/* Chiamata alla funzione inserisci */
inserisci(marca, modello, colore, codice_telaio, prezzo, &lista);
}
/* Chiusura del file */
fclose(file_automobili);
stampa_lista(lista);
break;
}
case 2:
{
/* Chiedo all'utente quante nuove vetture vuole inserire */
printf("\nQuante nuove vetture vuoi inserire nella lista? ");
if(scanf("%d", &num_vetture) == 1)
{
for(i = 0; i < num_vetture; i++)
{
/* Chiedo all'utente di inserire una nuova automobile */
printf("Inserisci Marca: ");
if(scanf("%s",marca) == 1);
printf("Inserisci Modello: ");
if(scanf("%s",modello) == 1);
printf("Inserisci Colore: ");
if(scanf("%s",colore) == 1);
printf("Inserisci Telaio: ");
if(scanf("%s",codice_telaio) == 1);
printf("Inserisci Prezzo: ");
if(scanf("%d",&prezzo) == 1);
/* Chiamata alla funzione inserisci */
inserisci (marca,modello,colore,codice_telaio,prezzo,&lista);
}
/* Chiamata alla funzione stampa_lista */
stampa_lista(lista);
}
break;
}
case 3:
{
/* Chiedo all'utente di inserire il codice del telaio della vettura da rimuovere */
printf("\nInserisci il codice del telaio della vettura da rimuovere: ");
if(scanf("%s", codice_telaio) == 1);
/* Chiamata alla funzione rimuovi_vettura */
rimuovi_vettura(lista, codice_telaio);
/* Chiamata alla funzione stampa_lista */
stampa_lista(lista);
break;
}
case 4:
{
/* Chiedo all'utente di inserire la posizione della vettura */
printf("\nInserisci la posizione della vettura: ");
if(scanf("%d", &posizione) == 1)
{
/* Prendo posizione -1 perchč prevedo che l'utente partirā da 1 e
chiamata alla funzione modifica vettura */
modifica_vettura(lista, posizione - 1);
}
/* Chiamata alla funzione stampa_lista */
stampa_lista(lista);
break;
}
case 5:
{
/* Chiamata alla funzione scegli_quicksort */
scegli_quicksort(lista);
/* Stampo l'elenco delle vetture ordinato in base ad uno dei criteri scelti dall'utente */
printf("\n------------ELENCO ORDINATO-------------\n\n");
/* Chiamata alla funzione stampa_lista */
stampa_lista(lista);
break;
}
case 6:
{
/* Chiamata alla funzione media_prezzi */
media_prezzi(lista);
/* Nella mediana dei prezzi viene fatto anche l'ordinamento per prezzo
altrimenti non si sa quale/i sono gli elementi centrali */
mediana_prezzi(lista);
/* Chiamata alla funzione stampa_lista */
stampa_lista(lista);
break;
}
default:
if(scelta < 0 && scelta > 7)
{
printf ("Il Numero selezionato non permette di eseguire alcuna funzione\n");
}
break;
}
}
while(scelta > 0 && scelta < 7);
/* Stampo un messaggio di ringraziamenti per l'utilizzo del software */
printf("\nGrazie per aver utilizzato il programma di Gestione vendite di Automobili.\n");
/* Termina il programma e restituisco il valore 0 al Sistema Operativo */
return(0);
}
/* Definizione della funzione inserisci */
void inserisci(char marca[], char modello[], char colore[],
char codice_telaio[], int prezzo, automobile_t **lista)
{
/* Dichiarazione delle variabili locali alla funzione */
automobile_t *nuova_vettura = NULL;
/* Alloco la memoria con la funzione di libreria calloc */
nuova_vettura = (automobile_t *)calloc(MAX_AUTO, sizeof(automobile_t));
/* Creazione del nuovo nodo */
strcpy(nuova_vettura->marca, marca);
strcpy(nuova_vettura->modello, modello);
strcpy(nuova_vettura->colore, colore);
strcpy(nuova_vettura->codice_telaio, codice_telaio);
nuova_vettura->prezzo = prezzo;
/* Inserimento in testa */
nuova_vettura->vettura_succ = *lista;
nuova_vettura->vettura_prec = NULL;
*lista = nuova_vettura;
/* Collegamento della struttura precedente, necessario per iterare al contrario nella lista */
if (!(nuova_vettura->vettura_succ == NULL))
{
nuova_vettura->vettura_succ->vettura_prec = nuova_vettura;
}
}
/* Definizione della funzione rimuovi_vettura */
automobile_t *rimuovi_vettura(automobile_t *lista, char codice_telaio[])
{
automobile_t *vettura_corr, *vettura_prec; /* Lavoro: Puntatori rispettivamente alla vettura corrente e
alla vettura prcedente */
/* Ciclo for per richiamare la vettura selezionata dall'utente */
for(vettura_corr = lista, vettura_prec = NULL;
vettura_corr != NULL && strcmp(vettura_corr->codice_telaio, codice_telaio) != 0;
vettura_prec = vettura_corr, vettura_corr = vettura_corr->vettura_succ)
;
/* Controllo del puntatore vettura_corr */
if(vettura_corr == NULL)
{
return lista;
}
/* Controllo del puntatore vettura_prec */
if(vettura_prec == NULL)
{
lista = lista->vettura_succ;
}
else
{
vettura_prec->vettura_succ = vettura_corr->vettura_succ;
}
/* Disallocazione della memoria sulla vettura selezionata */
free(vettura_corr);
return lista;
}
/* Definizione della funzione modifica_vettura */
void modifica_vettura(automobile_t *lista, int posizione)
{
automobile_t *vettura;
int scelta = 0;
int prezzo = 0;
char stringa[LUNG_STR + 1];
if(posizione < conta_automobili(lista))
{
vettura = posizione_vettura(lista, posizione);
/* modifica dei dati */
do
{
printf("%s\t%s\t%s\t%s\t%d\n", vettura->marca, vettura->modello,
vettura->colore, vettura->codice_telaio,
vettura->prezzo);
printf("\nQuali dati vuoi modificare? ");
printf("\n1) Modifica Marca ");
printf("\n2) Modifica Modello ");
printf("\n3) Modifica Colore ");
printf("\n4) Modifica Codice Telaio ");
printf("\n5) Modifica Prezzo ");
printf("\n\nQualunque altra scelta fara' tornare al menu' principale\n\n");
printf("Prego fai la tua scelta: ");
if(scanf("%d", &scelta) == 1)
{
switch(scelta)
{
case 1:
{
printf("Nuova Marca: ");
if(scanf("%s", stringa) <= LUNG_STR + 1)
{
strcpy(vettura->marca, stringa);
}
break;
}
case 2:
{
printf("Nuovo Modello: ");
if(scanf("%s", stringa) <= LUNG_STR + 1)
{
strcpy(vettura->modello, stringa);
}
break;
}
case 3:
{
printf("Nuovo Colore: ");
if(scanf("%s", stringa) <= LUNG_STR + 1)
{
strcpy(vettura->colore, stringa);
}
break;
}
case 4:
{
printf("Nuovo Codice Telaio: ");
if(scanf("%s", stringa) <= LUNG_STR + 1)
{
strcpy(vettura->codice_telaio, stringa);
}
break;
}
case 5:
{
printf("Nuovo Prezzo: ");
if(scanf("%d", &prezzo) == 1)
{
vettura->prezzo = prezzo;
}
break;
}
default: break;
}
}
}
while (scelta > 0 && scelta < 6);
}
else
{
printf("\nPosizione non compresa nella lista\n\n");
}
}
/* Definizione della funzione scegli_quicksort */
void scegli_quicksort(automobile_t *lista)
{
int scelta_ord = 0; /* Lavoro = Variabile per la scelta dell'ordinamento da parte dell'utente */
printf("\n1)Stampa l'elenco ordinato in base alla marca della vettura.\n");
printf("2)Stampa l'elenco ordinato in base al modello della vettura.\n");
printf("3)Stampa l'elenco ordinato in base al colore della vettura.\n");
printf("4)Stampa l'elenco ordinato in base al codice del telaio della vettura.\n");
printf("5)Stampa l'elenco ordinato in base al prezzo della vettura.\n");
printf("\nPrego fare una scelta: ");
if(scanf("%d", &scelta_ord) == 1);
/* Switch per la scelta dell'adeguato ordinamento */
switch(scelta_ord)
{
case 1:
/* chiamata alla funzione quicksort_marca */
quicksort_marca(lista, 0, conta_automobili(lista) - 1);
break;
case 2:
/* chiamata alla funzione quicksort_modello */
quicksort_modello(lista, 0, conta_automobili(lista) - 1);
break;
case 3:
/* chiamata alla funzione quicksort_colore */
quicksort_colore(lista, 0, conta_automobili(lista) - 1);
break;
case 4:
/* chiamata alla funzione quicksort_codice_telaio */
quicksort_codice_telaio(lista, 0, conta_automobili(lista) - 1);
break;
case 5:
/* chiamata alla funzione quicksort_prezzo */
quicksort_prezzo(lista, 0, conta_automobili(lista) - 1);
break;
default: break;
}
}
/* Definizione dela funzione scambia */
void scambia(automobile_t *vettura_a, automobile_t *vettura_b)
{
char dato[LUNG_STR + 1];
int prezzo;
/* Scambio la marca della vettura */
strcpy(dato, vettura_a->marca);
strcpy(vettura_a->marca, vettura_b->marca);
strcpy(vettura_b->marca, dato);
/* Scambio il modello della vettura */
strcpy(dato, vettura_a->modello);
strcpy(vettura_a->modello, vettura_b->modello);
strcpy(vettura_b->modello, dato);
/* Scambio il colore della vettura */
strcpy(dato, vettura_a->colore);
strcpy(vettura_a->colore, vettura_b->colore);
strcpy(vettura_b->colore, dato);
/* Scambio il codice del telaio della vettura */
strcpy(dato, vettura_a->codice_telaio);
strcpy(vettura_a->codice_telaio, vettura_b->codice_telaio);
strcpy(vettura_b->codice_telaio, dato);
/* Scambio il prezzo della vettura */
prezzo = vettura_a->prezzo;
vettura_a->prezzo= vettura_b->prezzo;
vettura_b->prezzo = prezzo;
}
/* Definizione della funzione media_prezzi */
void media_prezzi(automobile_t *lista)
{
double media = 0;
int numero_auto = conta_automobili(lista);
int somma = somma_prezzi(lista);
media = (double)somma / numero_auto;
printf("\nLa media dei prezzi e' %.2lf\n" , media);
printf("\n");
}
/* Definizione della funzione mediana_prezzi */
void mediana_prezzi(automobile_t *lista)
{
automobile_t *auto_1, *auto_2;
double mediana = 0;
int indice_auto_1;
int indice_auto_2;
int numero_auto = conta_automobili(lista);
indice_auto_1 = (numero_auto - 1) / 2;
indice_auto_2 = numero_auto / 2;
quicksort_prezzo(lista, 0 , numero_auto - 1);
auto_1 = posizione_vettura(lista, indice_auto_1);
auto_2 = posizione_vettura(lista, indice_auto_2);
mediana = (auto_1->prezzo + auto_2->prezzo) / 2;
printf("La mediana dei prezzi vale %.2lf\n", mediana);
printf("\n");
}
/* Definizione della funzione stampa_lista */
void stampa_lista(automobile_t *lista)
{
int i = 1;
automobile_t *p = lista;
while (!(p == NULL))
{
printf("%d\t%s\t%s\t%s\t%s\t%d\n", i, p->marca, p->modello, p->colore, p->codice_telaio, p->prezzo);
p = p->vettura_succ;
i++;
}
printf("\n%d automobili inserite!\n", conta_automobili(lista));
printf("\n");
}
/* Definizione della funzione conta_automobili */
int conta_automobili(automobile_t *testa)
{
automobile_t* temp = testa; /* Lavoro = Variabile temp di tipo struttura dati */
int n_auto = 1; /* Output = Numero di automobili nella lista */
if (temp == NULL)
{
return 0;
}
while(temp->vettura_succ != NULL)
{
n_auto++;
temp = temp->vettura_succ;
}
return n_auto;
}
/* Definizione della funzione somma_prezzi */
int somma_prezzi(automobile_t *testa)
{
automobile_t *temp = testa;
int somma = 0;
if(temp == NULL)
{
return 0;
}
while (temp->vettura_succ != NULL)
{
somma = somma + temp->prezzo;
temp = temp->vettura_succ;
}
return somma;
}
/* Definizione della funzione posizione vettura */
automobile_t *posizione_vettura(automobile_t *testa, int posizione)
{
automobile_t *temp = testa;
int i = 0;
for(i = 0 ; i < posizione; i++)
{
temp = temp->vettura_succ;
}
return temp;
}
/* Definizione della funzione quicksort_marca */
void quicksort_marca(automobile_t *list, int indice_sx, int indice_dx)
{
automobile_t *lista = list;
int pivot_index;
/* Controllo per la chiamata ricorsiva di quicksort_marca */
if (indice_sx < indice_dx)
{
pivot_index = ripartizione_marca(lista, indice_sx, indice_dx);
quicksort_marca(lista, indice_sx, pivot_index - 1);
quicksort_marca(lista, pivot_index + 1,indice_dx);
}
}
/* Definizione della funzione ripartizione_marca */
int ripartizione_marca(automobile_t *prima_vettura, int indice_sx, int indice_dx)
{
int i, j;
automobile_t *pivot = posizione_vettura(prima_vettura, indice_sx);
i = indice_sx;
j = indice_dx;
automobile_t *auto_da_sx = posizione_vettura(prima_vettura, i);
automobile_t *auto_da_dx = posizione_vettura(prima_vettura, j);
while (i < j)
{
while(strcmp(auto_da_sx->marca, pivot->marca) < 0 && i < indice_dx)
{
i++;
auto_da_sx = auto_da_sx->vettura_succ;
}
while(strcmp(auto_da_dx->marca, pivot->marca) > 0)
{
auto_da_dx = auto_da_dx->vettura_prec;
j--;
}
if (i < j)
{
scambia(auto_da_sx, auto_da_dx);
}
}
scambia(auto_da_sx, auto_da_dx);
return j;
}
/* Definizione della funzione quicksort_modello */
void quicksort_modello(automobile_t *list, int indice_sx, int indice_dx)
{
automobile_t *lista = list;
int pivot_index;
/* Controllo per la chiamata ricorsiva alla quicksort_modello */
if (indice_sx < indice_dx)
{
pivot_index = ripartizione_modello(lista, indice_sx, indice_dx);
quicksort_modello(lista, indice_sx, pivot_index - 1);
quicksort_modello(lista, pivot_index + 1,indice_dx);
}
}
/* Definizione della funzione ripartizione_marca */
int ripartizione_modello(automobile_t *prima_vettura, int indice_sx, int indice_dx)
{
int i, j;
automobile_t * pivot = posizione_vettura(prima_vettura, indice_sx);
i = indice_sx;
j = indice_dx;
automobile_t *auto_da_sx = posizione_vettura(prima_vettura, i);
automobile_t *auto_da_dx = posizione_vettura(prima_vettura, j);
while (i < j)
{
while(strcmp(auto_da_sx->modello, pivot->modello) < 0 && i < indice_dx)
{
i++;
auto_da_sx = auto_da_sx->vettura_succ;
}
while(strcmp(auto_da_dx->modello, pivot->modello) > 0)
{
auto_da_dx = auto_da_dx->vettura_prec;
j--;
}
if (i < j)
{
scambia(auto_da_sx, auto_da_dx);
}
}
scambia(auto_da_sx, auto_da_dx);
return j;
}
/* Definizione della funzione quicksort_colore*/
void quicksort_colore(automobile_t *list, int indice_sx, int indice_dx)
{
automobile_t *lista = list;
int pivot_index;
/* Controllo per la chiamata ricorsiva alla quicksort_colore */
if (indice_sx < indice_dx)
{
pivot_index = ripartizione_colore(lista, indice_sx, indice_dx);
quicksort_colore(lista, indice_sx, pivot_index - 1);
quicksort_colore(lista, pivot_index + 1,indice_dx);
}
}
/* Definizione della funzione ripartizione_marca */
int ripartizione_colore(automobile_t *prima_vettura, int indice_sx, int indice_dx)
{
int i, j;
automobile_t *pivot = posizione_vettura(prima_vettura, indice_sx);
i = indice_sx;
j = indice_dx;
automobile_t *auto_da_sx = posizione_vettura(prima_vettura, i);
automobile_t *auto_da_dx = posizione_vettura(prima_vettura, j);
while (i < j)
{
while(strcmp(auto_da_sx->colore, pivot->colore) < 0 && i < indice_dx)
{
i++;
auto_da_sx = auto_da_sx->vettura_succ;
}
while(strcmp(auto_da_dx->colore, pivot->colore) > 0)
{
auto_da_dx = auto_da_dx->vettura_prec;
j--;
}
if (i < j)
{
scambia(auto_da_sx, auto_da_dx);
}
}
scambia(auto_da_sx, auto_da_dx);
return j;
}
/* Definizione della funzione quicksort_codice_telaio */
void quicksort_codice_telaio(automobile_t *list, int indice_sx, int indice_dx)
{
automobile_t *lista = list;
int pivot_index;
/* Controllo per la chiamata ricorsiva alla quicksort_codice_telaio */
if (indice_sx < indice_dx)
{
pivot_index = ripartizione_codice_telaio(lista, indice_sx, indice_dx);
quicksort_codice_telaio(lista, indice_sx, pivot_index - 1);
quicksort_codice_telaio(lista, pivot_index + 1,indice_dx);
}
}
/* Definizione della funzione ripartizione_codice_telaio */
int ripartizione_codice_telaio(automobile_t *prima_vettura, int indice_sx, int indice_dx)
{
int i, j;
automobile_t *pivot = posizione_vettura(prima_vettura, indice_sx);
i = indice_sx;
j = indice_dx;
automobile_t *auto_da_sx = posizione_vettura(prima_vettura, i);
automobile_t *auto_da_dx = posizione_vettura(prima_vettura, j);
while (i < j)
{
while(strcmp(auto_da_sx->codice_telaio, pivot->codice_telaio) < 0 && i < indice_dx)
{
i++;
auto_da_sx = auto_da_sx->vettura_succ;
}
while(strcmp(auto_da_dx->codice_telaio, pivot->codice_telaio) > 0)
{
auto_da_dx = auto_da_dx->vettura_prec;
j--;
}
if (i < j)
{
scambia(auto_da_sx, auto_da_dx);
}
}
scambia(auto_da_sx, auto_da_dx);
return j;
}
/* Definizione della funzione quicksort_prezzo */
void quicksort_prezzo(automobile_t *list, int indice_sx, int indice_dx)
{
automobile_t *lista = list;
int pivot_index;
/* Controllo per la chiamata ricorsiva alla quicksort_prezzo */
if (indice_sx < indice_dx)
{
pivot_index = ripartizione_prezzo(lista, indice_sx, indice_dx);
quicksort_prezzo(lista, indice_sx, pivot_index - 1);
quicksort_prezzo(lista, pivot_index + 1, indice_dx);
}
}
/* Definizione della funzione ripartizione_prezzo */
int ripartizione_prezzo(automobile_t *prima_vettura, int indice_sx, int indice_dx)
{
int i, j;
automobile_t *pivot = posizione_vettura(prima_vettura,indice_sx);
i = indice_sx;
j = indice_dx;
automobile_t *auto_da_sx = posizione_vettura(prima_vettura,i);
automobile_t *auto_da_dx = posizione_vettura(prima_vettura,j);
while (i < j)
{
while(auto_da_sx->prezzo < pivot->prezzo && i < indice_dx)
{
i++;
auto_da_sx = auto_da_sx->vettura_succ;
}
while (auto_da_dx->prezzo > pivot->prezzo)
{
auto_da_dx = auto_da_dx->vettura_prec;
j--;
}
if (i < j)
{
scambia(auto_da_sx,auto_da_dx);
}
}
scambia(auto_da_sx,auto_da_dx);
return j;
}
/* Definizione della funzione valutazione_sperimentale */
void valutazione_sperimenta(automobile_t *lista, int n)
{
}