es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problemas al utilizar código de un código previo aquí en Stackoverflow.com – Juego de la vida en C con OpenMP.

Intenté replicar el código en esta publicación en mi IDE de Visual Studio y obtuve algunos errores, aunque no cambié ninguna parte del código. El código proviene de esta publicación –

Este es el código de la publicación –

// Intercambio de las dos matrices   
#define SWAP_BOARDS( b1, b2 )  do { \
char* temp = b1; \
b1 = b2; \
b2 = temp; \
} while(0)

// Simplificando el acceso a los elementos de la matriz
#define BOARD( G, X, Y )  ((G)[NC*(X)+(Y)])

char* sequential_game_of_life (char* outgrid, char* ingrid, 
const int nrows, const int ncols, const int gens_max) {

const int NC = ncols;
int curgen, i, j;

for (curgen = 0; curgen < gens_max; curgen++)
{

for (i = 0; i < nrows; i++)
{
for (j = 0; j < ncols; j++)
{
    const int inorth = mod (i-1, nrows);
    const int isouth = mod (i+1, nrows);
    const int jwest = mod (j-1, ncols);
    const int jeast = mod (j+1, ncols);

    const char neighbor_count = 
BOARD (ingrid, inorth, jwest) + 
BOARD (ingrid, inorth, j) + 
BOARD (ingrid, inorth, jeast) + 
BOARD (ingrid, i, jwest) +
BOARD (ingrid, i, jeast) + 
BOARD (ingrid, isouth, jwest) +
BOARD (ingrid, isouth, j) + 
BOARD (ingrid, isouth, jeast);

    BOARD(outgrid, i, j) = alivep (neighbor_count, BOARD (ingrid, i, j));
}
}
SWAP_BOARDS( outgrid, ingrid );
}
return outgrid;
}

Estoy obteniendo los siguientes errores:

Errores
     char* temp = b1 -> la expresión debe tener un valor constante
     b1 = b2;    ->  la expresión debe tener un valor constante
     b2 = temp;  ->  la expresión debe tener un valor constante

Además, la última línea del código muestra un error como un “token no reconocido”:

SWAP_BOARDS( outgrid, ingrid ); -> token no reconocido

Por favor, ¿cómo puedo resolver estos problemas? Gracias por tu tiempo y ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la definición de la macro SWAP_BOARDS, la cual puede no estar funcionando correctamente con tu versión del compilador. Una solución potencial es reemplazar la macro SWAP_BOARDS por una función que realice la misma acción. Aquí tienes una versión actualizada del código que utiliza una función de intercambio en lugar de la macro:

    // Función para intercambiar las dos matrices
    void swap_boards(char** b1, char** b2) {
        char* temp = *b1;
        *b1 = *b2;
        *b2 = temp;
    }
    
    char* sequential_game_of_life (char* outgrid, char* ingrid, 
                                   const int nrows, const int ncols, const int gens_max) {
    
        const int NC = ncols;
        int curgen, i, j;
    
        for (curgen = 0; curgen < gens_max; curgen++) {
            for (i = 0; i < nrows; i++) {
                for (j = 0; j < ncols; j++) {
                    const int inorth = mod (i-1, nrows);
                    const int isouth = mod (i+1, nrows);
                    const int jwest = mod (j-1, ncols);
                    const int jeast = mod (j+1, ncols);
    
                    const char neighbor_count = 
                        BOARD (ingrid, inorth, jwest) + 
                        BOARD (ingrid, inorth, j) + 
                        BOARD (ingrid, inorth, jeast) + 
                        BOARD (ingrid, i, jwest) +
                        BOARD (ingrid, i, jeast) + 
                        BOARD (ingrid, isouth, jwest) +
                        BOARD (ingrid, isouth, j) + 
                        BOARD (ingrid, isouth, jeast);
    
                    BOARD(outgrid, i, j) = alivep (neighbor_count, BOARD (ingrid, i, j));
                }
            }
            // Intercambia las dos matrices usando la función de intercambio
            swap_boards(&outgrid, &ingrid);
        }
        return outgrid;
    }
    

    Esto debería resolver los errores que estás viendo con la macro SWAP_BOARDS y el token no reconocido. Sin embargo, si sigues viendo errores, es posible que debas proporcionar más información sobre los errores que estás encontrando.

Comments are closed.