Vi premetto che non ne capisco di C... La mia ragazza sta facendo un'esame di informatica e mi ha chiesto di scrivere un programma ed io ho improvvisato... Si tratta di un programma con una libreria che esegue operazioni su array di numeri (riempimento, ordinamento, ricerca, massimo, minimo, aggiunta ed eliminazione di elementi)...
Programma:
codice:
#include<stdio.h>
void inizia(int ordinato, int creato, int lung);
void menu(int ordinato, int creato, int lung, int vettore[]);
void esci();
#include<vettori.h>
void esegui(int operazione, int ordinato, int creato, int lung, int vettore[]);
main()
{
int lung, creato=0, ordinato=0;
printf("Inserisci numero elementi: ");
scanf("%d",&lung);
printf("\n");
if (lung != 0) inizia(ordinato, creato, lung);
else {
printf("Non hai inserito un valore valido\n");
esci();
}
}
void inizia(int ordinato, int creato, int lung)
{
int vettore[lung];
menu(ordinato, creato, lung, vettore);
}
void menu(int ordinato, int creato, int lung, int vettore[])
{
int operazione;
printf("MENU\n");
if (!creato) printf("1. Crea vettore\n");
else
{
if (!ordinato) printf("2. Ordina vettore\n");
printf("3. Ricerca\n4. Calcola massimo e minimo\n5. Stampa\n6. Aggiungi elemento\n7. Elimina elemento\n");
}
printf("8. Termina programma\nScegli operazione da effettuare: ");
scanf("%d",&operazione);
esegui(operazione, ordinato, creato, lung, vettore);
}
void esci()
{
printf("\nEsecuzione terminata\n\n");
}
void esegui(int operazione, int ordinato, int creato, int lung, int vettore[])
{
if (operazione==1 && !creato) crea(ordinato, creato, lung, vettore);
else if (operazione==2 && !ordinato && creato) ordina(ordinato, creato, lung, vettore);
else if (operazione==3 && creato) ricerca(ordinato, creato, lung, vettore);
else if (operazione==4 && creato) massimo_minimo(ordinato, creato, lung, vettore);
else if (operazione==5 && creato) stampa(ordinato, creato, lung, vettore);
else if (operazione==6 && creato) aggiungi(ordinato, creato, lung, vettore);
else if (operazione==7 && creato) elimina(ordinato, creato, lung, vettore);
else if (operazione==8) esci();
else
{
printf("Errore nella selezione!\n\n");
menu(ordinato, creato, lung, vettore);
}
}
Libreria:
codice:
#include<stdio.h>
void crea(int ordinato, int creato, int lung, int vettore[])
{
int i;
printf("\n");
for (i=0;i<lung;i++)
{
printf("Inserisci elemento %d: ",i);
scanf("%d",&vettore[i]);
}
creato = 1;
printf("\nIl vettore è stato creato\n\n");
menu(ordinato, creato, lung, vettore);
}
void stampa(int ordinato, int creato, int lung, int vettore[])
{
int i;
printf("\nStampa del vettore:\n");
for (i=0;i<lung;i++)
printf("%d = %d\n",i,vettore[i]);
printf("\n");
menu(ordinato, creato, lung, vettore);
}
void ricerca(int ordinato, int creato, int lung, int vettore[])
{
int i, elemento, volte=0;
printf("\nElemento da cercare:");
scanf("%d",&elemento);
if (ordinato)
{
for (i=0;i<lung && vettore[i] <= elemento;i++)
{
if (elemento == vettore[i])
{
printf("Elemento trovato in posizione %d\n",i);
volte++;
}
}
if (volte == 0) printf("Elemento non trovato\n\n");
else if (volte == 1) printf("Elemento trovato 1 volta\n\n");
else printf("Elemento trovato %d volte\n\n",volte);
menu(ordinato, creato, lung, vettore);
}
if (!ordinato)
{
for (i=0;i<lung;i++)
{
if (elemento == vettore[i])
{
printf("Elemento trovato in posizione %d\n",i);
volte++;
}
}
if (volte == 0) printf("Elemento non trovato\n\n");
else if (volte == 1) printf("Elemento trovato 1 volta\n\n");
else printf("Elemento trovato %d volte\n\n",volte);
}
menu(ordinato, creato, lung, vettore);
}
void ordina(int ordinato, int creato, int lung, int vettore[])
{
int i, j, temp;
for(i=0;i<lung;i++)
for(j=i+1;j<lung;j++)
if (vettore[j] < vettore[i])
{
temp = vettore[i];
vettore[i] = vettore[j];
vettore[j]= temp;
}
printf("\nIl vettore è stato ordinato\n\n");
ordinato = 1;
menu(ordinato, creato, lung, vettore);
}
void aggiungi(int ordinato, int creato, int lung, int vettore[])
{
printf("\nInserisci elemento da aggiungere: ");
scanf("%d",&vettore[lung]);
printf("Elemento aggiunto in posizione %d\n\n",lung);
ordinato = 0;
lung++;
menu(ordinato, creato, lung, vettore);
}
void massimo_minimo(int ordinato, int creato, int lung, int vettore[])
{
int i, massimo, minimo;
if(ordinato)
{
minimo = vettore[0];
massimo = vettore[lung-1];
}
else
{
minimo = vettore[0];
massimo = vettore[0];
for(i=1;i<lung;i++)
{
if (vettore[i]<minimo) minimo = vettore[i];
if (vettore[i]>massimo) massimo = vettore[i];
}
}
printf("\nElemento minimo: %d\nElemento massimo: %d\n\n",minimo,massimo);
menu(ordinato, creato, lung, vettore);
}
void elimina(int ordinato, int creato, int lung, int vettore[])
{
int j, elemento, i=0, volte=0;
printf("\nInserisci elemento da eliminare: ");
scanf("%d",&elemento);
do
{
if(elemento==vettore[i])
{
volte++;
if(i!=lung-1) for(j=i;j<lung;j++) vettore[j] = vettore[j+1];
lung--;
}
else i++;
}
while (i<lung);
if(volte==0) printf("Elemento non trovato nel vettore\n\n");
else if(volte==1) printf("Elemento eliminato 1 volta\n\n");
else printf("Elemento eliminato %d volte\n\n",volte);
if (lung!=0) menu(ordinato, creato, lung, vettore);
else printf("Il vettore è vuoto. Il programma sarà terminato\n\n");
}
Funziona tutto bene... Unico problema: quando si effettuano molte operazioni e poi si sceglie di terminare il programma [esci()] ricompare il menu e bisogna scegliere una seconda volta l'opzione per farlo terminare... PERCHE'???
Grazie a chi risponderà...