Ejercicio 7 P1

Ejercicio 7 P1

de Juan Pedro Fernández Muhlbauer -
Número de respuestas: 4

Buenas. Estoy teniendo problemas con este ejercicio. Ya lo revise varias veces y no encuentro donde puede estar mal, ya que me imprime cualquier cosa menos no que espero que imprima (lo estoy probando con mi cedula que termina en -9). 

Además, tal como esta aclarado dentro del programa por comentarios, si la variable ced[7] la declaro dentro de la función verif(), el programa me tira cualquier número (se puede ver en una de las fotos), y si la declaro como variable global fuera de esa función, siempre me imprime el valor 10. Tampoco estoy entendiendo este comportamiento. 

En respuesta a Juan Pedro Fernández Muhlbauer

Re: Ejercicio 7 P1

de Juan Pedro Fernández Muhlbauer -

Esto es lo que imprime con ced[7] declarado dentro de verif().


En respuesta a Juan Pedro Fernández Muhlbauer

Re: Ejercicio 7 P1

de Leopoldo Agorio -
Hola Juan. Antes de tratar de debuggear en concreto lo que tienes programado, unas acotaciones sobre la letra y la filosofía del ejercicio así luego puedes ayudarme a ayudarte mejor.

La idea de este práctico más que los pequeños cambios que puedan haber por el lenguaje C es que empiecen a modularizar (partir problemas grandes en problemas más pequeños). Si te fijas, la parte a del ejercicio solicita que armes una funcion verif que "tome como argumentos los 7 dígitos de la cédula como un arreglo de enteros".

Esto quiere decir que esta función debería tener la siguiente declaración de encabezado: int verif( int ced[7]);
Y para llamarla y probar que funciona podrías tener un main parecido a este (si tu cedula fuera por ejemplo 1.234.567:
int main(char argc, char **argv) {
int ced[7] = {1,2,3,4,5,6,7};
int guion;
guion = verif(ced);
printf("guion = %d \n", guion);
}

con ese módulo ensayado y validado podés empezar a preocuparte por la parte b (que es el ejercicio 6 a su vez) de como traducir un entero de varios dígitos en un arreglo que lo represente dígito a dígito. Un comentario mas, en esta la idea no era usar scanf sino los argumentos de linea de comando (argc argv, podes ver mas en este link por ejemplo)

Un poco la filosofía del curso se guía por los principios de "divide y vencerás" y "Roma no se construyó en un día". Mientras más puedas fragmentar el problema en módulos y probar su funcionamiento por separado más fácil te va a ser llegar a programas más elaborados.
En respuesta a Leopoldo Agorio

Re: Ejercicio 7 P1

de Juan Mateo Ferrari Beninca -
Buenass, yo estaba haciendo este ejercicio y también me pasó algo parecido, entré al foro para hacer la pregunta y me encontré con esta conversación que ya estaba arrancada.

Leí las sugerencias y ahora me voy a poner a escribirlo de nuevo y ver si me pueden ayudar; pero revise el código que tengo hasta ahora muchas veces y no logro entender que es lo que esta mal y hace que no funcione, quería saber si me podían ayudar a darme cuenta.

Gracias!
Adjunto Captura de pantalla de 2021-03-18 17-32-24.png
Adjunto Captura de pantalla de 2021-03-18 17-32-28.png
En respuesta a Juan Mateo Ferrari Beninca

Re: Ejercicio 7 P1

de Leopoldo Agorio -
Hola!
Todo parecería indicar que getchar no esta haciendo lo que crees que esta haciendo. sugiero 2 cosas:
1) probar verif sin que la entrada que se le da dependa de getchar, por ejemplo con el main que puse yo ( pasarle int ced[7] = {1,2,3,4,5,6,7}; )
2) depurar qué es lo que está haciendo getchar, por ejemplo en el caso de Juan Mateo colocando un printf que imprima c[0]...c[7] antes de ejecutar verif para ver qué le estan pasando.

Más allá de eso, como comenté la idea es que la cédula la pasen en la llamada al programa, que se corra como ./a.out 1234567, y ahí usan lo del link que adjunté. Prueben y vayan actualizandome.

Otra cosa, sus datos personales son absolutamente suyos, pero sugiero no publicar sus cédulas de identidad en este foro y poner una falsa para reportar las dudas como estoy haciendo yo. El código verificador para 1.234.567 es 2 según mis cuentas.