Salve ragazzi.
Devo assolutamente svolgere entro stanotte questo esercizio per poterlo mandare al professore e non so più dove sbattere la testa :S
Questo programmino dovrebbe creare, data una lista passata per riferimento, un'altra lista con i valori negativi.
Il mio problema consiste nel fatto che questo fottutissimo programma mi crea la lista okay, ma ci mette dentro solo il primo valore negativo e lascia gli altri nella lista d'origine.. .-.
Vi lascio il codice così magari vedete se potete darmi una mano.. ne avrei veramente bisogno.
Vi ringrazio in anticipo per le risposte.. :bye:
Devo assolutamente svolgere entro stanotte questo esercizio per poterlo mandare al professore e non so più dove sbattere la testa :S
Questo programmino dovrebbe creare, data una lista passata per riferimento, un'altra lista con i valori negativi.
Il mio problema consiste nel fatto che questo fottutissimo programma mi crea la lista okay, ma ci mette dentro solo il primo valore negativo e lascia gli altri nella lista d'origine.. .-.
Vi lascio il codice così magari vedete se potete darmi una mano.. ne avrei veramente bisogno.
#include <iostream>
#include <cstdlib>
using namespace std;
struct elemento{
int valore;
elemento* succ;
};
typedef elemento* pelem;
void CreaLista(pelem & p, int & n);
void ListaNegativa(pelem & p1, pelem & p2);
void StampaLista(pelem p);
void StampaListaInv(pelem & p);
int main(){
int n;
pelem p1,p2;
CreaLista(p1,n);
ListaNegativa(p1,p2);
StampaLista(p1);
if(p2!=0) StampaListaInv(p2);
else cout<<"La seconda lista e' vuota";
return 0;
}
void CreaLista(pelem & p, int & n){
cout<<"Inserire il numero degli elementi della lista: ";
cin>>n;
if(n==0) p=NULL;
else{
p = new elemento;
pelem paux=p;
for(int i=0; i<n; i++){
paux->succ = new elemento;
paux=paux->succ;
cout<<"Inserire l'elemento di posto "<<i+1<<": ";
cin>>paux->valore;
}
paux->succ=NULL;
paux=p;
p=p->succ;
delete paux;
}
}
void ListaNegativa(pelem & p1, pelem & p2){
if(p1==NULL) p2=NULL;
else{
pelem paux,prec;
paux = new elemento;
paux->succ=p1;
p1=paux;
prec=paux;
paux=paux->succ;
p2=NULL;
while(paux!=NULL)
{
if(paux->valore<0){
prec->succ=paux->succ;
paux->succ=p2;
p2=paux;
}
prec=paux;
paux=paux->succ;
}
paux=p1;
p1=p1->succ;
delete paux;
}
}
void StampaLista(pelem p){
if (p==NULL) cout<<"La prima lista e' vuota"<<endl;
else{
cout<<"La prima lista e' formata dai seguenti elementi: "<<endl;
while(p!=NULL){
cout<<p->valore<<", ";
p=p->succ;
}
cout<<endl;
}
}
void StampaListaInv(pelem & p){ //Per riferimento altrimenti verrebbe allocata per ogni chiamata ricorsiva memoria inutilmente
if(p!=NULL){
StampaListaInv(p->succ);
cout<<p->valore<<", ";
}
else cout<<"La seconda lista e' formata dai seguenti elementi: "<<endl;
}
Vi ringrazio in anticipo per le risposte.. :bye: