Sunteți pe pagina 1din 15

Ing. Victor Hugo Ticonipa Ch.

TEMA 4
Programación Modular

4.1. Introducción

Una estrategia muy utilizada para la resolución de problemas complejos con la computadora, es la división del problema en otros
problemas más pequeños o subproblemas. Estos subproblemas se implementan y tienen solución mediante subalgoritmos o
subprogramas (módulos).

Los subprogramas son una herramienta importante para el desarrollo de algoritmos y programas de modo que normalmente un
proyecto de programación está compuesto generalmente de un programa principal y un conjunto de subprogramas con las
llamadas a los mismos dentro del programa principal.

Los subalgoritmos o subprogramas se clasifican en:

 Procedimientos (subrutinas)
 Funciones

Estos subalgoritmos realizan una tarea específica y se escriben solamente una vez pudiendo ser referenciados o llamados en
diferentes partes del programa de forma tal que se puede evitar la duplicación innecesaria de código.

También para el manejo de subalgoritmos se debe conocer y entender conceptos de variables locales y globales, y parámetros.

Estos aspectos están enmarcadas y definidas en dentro de los paradigmas de programación, concretamente el paradigma de la
Programación Modular, por lo que cuando se habla de subalgoritmos o subprogramas (funciones y procedimientos) se está
hablando de programación modular.

4.2. Programación Modular

La programación modular es uno de los métodos de diseño más flexible y potente para mejorar la productividad de un programa. La
programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el
fin de hacerlo más legible y manejable. Históricamente se presentó como una evolución de la programación estructurada para
solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver, sin embargo con el transcurrir de
los años se empezaron a considerar compatibles y actualmente fue absorbida dentro del diseño estructurado.

Diseño modular: Subproblemas y Subalgoritmos

Uno de los métodos fundamentales para resolver un problema es dividirlo en


problemas más pequeños llamados subproblemas e ir implementandolas su
solución a través de subalgoritmos o subprogramas.

Estos problemas a su vez pueden ser divididos repetidamente en problemas más pequeños hasta que los problemas más pequeños
puedan ser solucionados.

Esta técnica de dividir el problema principal en subproblemas se denomina frecuentemente “divide y vencerás” (divide and
conquer). El método de diseño se denomina diseño descendente (top-down desing), debido a que se comienza en la parte superior
con un problema general y se diseñan soluciones específicas a sus subproblemas.
Ing. Victor Hugo Ticonipa Ch.

Figura: Diseño descendente

Un subprograma puede realizar las mismas acciones que un programa, sin embargo se utiliza por el programa para un propósito
específico. El subprograma recibe datos desde el programa y devuelve resultados. Por ejemplo en una empresa el jefe es como el
programa principal que da instrucciones a sus subordinados -subprogramas-, cuando la tarea es terminada por el subordinado
devuelve sus resultados al jefe. Ahora en programación modular se dice que el programa principal llama o invoca al subprograma. El
subprograma ejecuta una tarea y a continuación devuelve el control al programa. Esto puede suceder en diferentes partes del
programa. Cada vez que el subprograma es llamado, el control retorna al lugar desde donde fue hecha la llamada. También un
subprograma puede llamar a su vez a sus propios subprogramas.

Figura: Un programa con diferentes niveles y llamadas de subprogramas

Un ejemplo de cómo emplear el diseño descendente para resolver un problema sería: Suponga que un profesor quiere crear un
programa para gestionar las notas de sus alumnos. Quiere que dicho programa le permita realizar tareas tales como asignar notas,
modificar notas, borrar notas y ver las notas según distintas calificaciones, etc. a continuación se tiene un esquema que representa
una de las posibles divisiones del problema en módulos.

Figura: Ejemplo de problema en diseño descendente (top-down desing)


Ing. Victor Hugo Ticonipa Ch.

El problema principal se resuelve con el programa principal (también llamado conductor del programa), y los subproblemas
(módulos) mediante subalgoritmos o subprogramas: procedimientos y funciones. Cada subprograma realiza una tarea concreta que
se describe con una serie de instrucciones.

4.3. Funciones y Procedimientos

4.3.1. Funciones

Cada lenguaje de programación tiene sus propias funciones internas incorporadas para realizar cierto tipo de operaciones especiales
y que se las utilizan escribiendo sus nombres con los parámetros adecuados, por ejemplo la función:

Parámetros o argumentos

sqrt (x + pow (x, y))


Funciones internas (subprogramas)

Cuando la expresión se evalúa, los valor de x e y se dan primero a la función (subprograma) pow (potencia) y se calcula pow(x,y).
Posteriormente el valor de x + pow(x,y) se utiliza entonces como parámetro o argumento de la función sqrt (raíz cuadrada), que
evalúa el resultado final.

Entonces, una función es un subprograma que recibe como argumento o parámetros datos de tipo numérico o no numérico, y
devuelve un único resultado numérico o no numérico.

Existen dos tipos de funciones:


- Internas o intrínsecas: Son funciones que ya vienen incorporadas en el lenguaje de programación.
- Externas: Son las funciones definidas por el usuario (se recurren a las funciones externas cuando las funciones internas no
permiten realizar un cálculo o tarea requerida).

En el manejo de funciones existen dos aspectos y momentos que se deben entender:

1. Cuando se declara la función (el desarrollo de la función como tal)


2. Cuando se invoca o llama a la función (solo con la utilización del nombre de la función)

Declaración de una función


La estructura de una función es semejante a la de cualquier programa. Tendrá una cabecera (con el nombre y los parámetros) y un
cuerpo (con la declaración de los parámetros de la función y las instrucciones).
Sintaxis Diagrama de Flujo

nombre_funcion (lista de parametros de entrada)

Acciones

retornar (expresion)
Sintaxis pseudocódigo

[tipo_de_resultado] function nombre_funcion(lista de paramentros)


Begin
[declaraciones locales]
Acción(es)
return(expresión)
End_function

Donde:
tipo_de_resultado Tipo de dato del resultado que devolverá la función y está relacionada al nombre de la misma
función. Es decir el tipo de dato de la función propiamente. Es opcional ya que por defecto
Ing. Victor Hugo Ticonipa Ch.

tiene un tipo de dato (por ejemplo en C es de tipo entero).


nombre_funcion() Debe ser un identificador válido, lo da el usuario y debe ser significativo.
lista de parámetros formales Se denominan parámetros formales o argumentos y pueden ser constantes, variables,
expresiones, valores de funciones. Estos son los valores o información que recibe (variables de
entrada) o que ha sido pasada a la función. Estas pueden ser de la siguiente forma:
([E] tipo_dato parámetro1, tipo_dato parametro2,…)
E: Entrada
declaraciones locales Parte del cuerpo opcional para declarar variables locales*
Acciones Es el cuerpo de la función y la constituyen el conjunto de instrucciones, operaciones.
expresión Es el valor que se devolverá al nombre de la función cuando termine la función. Puede ser una
variable o una expresión.
return La palabra return (retornar) es una sentencia que pondrá fin a la ejecución de la función y
devolverá el valor de la función, es decir, es el valor asociado al tipo de resultado que tiene el
nombre función, por lo que debe ser del mismo tipo de dato que el que devuelve la función.
No se permiten funciones que no devuelvan ningún valor.

La sentencia retorno (return), tiene dos usos: 1) Fuerza una salida inmediata
de la función en que se encuentra, para retornar a la función que la llamó.
2) Se puede utilizar para devolver un valor.

Invocación o llamada de una función

Representación Diagrama de Flujo :

Representación en pseudocógico:

[nomb_var]  nombre_funcion(lista de parámetros actuales)

Donde:

nombre_funcion() Es la función que llama y una vez concluya la función, recibe el


