Bienvenidos a este nuevo capítulo de este Curso Gratis de Programación #20 Subalgoritmos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Subalgoritmos

Los subalgoritmos son unidades de programa o módulos que están diseñados para ejecutar alguna tarea específica. Estos subalgoritmos, en forma de funciones y procedimientos, se escriben una sola vez, pero pueden ser referenciados en diferentes puntos de un programa, de modo que se evita la duplicación innecesaria de código. 

Se llama subalgoritmo a cada una de las partes de un algoritmo más general que resuelve cada una de las tareas particulares necesarias para que dicho algoritmo general alcance el objetivo para el que fue diseñado, es decir resolver un problema concreto. Este concepto está vinculado al diseño estructurado de algoritmos, en el cual un problema se divide en partes que posteriormente son resueltas por un módulo. Cada módulo coincidirá con un subalgoritmo.

Refinamiento sucesivo o modularización:

Para resolver un problema es útil dividirlo en problemas más pequeños, llamados subproblemas. Estos problemas pueden a su vez dividirse repetidamente en problemas más pequeños hasta que los problemas sean de fácil solución.

Modulo, subprograma o subproblema:

es deseable que sea independiente de los demás. El problema original se resuelve con un programa principal (main), y los subproblemas (módulos) mediante subprogramas: procedimientos y funciones.

Diseño MODULAR / descendente:

Los módulos se diseñan con subprogramas, que a su vez se clasifican en procedimientos y funciones. Los procedimientos y funciones son unidades de programas diseñados para ejecutar una tarea específica. Cuando se debe trabajar con un problema de mayor complejidad, una de las técnicas que facilitan el diseño del algoritmo de resolución es la de dividir el problema en subproblemas más pequeños de menor complejidad.

Al asignar un nombre a esta división o conjunto de acciones, se la puede invocar desde diferentes secciones del algoritmo principal por medio del nombre que lo identifica. Se evita también la repetición de código, ya que cada vez que se necesite resolver el mismo subproblema se puede invocar al subalgoritmo sin tener que volver a escribir el mismo procedimiento para obtener la solución.  En el cálculo del promedio de tres notas de un alumno y la definición de la condición final de acuerdo con el promedio. Este problema se puede dividir en los siguientes subproblemas:

Subproblema

1: entrada de datos (nota 1, nota 2 y nota 3).Subproblema

2: cálculo del promedio.

3: cálculo de la condición del alumno.

4: salida de resultados.

Los siguientes subalgoritmos resuelven los subproblemas:

Ejercicio 1

procedimiento leer_notaS(entero: n1 por referencia, entero: n2 por referencia, entero: n3 por referencia)

lnicio
	escribir("lngrese la nota 1") 
	leer(n1) 
	escribir("lngrese la nota 2") 
	leer(n2) 
	escribir("lngrese la nota 3") 
	leer(n3) 
fin-procedimiento 

Ejercicio 2

real funcion calcular_promedio(entero: n1, entero: n2, entero: n3)

var 
	real: prom 
lnicio 
	prom <-(n1 + n2 +n3) / 3 
	devolver(prom) 
fin-funcion 

cadena funcion condicion_alumno(real: prom) 
var 
	cadena: cond 
inicio 
	si prom >=6 entonces 
		cond <- "Aprobado" 
	Si-no 
		cond <- "Desaprobado" 
	fin -si 
	devolver(cond) 
fin-funcion 

Ejercicio 3

procedimiento mostrar _ resultados(entero: ni, entero: n2, entero: n3, real: prom, cadena: cond)

inicio 
	escribir("Las notas del alumno son ", n1, " n2, " n3) 
	escribir("EI promedio del alumno es ", prom) 
	escribir("La condición del alumno es ", cond) 
fin-procedimiento 

Ejercicio 4

El algoritmo que resuelve el problema principal mediante llamadas a los subalgoritmos para resolver cada subproblema es el siguiente:

algoritmo promedio_alumno

var 
	entero: n1, n2, n3 
	real: prom 
	cadena: cond 
