Oppure

Loading
03/06/13 17:29
sghisha
Ciao a tutti... Forse sono stupida io ma davvero non riesco a trovare una soluzione.. In pratica sto realizzando delle strutture in c++. In particolare io e una mia amica abbiamo implementato la struttura lista rappresentata con vettori utilizzando i template... Ora sul suo pc tutto ok funziona tutto... Sul mio mi da un error launching 216... Dice che la versione dell'eseguibile non è compatibile con quella di Windows. Tra l'altro io è la mia amica abbiamo lo stesso sistema operativo cioè Windows 8... E poi dopo Questo errore se lancio nuovi eseguibili mi da sempre lo stesso errore... Eseguibili che precedentemente funzionavano benissimo... Va beh aiutatemiiiiiiii
:hail:
Ultima modifica effettuata da sghisha 03/06/13 17:30
aaa
03/06/13 18:31
LittleHacker
Posta il codiceeee! :rotfl: Usa il tag "Code"! :k:
aaa
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....
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?:asd:
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.... -_-'


Mi sembra un po' strano :om: ...non dovrebbe nemmeno partire(il dev), una macchina a 32bit non puo' eseguire codice a 64bit :noway:, invece viceversa(64bit(machine) -> 32bit(code)) Si! Infatti viene anche chiamato x64_32!
aaa