Ciao! Ho questo esercizio:
Esercizio 1 (9 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione shift con parametri:
• a di tipo vettore di 100 int;
• b di tipo int;
Si suppone che il valore presente nel parametro b sia un numero compreso tra 0 e 99 (numero di posti del vettore a). La funzione deve spostare avanti di b posti ogni elemento del vettore a, e cioè il valore in a[0] deve essere copiato in a
, il valore presente in a[1] deve essere copiato in a[b+1], e così via fino al valore contenuto nel vettore in posizione a[100-(b-1)] the deve essere copiato in a[99]; mentre i valori a partire dalla posizione 100-b devono essere copiati nelle prime b posizioni nel seguente modo: il valore a[100-b] deve essere copiato in a[0], il valore a[100-(b+1)] deve essere copiato in a[1], e cosi via. Ad esempio, supponendo che il vettore a sia di sei posti e contenente:
1 2 3 4 5 6
e il valore nel parametro b sia 2, alla fine dell’operazione il vettore a deve contenere
5 6 1 2 3 4
Suggerimento: una possibile soluzione utilizza un vettore di supporto dove copiare i valori del vettore a tra le posizione 100-b e 99.
2. nella funzione main
I. dichiarare un vettore di nome x di 100 int;
II. dichiarare una variabile di nome y 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 il valore della variabile y è uguale a 0:
a. inserire un valore letto da standard input nella variabile y. Si suppone che da standard input verrà inserito un valore compreso tra 0 e 99;
b. eseguire la funzione shift applicata al vettore x e alla variabile y.
Io l'ho risolto in questo modo:
#include <iostream>
using namespace std;
void shift(int a[100], int b)
{
int i;
int j;
// 1) QUELLI ROSSI COPIARLI IN UN VETTORE DI SUPPORTO
int supp[b];
i = 99 - b + 1;
j = 0;
while (i < 100)
{
supp[j] = a[i];
j++;
i++;
}
// 2) QUELLI VERDI PORTARLI A SX DI B POSIZIONI PARTENDO DALL'ULTIMO ELEMENTO
i = 99 - b;
while (i >= 0) //non ho raggiunto il primo elemento (=1) in posizione 0
{
a[i + b] = a[i];
i--;
}
// 3) DAL VETTORE DI SUPPORTO COPIARE QUELLI ROSSI NELLE PRIME B POSIZIONI
i = 0;
while (i < b)
{
a[i] = supp[i];
i++;
}
}
int main()
{
int x[100], y, i;
for (i = 0; i < 100; i++)
{
cin >> x[i];
}
do{
cin >> y;
shift(x, y);
} while (y != 0);
return 0;
}
Quando vado a compilare (su Visual Studio) mi esce un errore in int supp
; e mi dice "l'espressione deve avere un valore costante", dato che è la prima volta che mi capita, come posso riisolvere?