Salve, ragazzi, avrei un problemino con un algoritmo...ho due vettori v1 e v2...v1 è composto da elementi inseriti in ordine crescente mentre v2 sono inseriti casualmente...io devo fare un programma che inserisca gli elementi di v2 in v1 nel posto giusto in modo tale che gli elementi continuano ad essere in ordine crescente...ho fatto un algoritmo ma mi va in crash il programma e non capisco quale sia il motivo, potete aiutarmi a capire dov'è l'errore? vi posto il codice con la traccia anche:
codice:
/*Prova 4
Siano assegnati in ingresso, da tastiera, due vettori di interi V1 ed V2,
ed i loro riempimenti n1 ed n2. Si supponga che gli elementi del vettore V1
siano ordinati in senso crescente. Si scriva un programma che inserisca in
ordine nel vettore V1 tutti gli elementi del vettore V2. Si stampi quindi il
vettore V1 modificato. Il programma deve essere articolato in funzioni
(ad es.: input, output, inserisci). Suggerimento: la funzione inserisci riceve
in ingresso n1, V1, n2 e V2 e modifica il vettore V1 ed il suo riempimento.
Esempio
INPUT: n1 = 7 V1 = 1 4 7 9 12 15 22 n2 = 4 V2 = 14 3 5 25
OUTPUT: V1 = 1 3 4 5 7 9 12 14 15 22 25
*/
#include <cstdlib>
#include <iostream>
using namespace std;
/*PROTOTIPI FUNZIONI*/
void input (int vett1[], int vett2[], int &riemp1, int &riemp2); //funz. input
void insert (int vett1[], int vett2[], int &riemp1, int riemp2); //funz. inserimetno
int main()
{ int v1[100],v2[100];
int n1,n2;
input (v1,v2,n1,n2); //chiamata a funzione
insert(v1,v2,n1,n2); //chiamata a funzione inserimento
system("PAUSE");
return 0;
}
/*DEFINIZIONI FUNZIONI*/
//funz. input
void input (int vett1[], int vett2[], int &riemp1, int &riemp2)
{ int i; //variabile scorrimento vettore
/*Istruzioni di richiesta input valori, prima si assegnano i riempimenti dei
due vettori e in seguito si richiede di inserire i singoli componenti dei due
vettori, con esplicita richiesta che gli elementi di V1 devono essere inseriti
ordine crescente.*/
cout<<"Si assegnino due interi ai riempimenti N1 ed N2: \n";
cin>>riemp1>>riemp2;
cout<<"Si assegnino "<<riemp1<<" elementi interi in ordine crescente a V1: \n";
for(i=0;i<riemp1;i++)
cin>>vett1[i];
cout<<"\n";
cout<<"Si assegnino "<<riemp2<<" elementi interi a V2: \n";
for(i=0;i<riemp2;i++)
cin>>vett2[i];
cout<<"\n";
} //end funzione input
//funzione di inserimento
void insert (int vett1[], int vett2[], int &riemp1, int riemp2)
{int i,j,k; //variabili di scorrimento nei cicli for
/*Spiegazione algoritmo: con il primo ciclo si analizzano tutti gli elementi
di v2. Ad ogni elemento [i] poi si apre un altro ciclo for che controlla tutti
gli elementi [j] di v1 finchè non trova l'elemento >= dell'elemento [i]analizzato
di v2. A questo punto allora si incrementa di 1 il riempimento di v1 e si apre un
ulteriore ciclo for che sposta a partire dall'ultimo elemento [k] tutti gli elementi
di v1 di un posto in avanti fino ad arrivare all'elemento [j] analizzato, si esce
dal ciclo e nella posizione di quest'ultimo elemento [j] si inserisce
l'elemento di v2 di posto [i] analizzato.*/
for(i=0;i<riemp2;i++)
{ for(j=0;j<riemp1;j++)
{ if (vett1[j]>= vett2[i])
{ riemp1++;
for(k=riemp1;k>=j;k--)
{vett1[k]=vett1[k-1];}
vett1[j]=vett2[i];
}
}
}
//cout di prova
cout<<"nuovo riemp"<<riemp1;
cout<<"nuovi elementi \n";
for(i=0;i<riemp1;i++)
cout<<vett1[i]<<"\t";
}