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.

El cero en el array está causando un error semántico. ¿Cómo superarlo?

La pregunta es hacer un programa para leer un arreglo de enteros del usuario y pasarlo a una función que toma dos arreglos – el primer arreglo con los valores obtenidos del usuario y el segundo arreglo como un arreglo vacío. El objetivo es añadir los índices de los números pares presentes en el arreglo original al arreglo vacío y retornar el número de números pares presentes en el arreglo original.

Si la entrada fue:

Ingresa el número de elementos: 5
Ingresa el elemento [1]: 0
Ingresa el elemento [2]: 1
Ingresa el elemento [3]: 2
Ingresa el elemento [4]: 3
Ingresa el elemento [5]: 4

Entonces la salida muestra:

37945345.

que es un valor basura dentro del primer elemento del arreglo vacío.

Este es el código:

#include <stdio.h>

int evenIndices(int origArr[], int emptyArr[]) {

int i = 0, j = 0;
int evenCount = 0;

while (origArr[i] != '\0') {
    if (origArr[i] % 2 == 0) {
        emptyArr[j] = i;
        evenCount ++;
        j++;
    }
    i++;
}

return evenCount;

}

int main() {

int numOfElts;
printf("Ingresa el número de elementos: ");
scanf("%d", &numOfElts);
int arr[numOfElts];

for (int i = 0; i < numOfElts; i++) {
    printf("Ingresa el elemento [%d]: ", i + 1);
    scanf("%d", &arr[i]);
}

arr[numOfElts] = '\0';

int indexArr[numOfElts];
int evenCount = evenIndices(arr, indexArr);

printf("Hay %d números pares. \n", evenCount);
printf("*** Índices con Números Pares en el Arreglo Original *** \n");

for (int i = 0; i < evenCount - 1; i++) {
    printf("%d, ", indexArr[i]);
}

printf("%d. \n", indexArr[evenCount - 1]);

return 0;

}

Este código funciona para todos los números en el arreglo excepto para el 0. Si se ingresa 0, la función asume que es igual a ‘\0’ y sale del bucle. ¿Cuál es la solución a esto?</stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La solución a esto es modificar la condición de terminación del bucle while en la función evenIndices. En lugar de verificar '\0', que en realidad es un carácter nulo, debemos verificar si i es menor que el número de elementos en origArr. Esto aseguraría que el bucle se ejecute para todos los elementos del array, incluido el cero. El bucle while modificado se vería así:

    while (i < sizeof(origArr)/sizeof(origArr[0])) {
        if (origArr[i] % 2 == 0) {
            emptyArr[j] = i;
            evenCount ++;
            j++;
        }
        i++;
    }
    

    Aquí, sizeof(origArr)/sizeof(origArr[0]) da el número de elementos en el array, que es la condición de terminación real que necesitamos. Esto solucionaría el problema de que la función termine prematuramente para un array con un cero como uno de sus elementos.

Comments are closed.