Esercizo sui puntatori in C++ n.2

Traccia

2- Scrivere un programma che carichi due vettori X e Y di interi, li fonda in un unico vettore Z e ordini il vettore in modo crescente. Si visualizzi il risultato ottenuto.

In entrambi i casi si utilizzino i puntatori e le variabili dinamiche.

#include <iostream>
#include <string>
using namespace std;
int x[100],y[100],z[200];
int n,m,d,k;
int *p,*q,*r;
void carica (int *z,int d){
  int j,k;
  for (j=0;j<d;j++)
    {cout << "inserisci il numero \t";
     cin >> *(z+j);
     cout << endl;}
  cout << "---- fine carica ----"<<endl;
}
void fondi (int *a,int *b,int *c,int n1,int m1, int d1)
{
   int k;
   for (k=0;k<n1;k++)
      *(c+k)=*(a+k);
  d1=m1+n1;
  for (k=n1;k<d1;k++)
    *(c+k)=*(b+k-n1);
}
void ordina(int *c,int d1){
  int i,j,tmp;
  int *d;
  d=c ;
  for (i=0;i<d1-1;i++){
     for (j=i+1;j<d1;j++ ){
    if (*(c+i)>*(d+j)) {
            tmp=*(c+i);
        *(c+i)=*(d+j);
            *(d+j)=tmp;}      
    }}
}
int main () {
  cout << "Dimensione primo vettore:\n";
  cin >> n;
  p=x;
  carica(p,n);
  cout << "Dimensione secondo vettore:\n";
  cin >> m;
  q=y;
  carica(q,m);
  r=z;
  d=m+n;
  fondi(p,q,r,n,m,d);
  ordina(r,d);
  cout << "stampa del vettore fuso e ordinato \n"<< endl;
  cout << "---------------------\n";
  for (k=0;k<d;k++)
    cout << *(r+k) << "\t";
  cout << "\n------------- Fine -----------------"<< endl;
  return 0;
}