Grazie skynet!! Bhe dai almeno il fatto che sono più che altro errori di sintassi, che devo ancora imparare a conoscere meglio, e di distrazione (l'inizializzazione di z) un po' mi consola.. In effetti con queste correzioni e togliendo le & in (int& v[100], int&a) il programma gira..
Comunque ho un altro problema con un altro esercizio, questa volta però ci deve essere qualcosa dietro che sicuramente mi sfugge, ma non si tratta di sintassi. Provo a spiegare...
Il problema che devo risolvere è il seguente:
/*
Istruzione: Data una matrice di nome M contenente 2 righe e 5 colonne, scrivere un procedimento che legge
da standard input una sequenza di numeri interi e che inserisce nella prima riga di M i numeri pari della
sequenza e nella seconda riga di M in numeri dispari della sequenza.
*/
Io avevo pensato di risolverlo in questo modo:
#include<iostream>
using namespace std;
int main()
{
int M[2][5];
int c0, c1, a;
c0 = 0;
c1 = 0;
while((c0 < 5) || (c1 < 5))
{
cout << "Inserisci un numero intero: ";
cin >> a;
if(a % 2 == 0)
{
{
M[0][c0] = a;
++c0;
}
}
else
{
M[1][c1] = a;
++c1;
}
}
return 0;
}
L'unico problema è che se ad esempio inserisco 20 numeri pari e poi 5 dispari, alla fine dell'esecuzione mi compare la schermata di errore: Run-Time Check Failure #2 - Stack around the variable 'M' was corrupted.
Ho provato, per tentativi successivi, a risolverlo in diversi modi, e alla fine sono riuscito a trovare un algoritmo che non mi dà quell'errore, però di fatto non ho ancora capito cos'è che non funziona nel primo 'metodo'. Questo è l'algoritmo con cui funziona:
#include<iostream>
using namespace std;
int main()
{
int M[2][5];
int c0, c1, a;
c0 = 0;
c1 = 0;
while((c0 < 5) || (c1 < 5))
{
cout << "Inserisci un numero intero: ";
cin >> a;
if(a % 2 == 0)
{
if(c0 < 5)
{
M[0][c0] = a;
++c0;
}
}
else
{
if(a % 2 != 0)
{
if(c1 < 5)
{
M[1][c1] = a;
++c1;
}
}
}
}
return 0;
}
Però continuo a non capire dove sia l'errore nel primo procedimento...