Consulta solución primer parcial ( control 4 )

Consulta solución primer parcial ( control 4 )

de Juan Diego Ferreyra Chihan -
Número de respuestas: 2

Hola!

Necesito un poco de ayuda para entender la solución presentada para el ejercicio de desarrollo.

Según la letra ( adjunto debajo ) nos piden implementar procedimientos que lean de la entrada estándar una oración / n oraciones, pero asimismo menciona el no uso de read ni readln ( únicos procedimiento de entrada de datos vistos en el curso hasta ahora ), lo cuál ya de por sí da a entender que no es posible leer los datos de entrada de la consola con el conocimiento visto en el curso ( hay otras formas cómo readkey, pero no fueron dadas en el curso ).

Mis dudas respecto a la solución es la siguiente:

1- Dentro de CantidadDeLetras, la variable largo está inicializada cómo boolean, pero luego se le asigna un valor integer ( que sería el retorno de leerPalabraLargo ), ésto entiendo que no debería ni de compilar.

2- cant en oracionMasLarga entiendo que no está inicializado, según nos dijeron en el curso es una mala práctica dado que genera un comportamiento indefinido, o algún error en tiempo de compilación. De todas formas siguiendo el razonamiento cuando se pasa la variable hacia cantidadDeLetras(cant) dentro se "transforma" a cnt , si cnt := 0 y largo es booleano ( asumiendo que el programa compile y ejecute ) debería retornar siempre 0.

3- En qué momento se lee la entrada completa de la frase? porque si no está en oracionMasLarga ni en cantidadDeLetras, no pueden usarse read ni readln no debería de recibirse la frase por parámetro en el procedure oracionMasLarga?

Letra y solución, ejercicio de desarrollo, control 4

En respuesta a Juan Diego Ferreyra Chihan

Re: Consulta solución primer parcial ( control 4 )

de Aiala Rosá - InCo -
Hola,

Sobre el punto 1, efectivamente, la declaración de la variable largo debe ser de tipo integer, ya se corrigió, gracias por hacer la observación.

Sobre las otras dudas:

El procedimiento que lee los caracteres de la entrada es leerPalabraLargo, que se asume ya implementado y se puede usar en donde se necesite. Este procedimiento es exactamente igual al que tuvieron que implementar para la tarea 1 del laboratorio, y ahí sí se podía (debía) usar read o readln.

El parámetro cnt de CantidadDeLetras está pasado por referencia, porque devuelve un dato como resultado, por lo que se asume que es usado de forma correcta (inicializado y actualizado) dentro del propio procedimiento (como muestra nuestra solución).

Saludos,
Aiala
En respuesta a Juan Diego Ferreyra Chihan

Re: Consulta solución primer parcial ( control 4 )

de Luis Sierra -
hola juan,

con respecto a tu consulta 2; la invocacion a un procedimiento que tiene pasaje por referencia es una forma de inicializar variables. en este ejercicio aparece en varios lugares:
1. es la forma de asignar valores a largo y fin en CantidadDeLetras; luego de invocar leerPalabraLargo esas variables obtienen un valor bien definido.
2. tambien es la forma de asignar valores a largo y cant en OracionMasLarga.

esto es lo que sucede cuando usamos read; invocamos read(x), y esa forma de inicializar x es exactamente la misma que acabamos de ver.

por otra parte, dices "cuando se pasa la variable hacia cantidadDeLetras(cant) dentro se "transforma" a cnt , si cnt := 0 y largo es booleano ( asumiendo que el programa compile y ejecute ) debería retornar siempre 0". me parece que no estas tomando en cuenta que largo recibira un valor luego de la invocacion de leerPalabraLargo, por lo dicho antes, y como los largos de las palabras son mayores que cero, el acumulador cnt siempre terminara en ese procedimiento con un valor estrictamente mayor que cero.

saludos

luis