resultado en este nombre.
lista de parámetros actuales Se denominan parámetros actuales o reales y pueden ser
constantes, variables, expresiones, valores de funciones, nombres
de funciones o procedimiento. Estos son los valores actuales o
reales que se envían a la declaración de la función.
nomb_var Es la variable que almacenará el valor resultante de la función. Es
opcional ya que en muchos lenguajes de programación (como C,
C#, Java) la función se utilizar como parte de una expresión.

Los parámetros al momento de hacer la llamada a la función deben


coincidir en número, orden y tipo con los parámetros de la declaración del
mismo.
Ing. Victor Hugo Ticonipa Ch.

Funcionamiento y utilización de una función

1. Para llamar, invocar o referenciar a una función, se coloca el nombre de la función ya sea, en el algoritmo o programa principal
o desde cualquier otro subalgoritmo o subprograma sabiendo previamente de que la función a utilizar existe, y después entre
paréntesis se colocan los parámetros reales, que podrán ser variables, constantes, expresiones, otras funciones, pero siempre
en la misma cantidad y mismo tipo que los parámetros formales asociados. Cuando se realiza la llamada de la función, los
parámetros reales tienen una asociación automática con parámetros formales según el orden de la aparición de izquierda a
derecha, si no son del mismo tipo el programa puede producir un error en algún caso (por ejemplo Pascal) y en otros se
transforman los tipos si es posible (en C, Java, C#).
2. La función como tal recibe los parámetros enviados en la llamada, realiza las operaciones respectivas y devuelve un solo valor a
través de la instrucción devolver (en inglés return) y que ira relacionado con el tipo de resultado y nombre de la función y este
valor llegará al lugar donde fue llamada la función (específicamente al nombre de la función).
3. Finalmente se cede el control a la línea de instrucción del programa que hace la llamada a la función, teniendo en cuenta que
en el nombre de la función se encuentra el valor resultante y puede utilizase ya se para almacenarla en una variable o
manejarla directamente en la instrucción respectiva.

Las funciones son diseñadas para realizar tereas específicas: toman una lista
de valores –llamados argumentos o parámetros- y devuelven un único valor.

Ejemplos:

Figura: Ejemplo 1 función con paso por valor

Inicio 5 10 11
ecuacion(X, Y, Z)

A,B A=5
66 5 10 11
B=3 rpta1 ← (X * Y) + Z

66 66 5 10 11 66
rpta ← ecuacion(A, 10, B*2+5) retorno (rpta1)

‘’El resultado es: ‘’, rpta rpta = 66

Fin

Figura. Ejemplo 2 de función con paso por valor


Ing. Victor Hugo Ticonipa Ch.

PROCEDIMIENTOS (SUBRUTINAS)

Un procedimiento es un subprograma que realiza una tarea específica. Puede recibir cero o más valores del programa que llama
(conocidos con el nombre de parámetros de entrada) y devolver cero o más valores a dicho programa (conocidos como parámetros
de salida).

Un procedimiento está compuesto por un grupo de sentencias al que se asigna un nombre de procedimiento (identificador) y
constituye una unidad de programa. La tarea determinada al procedimiento se ejecuta siempre que se encuentra el nombre del
procedimiento.

El nombre del procedimiento no está asociado a ningún valor, por lo que no puede utilizarse como parte de una expresión. Un
procedimiento se llama escribiendo su nombre, por ejemplo, ORDENAR, para indicar que un procedimiento denominado ORDENAR
se va a usar. Cuando se invoca un procedimiento, los pasos que lo definen se ejecutan y a continuación se devuelve el control al
programa que le llamó.

Declaración de una función


Sintaxis General
Representación gráfica:

Representación en pseudocódigo:

procedimiento nombre_procedimiento([lista de paramentros formales])


Inicio
[declaraciones locales]
Acción(es)
Fin_procedimiento

Donde:
nombre_procedimiento() Debe ser identificador válido, lo da el usuario y debe ser significativo.
lista de parámetros formales Se denominan parámetros formales o argumentos y pueden ser constantes, variables,
expresiones, valores de funciones. Estas son los valores que recibe y/o devuelve (variables de
entrada y/o salida) el procedimiento. Estas pueden ser de la siguiente forma:
([E|S|E/S] tipo_dato parámetro1, [E|S|E/S] tipo_dato parámetro2,…)
E: Entrada, S: Salida, por lo general primero se colocan las entradas y luego las salidas.
Es opcional ya que puede no recibir ni devolver ningún valor.
declaraciones locales Parte del cuerpo opcional para declarar variables locales
Acciones Es el cuerpo de la función y la constituyen el conjunto de instrucciones, operaciones
matemáticas, lecturas, mensajes, etc.
Ing. Victor Hugo Ticonipa Ch.

Invocación o llamada de un procedimiento

Representación gráfica:

Representación en Pseudocódigo:

[llamar_a] nombre_procedimiento ([lista de parámetros actuales])

Donde:

llamar_a La palabra llamar_a (en inglés call) es opcional y su utilización


dependerá del lenguaje de programación.
nombre_procedimiento() Es el procedimiento que llama y una vez concluya con su proceso,
el programa que lo invocó continúa con la línea siguiente a ella.
Lista de parámetros actuales Se denominan parámetros actuales o reales y pueden ser
constantes, variables, expresiones, valores de funciones. Estos son
los valores actuales o reales que se envían a la declaración del
procedimiento y/o son valores que se reciben cuando termine el
procedimiento como tal.

Funcionamiento y utilización de un procedimiento

1. Se llama al procedimiento existente a través de su nombre, ya sea desde el programa principal o desde cualquier otro
subalgoritmo o subprograma y después entre paréntesis se colocan los parámetros reales, esto en la misma cantidad y mismo
tipo que los parámetros formales asociados. Cuando se realiza la llamada del procedimiento, los parámetros reales tienen una
asociación automática con parámetros formales según el orden de la aparición de izquierda a derecha, si no son del mismo tipo
y cantidad el programa producirá un error.

2. Si la asociación ha sido correcta el procedimiento como tal comenzará a ejecutar las instrucciones del mismo. Al concluir la
última instrucción el procedimiento vuelve a asociar los parámetros formales que devuelven los resultados a los parámetros
reales asociados en la llamada, por lo que algunos de estos parámetros reales de llamada ya contendrán los resultados del
procedimiento.

3. Finalmente se cede el control a la siguiente línea de instrucción del programa que hace la llamada con el procedimiento,
teniendo en cuenta que en esta instrucción y en las siguientes se pueden utilizar los parámetros reales en los que se
devolvieron los resultados del procedimiento para trabajar con ellos.
Ing. Victor Hugo Ticonipa Ch.

Ejemplos

Figura: Ejemplo de procedimiento que no devuelve ningún valor

Figura: Ejemplo de procedimiento que devuelve un valor


Ing. Victor Hugo Ticonipa Ch.

Diferencias entre Funciones y Procedimientos

Funciones Procedimientos
- Las funciones normalmente, devuelven un solo valor a la - Los procedimientos pueden devolver cero, uno o varios
unidad de programa (programa principal u otro programa) valores. En el caso de no devolver ningún valor, realizan
que referencia o llama. alguna tarea tal como operaciones de entrada y salida.

- Un procedimiento se referencia por una llamada o


- Una función se referencia utilizando su nombre en una invocación al mismo.
instrucción (asignación o expresión matemática),
- La llamada a un procedimiento es una instrucción que por sí
- La llamada o referencia a una función siempre forma parte sola no necesita de expresiones.
de una expresión.
- Un nombre de procedimiento no está asociado con ningún
- Un nombre de función está asociado con un tipo de dato tipo de dato y por consiguiente no puede contener ningún
por lo que puede contener un valor. valor.

- En algunos lenguajes y de manera opcional (como el Visual


- Para llamar a la función no se coloca ninguna palabra Basic o Ensamblador), se pone delante del nombre del
especial delante del nombre. procedimiento la palabra Llamar_a (call).

Ejemplo de procedimiento que no tiene parámetros.

Figura: Ejemplo de procedimiento que no tiene parámetros.

COMUNICACIÓN Y TRANSFERENCIA DE INFORMACIÓN CON SUBPROGRAMAS

Los parámetros
Una de las características más importantes de los subprogramas es la posibilidad de comunicación y transferencia de información
entre el programa principal y los subprogramas (o entre los subprogramas). Esta comunicación se realiza a través de una lista de
parámetros o argumentos.

Así pues, los módulos pueden clasificarse en:


- Módulos sin parámetros (no existe comunicación entre el programa principal y los módulos o entre módulos).
- Módulos con parámetros (existe comunicación ente el programa principal y los módulos, y entre ellos).

Un parámetro es prácticamente, una variable cuyo calor debe ser o bien proporcionado por el programa principal al módulo o ser
devuelto desde el módulo hasta el programa principal. Por consiguiente hay dos tipos de parámetros: parámetros de entrada y
parámetros de salida.

Los parámetros de entrada son aquellos cuyos valores deben ser proporcionados
por el programa principal, y los parámetros de salida son aquellos cuyos valores
se calcularán en el subprograma o módulo y se deben devolver al programa
principal para su proceso posterior
Ing. Victor Hugo Ticonipa Ch.

Parámetros por valor y parámetros por referencia

Existen dos tipos de parámetros, que ayudan a transferir/recibir información de otros subprogramas, o del programa principal, a
saber: parámetros de entrada (por valor) y parámetros de salida o de entrada/salida (por referencia).

Parámetros por valor

Son parámetros unidireccionales (solo de entrada) que se utilizan para proporcionar información a un subprograma, pero no puede
devolver valores, al programa llamador.

Se les llama parámetros de entrada, ya que en la llamada al subprograma el valor del parámetro actual se pasa a la variable que
representa a la variable actual. Este valor puede ser modificado dentro del subprograma pero el valor modificado no es devuelto al
programa o subprograma llamador. En otras palabras, cuando se define un parámetro por valor el subprograma solo recibe una
copia del valor del dato que el programa invocador le pasa. Por lo tanto si en el procedimiento modificamos el dato recibido en el
parámetro formal, el dato original permanecerá inalterado.
Aunque el paso por valor es sencillo, tiene limitación acusada: no existe ninguna otra conexión con los parámetros actuales, y
entonces los cambios que se produzcan por efecto del subprograma no producen cambios en los parámetros originales y por
consiguiente, no se pueden pasar valores de retorno al punto de llamada, es decir, todos los parámetros son solo de entrada.

Parámetros por referencia

Son parámetros bidireccionales (de entrada y salida), y se utilizan tanto para recibir como para transmitir valores entre el
subprograma y el programa llamador. Estos pueden actuar como parámetros de salida o de entrada/salida. En otras palabras,
cuando definimos parámetros por referencia lo que se pasa al procedimiento son los datos en si, y si este los modifica, los cambios
permanecerán también en los parámetros enviados una vez que la ejecución vuelva al módulo que invocó al procedimiento. Por lo
tanto si en el procedimiento modificamos el dato recibido, el dato del parámetro original habrá sido alterado.

La característica de este método se debe a que las variables tienen una posición de memoria asignada desde la cual se pueden
obtener o actualizar sus valores. También se denominan parámetros variables.

Este método existe en algunos lenguajes como Pascal, Cobol, C, y en el caso de Pascal los parámetros variables deben ir precedidos
por la palabra var, en C se utilizan punteros a direcciones de memoria (&,*).

Ejemplo:
Algoritmo que calcula el área y la longitud de una circunferencia en función del valor del radio introducido desde teclado. Para ello
se considera un subalgoritmo denominado circulo() con tres parámetros formales (radio, area, longitud), de los cuales uno es de
tipo valor (radio) y dos son de tipo variable (area, y longitud).
Ing. Victor Hugo Ticonipa Ch.

Figura: Procedimiento con paso de parámetros por referencia (por valor y variable)

Ejemplo:
Algoritmo que duplica dos números leídos desde teclado. Se considera un subalgoritmo denominado duplica_num() con dos
parámetros formales: num1 que es transmitido por valor, y num2 por variable.

Inicio 15 35/70
duplica_num( n1, n2 )

num1, num1=15
num2 num2=35
30 15
n1 ← n1 * 2
n2 ← n2 * 2
15 35/70 70 35
duplica_num(num1, num2)

n1, n2 n1=30
num1, num2 num1=15 n2=70
num2=70

Fin Fin_circulo

Figura: Procedimiento con paso de parámetros por referencia (por valor y variable)

- Las funciones solo utilizan parámetros por valor.


- Los procedimientos pueden utilizar parámetros por valor y por referencia
(En ambos casos dependerá del lenguaje de programación).

ÁMBITO: VARIABLES LOCALES Y GLOBALES

Las variables utilizadas en un programa principal con subprogramas pueden ser de dos tipos: locales y globales.

Variables locales

Una variable local es una variable que está declarada dentro de un subprograma y se dice que es local al subprograma. Una variable
local sólo está disponible durante el funcionamiento del subprograma, al terminar su función el subprograma y regresar al programa
llamador, se pierde el valor que se encontraba guardado en la variable local.
Ing. Victor Hugo Ticonipa Ch.

El ámbito de definición y actuación de una variable local es solo dentro de un subprograma no tiene ningún significado y alcance
alguno en otros programas, es decir, aunque las variables tengan el mismo identificador o nombre son completamente diferentes ya
que se almacenan en diferentes lugares de la memoria.

Variables globales

Las variables declaradas en el programa principal (en algunos lenguajes se declaran en la sección de encabezamiento o en un
subprograma o módulo exclusivo para este fin), se denominan variables globales ya que están disponibles para todos los
subprogramas. Al contrario que las variables locales cuyos valores se pueden utilizar sólo dentro del subprograma en que fueron
declaradas, las variables globales se pueden utilizar en todo el programa principal y en todos los subprogramas donde se haga
referencia al identificador de esta variable.

El ámbito de definición y actuación de una variable global tiene la ventaja de compartir información en diferentes subprogramas, es
decir, si se declara una variable global, este puede sufrir cambios respecto al valor que almacenen no solo en la función principal
sino en los demás subprogramas que lo utilicen.

Figura: Ámbito de definición de variables

Dentro de los algoritmos y subalgoritmos (diagramas de flujo) este aspecto no se puede representar, ya que por lo general no se
realiza declaración de variables, en cambio en los programas y subprogramas (pseudocódigo y código de lenguaje de programación)
este aspecto es más notorio ya que sí se realiza declaración de variables.

Ejemplo

Algoritmo AmbitoVariables
tipo
proc(E entero: c1): proc
var
entero: a,b,c
Inicio
a  10
b  30
c  50
proc(c)
Escribir (a,b,c)
Fin
Ing. Victor Hugo Ticonipa Ch.

procedimiento proc(E entero: c1)


var
entero: c
Inicio
a1
b3
c  c1 * 2
Escribir(a,b,c)
Fin

Los resultados que se tendrán son primero del procedimiento y luego del programa principal:

Salida Descripción
a=1 En el programa principal se declaran tres variables globales a,b,c que los valores 10,30,50 respectivamente. Cuando se invoca al
b=3 procedimiento proc(c), se envía el valor real de la variable global c, luego esta es recepcionada en el variable formal c1.
c = 100 Posteriormente se declara una variable local c (mismo identificador que la variable global c). Luego se realizan nuevas asignaciones a
las variables globales a,b, pero a la variable c (local) se realiza una operación (c1*2) y luego se muestran los valores de las variables.
a=1 Cuando se retorna al programa principal se imprimen los valores de las variables globales a,b,c. Donde se observa que los valores de
b=3 a y b han cambiado, pero el valor de c no ha cambiado, esto debido a que el procedimiento trabajó con la variable local c, y c global
c = 50 no ha sufrido cambio alguno dentro de ella.

Cuando se definen dos variables, una global y otra local, y tienen el mismo
identificador, dentro del subprograma tiene mayor prioridad de uso la variable
local. Es decir que la variable global queda reemplazada temporalmente por la
variable local en el subprograma, una vez fuera del procedimiento la variable local
es desconocida por todo el programa y solo se conoce a la variable global.

SOBRECARGA DE FUNCIONES Y PROCEDIMIENTOS

La sobrecarga de funciones y procedimientos significa que se pueden definir múltiples funciones con el mismo nombre o
identificador pero con listas de parámetros diferentes en un mismo ámbito de trabajo. Estas funciones se pueden llamar sin
preocuparse sobre cuál función se invoca ya que el compilador detecta el tipo de dato de los parámetros y ejecuta la función
asociada a ellos. Algunos lenguajes de programación como C, Java o C# permiten la sobrecarga de funciones.

La sobrecarga de una función es usar el mismo nombre para diferentes funciones, distintas unas de las otras por sus listas de
parámetros.

Por Ejemplo, en la sobrecarga de procedimientos, se trata de ejecutar una función que imprima los valores de determinada variable
de diferentes tipos de datos: carácter, entero, real, lógico, etc. algunos de estos serían:

Sin sobrecargada Con sobrecargada


procedimiento ImprimirEntero (entero n) procedimiento Imprimir (entero n)
Inicio Inicio
Escribir (“Es valor es: ”, n) Escribir (“Es valor es: ”, n)
Fin Fin

procedimiento ImprimirReal (real n) procedimiento Imprimir (real n)


Inicio Inicio
Escribir (“Es valor es: ”, n) Escribir (“Es valor es: ”, n)
Fin Fin

procedimiento ImprimirCaracter (caracter n) procedimiento Imprimir (caracter n)


Inicio Inicio
Escribir (“Es valor es: ”, n) Escribir (“Es valor es: ”, n)
Fin Fin

procedimiento ImprimirCadena (cadena n) procedimiento Imprimir (cadena n)


Inicio Inicio
Escribir (“Es valor es: ”, n) Escribir (“Es valor es: ”, n)
Fin Fin
Ing. Victor Hugo Ticonipa Ch.

procedimiento ImprimirLogico (logico n) procedimiento Imprimir (logico n)


Inicio Inicio
Escribir (“Es valor es: ”, n) Escribir (“Es valor es: ”, n)
Fin Fin

Código que llama a estas funciones podrían ser: Código que llama a estas funciones podrían ser:
Algoritmo EjemploSobrecarga1 Algoritmo EjemploSobrecarga2
Var Var
entero: a  10 entero: a  10
real: b  25.55 real: b  25.55
caracter: c  ‘A’ caracter: c  ‘A’
cadena: d  “Juan” cadena: d  “Juan”
logico: e  true logico: e  true
Inicio Inicio
ImprimirEntero(a) Imprimir(a)
ImprimirReal(b) Imprimir(b)
ImprimirCaracter(c) Imprimir(c)
ImprimirCadena(d) Imprimir(d)
ImprimirLogico(e) Imprimir(e)
Fin Fin

Ejemplo: En la sobrecarga de funciones se realiza un algoritmo que permita sumar 2 y 3 números enteros.

Sin sobrecargada Con sobrecargada


entero SumarDosNumeros(entero n1, entero n2) entero SumarNumeros(entero n1, entero n2)
Inicio Inicio
Retornar(n1+n2) Retornar(n1+n2)
Fin Fin

entero SumarTresNumeros(entero n1, entero n2, entero n3) entero SumarNumeros(entero n1, entero n2, entero n3)
Inicio Inicio
Retornar(n1+n2+n3) Retornar(n1+n2+n3)
Fin Fin
Código que llama a estas funciones podrían ser: Código que llama a estas funciones podrían ser:
Algoritmo FuncionSobrecarga1 Algoritmo FuncionSobrecarga1
Var Var
entero: num1,num2,num3,s1,s2 entero: num1,num2,num3,s1,s2
Inicio Inicio
Leer (num1,num2,num3) Leer (num1,num2,num3)
S1SumarDosNumeros(num1,num2) S1SumarNumeros(num1,num2)
S2SumarTresNumeros(num1,num2,num3) S2SumarNumeros(num1,num2,num3)
Escribir(s1,s2) Escribir(s1,s2)
Fin Fin

La sobrecarga es una característica muy notable ya que hace a un programa más


fácil de leer. Cuando se invoca a una función sobrecargada el compilador comprueba
el número y tipo de argumentos en dicha llamada.

Ejemplo: Función cuadrado que eleva al cuadrado el valor del argumento

Función cuadrado sobrecargada Código que llama a estas funciones podrían ser:
entero cuadrado (entero n) Algoritmo EjemploFuncionCuadrado
Inicio Var
Retornar(n*n) entero: num1,r1
Fin real: num2,r2
Inicio
real cuadrado (real n) Leer (num1)
Inicio r1cuadrado(num1)
Retornar(n*n) Escribir(r2)
Fin Leer (num2)
r2cuadrado(num2)
Escribir(r2)
Fin

También se pueden enviar parámetros de diferentes tipos de datos y devolver el resultado en otro tipo de dato.
Ing. Victor Hugo Ticonipa Ch.

Ejemplo.- Si se realiza la compra de un producto a Bs. que 185,50 que tiene un costo total de Bs. 200,50. Se pide determinar cual es
la cantidad de porcentaje de descuento que se le realizó al comprador.

Aplicando una regla de tres simple, se tiene


200,50  100%
185,50  p% ?
La forma resultante sería: p (precioFinal * 100) / precioTotal
Y como se desea obtener el porcentaje descontado será: p  100 - ((precioFinal * 100) / precioTotal)

Por lo que el algoritmo y pseudocódigo sería:

Función cuadrado sobrecargada Código que llama a estas funciones podrían ser:
entero porcentaje(real precioF, real precioT) Algoritmo FuncionPorcentaje
var Var
entero: p entero: p
Inicio real: precioFinal,precioTotal
p (entero)(100-(precioF * 100)/precioT)) Inicio
retornar(p) Leer (precioFinal,precioTotal)
Fin pporcentaje (precioFinal,precioTotal)
Escribir(“El porcentaje es: ”, p)
Fin

Se pude apreciar en la línea p (entero)(100-(precioF * 100)/precioT), que se utiliza la instrucción (entero), esta operación en
muchos lenguajes de programación se denomina casting (o cast), que sirve para cambiar el tipo de dato del valor resultante de una
expresión. Algunos lenguajes realizan esta operación de casting de manera directa sin utilizar el casting de tipo de dato, es decir,
convierten los tipos de datos de manera automática dependiendo de los tipos de datos que tienen de las variables.

CASTING
Cuando dos variables son del mismo tipo de dato (int, int) el resultado va a ser del mismo tipo de dato, por ejemplo, si a y b son de
tipo int y valen 3 y 7 respectivamente:
a + b + 10 = 20

Pero cuando los tipos de datos son diferentes (int, float) se dice que ocurre un casting.

Casting es el proceso de convertir de un tipo de dato a otro. Existen dos tipos de casting: casting implícito y casting explícito.

También llamado promoción numérica, sucede cuando un tipo de dato con menor jerarquía es promovido a un tipo de dato con
mayor jerarquía.

La jerarquía de operadores es la siguiente:


byte->short->int->long->float->double

En el siguiente código y tiene mayor jerarquía y por lo tanto x va a tener un cast implícito de int a double.

Notar que el tipo de dato de x no cambia.


var
int x  1
double y
Inicio
yx // y =1.0, x = 1

En el siguiente código tiene dos castings explícitos, en b, y en d.


var
int: a, b
float: c, d
Inicio
a  10
c  1.5
b (int)(a + c)
d (float)(a / b)
print(b) // b = 11
print(d) // b = 0.90

Fin

S-ar putea să vă placă și