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++ - [C] unire 2 vettori in modo ordinato
Forum - C/C++ - [C] unire 2 vettori in modo ordinato - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 21:45
Lunedė, 24/08/2009
Testo quotato

Postato originariamente da Premoli:

il codice non mi da nessun errore in fase di compilazione perō in esecuzione se ad esempio
carico i vettori cosė

v1={1,1,1,2}
v2={1,1,4,5,5}

come output mi da

v3={1,1,1,2,4,5}

invece avrebbe dovuto darmi

v3={1,1,1,2,4,5,5}




ok ho risolto grazie mille di avermi segnalato il problema. Ecco il codice esatto:

Codice sorgente - presumibilmente C++

  1. int fondi_vet(int *v1, int *v2, int *v3, int n1, int n2)
  2. {
  3.    
  4.     int i = 0, j = 0,k = 0, somma = 0,somma2 = 0,contatore = 0,trovato = 0;
  5.    
  6.     for(i = 0;i<n1;++i) {
  7.         k = v1[i];
  8.         trovato = 0;
  9.         for(j = 0; j < contatore;j++) {
  10.             if(v3[j]==v1[i]) {
  11.                 trovato = 1;
  12.             }
  13.           }
  14.           if(trovato == 0) {
  15.             for(j = 0 ;j < n1;++j) {
  16.                 if(k == v1[j]) {
  17.                      
  18.                     somma++;
  19.                 }
  20.             }
  21.                         for(j = 0; j < n2; ++j) {
  22.                                 if(k == v2[j]) {
  23.                                         somma2++;
  24.                                 }
  25.                     }
  26.                         if(somma > somma2) {
  27.                                 for(j = 0; j < somma; ++j) {
  28.                                         v3[contatore] = k;
  29.                                         contatore++;
  30.                                 }  
  31.                     } else {
  32.                                 if(somma2 > somma) {
  33.                                         for(j = 0; j < somma2; ++j) {
  34.                                                 v3[contatore] = k;
  35.                                                 contatore++;
  36.                                         }
  37.                                 } else {
  38.                                         v3[contatore] = k;
  39.                                         contatore++;
  40.                                 }                                    
  41.                     }              
  42.                    somma = 0;
  43.                    somma2 = 0;
  44.                 }  
  45.     }
  46.    
  47.     for(i = 0;i<n2;++i) {
  48.         k = v2[i];
  49.         trovato = 0;
  50.         for(j = 0; j < contatore;j++) {
  51.             if(v3[j]==v2[i]) {
  52.                 trovato = 1;
  53.             }
  54.         }
  55.         if(trovato == 0) {        
  56.                         for(j = 0; j < n2; ++j) {
  57.                                 if(k == v2[j]) {
  58.                                         somma2++;
  59.                                 }
  60.                     }
  61.                         if(somma2 > 1) {
  62.                                 for(j = 0; j < somma2; ++j) {
  63.                                         v3[contatore] = k;
  64.                                         contatore++;
  65.                                 }  
  66.                     } else {                   
  67.                                 v3[contatore] = k;
  68.                                 contatore++;                                  
  69.                     }                                          
  70.             somma2 = 0;  
  71.         }
  72.     }
  73.              
  74.     qsort (v3, contatore, sizeof(int), compare);
  75.    
  76.     for(i = 0; i < contatore; ++i) {
  77.         printf("%d\n",v3[i]);
  78.     }
  79.    
  80.     return contatore;
  81. }


PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 0:09
Martedė, 25/08/2009
Testo quotato

Postato originariamente da oretovalley:

Allora ecco il codice che ti serviva:

Codice sorgente - presumibilmente Plain Text

  1. [...]






Salve,
non ho avuto il tempo di verificarne il funzionamento, ma il codice mi sembra un pō caotico, io agirei cosi':

