Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Realizzazione liste con template in c++ errore in esecuzione 216
Forum - C/C++ - Realizzazione liste con template in c++ errore in esecuzione 216

Avatar
sghisha (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/06/2013

Segnala al moderatore
Postato alle 19:29
Lunedì, 03/06/2013
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 il 03/06/2013 alle 19:30
PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 20:31
Lunedì, 03/06/2013
Posta il codiceeee! :rotfl: Usa il tag "Code"! :k:

PM Quote
Avatar
sghisha (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/06/2013

Segnala al moderatore
Postato alle 20:58
Lunedì, 03/06/2013

questo è il file main.cpp

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include "listavt.h"
  3. #include "servizi.h"
  4.  
  5. using namespace std;
  6. typedef int posizione;
  7. typedef Lista<double>::tipoelem tipoelem;
  8.  
  9. int main(){
  10.         Lista<double> L1;
  11.         Lista<double> L2;
  12.         Lista<double> L3;
  13.         scrivi(L1);
  14.         stampa(L1);
  15. //      bubbleSort(L1);
  16. //      stampa(L1);
  17.         scrivi(L2);
  18.         stampa(L2);
  19.         ricerca(L1);
  20. //      letturaElem(L1);
  21. //      mergesort(L1);
  22. //      stampa(L1);
  23.        
  24. //      fusione(L1, L2, L3);
  25. //      stampa(L3);
  26.    
  27.   /*  epurazione(L1);
  28.     stampa(L1);
  29.    
  30.  
  31.        
  32.     cancElem(L1);
  33.     stampa(L1);
  34.    
  35.     inserimentoElem(L1);
  36.     stampa(L1);
  37.    
  38.     aggiornamentoElem(L1);
  39.     stampa(L1);
  40.    
  41.     */
  42.        
  43.        
  44.         return 0;
  45. }




codice file servizi.cpp

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include "listavt.h"
  3. #include "servizi.h"
  4.  
  5. using namespace std;
  6. typedef Lista<double>::tipoelem tipoelem;
  7. typedef int posizione;
  8.  
  9.  
  10. //FUNZIONE INSERIMETO DEGLI ELEMENTI NELLA LISTA
  11. void scrivi(Lista<double> &L){
  12.         int n;
  13.         posizione indiceElem = L.primoLista();
  14.         tipoelem ilprimo, elemento;
  15.        
  16.         cout<<"Quanti elementi vuoi inserire?\n\n";
  17.         cin>>n;
  18.        
  19.                 if(n<=MAX){
  20.                 if (n>0){
  21.                
  22.                 /*cout<<"Inserisci il primo elemento\n\n";
  23.                 cin>>ilprimo;
  24.                 L.insLista(ilprimo, indiceElem);*/
  25.                 for (int i=1; i<=n; i++){
  26.                         cout<<"Inserisci l' elemento:\t";
  27.                         cin>>elemento;
  28.                         cout<<"\n";
  29.                         L.insLista(elemento, indiceElem);
  30.                         indiceElem=L.succLista(indiceElem);
  31.                 }
  32.       }
  33.       else cout<<"Nessun elemento da inserire\n\n";
  34.   }
  35.         else cout<<"Errore: numero massimo di elementi superato!\n\n";
  36.        
  37.         }
  38.        
  39. //FUNZIONE DI STAMPA DELLA LISTA
  40. void stampa(Lista<double> &L){
  41.         posizione i;
  42.         cout<<"La lista inserita e':\n\n";
  43.         cout<<"[ ";
  44.         for (i=L.primoLista();  !L.fineLista(i); i=L.succLista(i)){
  45.                 cout<<L.leggiLista(i)<<"\t";
  46.         }
  47.         cout<<" ]\n\n";
  48. }
  49.  
  50. //FUNZIONE DI CANCELLAZIONE DI UN ELEMENTO DALLA LISTA
  51. void cancElem(Lista<double> &L){
  52.          posizione pos,temp;
  53.          cout<<"CANCELLAZIONE ELEMENTO\n";
  54.      cout<<"Inserisci la posizione dell' elemento che vuoi cancellare:\t";
  55.      cin>>pos;
  56.      temp=L.primoLista();
  57.      while(temp!=pos){
  58.         temp=L.succLista(temp);
  59.      }
  60.      cout<<"\n";
  61.      L.cancLista(pos);
  62. }
  63.  
  64.  
  65. //FUNZIONE INSERIMENTO ELEMENTO
  66. void inserimentoElem(Lista<double> &L){
  67.         posizione pos;
  68.         tipoelem elemento;
  69.         cout<<"INSERIMENTO ELEMENTO\n";
  70.         cout<<"Inserisci l'elemento che vuoi aggiungere alla lista:\t";
  71.         cin>>elemento;
  72.         cout<<"\n";
  73.         cout<<"Inserisci la posizione in cui vuoi inserire l'elemento:\t";
  74.         cin>>pos;
  75.         cout<<"\n";
  76.         for(int j=L.primoLista(); j<=pos; j++ ){
  77.                 j=L.succLista(j);
  78.         }
  79.         L.insLista(elemento, pos);
  80. }
  81.  
  82. //FUNZIONE AGGIORNAMENTO ELEMENTO
  83. void aggiornamentoElem(Lista<double> &L){
  84.         posizione i, temp;
  85.         tipoelem elemento;
  86.         cout<<"AGGIORNAMENTO\n";
  87.         cout<<"Inserisci l'elemento che vuoi inserire:\t";
  88.         cin>>elemento;
  89.         cout<<"\n";
  90.         cout<<"Inserisci la posizione di cui vuoi aggiornare l'elemento:\t";
  91.         cin>>i;
  92.         cout<<"\n";
  93.         temp=L.primoLista();
  94.         while (temp!=i){
  95.                 temp=L.succLista(temp);
  96.         }
  97.         L.scriviLista(elemento,i);
  98. }
  99.  
  100.  
  101. tipoelem letturaElem(Lista<double> &L){
  102.        
  103.         if(!L.listaVuota()){
  104.        
  105.         posizione pos,temp;
  106.         cout<<"Inserisci la posizione di cui vuoi visualizzare il valore:\t";
  107.         cin>>pos;
  108.        
  109.         temp=L.primoLista();
  110.         while (temp!=pos){
  111.                 temp=L.succLista(temp);
  112.         }
  113.         cout<<"\n Il valore nella posizione "<<pos<<" e':\t"<<L.leggiLista(pos)<<"\n\n";
  114.         }
  115. }
  116.        
  117. void epurazione(Lista<double> &L){
  118.        
  119.         posizione p, q;
  120.         p=L.primoLista();
  121.         while(!L.fineLista(p)){
  122.                 q=L.succLista(p);
  123.                 while (!L.fineLista(q)){
  124.                 if (L.leggiLista(p)==L.leggiLista(q)){
  125.                         L.cancLista(q);
  126.                 }
  127.                 else q=L.succLista(q); 
  128.         }
  129.         p=L.succLista(p);
  130.   }
  131. }
  132.  
  133.  
  134. //ORDINAMENTO BUBBLESORT
  135.  
  136. void bubbleSort (Lista<double> &L){
  137.        
  138.         posizione lunghezza=0;
  139.         tipoelem elemento;
  140.         posizione pl;
  141.         posizione alto;
  142.         pl=L.primoLista();
  143.         while (!L.fineLista(pl)){
  144.                 pl=L.succLista(pl);
  145.                 lunghezza=lunghezza+1;
  146.         }
  147.         alto=lunghezza-1;
  148.         while (alto>0){
  149.                 pl=L.primoLista();
  150.                 while(pl!=lunghezza){
  151.                         if((L.leggiLista(pl))>(L.leggiLista(L.succLista(pl)))){
  152.                                 elemento=L.leggiLista(pl);
  153.                                 L.scriviLista(L.leggiLista(L.succLista(pl)),pl);
  154.                                 L.scriviLista(elemento,L.succLista(pl));
  155.                         }
  156.                        
  157.                 pl=L.succLista(pl);    
  158.                 }
  159.                 alto=alto-1;
  160.         }
  161.        
  162. }
  163.  
  164. //RICERCA DI UN ELEMENTO
  165. void ricerca(Lista<double> &L){
  166.         tipoelem elemento;
  167.         cout<<"Insersci l'elemento che vuoi ricercare \t";
  168.         cin>>elemento;
  169.         posizione p=L.primoLista();
  170.         while(elemento!=L.leggiLista(p)){
  171.                 p=L.succLista(p);
  172.                 }
  173.         cout<<"L'elemento e' stato trovato e ha posizione "<<p<<"\n\n";        
  174. }
  175.  
  176.  
  177. //ORDINAMENTO NATURALE MERGE SORT
  178.  
  179.  
  180.  
  181. /*void mergesort(Lista &L){
  182.    
  183.         int n_catene=0;
  184.           while (n_catene!=1 ){
  185.              Lista A;
  186.              Lista B;
  187.                  distribuisci(L, A, B);
  188.                  n_catene=0;
  189.                  Lista L;
  190.                  merge(A, B, L, n_catene);
  191.              stampa(L);
  192.    }
  193.  
  194. }
  195.  
  196. void distribuisci(Lista &L, Lista &A, Lista &B){
  197.         posizione pl=L.primoLista();
  198.         posizione pa=A.primoLista();
  199.         posizione pb=B.primoLista();
  200.        
  201.         while (!L.fineLista(pl)){
  202.                 copiaCatena(pl, L, pa, A);
  203.                         if (!L.fineLista(pl)){
  204.                                 copiaCatena(pl, L, pb, B);
  205.                         }              
  206. }
  207. }
  208.  
  209. posizione copiaCatena(posizione &pa, Lista &A, posizione &pb, Lista &B){
  210.        
  211.         bool finecatena=false;
  212.         while (finecatena!=true){
  213.         copia(pa, A, pb, B, finecatena);
  214.         }
  215.         return pa;
  216. }
  217.  
  218. bool copia(posizione &pa, Lista &A, posizione &pl, Lista &L, bool &finecatena){
  219.         tipoelem elemento=A.leggiLista(pa);
  220.         L.insLista(elemento, pl);
  221.         pa=A.succLista(pa);
  222.         pl=L.succLista(pl);
  223.                 if (A.fineLista(pa))
  224.                         finecatena=true;
  225.                 else
  226.                         {       finecatena=(elemento>A.leggiLista(pa)); }
  227.                        
  228.         return finecatena;                                     
  229. }
  230.  
  231. int merge(Lista &A, Lista &B, Lista &L, int &n_catene){
  232.         posizione pa=A.primoLista();
  233.     posizione pb=B.primoLista();
  234.         posizione pl=L.primoLista();
  235.        
  236.         while((!A.fineLista(pa)) && (!B.fineLista(pb))){
  237.                 fondiCatena(pa, A, pb, B, pl, L);
  238.                 n_catene++;
  239.                 }
  240.                
  241.         while (!A.fineLista(pa)){
  242.                 copiaCatena(pa, A, pl, L);
  243.                 n_catene++;
  244.         }
  245.        
  246.         while (!B.fineLista(pb)){
  247.                 copiaCatena(pb, B, pl, L);
  248.                 n_catene++;
  249.         }
  250.         return n_catene;       
  251.         }      
  252.  
  253.  
  254. void fondiCatena(posizione &pa, Lista &A, posizione &pb, Lista &B, posizione &pl, Lista &L){
  255.         bool finecatena=false;
  256.         while (finecatena!=true){
  257.                 if (A.leggiLista(pa)<B.leggiLista(pb)){
  258.                         copia(pa, A, pl, L, finecatena);
  259.                         if (finecatena==true)
  260.                                 copiaCatena(pb, B, pl, L);
  261.                 }
  262.                        
  263.                 else{
  264.                         copia(pb, B, pl, L, finecatena);
  265.                         if (finecatena==true){
  266.                                 copiaCatena(pa, A, pl, L);
  267.                                 }
  268.                         }
  269.                 }
  270.          }
  271.  
  272. */
  273. //FUSIONE DI DUE LISTE ORDINATE
  274. void fusione(Lista<double> &L1, Lista<double> &L2, Lista<double> &L3){
  275.        
  276.         cout<<"FUSIONE DI DUE LISTE ORDINATE\n\n";
  277.         posizione pl1, pl2, pl3;
  278.         tipoelem elem1, elem2;
  279.         pl1=L1.primoLista();
  280.         pl2=L2.primoLista();
  281.         pl3=L3.primoLista();
  282.         int contatore=0;
  283.         while ((!L1.fineLista(pl1)) && (!L2.fineLista(pl2))){
  284.                
  285.                 elem1=L1.leggiLista(pl1);
  286.                 elem2=L2.leggiLista(pl2);
  287.        
  288.                 if (elem1<elem2){
  289.                         L3.insLista(elem1,pl3);
  290.                         contatore++;
  291.                         pl1=L1.succLista(pl1);
  292.                     }
  293.                
  294.                 else {
  295.                         L3.insLista(elem2, pl3);
  296.                         contatore++;
  297.                         pl2=L2.succLista(pl2);
  298.                 }
  299.                
  300.                 pl3=L3.succLista(pl3);
  301.                 }
  302.        
  303.  
  304.  
  305.         while (!L1.fineLista(pl1)){
  306.        
  307.                 L3.insLista(L1.leggiLista(pl1), pl3);
  308.                 contatore++;
  309.                 pl1=L1.succLista(pl1);
  310.                 pl3=L3.succLista(pl3);         
  311.  
  312. }
  313.        
  314.         while (!L2.fineLista(pl2)){
  315.        
  316.                 L3.insLista(L2.leggiLista(pl2), pl3);
  317.                 contatore++;
  318.                 pl2=L2.succLista(pl2);
  319.                 pl3=L3.succLista(pl3);
  320.                
  321. }
  322. }



codice servizi.h

Codice sorgente - presumibilmente C++

  1. #ifndef SERVIZI_H
  2. #define SERVIZI_H
  3. #include "listavt.h"
  4. typedef Lista<double>::tipoelem tipoelem;
  5.  
  6. void scrivi(Lista<double> &);
  7. void stampa(Lista<double> &);
  8. void cancElem(Lista<double> &);
  9. void inserimentoElem(Lista<double> &);
  10. void aggiornamentoElem(Lista<double> &);
  11. tipoelem letturaElem(Lista<double> &);
  12. void epurazione(Lista<double> &);
  13. void bubbleSort (Lista<double> &L);
  14. void fusione(Lista<double> &, Lista<double> &, Lista<double> &);
  15. void ricerca(Lista<double> &L);
  16. /*void mergesort(Lista &);
  17.  
  18. void distribuisci(Lista &, Lista & ,Lista &);
  19. posizione copiaCatena(posizione & , Lista &, posizione &, Lista &);
  20. bool copia(posizione &, Lista &, posizione &, Lista &, bool &);
  21. int merge(Lista &, Lista &, Lista &, int &);
  22. void fondiCatena(posizione &, Lista &, posizione &, Lista &, posizione &, Lista &);*/
  23. #endif



codice listavt.h

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4. const int MAX=5;
  5.  
  6.  
  7.  
  8. template <class T>
  9. class Lista{
  10.         public:
  11.                 typedef int posizione;
  12.         typedef T tipoelem;
  13.                 Lista();
  14.                 //Lista(const Lista<T, MAX>&);
  15.                 ~Lista();
  16.                 void creaLista();
  17.                 bool listaVuota()const;
  18.                 posizione primoLista()const;
  19.                 bool fineLista(posizione) const;
  20.                 posizione succLista(posizione)const;
  21.                 posizione predLista(posizione)const;
  22.                 tipoelem leggiLista(posizione)const;
  23.                 void scriviLista(tipoelem, posizione);
  24.                 void insLista(tipoelem, posizione);
  25.                 void cancLista(posizione);
  26.                
  27.         private:
  28.            T v[MAX];   
  29.            int lunghezza;
  30. };
  31.  
  32.  
  33. //IMPLEMENTAZIONE METODI DELLA LISTA
  34.  
  35. //COSTRUTTORE
  36. template <class T>
  37. Lista<T>::Lista(){ creaLista();}
  38.  
  39. //Costruttore di copia
  40.  
  41.  
  42. //DISTRUTTORE
  43. template <class T>
  44. Lista<T>::~Lista(){}
  45.  
  46. template <class T>
  47. void Lista<T>::creaLista(){
  48.         lunghezza=0;
  49.    }
  50.    
  51. template <class T>  
  52. bool Lista<T>::listaVuota()const { return lunghezza==0;}
  53.  
  54. template <class T>
  55.  
  56. typename Lista<T>::posizione Lista<T>::primoLista()const {return (1);}
  57.  
  58. template <class T>
  59. bool Lista<T>::fineLista(posizione p) const {
  60.                 if ((p>=1) && (p<=lunghezza+1)){
  61.                 return (p==lunghezza+1);}
  62.                         }
  63.                        
  64. template <class T>                     
  65. typename Lista<T>::posizione Lista<T>::succLista(posizione p)const{
  66.              if (!fineLista(p)){
  67.                 return (p=p+1);
  68.                 }
  69.             else return (p);
  70.                 }
  71.  
  72. template <class T>             
  73. typename Lista<T>::posizione Lista<T>::predLista(posizione p)const{
  74.                 if (p!=primoLista()){
  75.                         return (p=p-1);
  76.                         }
  77.                 else return (p);
  78.                 }
  79.                
  80.                
  81. template <class T>             
  82. typename Lista<T>::tipoelem Lista<T>::leggiLista(posizione p)const{ //oppure T Lista<T>::leggiLista(posizione p) const
  83.             tipoelem valore;
  84.             if ((p>=1) && (p<=lunghezza)){
  85.                 return valore=v[p];
  86.             }
  87.         }
  88.        
  89.  
  90.  
  91. template <class T>     
  92. void Lista<T>::scriviLista(tipoelem valore, posizione p){
  93.        
  94.             if ((p>=1) && (p<=lunghezza)){
  95.             v[p]=valore;
  96.             }
  97.             else cout<<"Posizione inserita non valida!";
  98. }
  99.  
  100.  
  101. template <class T>
  102. void Lista<T>::insLista(tipoelem valore, posizione p){
  103.          
  104.                  if ((p>=1) && (p<=lunghezza+1)){
  105.                  posizione temp=lunghezza;
  106.                  while(temp!=p-1){
  107.                         v[temp+1]=v[temp];
  108.                         temp--;
  109.                         }
  110.                         v[p]=valore;
  111.                         lunghezza++;
  112.                  }
  113.        
  114.                                 else cout<<"Memoria vettore piena!\n\n";                       
  115.                         }
  116.  
  117.  
  118. template <class T>                     
  119. void Lista<T>::cancLista(posizione p){
  120.                 if (!listaVuota()){
  121.                 if ((p>=1) && (p<=lunghezza)){
  122.                 posizione temp=p;
  123.                 while (temp!=lunghezza){
  124.                         v[temp]=v[temp+1];
  125.                         temp=succLista(temp);
  126.                 }
  127.                 lunghezza--;   
  128.                 }
  129.                 else cout<<"L'elemento da cancellare non e' nella Lista\n\n";
  130.         }
  131.         else cout<<"La lista e' vuota!Non ci sono elementi da cancellare!\n\n";
  132. }
  133.  
  134.  
  135. #endif





PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:30
Lunedì, 03/06/2013
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 il 03/06/2013 alle 22:31
PM Quote
Avatar
sghisha (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/06/2013

Segnala al moderatore
Postato alle 22:58
Lunedì, 03/06/2013
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:

PM Quote
Avatar
sghisha (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/06/2013

Segnala al moderatore
Postato alle 14:19
Martedì, 04/06/2013
ho risolto usavo un dev per una macchina a 64 bit... invece il mio pc è a 32....  -_-'

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:50
Martedì, 04/06/2013
Ah, tutto qui... Va beh meglio così. Comunque le presentazioni qui: http://www.pierotofy.it/pages/extras/forum/249/

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 21:28
Martedì, 04/06/2013
Testo quotato

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!

PM Quote
Avatar
sghisha (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/06/2013

Segnala al moderatore
Postato alle 22:03
Martedì, 04/06/2013
Infatti non lo eseguiva...  Ma compilava... Anche se fino ad ora ci avevo lavorato e altre strutture funzionavano... Boh

PM Quote