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"; }

Rispondi quotando