#include <stdio.h>
#include <stdlib.h>
typedef int bool;
#define TRUE 1
#define FALSE 0
#define NumElementi 20
typedef int TipoElemVettore;
typedef TipoElemVettore TipoVettore[NumElementi];
#include "vettio.c"
#include "ricesau.c"
#include "ricbinri.c"
#include "ricbinit.c"
#include "elimvett.c"
#include "ricermed.c"
#include "ordsel.c"
#include "ordbub.c"
#include "ordbubot.c"
#include "ordins.c"
#include "ordmerge.c"
#include "ordmergo.c"
void StampaVettore(TipoVettore A, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", A[i]);
printf("\n");
}
int main(void)
{
TipoElemVettore elemento;
TipoVettore A;
int n = 0;
int i, j;
char scelta;
char nome_file[256];
do {
printf("Opzioni:\n");
printf("- ORDINAMENTO ------------------------\n");
printf("s: Ordinamento per selezione \n");
printf("b: Ordinamento a bolle \n");
printf("B: Ordinamento a bolle ottimizzato \n");
printf("i: Ordinamento per inserimento \n");
printf("m: Ordinamento per fusione \n");
printf("M: Ordinamento per fusione ottimizzato\n");
printf("- RICERCA SU VETTORE ARBITRARIO ------\n");
printf("1: Ricerca esaustiva \n");
printf("2: Ricerca mediano \n");
printf("- RICERCA SU VETTORE ORDINATO --------\n");
printf("3: Ricerca binaria ricorsiva \n");
printf("4: Ricerca binaria iterativa \n");
printf("5: Elimina elemento dato \n");
printf("- MODIFICA VETTORE -------------------\n");
printf("6: Modifica elemento di indice i \n");
printf("7: Scambia elementi di indici i j \n");
printf("8: Aggiungi un elemento alla fine \n");
printf("9: Leggi vettore da file \n");
printf("a: Scrivi vettore su file \n");
printf("- ALTRO ------------------------------\n");
printf("0: Stampa vettore \n");
printf("q: FINE \n");
printf("--------------------------------------\n");
printf("Scelta: ");
scanf("%c%*[^\n]", &scelta);
switch (scelta) {
case 's':
printf("Ordinamento per selezione.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
SelectionSort(A, n);
printf("Vettore ordinato\n");
StampaVettore(A, n);
break;
case 'b':
printf("Ordinamento a bolle.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
BubbleSort(A, n);
printf("Vettore ordinato\n");
StampaVettore(A, n);
break;
case 'B':
printf("Ordinamento a bolle ottimizzato\n");
printf("Vettore di input\n");
StampaVettore(A, n);
BubbleSortOttimizzato(A, n);
printf("Vettore ordinato\n");
StampaVettore(A, n);
break;
case 'i':
printf("Ordinamento per inserimento.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
InsertionSort(A, n);
printf("Vettore ordinato\n");
StampaVettore(A, n);
break;
case 'm':
printf("Ordinamento per fusione.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
MergeSort(A, n);
printf("Vettore ordinato\n");
StampaVettore(A, n);
break;
case 'M':
printf("Ordinamento per fusione ottimizzato.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
MergeSortOttimizzato(A, n);
printf("Vettore ordinato\n");
StampaVettore(A, n);
break;
case '1':
printf("Ricerca esaustiva.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
printf("Inserire elemento da cercare: ");
scanf("%d", &elemento);
if (RicercaEsaustiva(A, elemento, n, &i))
printf("Trovato in posizione %d\n", i);
else
printf("L'elemento non e` presente nel vettore\n");
break;
case '2':
printf("Ricerca mediano.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
RicercaMediano(A, n, &elemento);
printf("Mediano: %d\n", elemento);
break;
case '3':
printf("Ricerca binaria ricorsiva.\n");
printf("Vettore di Input\n");
StampaVettore(A, n);
printf("Inserire elemento da cercare: ");
scanf("%d", &elemento);
if (RicercaBinaria(A, elemento, n, &i))
printf("Trovato in posizione %d\n", i);
else
printf("L'elemento non e` presente nel vettore\n");
break;
case '4':
printf("Ricerca binaria iterativa.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
printf("Inserire elemento da cercare: ");
scanf("%d", &elemento);
if (RicercaBinariaIterativa(A, elemento, n, &i))
printf("Trovato in posizione %d\n", i);
else
printf("L'elemento non e` presente nel vettore\n");
break;
case '5':
printf("Elimina elemento.\n");
printf("Vettore di input\n");
StampaVettore(A, n);
printf("Inserire elemento da eliminare: ");
scanf("%d", &elemento);
if (EliminaDaVettore(A, elemento, &n, &i))
printf("Eliminato elemento in posizione %d\n", i);
else
printf("Elemento non era presente\n");
break;
case '6':
printf("Inserire indice i dell'elemento da modificare [0..%d]: ", n-1);
scanf("%d", &i);
if (i >= 0 && i < n) {
printf("Inserire valore elemento A[%d]: ", i);
scanf("%d", &A[i]);
}
else
printf("Indice non valido");
break;
case '7':
printf("Inserire indici i j degli elementi da scambiare: ");
scanf("%d%d", &i, &j);
elemento = A[i];
A[i] = A[j];
A[j] = elemento;
break;
case '8':
if (n < NumElementi) {
printf("Inserire valore elemento da aggiungere alla fine: ");
scanf("%d", &A[n]);
n++;
}
else
printf("Vettore ha gia` dimensione massima %d", NumElementi);
break;
case '9':
printf("Scrivi il nome del file da cui leggere il vettore: ");
scanf("%s", nome_file);
n = LeggiVettore(nome_file, A, NumElementi);
printf("Vettore letto\n");
StampaVettore(A, n);
break;
case 'a':
printf("Scrivi il nome del file su cui scrivere il vettore: ");
scanf("%s", nome_file);
ScriviVettore(nome_file, A, n);
break;
case '0':
printf("Vettore di %d elementi:\n", n);
StampaVettore(A, n);
break;
}
if (scelta != 'q') {
printf("\n[invio]\n");
scanf("%*[^\n]");
getchar();
getchar();
}
} while (scelta != 'q');
return 0;
}