Ciao! Sto facendo degli esercizi in c++ ,dato che le soluzioni sono in c, vorrei un piccolo aiuto per quanto riguarda la "scrittura" in riferimento ai puntatori.
Ho questo esercizio:
Esercizio 1 (9 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione copia con parametri:
• a di tipo vettore di 100 int;
• b di tipo vettore di 50 int;
• c di tipo vettore di 30 int;
• d di tipo puntatore/riferimento ad un int
La funzione deve copiare nel vettore b (in posizioni differenti) al più 50 valori del vettore a che sono maggiori della media aritmetica dei valori del vettore c. Inoltre, la funzione deve restituire scrivere nell’area di memoria puntata/riferita da d il numero di valori copiati.
2. nella funzione main
I. dichiarare un vettore di nome x di 100 int, un vettore di nome y di 50 int e un vettore di nome z di 30 int;
II. dichiarare una variabile di nome h di tipo int;
III. inserire (uno per ogni posizione) 100 valori letti da standard input nel vettore x;
IV. ripetere le seguenti operazioni fino a quando l’esecuzione della funzione copia inserisce un valore in ogni posizione del vettore y:
a. inserire (uno per ogni posizione) 30 valori letti da standard input nel vettore z;
b. eseguire la funzione copia applicata al vettore x e al vettore z, inserendo il risultato nel vettore y e nella variabile h.
Che ho risolto in questo modo:
#include <iostream>
using namespace std;
void copia(int a[100], int b[50], int c[30], int &d)
{
int i, j=0;
int somma = 0;
int conta = 0;
// CALCOLO LA MEDIA
double media;
for (i = 0; i < 30; i++)
{
somma = somma + c[i];
}
media = somma / 30.0; // ricordarsi il .0 (= un valore dopo la virgola)
i = 0; // lo ri inizializzo perchè viene usato prima
while (i < 100 && j < 50) //nel vettore b (in posizioni differenti) al più 50 valori
{
if (a[i]>media)
{
b[j] = a[i];
j++;
}
i++; // non è un for
}
d = j;
}
int main()
{
int i, x[100], y[50], z[30];
int h;
for (i = 0; i < 100; i++)
{
cin >> x[i];
}
do{
for (i = 0; i < 30; i++)
{
cin >> z[i];
}
copia(x, y, z, h);
} while (h<50); //inserisce un valore in ogni posizione del vettore y
return 0;
}
I miei dubbi sono:
1) quando scrivo d=j; (prima del main) dato che d è un puntatore devo scrivere &d=j?
2) nel main in "copia(x, y, z, h);" devo mettere anche qui &h?
Grazie