Volver a la portadaCiencias Computacionales y Tecnologías Digitales · 1° Bachillerato · Cambiar asignatura
Empezar gratis
1° EMS · Ciencias Computacionales y Tecnologías Digitales
Algoritmia y pensamiento computacional · Algoritmos y estructuras de control

Modularización de algoritmos

Imaginá que tu liceo de Salto organiza una feria y hay que armar un programa para todo: cargar notas, calcular promedios, contar quiénes salvaron y mostrar un resumen. Si lo escribís todo en un único bloque, se vuelve larguísimo y difícil de corregir. ¿Cómo lo hacen los programadores para no perderse? Dividen el problema en piezas pequeñas. Eso se llama modularizar.

Qué es un subprograma

Un subprograma (o módulo) es un trozo de algoritmo con nombre propio que resuelve una tarea concreta. Se escribe una vez y se puede llamar todas las veces que haga falta desde el programa principal.

Es como una receta dentro de un libro de cocina: el menú del día (programa principal) dice «hacer la salsa» y vos vas a la página de la salsa (subprograma), la seguís y volvés.

Un programa principal que llama a tres subprogramas Programa principal cargarNotas calcularPromedio mostrarResumen
Practica★☆☆Sin empezar
Explicá con tus palabras qué es un subprograma (o módulo) en un algoritmo y nombrá dos ventajas de dividir un programa en módulos en lugar de escribirlo todo en un único…

Explicá con tus palabras qué es un subprograma (o módulo) en un algoritmo y nombrá dos ventajas de dividir un programa en módulos en lugar de escribirlo todo en un único bloque.

Resolver

Funciones y subprocesos en PSeInt

PSeInt tiene dos tipos de subprogramas:

  • Función: hace un cálculo y devuelve un valor (un resultado que se puede guardar o usar).

  • SubProceso (procedimiento): realiza una tarea, como mostrar un mensaje, pero no devuelve nada.

Funcion r <- doble(x)

    r <- x * 2

FinFuncion

SubProceso saludar(nombre)

    Escribir "Hola, ", nombre

FinSubProceso

En la función, doble es el nombre, x es el parámetro (dato de entrada) y r es la variable cuyo valor se devuelve. El subproceso saludar recibe un parámetro pero no devuelve nada.

Función SubProceso
¿Devuelve valor? Sí No
Se usa para calcular hacer una acción
Ejemplo area(base, altura) mostrarMenu()
Practica★☆☆Sin empezar
En PSeInt existen dos tipos de subprogramas: las funciones y los procedimientos (llamados también subprocesos sin valor de retorno). Indicá cuál es la diferencia…

En PSeInt existen dos tipos de subprogramas: las funciones y los procedimientos (llamados también subprocesos sin valor de retorno). Indicá cuál es la diferencia principal entre ambos y dá un ejemplo de tarea que resolverías con cada uno.

Resolver
Practica★☆☆Sin empezar
Observá esta función escrita al estilo de PSeInt: Indicá cuál es el nombre de la función, cuál es su parámetro, qué valor devuelve y qué resultado se obtiene al llamarla…

Observá esta función escrita al estilo de PSeInt:

Funcion r <- doble(x)

    r <- x * 2

FinFuncion

Indicá cuál es el nombre de la función, cuál es su parámetro, qué valor devuelve y qué resultado se obtiene al llamarla con doble(8).

Resolver

Parámetros, argumentos y llamadas

El parámetro es el nombre que usa el subprograma para el dato que recibe (n en esPar(n)). El argumento es el valor concreto con el que lo llamás (7 en esPar(7)). El parámetro es como una casilla vacía; el argumento es lo que le ponés adentro cada vez.

Funcion r <- esPar(n)

    Si n MOD 2 = 0 Entonces

        r <- Verdadero

    SiNo

        r <- Falso

    FinSi

FinFuncion

El operador MOD da el resto de la división entera: 7 MOD 2 = 1 y 10 MOD 2 = 0. Un número es par si el resto al dividir por 2 es 0.

Practica★★☆Sin empezar
Dada esta función: a) Explicá qué hace el operador MOD y qué resultado devuelve esPar(7) y esPar(10). b) Escribí un fragmento de algoritmo principal que lea un número y,…

Dada esta función:

Funcion r <- esPar(n)

    Si n MOD 2 = 0 Entonces

        r <- Verdadero

    Sino

        r <- Falso

    FinSi

FinFuncion
  1. a) Explicá qué hace el operador MOD y qué resultado devuelve esPar(7) y esPar(10).
  2. b) Escribí un fragmento de algoritmo principal que lea un número y, usando esta función, muestre «par» o «impar».
  3. c) Explicá qué diferencia hay entre el parámetro n y el valor con el que se llama a la función.
Resolver

Descomponer un problema en módulos

Para modularizar, seguí estos pasos:

  1. Escribí en una frase qué tiene que hacer el programa.

  2. Separalo en tareas más chicas, cada una con un solo objetivo.

  3. Para cada tarea, definí qué recibe (entrada) y qué devuelve (salida).

  4. Decidí si es función (devuelve valor) o subproceso (solo actúa).

  5. Definí el orden en que el programa principal las llama.

Tabla de módulos como cajas con entrada y salida Entrada: notas Módulo Salida: promedio
Practica★★☆Sin empezar
Camila quiere hacer un programa que calcule el área de un rectángulo, de un triángulo y de un círculo, según lo que elija el usuario en un menú. a) Proponé una división…

Camila quiere hacer un programa que calcule el área de un rectángulo, de un triángulo y de un círculo, según lo que elija el usuario en un menú.

  1. a) Proponé una división en módulos: nombrá cada subprograma, indicá qué parámetros recibe y qué devuelve.
  2. b) Explicá qué tendría que hacer el programa principal.
  3. c) Indicá qué ventaja tiene esta organización si más adelante se quiere agregar el área del trapecio.
Resolver
Practica★★☆Sin empezar
Un liceo de Salto necesita un programa para procesar las notas de un grupo. Hay que: (1) cargar las notas de los estudiantes, (2) calcular el promedio del grupo, (3)…

Un liceo de Salto necesita un programa para procesar las notas de un grupo. Hay que: (1) cargar las notas de los estudiantes, (2) calcular el promedio del grupo, (3) contar cuántos estudiantes salvaron (nota mayor o igual que 6) y (4) mostrar un resumen.

  1. a) Descomponé el problema en subprogramas y completá una tabla con columnas: nombre del módulo, datos de entrada y datos de salida.
  2. b) Indicá en qué orden los llamaría el programa principal.
  3. c) Señalá cuál de los módulos podría reutilizarse en otro programa distinto y por qué.
Resolver

Probar y comparar soluciones

Un módulo se prueba con una prueba de escritorio: se eligen valores de entrada y se sigue el algoritmo a mano, anotando cómo cambian las variables.

Modularizar mejora las pruebas: si mayor(a, b, c) está en una función, se prueba con muchos casos (iguales, crecientes, decrecientes) sin tocar el resto. Una función mayor que sirva para cualquier combinación podría ser así:

Funcion m <- mayor(a, b, c)

    m <- a

    Si b > m Entonces

        m <- b

    FinSi

    Si c > m Entonces

        m <- c

    FinSi

FinFuncion

Se parte suponiendo que a es el mayor y se corrige si b o c lo superan; por eso funciona aunque haya valores iguales.

Practica★★★Sin empezar
Se quiere hacer un programa para un kiosco que registre ventas. Cada venta tiene un producto con su precio unitario y una cantidad. Si el total de la compra supera los…

Se quiere hacer un programa para un kiosco que registre ventas. Cada venta tiene un producto con su precio unitario y una cantidad. Si el total de la compra supera los 1.000 pesos, se aplica un descuento del 10 %. Al final del día se muestra el total recaudado.

  1. a) Diseñá la modularización: indicá al menos cuatro subprogramas, con nombre, parámetros y valor devuelto, distinguiendo funciones de procedimientos.
  2. b) Escribí en pseudocódigo la función que calcula el total de una venta con el descuento.
  3. c) Hacé la prueba de escritorio de esa función con un precio unitario de 400 pesos y una cantidad de 3, y con un precio de 150 pesos y una cantidad de 2.
  4. d) Justificá por qué conviene que el cálculo del descuento esté en un módulo separado y no repetido dentro del programa principal.
Resolver
Practica★★★Sin empezar
Dos estudiantes, Santiago y Lucía, resolvieron el mismo problema: leer tres números y mostrar cuál es el mayor y cuál es el menor. Santiago escribió todo el código en un…

Dos estudiantes, Santiago y Lucía, resolvieron el mismo problema: leer tres números y mostrar cuál es el mayor y cuál es el menor. Santiago escribió todo el código en un único bloque, con muchas condiciones repetidas. Lucía escribió dos funciones, mayor(a, b, c) y menor(a, b, c), y un programa principal que las llama.

  1. a) Comparalos desde el punto de vista de la legibilidad, el mantenimiento y las pruebas.
  2. b) Escribí en pseudocódigo la función mayor(a, b, c), de modo que funcione con cualquier combinación de valores.
  3. c) Si luego se pidiera lo mismo para cinco números, explicá qué cambios habría que hacer en cada versión y cuál resulta más conveniente.
  4. d) Explicá qué es una variable local y por qué ayuda a que los módulos no se interfieran entre sí.
Resolver

Volvé al principio: la feria del liceo se resuelve con módulos cargarNotas, promedio, contarSalvados y mostrarResumen, coordinados por un programa principal que los llama en orden.

Resumen

  • Un subprograma o módulo es un trozo de algoritmo con nombre que resuelve una tarea y se llama desde el programa principal.

  • Modularizar da reutilización, legibilidad, mantenimiento fácil y pruebas por separado.

  • En PSeInt, la Función devuelve un valor; el SubProceso realiza una acción sin devolver nada.

  • El parámetro es el nombre del dato en la definición; el argumento es el valor de cada llamada.

  • Para dividir un problema: una tarea por módulo, definir entradas y salidas y fijar el orden de las llamadas.

  • Cada módulo se verifica con una prueba de escritorio, incluyendo casos límite.

Ver todos los ejercicios de este apartado