Codice sorgente - presumibilmente Delphi

  1. // v1, v2 = vettori da unire
  2. // v3 = unione dei vettori v1 e v2
  3. // n1, n2 = dimensione dei vettori v1 e v2
  4. // i1, i2, i3 = indici per scorrere i vettori v1, v2 e v3
  5.  
  6. [...]
  7.  
  8. i1 = i2 = i3 = 0;
  9.  
  10. while ((i1 <= n1) && (i2 <= n2)) {
  11.   if (v1[i1] < v2[i2]) {
  12.      v3[i3] = v1[i1];
  13.      i1++;
  14.   }
  15.  
  16.   if (v1[i1] > v2[i2]) {
  17.      v3[i3] = v1[i2];
  18.      i2++;
  19.   }
  20.  
  21.   if (v1[i1] = v2[i2]) {
  22.      v3[i3] = v1[i1];
  23.      i1++;
  24.      i2++;
  25.   }
  26.  
  27.   i3++;
  28. }
  29.  
  30. for (; i1 <= n1; i1++, i3++)
  31.      v3[i3] = v1[i1];
  32.  
  33. for (; i2 <= n2; i2++, i3++)
  34.      v3[i3] = v1[i2];
  35.  
  36. [...]



ciao. :k:

Luigi

Ultima modifica effettuata da gigisoft il 25/08/2009 alle 0:13
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 13:40
Martedė, 25/08/2009
niente nč il nuovo codice di oretovalley nč quello di gigisoft funzionano e io ormai sto diventando pazzo :rofl:

e pensare che all' inizio credevo che un esercizio del genere l'avrei finito in 5 minuti :(

se vi viene in mente qualche altra idea non esitate, se non vi va di scrivere il codice potete anche solo dirmi per grandi linee come fareste, ve ne sarei grato...

PM Quote
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 14:05
Martedė, 25/08/2009
strano premoli te lo dico xkč ho provato molte configurazioni comprese le tue con il mio ultimo codice postato e tutte risultano esatte, non so dove tu riscontri il problema...

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 14:12
Martedė, 25/08/2009
Testo quotato

Postato originariamente da oretovalley:

strano premoli te lo dico xkč ho provato molte configurazioni comprese le tue con il mio ultimo codice postato e tutte risultano esatte, non so dove tu riscontri il problema...



oretovalley errore mio, il tuo nuovo codice funziona...

ti ringrazio ora me lo studio un po' per capire come l'hai realizzato...

grazie anche a gigisoft

PM Quote
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 14:14
Martedė, 25/08/2009
per dubbi sul mio codice sono a tua completa disposizione :)

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 15:51
Martedė, 25/08/2009
Testo quotato

Postato originariamente da Premoli:

niente nč il nuovo codice di oretovalley nč quello di gigisoft funzionano e io ormai sto diventando pazzo :rofl:

e pensare che all' inizio credevo che un esercizio del genere l'avrei finito in 5 minuti :(

se vi viene in mente qualche altra idea non esitate, se non vi va di scrivere il codice potete anche solo dirmi per grandi linee come fareste, ve ne sarei grato...



Ehm... ora che ho ridato un'occhiata al codice vedo che c'e' effettivamente un errore, nella riga

Codice sorgente - presumibilmente C/C++

  1. if (v1[i1] = v2[i2])



va ovviamente va messo "==" al posto di "=", ma il resto e' corretto.

Ciao. :k:

Luigi.

Ultima modifica effettuata da gigisoft il 25/08/2009 alle 15:53
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 19:07
Martedė, 25/08/2009
Testo quotato

Postato originariamente da gigisoft:

Testo quotato

Postato originariamente da Premoli:

niente nč il nuovo codice di oretovalley nč quello di gigisoft funzionano e io ormai sto diventando pazzo :rofl:

e pensare che all' inizio credevo che un esercizio del genere l'avrei finito in 5 minuti :(

se vi viene in mente qualche altra idea non esitate, se non vi va di scrivere il codice potete anche solo dirmi per grandi linee come fareste, ve ne sarei grato...



Ehm... ora che ho ridato un'occhiata al codice vedo che c'e' effettivamente un errore, nella riga

Codice sorgente - presumibilmente C/C++

  1. if (v1[i1] = v2[i2])



va ovviamente va messo "==" al posto di "=", ma il resto e' corretto.

Ciao. :k:

Luigi.



avevi ragione scusami perō il codice non lo avevo ancora guardato ma solo provato... ho trovato anche qualche altro piccolo errore...
grazie ;)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo