/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN
Data: 10/01/2025

Completare il programma dato il main (da
non modificare)
Il programma dovrà:
● riempire una matrice di valori casuali;
● impostare le colonne 2 e 4 con almeno 3
  valori consecutivi successivi (es: ..., 14,
  15, 16. ...);
● analizzare l’intera matrice alla ricerca
  di eventuali colonne contenenti almeno 3
  valori consecutivi successivi e stamparle;
● altro come richiesto dal main (da non
  modificare);
*/

#include<iostream>
#include <iomanip>

using namespace std;

typedef struct {
	int x, r;
	bool y;
	char z;
	int w[10];
} studente, insegnante;

void generaMatrice(int m[][10], size_t righe, size_t colonne);
void stampaMatrice(int m[][10], size_t righe, size_t colonne);
void modificaColonne(int m[][10], size_t righe);
void stampaColonneConsecutive(int m[][10], size_t righe, size_t colonne);

int main() {
    srand(time(0));

    int matrice[5][10];
    int righe = 5, colonne = 10;

    generaMatrice(matrice, righe, colonne);
    cout << "Matrice generata:" << endl;
    stampaMatrice(matrice, righe, colonne);

    modificaColonne(matrice, righe);
    cout << "\nMatrice modificata (colonne 2 e 4 con valori successivi):" << endl;
    stampaMatrice(matrice, righe, colonne);

    cout << endl << "Colonne con valori consecutivi: " << endl;
	stampaColonneConsecutive(matrice, righe, colonne);

    return 0;
}

void generaMatrice(int m[][10], size_t righe, size_t colonne) {
    for(size_t i=0; i<righe; i++)
        for(size_t j=0; j<colonne; j++)
            m[i][j] = rand()%40+10;
}

void stampaMatrice(int m[][10], size_t righe, size_t colonne) {
    for(size_t i=0; i<righe; i++) {
        for(size_t j=0; j<colonne; j++)
            cout << setw(4) << m[i][j];
        cout << endl;
    }
}

void modificaColonne(int m[][10], size_t righe) {
    size_t riga = rand()%(righe-2)+1;
    m[riga-1][2] = m[riga][2]-1;
    m[riga+1][2] = m[riga][2]+1;

    riga = rand()%(righe-2)+1;
    m[riga-1][4] = m[riga][4]-1;
    m[riga+1][4] = m[riga][4]+1;
}

void stampaColonneConsecutive(int m[][10], size_t righe, size_t colonne) {
    for(size_t j=0; j<colonne; j++) {
        for(size_t i=1; i<righe-1; i++) {
            if(m[i-1][j] == m[i][j]-1 && m[i+1][j] == m[i][j]+1) {
                for(size_t k=0; k<righe; k++)
                    cout << setw(4) << m[k][j];
                cout << endl;
            }
        }
    }
}