Discussione: [c]Merge aiuto!
View Single Post
Old 28-09-2014, 07:57   #5
djdavi96c
Junior Member
 
Iscritto dal: Sep 2014
Messaggi: 2
grazie mille!

Quote:
Originariamente inviato da Xfree Guarda i messaggi
Prima reinserisco il codice opportunamente formattato e poi ti rispondo
Codice:
#include <iostream>
#include <stdlib.h>
#define NMAX 100
using namespace std;
void ordinamento(int v[], int n);
int main()
{
	int i, j, k, l, vet1[NMAX], vet2[NMAX], vet3[NMAX], m, n;
	cout << "Inseirsci la grandezza del primo vettore: ";
	cin >> n;
	cout << "Inseirsci la grandezza del secondo vettore: ";
	cin >> m;
	for (i = 0; i < n; i++){
		cout << "Inserisci il " << i + 1 << " numero del primo vettore: ";
		cin >> vet1[i];
	}
	for (j = 0; j<m; j++){
		cout << "Inserisci il " << j + 1 << " numero del secondo vettore: ";
		cin >> vet2[j];
	}
	ordinamento(vet1, n);

	ordinamento(vet2, m);

	system("PAUSE");

	i = 0;
	j = 0;
	k = 0;
	do{
		if (vet1[i]>vet2[j]){
			vet3[k] = vet2[j];
			j++;
		}
		else{
			if (vet1[i] == vet2[j]){
				vet3[k] = vet1[i];
				j = j + 1;
				i = i + 1;
			}
			else{
				vet3[k] = vet2[i];
				i++;
			}
		}
		k++;
	} while (i < n && i < m);

	if (i == n){
		for (l = j; l < m; l++){
			vet3[k] = vet2[l];
			k++;
		}
	}
	else{
		for (l = i; l < i; l++){
			vet3[k] = vet1[l];
			k++;
		}
	}


	for (k = 0; k < (n + m); k++){
		cout << "il " << i + 1 << " numero del 3 vettore: ";
		cout << vet3[k];
		cout << endl;
	}


	return 0;
}

void ordinamento(int v[], int n) {
	int i, k;
	int temp;
	for (i = 0; i < n - 1; i++) {
		for (k = 0; k<n - 1 - i; k++) {
			if (v[k] > v[k + 1]) {
				temp = v[k];
				v[k] = v[k + 1];
				v[k + 1] = temp;
			}
		}
	}
}
C'è un errore nella riga
Codice:
vet3[k] = vet2[i];
che invece deve essere
Codice:
vet3[k] = vet1[i];
e nella condizione del while che deve essere
Codice:
i < n && j < m
Errori che potrebbero essere dovuti alla disattenzione.
Detto questo, alla fine del merge rimangono pendenti gli ultimi elementi dai rispettivi vettori di provenienza da copiare nel vettore di merge e quello lo fai banalmente con due cicli while.

Rivedi meglio tutto il seguente blocco e ragionaci.
Se ti do la soluzione pronta non impari nulla.
Codice:
if (i == n){
	for (l = j; l < m; l++){
		vet3[k] = vet2[l];
		k++;
	}
}
else{
	for (l = i; l < i; l++){
		vet3[k] = vet1[l];
		k++;
	}
}


for (k = 0; k < (n + m); k++){
	cout << "il " << i + 1 << " numero del 3 vettore: ";
	cout << vet3[k];
	cout << endl;
}

L'ouput corretto è il seguente.

Codice:
c:\hwu>merge
Inseirsci la grandezza del primo vettore: 4
Inseirsci la grandezza del secondo vettore: 4
===== PRIMO VETTORE =====
Inserisci il 1 numero del primo vettore: 7
Inserisci il 2 numero del primo vettore: 4
Inserisci il 3 numero del primo vettore: 2
Inserisci il 4 numero del primo vettore: 5
===== SECONDO VETTORE =====
Inserisci il 1 numero del secondo vettore: 2
Inserisci il 2 numero del secondo vettore: 3
Inserisci il 3 numero del secondo vettore: 1
Inserisci il 4 numero del secondo vettore: 6

Premere un tasto per continuare . . .

===== VETTORE FUSO=====
1
2
3
4
5
6
7
Grazie mille a tutti voi,ho risolto anche quel problemi dei cicli che come dicevi era inutile tutto quel codice bastavano due cicli for e ho risolto la stampa.
djdavi96c è offline   Rispondi citando il messaggio o parte di esso