Oppure

Loading
24/08/09 19:16
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}

aaa
24/08/09 19:45
oretovalley
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:

int fondi_vet(int *v1, int *v2, int *v3, int n1, int n2)
{
    
    int i = 0, j = 0,k = 0, somma = 0,somma2 = 0,contatore = 0,trovato = 0;
    
    for(i = 0;i<n1;++i) {
        k = v1[i];
        trovato = 0; 
        for(j = 0; j < contatore;j++) {
            if(v3[j]==v1[i]) {
                trovato = 1;
            }
          }
          if(trovato == 0) {
            for(j = 0 ;j < n1;++j) {
                if(k == v1[j]) {
                     
                    somma++;
                }
            }
			for(j = 0; j < n2; ++j) {
				if(k == v2[j]) {
					somma2++;
				}
		    }
			if(somma > somma2) {
				for(j = 0; j < somma; ++j) {
					v3[contatore] = k;
					contatore++;
				}  
		    } else {
				if(somma2 > somma) {
					for(j = 0; j < somma2; ++j) {
						v3[contatore] = k;
						contatore++;
					}
				} else {
					v3[contatore] = k;
					contatore++;
				}                                    
		    }               
		   somma = 0;
		   somma2 = 0;
		}   
    }
    
    for(i = 0;i<n2;++i) {
        k = v2[i];
        trovato = 0; 
        for(j = 0; j < contatore;j++) {
            if(v3[j]==v2[i]) {
                trovato = 1;
            }
        } 
        if(trovato == 0) {         
			for(j = 0; j < n2; ++j) {
				if(k == v2[j]) {
					somma2++;
				}
		    }
			if(somma2 > 1) {
				for(j = 0; j < somma2; ++j) {
					v3[contatore] = k;
					contatore++;
				}  
		    } else {			
				v3[contatore] = k;
				contatore++;                                   
		    }               		   		
            somma2 = 0;  
        } 
    }
              
    qsort (v3, contatore, sizeof(int), compare); 
    
    for(i = 0; i < contatore; ++i) {
        printf("%d\n",v3[i]);
    }
    
    return contatore;
} 
aaa
24/08/09 22:09
gigisoft
Postato originariamente da oretovalley:

Allora ecco il codice che ti serviva:

[...]




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

// v1, v2 = vettori da unire
// v3 = unione dei vettori v1 e v2
// n1, n2 = dimensione dei vettori v1 e v2
// i1, i2, i3 = indici per scorrere i vettori v1, v2 e v3

[...]

i1 = i2 = i3 = 0;

while ((i1 <= n1) && (i2 <= n2)) {
  if (v1[i1] < v2[i2]) {
     v3[i3] = v1[i1];
     i1++;
  }

  if (v1[i1] > v2[i2]) {
     v3[i3] = v1[i2];
     i2++;
  }

  if (v1[i1] = v2[i2]) {
     v3[i3] = v1[i1];
     i1++;
     i2++;
  }

  i3++;
}

for (; i1 <= n1; i1++, i3++)
     v3[i3] = v1[i1];

for (; i2 <= n2; i2++, i3++)
     v3[i3] = v1[i2];

[...]



ciao. :k:

Luigi
Ultima modifica effettuata da gigisoft 24/08/09 22:13
aaa
25/08/09 11:40
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...
aaa
25/08/09 12:05
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...
aaa
25/08/09 12:12
Premoli
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
aaa
25/08/09 12:14
oretovalley
per dubbi sul mio codice sono a tua completa disposizione :)
aaa
25/08/09 13:51
gigisoft
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

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 25/08/09 13:53
aaa