[C] verificare sei valori della diagonale principale sono tutti uguali
Scrivere in C una funzione ricorsiva denominata diag che prende come (soli) parametri: una matrice quadrata di interi (array bidimensionale) e la dimensione della matrice. La funzione restituisce il valore letto sulla diagonale principale (dall’angolo in alto a sinistra a quello in basso a destra) se i valori sono tutti uguali, -1 altrimenti.
Questo è il testo dell'esercizio e questo è il modo in cui l'ho risolto:
Questo è il testo dell'esercizio e questo è il modo in cui l'ho risolto:
... int diag(m[][r], int r){ if(r==0) return m[r][r]; if(m[r][r]==m[r-1][r-1] return diag(m,r-1); }
Risposte
Il supporto alle matrici bidimensionali in C è molto limitato. Ogni matrice non è altro che un array in cui ogni elemento è a sua volta un array. Nel tuo caso sono array di \(r\) elementi. Quando fai la chiamata ricorsiva stai però supponendo che ogni elemento sia composto da \(r-1\) elementi (che è sbagliato). Hai bisogno di una seconda funzione che prende in input due dimensioni, una rappresenta il numero di righe e deve diminuire ad ogni iterazione, l'altra il numero di colonne e deve rimanere fisso. Spero sia stato chiaro. Dovresti anche invertire la dimensione e la matrice nei parametri della funzione se vuoi fare uso degli array di dimensione variabile. Manca inoltre il tipo degli elementi del parametro matriciale.