Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Paradigma estructurado
Paradigma estructurado.
Fuente: Pixabay
Objetivo:
Reconocer el paradigma más tradicional de programación.
Generalmente, cuando aprendemos a programar lo hacemos en el marco del Paradigma
Estructurado. En este componente vamos a hacer un repaso por los conceptos más importantes del
Paradigma Estructurado para luego, en los próximos componentes, poder introducirnos en los otros
paradigmas.
3.1 Conocimiento
Enviar comentariosReflexionar en Portafolio digitalDescargar
Como se mencionó en el componente anterior, un programa, en el Paradigma Estructurado, se ve como una secuencia ordenada de
instrucciones. Es decir, es una Programación Imperativa. El programa puede ser leído en secuencia desde el comienzo hasta el final sin
perder la continuidad (excepto porque suelen estar modularizados de modo que habría que ir a leer esa parte del código y volver al flujo
principal).
Los algoritmos de un programa bajo este paradigma son fácilmente representables en un diagrama de flujo. Para armar ese diagrama
utilizamos estos elementos:
Veamos un ejemplo. Supongamos que tenemos que cocinar algo. Como la cocina no es nuestro fuerte, en el Paradigma Estructurado,
el problema lo resolveríamos de esta manera:
Acá aparecen sentencias como For, While, procedimientos, etc. Hagamos un repaso por cada una de estas estructuras.
Procedimientos y estructuras de datos y control de la programación estructurada
Las estructuras secuenciales están compuestas por acciones que se ejecutan en el orden en que aparecen. Pueden ser instrucciones
de entrada o de salida. Por ejemplo:
Ambas son estructuras secuenciales: la primera de entrada (porque recibimos información desde afuera) y la segunda de salida (porque
mostramos esa información por algún medio, ya sea la pantalla, la impresora o cualquier otro).
Pero imagínense lo que podría pasar si codificamos todo un programa de miles de líneas con instrucciones secuenciales una tras otra...
sería ilegible, difícil de entender y, sobre todo, difícil de mantener. Es decir, las modificaciones que ese programa requiera a lo largo del
tiempo nos llevaría mucho tiempo hacerlas y serían propensas a introducir un montón de errores.
Y es por esto que surge la modularización que vimos en el componente anterior. Gracias a esta herramienta, habrá un flujo principal del
programa que llamará a otros módulos que son independientes y reutilizables y que saben resolver problemas particulares. En la
programación estructurada, a estos módulos se los suele llamar Módulos, Procedimientos, Rutinas o Subprogramas. Por ejemplo,
BuscarReceta() es un módulo que adentro incluye otros pasos. Por ejemplo:
Entonces un módulo es un conjunto de sentencias que realiza una determinada tarea y que se ejecutará cuando sea llamado por el flujo
principal. Este módulo a su vez puede llamar a otros módulos.
Otra ventaja que podemos mencionar de la modularización es que la codificación de los programas es más fácil y la podemos pensar
con una estrategia Top-Down. Es decir, yendo de lo general a lo particular como hicimos recién. Primero nos ocupamos de ver cuáles
eran los pasos generales y luego, bajamos a detalle uno de esos pasos (BuscarReceta). Y luego tendremos que ir bajando a detalle el
resto. Imagínense, si en lugar de poner módulos hubiésemos puesto el paso por paso de cada uno de esos módulos en el programa
principal. Sería muy difícil de entender y eso que estamos tratando con un programa muy chico.
Algo importante para recordar es la diferencia entre parámetros y argumentos. Un módulo en su definición, puede tener de 0 a n
parámetros. Sumar (int num1, int num2);
Cuando ese modulo sea invocado, esos parámetros se van a instanciar con argumentos de la siguiente manera Sumar (1, 2);
Hasta acá se habló de estructuras secuenciales pero no todo en un programa es secuencial. Muchas veces pasa que, dependiendo del
valor de ciertas variables se debe seguir un camino o el otro. Repasemos entonces, cómo hacer para alterar ese flujo secuencial.
Estructura de control
Estructura condicional
Luego están los IF anidados que tienen esta forma: IF (condición1) then (IF (condición2) then Accion1 else Accion2) else Accion3.
Por ejemplo:
IF NoJuegaVelez then (IF Llueve then MiroPeliculaEnCasa else VoyAlCine) else VoyALaCancha.
Es decir que, si juega Vélez, voy a la cancha, pero si no juega, mis planes dependen de si llueve o no llueve como en el caso anterior.
Este es el caso del Switch y se utiliza cuando hay muchas opciones para elegir al momento de tomar la decisión. Antes teníamos dos
decisiones llueve o no llueve, juega Vélez o no juega. Pero qué pasa si lo que hagamos depende de qué día de la semana es. Ahí
tenemos 7 opciones. Eso se representaría así:
SWITCH (diaDeLaSemana)
Lunes: IrAlGimansio();
Martes: IrAlSupermercado();
Miércoles: IrALaPeluqueria();
Jueves: IrAlGimansio();
Viernes: SalidaConAmigos();
Sabado: SalidaConPareja();
Domingo: AsadoFamiliar();
End switch;
Claro que esto también podría resolverse con muchos IF anidados pero sería demasiado engorroso.
Estructuras cíclicas
Estas son las que se utilizan para repetir un determinado conjunto de acciones. La primera de ellas es el WHILE
While (condición) do
Accion1;
Accion2;
End while
Por ejemplo:
Ingresar(Edad);
Mientras Edad >= 18 do
MostrarEnPantalla(“Acceso autorizado”);
Ingresar(Edad);
End while
Mientras que la edad que se ingrese sea mayor o igual a 18 años, se mostrará por pantalla un mensaje de Acceso Autorizado y se
volverá a pedir que ingrese otra edad. Cuando se ingrese una edad menor a 18 años, se cortará el ciclo.
La otra estructura cíclica es el REPEAT. En este caso la secuencia de control está al final por lo que la secuencia de control se ejecuta
siempre (por lo menos una vez). Esto no ocurría en el WHILE ya que, si la condición no se cumplía, no ingresaba ni una vez a ejecutar
su contenido. La estructura es:
REPEAT
Accion1;
Accion2;
Until (condicion);
Espacio
Edad:= 18;
Repeat
MostrarEnPantalla(“Acceso autorizado”);
Ingresar(Edad);
Es decir, el While itera mientras que la condición sea verdadera y el Repeat itera hasta que la condición sea verdadera.
Hay otra forma de iterar que es a través del FOR que permite iterar una cierta cantidad de veces. Por ejemplo, si queremos pedir 5
edades sería:
I:= 1;
For i:= 1 to 5 do
Ingresar(FechaDeNacimiento);
Edad:= Calcular(FechaDeNacimiento);
I:= i+1;
End for
Estructuras de datos
Las estructuras más conocidas con las que solemos manejarnos en este paradigma son:
Arreglos o vectores: conjunto de datos del mismo tipo a las que se accede a través de un subíndice. Son estáticos (tienen reservado el
espacio en memoria). Por ejemplo: Vector[i].
Matrices: son arreglos multidimensionales a los que se accede a través de n subíndices. También son estáticos. Por ejemplo: Celda[i][j]
Registros: a diferencia de los anteriores nos permiten combinar diferentes tipos de datos. Por ejemplo:
Nombre: string;
Documento: integer;
Edad: integer;
Sexo: boolean;
End registro.
Recursividad
La recursividad es la propiedad mediante la cual un subprograma o rutina puede llamarse a sí mismo para realizar una tarea. A pesar de
que resulta muy útil, no todos los lenguajes admiten hacer uso de esta propiedad. El ejemplo clásico del uso de esta propiedad es el
factorial. El factorial de un número (se simboliza n!) es:
Para simplificar esa fórmula podemos decir que el factorial se define de esta forma:
Por ejemplo:
0! = 1
1!= 1*0! = 1*1= 1
2! = 2*1! = 2 * 1 = 2
3! = 3*2!= 3*2= 6
4!=4*3!=4*6= 24
Y así sucesivamente. De la misma forma que definimos el factorial de dos maneras (recursiva y no recursiva), en código lo podemos
implementar igual, de una forma recursiva o no recursiva:
begin
aux:=1;
factorial:=aux
end;
Función recursiva
function factorial(n:word):word;
begin
else factorial:=1
end;
Hasta acá fue un repaso del paradigma estructurado. Veamos un ejemplo integrador de todos estos conceptos:
El sistema requerirá la fecha del evento, la cantidad de asistentes y el lugar donde se debe preparar el mismo. Se sabe que:
Realizar un programa que gestione esto y al finalizar muestre por pantalla el pedido de esta manera:
3 ensaladas,
10 botellitas de agua y
5 ensaladas de frutas
Vamos a hacer un programa modular. Si lo pensamos a grandes rasgos los pasos que deberíamos hacer son:
A partir de esto los invitamos a pensar, ¿Cómo diseñar el algoritmo que permita resolver este problema representándolo
en un diagrama de flujo?
Sugerimos proponer a los alumnos que se distribuyan en grupos de no más de 4 personas que lo resuelvan a través de
un diagrama de flujo.
Luego de corregir las soluciones propuestas, hacer un análisis de los errores comunes que aparecieron.
-¿Qué cambiarías para tus futuras prácticas con los/las estudiantes de la ETP?
A través de la actividad diseñamos el algoritmo que permita resolver el problema representándolo en un diagrama de flujo.
Actividad optativa.