Errore nella compilazione

di il
13 risposte

Errore nella compilazione

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?

13 Risposte

  • Re: Errore nella compilazione

    Non puoi dichiarare

    int supp;

    con b una variabile. In questo caso devi usare l'allocazione dinamica del vettore (con la malloc)
  • Re: Errore nella compilazione

    oregon ha scritto:


    Non puoi dichiarare

    int supp;

    con b una variabile. In questo caso devi usare l'allocazione dinamica del vettore (con la malloc)


    Cioe, come dovrei modificare?
    Scusami ma mi baso sulle lezioni del mio prof e questa cosa non l'ho mai sentita
  • Re: Errore nella compilazione

    oregon ha scritto:


    In questo caso devi usare l'allocazione dinamica del vettore (con la malloc)
    Magari meglio la new, visto che dovrebbe trattarsi di C++.

    oregon ha scritto:


    Non puoi dichiarare

    int supp;

    con b una variabile.

    Qui forse ci vorrebbe il discorsetto sullo standard C++ e i VLA!

    giulia18395 ha scritto:


    Cioe, come dovrei modificare?
    Scusami ma mi baso sulle lezioni del mio prof e questa cosa non l'ho mai sentita

    Premesso che non ho letto il codice, la soluzione di solito adottata è quella di definire un array di una prefissata dimensione massima MAX e controllare che la dimensione utilizzata sia minore o uguale di MAX.
  • Re: Errore nella compilazione

    Nippolo ha scritto:


    oregon ha scritto:


    In questo caso devi usare l'allocazione dinamica del vettore (con la malloc)
    Magari meglio la new, visto che dovrebbe trattarsi di C++.

    oregon ha scritto:


    Non puoi dichiarare

    int supp;

    con b una variabile.

    Qui forse ci vorrebbe il discorsetto sullo standard C++ e i VLA!

    giulia18395 ha scritto:


    Cioe, come dovrei modificare?
    Scusami ma mi baso sulle lezioni del mio prof e questa cosa non l'ho mai sentita

    Premesso che non ho letto il codice, la soluzione di solito adottata è quella di definire un array di una prefissata dimensione massima MAX e controllare che la dimensione utilizzata sia minore o uguale di MAX.


    Cioè,cosa dovrei aggiungere come codice? (scusa l'ignoranza, ma non mi è mai capitato ne tanto meno mi hanno mai spiegato una cosa simile )
  • Re: Errore nella compilazione

    Perché usi il compilatore di Visual Studio?
  • Re: Errore nella compilazione

    oregon ha scritto:


    Perché usi il compilatore di Visual Studio?
    Perchè durante l'esame abbiamo questo a disposizione (inoltre lo abbiamo sempre utilizzato a scuola)
  • Re: Errore nella compilazione

    E allora non deve essere la prima volta che avete quell'errore.
  • Re: Errore nella compilazione

    oregon ha scritto:


    E allora non deve essere la prima volta che avete quell'errore.
    No è la prima volta,anche perchè esami così "complessi", grazie al cielo, non capitano mai
  • Re: Errore nella compilazione

    Se con visual studio scrivi

    int vettore[x];

    in cui x è una variabile (per motivi che non ci serve qui dettagliare) avrai quell'errore.

    Devi usare la forma con una costante, ad esempio

    int vettore[100];

    oppure

    #define MAX 100
    int vettore[MAX];
  • Re: Errore nella compilazione

    oregon ha scritto:


    Se con visual studio scrivi

    int vettore[x];

    in cui x è una variabile (per motivi che non ci serve qui dettagliare) avrai quell'errore.

    Devi usare la forma con una costante, ad esempio

    int vettore[100];

    oppure

    #define MAX 100
    int vettore[MAX];
    Ma è un errore che compare solo su Visual Studio? (Dato che non so i prof che programma utilizzano per correggere)
    Ho sentito un mio amico che programmando in c e non ha questo problema
  • Re: Errore nella compilazione

    Il compilatore di Visual Studio non supporta i VLA e quindi avrai questo errore. Il tuo amico utilizzerà altri compilatori che li supportano.

    Utilizza i compilatori che usano i tuoi prof. e sei a posto.
  • Re: Errore nella compilazione

    oregon ha scritto:


    Il compilatore di Visual Studio non supporta i VLA e quindi avrai questo errore. Il tuo amico utilizzerà altri compilatori che li supportano.

    Utilizza i compilatori che usano i tuoi prof. e sei a posto.
    L'importante che non è un errore dell'esercizio allora...grazie mille!
  • Re: Errore nella compilazione

    Però non potrai individuare errori nel codice se non compili ed esegui l'esercizio
Devi accedere o registrarti per scrivere nel forum
13 risposte