Ciao, il mio professore mi ha dato questa traccia: Gestire, tramite menù, alcune operazioni su una Lista di informazioni relative a Codice_foto e dimensione in bytes distinguendo tra politica LIFO e politica FIFO.
Il menù deve prevedere le seguenti operazioni:
MENU’ GENERALE
1. GESTIONE DI UNA LISTA PILA
a. Inserimento nuovo nodo
b. Estrazione
c. Visualizzazione
d. Ricerca in base al codice foto
2. GESTIONE DI UNA LISTA CODA
a. Inserimento nuovo nodo
b. Estrazione
c. Visualizzazione
d. Ricerca in base al codice foto
3. Fine programma e deallocazione della Lista
io ho conseguentemente fatto questo codice:
#include <iostream>
using namespace std;
struct s_nodo
{
char codice_foto [30];
struct s_nodo *next;
};
typedef struct s_nodo nodo;
typedef nodo* p_nodo;
void CreaNodo();
void inserimento_coda(p_nodo, p_nodo);
void inserimento_pila(p_nodo, p_nodo);
int inputc(int, int);
char inputc2();
void menu();
void menu2();
bool ListaVuota(p_nodo);
void EstrazioneT(p_nodo);
void Visualizzazione(p_nodo);
void Ricerca(p_nodo);
void elimina_lista(p_nodo);
int main()
{
p_nodo pTesta=NULL, p1, p2, nuovo;
int scelta;
char scelta2;
menu();
cout<<"Fai la tua scelta: "<<endl;
scelta = inputc(1,3);
switch(scelta){
case 1:
menu2();
cin>>scelta2;
scelta2=inputc2();
switch(scelta2){
case 'a':
CreaNodo();
inserimento_pila(pTesta,nuovo);
break;
case 'b':
EstrazioneT(pTesta);
break;
case 'c':
Visualizzazione(pTesta);
break;
case 'd':
Ricerca(pTesta);
break;
}
break;
case 2:
menu2();
cin>>scelta2;
scelta2=inputc2();
switch(scelta2){
case 'a':
CreaNodo();
inserimento_coda(pTesta,nuovo);
break;
case 'b':
EstrazioneT(pTesta);
break;
case 'c':
Visualizzazione(pTesta);
break;
case 'd':
Ricerca(pTesta);
break;
case 3:
elimina_lista(pTesta);
break;
return 0;
}
void CreaNodo()
{
char cod[30];
double num;
cout<<"\nDigita il codice della foto da inserire nel nodo...: ";
cin>>cod;
cout<<"\nscrivere la dimensione in bytes...: ";
cin>>num;
p1 = new nodo;
p1->codice_foto=cod;
p1->next=NULL;
return 0;
}
void inserimento_coda(p_nodo p, p_nodo nuovo)
{
for (nuovo = p; nuovo->next != NULL; nuovo = nuovo->next)
{
nuovo->next = new nodo;
cout<<"Inserisci in coda il valore nella lista: "<<endl;
cin>>(nuovo->next)->codice_foto;
(nuovo->next)->next;
}
return 0
}
void inserimento_pila(p_nodo p, p_nodo nuovo)
{
nuovo = new nodo;
cout<<"Inserisci in pila il valore nella lista: "<<endl;
cin>>nuovo->codice_foto;
nuovo->next = p;
p = nuovo;
}
int inputc(int vmin, int vmax)
{
int valore=0;
do
{
cin>>valore;
if (valore<vmin || valore>vmax)
{
cout<<"Valore inserito non accettabile.\n";
cout<<"Inserire un valore compreso tra "<<vmin<<" e "<<vmax<<": ";
}
}while(valore<vmin || valore>vmax);
return valore;
}
char inputc2()
{
char risp;
do{
cin>>risp;
if (risp!="a"||risp!= "b"||risp!="c"||risp!="d"){
cout<<"lettera inserita non accettabile.\n";
menu2();
}
}while(risp!="a"||risp!= "b"||risp!="c"||risp!="d");
return risp;
}
void menu()
{
cout<<"//////////////////////////////////////////"<<endl;
cout<<"Premi 1 se vuoi una lista gestita in coda"<<endl;
cout<<"Premi 2 se vuoi una lista gestita in pila"<<endl;
cout<<"Premi 3 se vuoi deallocare una lista"<<endl;
cout<<"//////////////////////////////////////////"<<endl;
}
void menu2()
{
cout<<"//////////////////////////////////////////"<<endl;
cout<<"digita a se vuoi creare un nodo"<<endl;
cout<<"digita b se vuoi estrarre"<<endl;
cout<<"digita c se vuoi visualizzare"<<endl;
cout<<"digita d se vuoi cercare in base al codice foto"<<endl;
cout<<"//////////////////////////////////////////"<<endl;
}
bool ListaVuota(p_nodo p)
{
bool vuota = true;
if ( p == NULL)
{
cout <<" ATTENZIONE !! Lista vuota. "<<endl;
vuota = false;
}
return vuota;
}
void EstrazioneT(p_nodo p)
{
int *p1;
cout<<"\n===============================";
cout<<"\n==== Estrazione di un nodo ====";
cout<<"\n===============================\n";
if (ListaVuota(p) == true)
{
p1 = p;
cout << " Nodo estratto ---> " << p1->inf<<endl;
if (p1->next == NULL)
{
p = NULL;
}
}
return 0;
}
void Visualizzazione(p_nodo p)
{
int *p1;
int x;
if (ListaVuota(p) == true)
{
p1 = p;
while (p1 != NULL)
{
x++; //posizione
cout <<" Nodo "<<x<<"--> "<< p1->info<<endl;
p1 = p1->next;
}
}
return 0;
}
void Ricerca(p_nodo p)
{
int *p1;
bool flag=false;
int x=0;
cout<<"\n========================================\n";
cout<<"==== Ricerca di un nodo nella lista ====\n";
cout<<"========================================\n";
if (ListaVuota(p_nodo p) == true)
{
cout<<"\n digita il codice foto da ricercare .....: ";
cin>>cerca;
p1 = p;
while (p1 != NULL && flag == false)
{
x++;
if (p1->info == cerca)
{
flag=true;
}
else
{
p1 = p1->psucc;
}
}
if (flag == true)
{cout << "\n la foto occupa "<<x+4<<" byte \n";}
else
{cout << "\n codice foto non trovato !!\n";}
return 0;
}
void elimina_lista(p_nodo p)
{
if (listaVuota(p_nodo p) == true)
{
p = NULL;
cout<<"Lista eliminata!";
}
return 0;
}
peroò mi da errori in dei sottoprogrammi, come posso risolvere?