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.

Necesito ayuda por favor.

Este programa no me da ningún número primo en el array después de ejecutarlo. Este es un programa que toma una matriz 2D [n x m] y calcula cuántos números primos hay en la matriz 2D.

int isprime(int n)
{
    int k;
    if (n <= 1)
        return 0;
    for (k = 2; k <= (n / 2); k++){
        if (n % k == 0)
         return 0;
    }
    return 1;
}
}
int primecount(int x, int y, int a[x][y]){
    int r, c, count = 0;
    for(r = 0; r < x; r++) {
        for(c = 0; c < y; c++) {
            if(isprime(a[r][c]))
            {
                    count++;
            }
        }
    }
    return count;
}
int main()
{
    int n, m, i, j, z;
    printf("Ingrese el número de filas: ");
    scanf("%d", &n);
    printf("\n");
    printf("Ingrese el número de columnas: ");
    scanf("%d", &m);
    printf("\n");
    int a[n][m];
    printf("Ingrese los elementos de la matriz: \n");
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            scanf("%d", &a[i][j]);
    }
    z = primecount(n, m, a[n][m]);
    printf("\n");
    printf("El número de números primos en la matriz es: %d", z);
    printf("\n");
    return 0;
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Pregunta

    ¿Cuál es el problema con este programa y cómo se puede resolver?

    Respuesta

    El problema con este programa es que en la función primecount, el parámetro a debe pasarse como un puntero a una matriz 2D (int (*a)[y]) en lugar de un solo entero (int a[x][y]).

    La función primecount corregida se vería así:

    int primecount(int x, int y, int (*a)[y]){
        int r, c, count = 0;
        for(r = 0; r < x; r++) {
            for(c = 0; c < y; c++) {
                if(isprime(a[r][c]))
                {
                        count++;
                }
            }
        }
        return count;
    }
    

    Además, la función isprime se puede simplificar iterando solo hasta la raíz cuadrada de n en lugar de la mitad de n. Entonces la función isprime corregida sería:

    int isprime(int n)
    {
        int k;
        if (n <= 1)
            return 0;
        for (k = 2; k*k <= n; k++){
            if (n % k == 0)
             return 0;
        }
        return 1;
    }
    

    Al hacer estos cambios, el programa debería contar correctamente el número de números primos en la matriz 2D.

Comments are closed.