03/06/13 18:58
sghisha
questo è il file main.cpp
#include <iostream> #include "listavt.h" #include "servizi.h" using namespace std; typedef int posizione; typedef Lista<double>::tipoelem tipoelem; int main(){ Lista<double> L1; Lista<double> L2; Lista<double> L3; scrivi(L1); stampa(L1); // bubbleSort(L1); // stampa(L1); scrivi(L2); stampa(L2); ricerca(L1); // letturaElem(L1); // mergesort(L1); // stampa(L1); // fusione(L1, L2, L3); // stampa(L3); /* epurazione(L1); stampa(L1); cancElem(L1); stampa(L1); inserimentoElem(L1); stampa(L1); aggiornamentoElem(L1); stampa(L1); */ return 0; }
codice file servizi.cpp
#include <iostream> #include "listavt.h" #include "servizi.h" using namespace std; typedef Lista<double>::tipoelem tipoelem; typedef int posizione; //FUNZIONE INSERIMETO DEGLI ELEMENTI NELLA LISTA void scrivi(Lista<double> &L){ int n; posizione indiceElem = L.primoLista(); tipoelem ilprimo, elemento; cout<<"Quanti elementi vuoi inserire?\n\n"; cin>>n; if(n<=MAX){ if (n>0){ /*cout<<"Inserisci il primo elemento\n\n"; cin>>ilprimo; L.insLista(ilprimo, indiceElem);*/ for (int i=1; i<=n; i++){ cout<<"Inserisci l' elemento:\t"; cin>>elemento; cout<<"\n"; L.insLista(elemento, indiceElem); indiceElem=L.succLista(indiceElem); } } else cout<<"Nessun elemento da inserire\n\n"; } else cout<<"Errore: numero massimo di elementi superato!\n\n"; } //FUNZIONE DI STAMPA DELLA LISTA void stampa(Lista<double> &L){ posizione i; cout<<"La lista inserita e':\n\n"; cout<<"[ "; for (i=L.primoLista(); !L.fineLista(i); i=L.succLista(i)){ cout<<L.leggiLista(i)<<"\t"; } cout<<" ]\n\n"; } //FUNZIONE DI CANCELLAZIONE DI UN ELEMENTO DALLA LISTA void cancElem(Lista<double> &L){ posizione pos,temp; cout<<"CANCELLAZIONE ELEMENTO\n"; cout<<"Inserisci la posizione dell' elemento che vuoi cancellare:\t"; cin>>pos; temp=L.primoLista(); while(temp!=pos){ temp=L.succLista(temp); } cout<<"\n"; L.cancLista(pos); } //FUNZIONE INSERIMENTO ELEMENTO void inserimentoElem(Lista<double> &L){ posizione pos; tipoelem elemento; cout<<"INSERIMENTO ELEMENTO\n"; cout<<"Inserisci l'elemento che vuoi aggiungere alla lista:\t"; cin>>elemento; cout<<"\n"; cout<<"Inserisci la posizione in cui vuoi inserire l'elemento:\t"; cin>>pos; cout<<"\n"; for(int j=L.primoLista(); j<=pos; j++ ){ j=L.succLista(j); } L.insLista(elemento, pos); } //FUNZIONE AGGIORNAMENTO ELEMENTO void aggiornamentoElem(Lista<double> &L){ posizione i, temp; tipoelem elemento; cout<<"AGGIORNAMENTO\n"; cout<<"Inserisci l'elemento che vuoi inserire:\t"; cin>>elemento; cout<<"\n"; cout<<"Inserisci la posizione di cui vuoi aggiornare l'elemento:\t"; cin>>i; cout<<"\n"; temp=L.primoLista(); while (temp!=i){ temp=L.succLista(temp); } L.scriviLista(elemento,i); } tipoelem letturaElem(Lista<double> &L){ if(!L.listaVuota()){ posizione pos,temp; cout<<"Inserisci la posizione di cui vuoi visualizzare il valore:\t"; cin>>pos; temp=L.primoLista(); while (temp!=pos){ temp=L.succLista(temp); } cout<<"\n Il valore nella posizione "<<pos<<" e':\t"<<L.leggiLista(pos)<<"\n\n"; } } void epurazione(Lista<double> &L){ posizione p, q; p=L.primoLista(); while(!L.fineLista(p)){ q=L.succLista(p); while (!L.fineLista(q)){ if (L.leggiLista(p)==L.leggiLista(q)){ L.cancLista(q); } else q=L.succLista(q); } p=L.succLista(p); } } //ORDINAMENTO BUBBLESORT void bubbleSort (Lista<double> &L){ posizione lunghezza=0; tipoelem elemento; posizione pl; posizione alto; pl=L.primoLista(); while (!L.fineLista(pl)){ pl=L.succLista(pl); lunghezza=lunghezza+1; } alto=lunghezza-1; while (alto>0){ pl=L.primoLista(); while(pl!=lunghezza){ if((L.leggiLista(pl))>(L.leggiLista(L.succLista(pl)))){ elemento=L.leggiLista(pl); L.scriviLista(L.leggiLista(L.succLista(pl)),pl); L.scriviLista(elemento,L.succLista(pl)); } pl=L.succLista(pl); } alto=alto-1; } } //RICERCA DI UN ELEMENTO void ricerca(Lista<double> &L){ tipoelem elemento; cout<<"Insersci l'elemento che vuoi ricercare \t"; cin>>elemento; posizione p=L.primoLista(); while(elemento!=L.leggiLista(p)){ p=L.succLista(p); } cout<<"L'elemento e' stato trovato e ha posizione "<<p<<"\n\n"; } //ORDINAMENTO NATURALE MERGE SORT /*void mergesort(Lista &L){ int n_catene=0; while (n_catene!=1 ){ Lista A; Lista B; distribuisci(L, A, B); n_catene=0; Lista L; merge(A, B, L, n_catene); stampa(L); } } void distribuisci(Lista &L, Lista &A, Lista &B){ posizione pl=L.primoLista(); posizione pa=A.primoLista(); posizione pb=B.primoLista(); while (!L.fineLista(pl)){ copiaCatena(pl, L, pa, A); if (!L.fineLista(pl)){ copiaCatena(pl, L, pb, B); } } } posizione copiaCatena(posizione &pa, Lista &A, posizione &pb, Lista &B){ bool finecatena=false; while (finecatena!=true){ copia(pa, A, pb, B, finecatena); } return pa; } bool copia(posizione &pa, Lista &A, posizione &pl, Lista &L, bool &finecatena){ tipoelem elemento=A.leggiLista(pa); L.insLista(elemento, pl); pa=A.succLista(pa); pl=L.succLista(pl); if (A.fineLista(pa)) finecatena=true; else { finecatena=(elemento>A.leggiLista(pa)); } return finecatena; } int merge(Lista &A, Lista &B, Lista &L, int &n_catene){ posizione pa=A.primoLista(); posizione pb=B.primoLista(); posizione pl=L.primoLista(); while((!A.fineLista(pa)) && (!B.fineLista(pb))){ fondiCatena(pa, A, pb, B, pl, L); n_catene++; } while (!A.fineLista(pa)){ copiaCatena(pa, A, pl, L); n_catene++; } while (!B.fineLista(pb)){ copiaCatena(pb, B, pl, L); n_catene++; } return n_catene; } void fondiCatena(posizione &pa, Lista &A, posizione &pb, Lista &B, posizione &pl, Lista &L){ bool finecatena=false; while (finecatena!=true){ if (A.leggiLista(pa)<B.leggiLista(pb)){ copia(pa, A, pl, L, finecatena); if (finecatena==true) copiaCatena(pb, B, pl, L); } else{ copia(pb, B, pl, L, finecatena); if (finecatena==true){ copiaCatena(pa, A, pl, L); } } } } */ //FUSIONE DI DUE LISTE ORDINATE void fusione(Lista<double> &L1, Lista<double> &L2, Lista<double> &L3){ cout<<"FUSIONE DI DUE LISTE ORDINATE\n\n"; posizione pl1, pl2, pl3; tipoelem elem1, elem2; pl1=L1.primoLista(); pl2=L2.primoLista(); pl3=L3.primoLista(); int contatore=0; while ((!L1.fineLista(pl1)) && (!L2.fineLista(pl2))){ elem1=L1.leggiLista(pl1); elem2=L2.leggiLista(pl2); if (elem1<elem2){ L3.insLista(elem1,pl3); contatore++; pl1=L1.succLista(pl1); } else { L3.insLista(elem2, pl3); contatore++; pl2=L2.succLista(pl2); } pl3=L3.succLista(pl3); } while (!L1.fineLista(pl1)){ L3.insLista(L1.leggiLista(pl1), pl3); contatore++; pl1=L1.succLista(pl1); pl3=L3.succLista(pl3); } while (!L2.fineLista(pl2)){ L3.insLista(L2.leggiLista(pl2), pl3); contatore++; pl2=L2.succLista(pl2); pl3=L3.succLista(pl3); } }
codice servizi.h
#ifndef SERVIZI_H #define SERVIZI_H #include "listavt.h" typedef Lista<double>::tipoelem tipoelem; void scrivi(Lista<double> &); void stampa(Lista<double> &); void cancElem(Lista<double> &); void inserimentoElem(Lista<double> &); void aggiornamentoElem(Lista<double> &); tipoelem letturaElem(Lista<double> &); void epurazione(Lista<double> &); void bubbleSort (Lista<double> &L); void fusione(Lista<double> &, Lista<double> &, Lista<double> &); void ricerca(Lista<double> &L); /*void mergesort(Lista &); void distribuisci(Lista &, Lista & ,Lista &); posizione copiaCatena(posizione & , Lista &, posizione &, Lista &); bool copia(posizione &, Lista &, posizione &, Lista &, bool &); int merge(Lista &, Lista &, Lista &, int &); void fondiCatena(posizione &, Lista &, posizione &, Lista &, posizione &, Lista &);*/ #endif
codice listavt.h
#include <iostream> using namespace std; const int MAX=5; template <class T> class Lista{ public: typedef int posizione; typedef T tipoelem; Lista(); //Lista(const Lista<T, MAX>&); ~Lista(); void creaLista(); bool listaVuota()const; posizione primoLista()const; bool fineLista(posizione) const; posizione succLista(posizione)const; posizione predLista(posizione)const; tipoelem leggiLista(posizione)const; void scriviLista(tipoelem, posizione); void insLista(tipoelem, posizione); void cancLista(posizione); private: T v[MAX]; int lunghezza; }; //IMPLEMENTAZIONE METODI DELLA LISTA //COSTRUTTORE template <class T> Lista<T>::Lista(){ creaLista();} //Costruttore di copia //DISTRUTTORE template <class T> Lista<T>::~Lista(){} template <class T> void Lista<T>::creaLista(){ lunghezza=0; } template <class T> bool Lista<T>::listaVuota()const { return lunghezza==0;} template <class T> typename Lista<T>::posizione Lista<T>::primoLista()const {return (1);} template <class T> bool Lista<T>::fineLista(posizione p) const { if ((p>=1) && (p<=lunghezza+1)){ return (p==lunghezza+1);} } template <class T> typename Lista<T>::posizione Lista<T>::succLista(posizione p)const{ if (!fineLista(p)){ return (p=p+1); } else return (p); } template <class T> typename Lista<T>::posizione Lista<T>::predLista(posizione p)const{ if (p!=primoLista()){ return (p=p-1); } else return (p); } template <class T> typename Lista<T>::tipoelem Lista<T>::leggiLista(posizione p)const{ //oppure T Lista<T>::leggiLista(posizione p) const tipoelem valore; if ((p>=1) && (p<=lunghezza)){ return valore=v[p]; } } template <class T> void Lista<T>::scriviLista(tipoelem valore, posizione p){ if ((p>=1) && (p<=lunghezza)){ v[p]=valore; } else cout<<"Posizione inserita non valida!"; } template <class T> void Lista<T>::insLista(tipoelem valore, posizione p){ if ((p>=1) && (p<=lunghezza+1)){ posizione temp=lunghezza; while(temp!=p-1){ v[temp+1]=v[temp]; temp--; } v[p]=valore; lunghezza++; } else cout<<"Memoria vettore piena!\n\n"; } template <class T> void Lista<T>::cancLista(posizione p){ if (!listaVuota()){ if ((p>=1) && (p<=lunghezza)){ posizione temp=p; while (temp!=lunghezza){ v[temp]=v[temp+1]; temp=succLista(temp); } lunghezza--; } else cout<<"L'elemento da cancellare non e' nella Lista\n\n"; } else cout<<"La lista e' vuota!Non ci sono elementi da cancellare!\n\n"; } #endif
aaa
03/06/13 20:30
Se sul PC della tua amica funziona tutto bene allora il problema non è nel codice, se stai usando visual studio dovresti provare ad aggiornare il visual c++ runtime opure portarlo alla stessa versione di quello sul pc della tua amica, se invece usi il runtime non è necessario direi che la cosa potrebbe essere piu complicata dal previsto.
P.S. Benvenuta, presentati appena hai un po ti tempo....
P.S. Benvenuta, presentati appena hai un po ti tempo....
Ultima modifica effettuata da 03/06/13 20:31
03/06/13 20:58
sghisha
Devo usare per forza il dev... Stiamo utilizzando la stessa versione scaricata insieme... La cosa strana però è che il codice delle liste implementate senza template sono l'unica cosa che continua a funzionare... Sono arrivata alla conclusione che cambi qualcosa nel momento in cui eseguo questo codice... Ciò che è stato creato prima funziona... Tutto ciò che viene creato dopo non funziona più... Mah sto impazzendo giuro... Comunque dove devo presentarmi?
aaa
04/06/13 12:19
sghisha
ho risolto usavo un dev per una macchina a 64 bit... invece il mio pc è a 32.... -_-'
aaa
04/06/13 17:50
Ah, tutto qui... Va beh meglio così. Comunque le presentazioni qui: pierotofy.it/pages/extras/forum/249/
04/06/13 19:28
LittleHacker
Postato originariamente da sghisha:
ho risolto usavo un dev per una macchina a 64 bit... invece il mio pc è a 32.... -_-'
ho risolto usavo un dev per una macchina a 64 bit... invece il mio pc è a 32.... -_-'
Mi sembra un po' strano ...non dovrebbe nemmeno partire(il dev), una macchina a 32bit non puo' eseguire codice a 64bit , invece viceversa(64bit(machine) -> 32bit(code)) Si! Infatti viene anche chiamato x64_32!
aaa