ciao a tutti, sono nuovo su questo forum, e sono alle primissime armi per quando riguarda la programmazione in generale.
Sto facendo un esercizio che mi propone il libro ma non riesco a capire dove sbaglio e se sbaglio.
codice:
#include <stdio.h>#include <time.h>
#include <stdlib.h>
#include <string.h>
int board[8][8] = {{0}};
void printarray(void);
void writearray(int,int);
int funzione(void);
int main() {
int regine = 0, x, y;
srand(time(NULL));
while(regine < 6) {
if(funzione()) {
do {
x = rand() % 7;
y = rand() % 7;
} while(board[x][y]);
++regine;
writearray( x, y);
board[x][y] = 10;
}
else {
memset(board, 0, 8*8*sizeof board[0][0]);
regine = 0;
}
}
printarray();
return 0;
}
void writearray( int X, int Y) {
int i;
for (i = 1; i < 8; i += 1) {
if(X + i <= 7)
board[X + i][Y] = 1;
if(Y + i <= 7) {
board[X][Y + i] = 1;
if (X - i >= 0)
board[X - i][Y + i] = 1;
if(X + i <= 7)
board[X + i][Y + i] = 1;
}
if(X - i >= 0)
board[X - i][Y] = 1;
if(Y - i >= 0) {
board[X][Y - i] = 1;
if (X - i >= 0)
board[X - i][Y - i] = 1;
if(X + i <= 7)
board[X + i][Y - i] = 1;
}
}
}
void printarray(void) {
int i, y;
printf(" 1 2 3 4 5 6 7 8\n\n");
for (i = 0; i < 8; i += 1) {
printf("%d ", i + 1);
for (y = 0; y < 8; y += 1) {
if (board[i][y] != 10)
printf(" |");
else
printf(" R |");
}
printf("\n -------------------------------\n");
}
}
int funzione(void) {
int i, x;
for (i = 0; i < 8; i += 1) {
for (x = 0; x < 8; x += 1) {
if(!board[i][x])
return 1;
}
}
return 0;
}
Con il while impostato a regine < 6 va e non va, alcune volte va in loop, con il 7 e 8 invece non va proprio.
E intrinseco all'algoritmo questo comportamento oppure sta qualcosa che non va nel codice?