Esercizi con i puntatori in C++

Gli esercizi proposti ti risolvono due esercizi con gli Array e i puntatori in C++.

1- Scrivere un programma che carichi un vettore di caratteri e conti quante consonanti e vocali sono

presenti, visualizzando i risultati a video.

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.

Soluzione 1

#include <iostream>
#include <string>
using namespace std;
char *c;
char x[100];
int n;
void carica (char *z,int d){
  int j;
  char *k;
  k=z;
  for (j=0;j<d;j++)
    {cout << "inserisci il carattere \t";
     cin >> *z;
     cout << endl;
     z++;}
  cout << "stampa del vettore \t" << endl;
  for (j=0;j<d;j++) {
    cout << *k << "\t";
    k++;}
  cout << "---- fine carica ----"<<endl;
}
void conta (char *z, int d)
{
   int nc,nv;
   int j;
   nc=0;
   nv=0;
   for (j=0;j<d;j++){
      if (*z=='a') 
         nv++;
      if (*z=='e') 
        nv++;
      if (*z=='i') 
        nv++;
      if (*z=='o')
        nv++;
      if (*z=='u')
         nv++;
      nc=d-nv;
      z++;}
  cout << "il numero delle vocali è:\t:" << nv << endl;
  cout << "il numero delle consonanti è:\t:" << nc << endl;
}
int main () {
  int k;
  cout << "inserisci il numero dei caratteri\n";
  cin >> n;
  c=x;
  carica(c,n);
  c=x;
  conta(c,n);
  cout << endl;
  return 0;
}

Soluzione 2

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