Ultima modifica da un moderatore:
Buongiorno, avrei bisogno di un aiutino su un esercizio in linguaggio C se possibile.
Progetto: Scacchi con soli Alfieri
Una matrice quadrata, con entrate che possono valere zero o uno, rappresenta una scacchiera dove non è presente nessuna pedina se il valore è pari a zero, mentre è presente un alfiere se il valore è pari uno. Gli alfieri possono attaccarsi come nelle regole degli scacchi, perciò esclusivamente in diagonale. Un attacco è quindi rappresentato da una coppia di alfieri che occupano due posizioni che stanno su una stessa diagonale.
Si scriva un programma che abbia le seguenti caratteristiche:
-Chieda all’utente di caricare una matrice quadrata di dimensione a scelta dell’utente e di inserire le righe della matrice che possono contenere i valori 0 o 1. La matrice rappresenta la scacchiera, le entrate pari a zero rappresentano caselle in cui non è presente nessuna pedina, mentre le entrate pari a uno rappresentano le caselle dove sono presenti gli alfieri.
-Stampi a video la matrice inserita.
-Contenga una funzione che calcoli in numero di attacchi totali possibili e stampi a video il numero ottenuto.
MA MI Dà RISULTATI ERRATI. DOVE HO SBAGLIATO?
Progetto: Scacchi con soli Alfieri
Una matrice quadrata, con entrate che possono valere zero o uno, rappresenta una scacchiera dove non è presente nessuna pedina se il valore è pari a zero, mentre è presente un alfiere se il valore è pari uno. Gli alfieri possono attaccarsi come nelle regole degli scacchi, perciò esclusivamente in diagonale. Un attacco è quindi rappresentato da una coppia di alfieri che occupano due posizioni che stanno su una stessa diagonale.
Si scriva un programma che abbia le seguenti caratteristiche:
-Chieda all’utente di caricare una matrice quadrata di dimensione a scelta dell’utente e di inserire le righe della matrice che possono contenere i valori 0 o 1. La matrice rappresenta la scacchiera, le entrate pari a zero rappresentano caselle in cui non è presente nessuna pedina, mentre le entrate pari a uno rappresentano le caselle dove sono presenti gli alfieri.
-Stampi a video la matrice inserita.
-Contenga una funzione che calcoli in numero di attacchi totali possibili e stampi a video il numero ottenuto.
C:
#include <stdio.h>
#include <time.h>
int numeroAttacchi( int latomatrice, int board[latomatrice][latomatrice]){
int attacchi = 0;
for(int i = 0; i < latomatrice; i++){
for(int j = 0; j < latomatrice; j++){
if(board[i][j]==1){
// i++ j--
if(j - 1 >= 0 && i + 1 <latomatrice)
if(board[i + 1][j - 1])
attacchi++;
if(j - 2 >=0 && i + 2 < latomatrice)
if(board[i + 2][j - 2])
attacchi++;
// i ++ j++
if(j + 1 < latomatrice && i + 1 < latomatrice)
if(board[i + 1][j + 1])
attacchi++;
if(j + 2 < latomatrice && i + 2 < latomatrice)
if(board[i + 2][j + 2])
attacchi++;
// i -- j++
if(j + 1 < latomatrice && i - 1 >= 0)
if(board[i - 1][j + 1])
attacchi++;
if(j + 2 < latomatrice && i - 2 >= 0)
if(board[i - 2][j + 2])
attacchi++;
//i-- j--
if(j - 1 >= 0 && i - 1 >= 0)
if(board[i - 1][j - 1])
attacchi++;
if(j - 2 >= 0 && i - 2 >= 0)
if(board[i - 2][j - 2])
attacchi++;
}
}
}
return attacchi;
}
int main (){
int latomatrice;
printf("\nInserisci il lato della matrice quadrata: ");
scanf("%d", &latomatrice);
printf("facciamo una matrice %d x %d \n", latomatrice, latomatrice);
srand(time(NULL));
int board[latomatrice][latomatrice];
for(int i = 0; i < latomatrice; i++){
for(int j = 0; j < latomatrice; j++){
board[i][j] = (rand() % 100 < 64);
printf("%d ",board[i][j]);
}
printf("\n");
}
int attacchi = numeroAttacchi(latomatrice,board);
printf("gli attacchi totali sono %d", attacchi/2);
}
MA MI Dà RISULTATI ERRATI. DOVE HO SBAGLIATO?