Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] esercizio brute-force su 8 regine scacchi

    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?
    Ultima modifica di lostworld; 21-08-2015 a 12:51

  2. #2
    ho risolto, l'errore era nel rand % 7, ho messo rand % 8 e adesso va.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.