inicio 
	Escribir("Algoritmo para cálculo de promedio y condición del alumno") 
	leer_notas(n1, n2, n3) 
	prom <- calcular _ promedio(n1, n2, n3) 
	cond <- condicion_alumno(prom) 
	mostrar _ resultados(n1, n2, n3, prom, cond) 
fin 

Métodos o subalgoritmos

El programa principal invoca a los subprogramas, ejecuta la tarea del subalgoritmo y devuelve el control al programa principal. Un subprograma puede llamar a otros subprogramas. Algunas de las ventajas de la utilización de subalgoritmos son:

Es más fácil y rápido efectuar el cambio en el subalgoritmo, en comparación con si el cambio tuviese que realizarse en el algoritmo principal.

Se pueden construir librerías propias del usuario con los subalgoritmos que se desarrollan.

La verificación del correcto funcionamiento de un algoritmo es más fácil.

Permite probar estos módulos aisladamente antes de integrarlos en el algoritmo principal.

Hace más sencillo trabajar en ambientes colaborativos, donde distintos programadores desarrollan los subalgoritmos y luego se unen en el programa principal.

La invocación de una función puede hacerse en cualquier lugar después del inicio, y puede ir como expresión en una estructura repetitiva como el mientras.

Diseño de un algoritmo que calcula el promedio de notas ingresadas por el usuarios

  • Ingresar cantidad de notas
  • Utilizar estructura repetitiva «para».
  • Realizar cálculo del promedio de la notas ingresadas.

Ámbito de variables

Una variable local es aquella que se define en un subprograma. Estas variables son visibles y existen dentro del subalgoritmo; fuera de ella la variable no existe y no puede ser utilizada.  Se puede declarar más de una variable local con el mismo nombre siempre y cuando tengan distinto ámbito, pertenezcan a distintos módulos o subalgoritmos. Los parámetros de una función o procedimiento son variables locales.

variable global: está definida en el algoritmo principal y su ámbito es abierto a todo el programa, incluidos los subalgoritmos. Desde un subalgoritmo se puede utilizar una variable global. No puede existir más de una variable global con el mismo nombre.

Paso de parámetros: Un subalgoritmo puede requerir de información de entrada para poder realizar su tarea, y está la puede obtener por medio de un paso de parámetros.  Se define una función que devuelve el cálculo de la hipotenusa de un triángulo rectángulo y, para ello, necesita el valor de los catetos. Esta información la solicita en forma de parámetros en la cabecera del subalgoritmo.

real funcion calcular_hipotenusa(real: cateto1, real: cateto2) 
var 
	real: hipotenusa 
inicio 
	hipotenusa <-raiz( cateto1 * cateto1 + cateto2 * cateto2 ) 
	devolver(hipotenusa) 
fin-funcion 

Cuando un programa invoca un subalgoritmo, le puede enviar información por medio de parámetros. se invoca al subalgoritmo definido anteriormente y se envían los parámetros solicitados, en este caso el valor de los catetos.

algoritmo hipotenusa _ triangulo 
var 
	real: cat_adyacente, cat_opuesto, hipotenusa 
inicio 
	escribir("Cálculo de la hipotenusa de un triángulo rectángulo") 
	escribir("lngrese el valor del cateto adyacente") 
	leer(cat_adyacente) 
	escribir("lngrese el valor del cateto opuesto") 
	leer(cat_opuesto) 
	hipotenusa <-calcular_hipotenusa(cat_adyacente, cat_opuesto) 
	// se llama a la función y se envían los parámetros solicitados 
	escribir("El valor de la hipotenusa del triángulo rectángulo es ' hipotenusa) 
fin 

Los parámetros definidos en la cabecera del subalgoritmo se denominan parámetros formales, y los parámetros que se envían cuando se invoca al subalgoritmo se denominan parámetros actuales.

Cuando se invoca a un subalgoritmo, los parámetros formales toman el valor de los parámetros actuales. En el ejemplo anterior, en el algoritmo principal, cuando se invoca a la función calcular_hipotenusa, las variables cat_adyacentey cat_opuestoson parámetros actuales.  El valor de estos se pasa a los parámetros formales definidos en la cabecera de la función calcular_hipotenusa, en este caso las variables cateto1 y cateto2.

procedimiento modificar _ valor(entero: num) 
inicio 
	Escribir("el valor de num en el subalgoritmo es ", num)
	num <-10 
	Escribir("El valor de num en el subalgoritmo es ' num) 
fin-procedimien to 

algoritmo paso_por_ valor 
var 
	entero: A 
inicio 
	A <- 2
	escribir("El valor de A en el algoritmo principal es", A)
	modificar _ valor(A) 
	escribir("El valor de A en el algoritmo principal es ", A)
fin 

Si ejecutamos el algoritmo anterior, se mostrarán en pantalla los siguientes mensajes: 
	El valor de A en el algoritmo principal es 2 
	El valor de num en el subalgoritmo es 2 
	El valor de num en el subalgoritmo es 10 
	El valor de A en el algoritmo principal es 2 

Paso de parámetros por valor:

los parámetros formales de un subalgoritmo reciben el valor de los parámetros actuales. Cualquier modificación sobre los parámetros formales no afecta a los parámetros actuales. Cuando el subalgoritmo finalice, el parámetro actual en la sección del algoritmo que invocó al subprograma tendrá el mismo valor original sin importar lo que se realice en el subprograma.

el algoritmo comienza con la asignación del valor 2 a la variable global A en el algoritmo principal. Luego, se invoca al procedimiento modificar_valor y se envía el valor de la variable A(parámetro actual).  Dicho valor es asignado a la variable localnumen el procedimiento modificar_valor(parámetro formal). En este subalgoritmo se modifica a la variable numcon el valor 10, pero esto no impacta a la variable A del algoritmo principal.  Cuando finaliza el procedimiento modificar_valory se muestra por pantalla el valor de la variable A, esta sigue teniendo su valor original 2.

por referencia

Cuando se utiliza el paso de parámetros por referencia, los parámetros formales de un subalgoritmo reciben las referencias (dirección de memoria)de los parámetros actuales. Cualquier modificación que se haga sobre estos últimos tendrá impacto sobre las referencias y, sobre los parámetros actuales en el caso de que sean variables, ya que ambos tipos de parámetros (actuales y formales) hacen referencia a la misma dirección de memoria. Cuando finaliza el subalgoritmo, la variable que representa al parámetro actual del algoritmo que invocó el subprograma tendrá el mismo valor que el parámetro formal del subprograma.

Procedimiento modificar_valor(entero: num por referencia) // se agrega la sintaxis "por referencia" 
inicio 
	Escribir("El valor de num en el subalgoritmo es ", num 
	num <- 10 
	escribir("El valor de num en el subalgoritmo es " num) 
fin-procedimiento 

algoritmo paso_por_referencia 
var 
	entero: A 
inicio 
	A<-2
	escribir("El valor de A en el algoritmo principal es ",A)
	modificar _ valor(A) 
	escribir("El valor de A en el algoritmo principal es ",A)
fin 

Si ejecutamos el algoritmo anterior, se mostrarán en pantalla 10s siguientes mensajes: 
	El valor de A en el algoritmo principal es 2 
	El valor de num en el subalgoritmo es 2 

El valor de num en el subalgoritmo es 10 y El valor de A en el algoritmo principal es 10

el algoritmo comienza con la asignación del valor 2 a la variable global A en el algoritmo principal. Luego, se invoca al procedimiento modificar_valory se envía la referencia en memoria de la variable A(parámetro actual).  Dicha referencia es asignada a la variable local numen el procedimiento modificar_valor(parámetro formal).

En este subalgoritmo se modifica a la variable num con el valor 10, y esto tiene impacto en la variable  A del algoritmo principal, ya que ambas variables (num y A) hacen referencia a la misma dirección de memoria. Por ello, cuando finaliza el procedimiento modificar_valory se muestra por pantalla el valor de la variable A, esta tiene el valor 10.

Cada lenguaje de programación tiene su propia forma de manejar y definir el paso de parámetros, pudiendo admitir paso por valor o referencia, o ambos. Existen distintas sintaxis para representar el paso de parámetros por valor o referencia.

ÁMBITO: VARIABLES LOCALES Y GLOBALES

variables locales: Están declaradas dentro del algoritmo o subalgoritmo, y son propias al ámbito de la declaración, en el sentido que cada una es distinta de otra variable declarada con el mismo nombre en cualquier parte del algoritmo principal u otros subalgoritmos.

variables globales: son aquellas que están declaradas en el algoritmo o subalgoritmo y son accesibles para los subalgoritmos que de él dependen.

La ventaja principal de utilizar variables locales reside en el hecho de que permite independizar al subalgoritmo del algoritmo principal, la comunicación entre el subalgoritmo y el algoritmo principal se realiza a través de la lista de parámetros.

La utilización efectiva del subalgoritmo sólo requiere que el programador conozca el orden y el significado de cada parámetro a fin de construir la lista de parámetros actuales cuando se hace uso del subalgoritmo (función o procedimiento).

Las variables globales tienen la ventaja de compartir la información de diferentes subalgoritmos sin ninguna mención en la lista de parámetros del subalgoritmo.

A la variable GLOBAL A se puede acceder desde el algoritmo y desde la función. Sin embargo, X identifica a dos variables distintas: una LOCAL al algoritmo y sólo se puede acceder desde él y otra LOCAL a la función. Al ejecutar el algoritmo se obtendrían los siguientes resultados:

Invocación a la función F, se realiza el paso del parámetro actual X al parámetro formal N (paso por valor). Se modifica el valor de A en el algoritmo principal al ser A una variable GLOBAL. No se modifica el valor de X en el algoritmo principal ya que X es una variable LOCAL.

No te detengas, sigue avanzando

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Python Practicando. Desde 0 hasta Desarrollador en Python

Aprende Python, donde iniciamos desde 0, sin conocimientos previos hasta desarrollar aplicaciones con mucha practica!

Calificación: 4,6 de 5 (20.833 calificaciones) 249.493 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments WorldwideWalter Coto || +450,000 Estudiantes Español.

Lo que aprenderás

  • Ejercitar la lógica de programación
  • Comprender cómo la vida cotidiana puede ser fácilitada o simulada con código
  • Aprender programación desde cero
  • Usar Visual Studio Code como Editor de Código
  • Conocer y aprender el lenguaje de programación Python
  • Ser un programador desde cero, sin conocimiento en otro lenguaje o con algo previo
  • Mejorar las habilidades de programación, mejorar procesos y fácilitar la comprensión de código
  • Preparar un entorno dónde programar en Python
  • Operaciones aritméticas y jerarquía de Python
  • Manejo de cadenas en Python
  • Digitar datos por teclado con Python
  • Mostrar Datos por Pantalla al usuario en Python
  • Operadores Relacionales de Python
  • Operadores Lógicos de Python
  • Condicionales en Python
  • Estructuras de Datos: Listas, Tuplas y Diccionarios
  • Iteraciones y bucles repetitivos de Python
  • Segmentar Código y hacerlo más eficaz con las Funciones en Python
  • Gestionar posibles errores que puedan dar tus programas
  • Programación Orientada a Objetos
  • HTML y CSS
  • Selenium Web Driver con Python
  • Ejercitar todo lo Aprendido con Ejercicios

Este curso incluye:

  • 25,5 horas de vídeo bajo demanda
  • 21 artículos
  • 148 recursos descargables
  • Acceso en dispositivos móviles y TV
  • Certificado de finalización

Python es Hoy uno de los lenguajes más utilizados por Excelencia.

Esto se debe por su simpleza al momento de Desarrollar aplicaciones.

Por su capacidad de procesamiento a altas velocidades con grandes volúmenes de información.

Es un increíble lenguaje con el cual si no sabes programar, podrás aprender.

Y si ya sabes desarrollar, te aconsejo aprenderlo ya que en el mercado cada vez se solicitan más desarrolladores en Python.

Aspirar al trabajo que desean, o mejorar sus ingresos con un aumento de salario.

Python se utiliza para muchisimas cosas como:

  • Machine Learning
  • Data Science
  • Inteligencia Artificial.
  • Y mucho más!

En este curso te acompañare en el proceso por el cual aprenderás las bases del lenguaje, para luego determinar qué camino quieres seguir.

Te invito que me acompañes a conocer este Gran Lenguaje!

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools