Anda di halaman 1dari 15

Conceptos bsicos de algoritmos y pseudocdigo _____________________________1

1.1 Algoritmo ______________________________________________________________ 1 1.2 El Pseudocdigo _________________________________________________________ 2 1.3 Variables_______________________________________________________________ 2 1.4 Literales _______________________________________________________________ 3 1.5 Expresiones Aritmticas __________________________________________________ 3
1.5.1 Operadores Aritmticos ________________________________________________________ 3 1.5.2 Reglas de jerarqua de los operadores aritmticos ____________________________________ 4

1.6 Expresiones Lgicas o booleanas ___________________________________________ 5 1.7 Instrucciones Algortmicas Bsicas _________________________________________ 6
1.7.1 Entrada _____________________________________________________________________ 6 1.7.2 Salida ______________________________________________________________________ 6 1.7.3 Cuerpo del algoritmo __________________________________________________________ 6 1.7.3.1 Asignacin __________________________________________________ 6 1.7.3.2 Decisin Simple ______________________________________________ 7 1.7.3.3 Decisin con caso opuesto ______________________________________ 7 1.7.3.4 Iteracin hacia adelante ________________________________________ 7 1.7.3.5 Iteracin hacia atrs ___________________________________________ 7 1.7.3.6 Bucles______________________________________________________ 8 1.7.3.7 Chequeo de Casos ____________________________________________ 8

Rutinas y Pasaje de parmetros ___________________________________________9


Variables ________________________________________________________________________ 9 Parmetros _______________________________________________________________________ 9 Parmetros por valor _______________________________________________ 11 Parmetros por referencia ___________________________________________ 11

Ejemplos de Invocaciones ___________________________________________________ 12


A Procedimientos ________________________________________________________________ 12 A Funciones_____________________________________________________________________ 13

Conclusiones______________________________________________________________ 14

CONCEPTOS BSICOS DE ALGORITMOS Y PSEUDOCDIGO 1.1 Algoritmo


Un algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solucin de un problema. En la vida cotidiana ejecutamos constantemente algoritmos. Por ejemplo, al instalar un equipo de sonido ejecutamos las instrucciones contenidas en el manual del equipo, este conjunto de instrucciones constituyen un algoritmo. Otro caso de algoritmo es el algoritmo matemtico de Euclides para la obtencin del mximo comn divisor de dos nmeros. Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en caso contrario, se dice que es un algoritmo no computacional. Segn esto, el algoritmo de Euclides es un algoritmo computacional; pero el algoritmo para instalar el equipo de sonido es un algoritmo no computacional. Para que un algoritmo pueda ser ejecutado por una computadora se necesita expresar el algoritmo en instrucciones comprensibles por la computadora, para esto se requiere de un determinado lenguaje de programacin. Al algoritmo expresado en un determinado lenguaje de programacin, se denomina programa. Puesto de otra manera, podemos decir que, un programa es la implementacin de un algoritmo en un determinado lenguaje de programacin siguiendo las reglas establecidas por el lenguaje elegido. En la Figura que sigue se muestra la relacin entre problema, algoritmo y programa.

Figura Problema, algoritmo y programa Todo algoritmo debe tener las siguientes caractersticas: Debe ser preciso, es decir, cada instruccin debe indicar de forma inequvoca qu se tiene que hacer. Debe ser finito, es decir, debe tener un nmero limitado de pasos. Debe ser definido, es decir, debe producir los mismos resultados para las mismas condiciones de entrada. Todo algoritmo puede ser descompuesto en tres partes: 1. Entrada de datos. 2. Proceso. 3. Salida de resultados.

Ejemplo: Algoritmo para preparar una salsa de chocolate en el microondas. ENTRADAS: 2 cdas de cocoa 1/3 taza de manteca 2 cdas de agua 1 taza de azcar impalpable cdita de vainilla 1 pizca de sal SALIDAS: La salsa de chocolate pronta para servir. COMIENZO Calentar 1 minuto en el microondas el agua, con la manteca y la cocoa (todo mezclado). Agregar batiendo el resto de los ingredientes. Poner 30 segundos ms en el microondas. FIN

Evidentemente este es un algoritmo no computacional, no podr ser ejecutado por una computadora, pero s por una persona. Ejemplo: Algoritmo para expresar en centmetros y pulgadas una cantidad dada en metros. ENTRADAS: La cantidad M de metros SALIDAS: La cantidad C de centmetros y la cantidad P de pulgadas COMIENZO Clculo de centmetros : C = M*100 Clculo de pulgadas : P = C/2.54 FIN Este es un algoritmo computacional escrito en lenguaje natural. Puede ser convertido en un programa de computadora (para lo cual tenemos que escribirlo en un lenguaje de programacin), pero tambin puede ser ejecutado manualmente por una persona.

1.2 El Pseudocdigo
El pseudocdigo es un lenguaje de pseudoprogramacin utilizado para escribir algoritmos computacionales. Como lenguaje de pseudoprogramacin, el pseudocdigo es una imitacin de uno o ms lenguajes de programacin. De esta manera podemos encontrar pseudocdigos orientados a lenguajes de programacin como Pascal, Java, C, C++, etc. En el caso de este curso orientaremos los pseudocdigos al lenguaje Java. El objetivo del pseudocdigo es permitir que el programador se centre en los aspectos lgicos de la solucin, evitando las reglas de sintaxis de los lenguajes de programacin. Es tambin fcil modificar el pseudocdigo si se descubren errores o anomalas en la lgica del programa, adems de todo esto es fcil su traduccin a los lenguajes de programacin. No siendo el pseudocdigo un lenguaje formal, los pseudocdigos varan de un programador a otro, es decir, no hay un pseudocdigo estndar.

1.3 Variables
Una variable es una localizacin o casillero en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecucin del programa. Cuando un programa necesita almacenar un dato, necesita una variable. Toda variable tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable es necesario declararla especificando su nombre y su tipo de dato. Para declarar variables usaremos los siguientes formatos: Declaracin de una variable: tipo nombre Declaracin de varias variables con el mismo tipo de dato: tipo nombre1, nombre2, nombre3, ..., nombren Donde: tipo Es el tipo de dato de la variable, que puede ser: ENTERO (si la variable almacenar un nmero entero) , REAL (si la variable almacenar un nmero decimal) , CARACTER (si la variable almacenar un carcter), CADENA (si la variable almacenar un conjunto de caracteres) o LOGICO (si la variable almacenar el valor verdadero o el valor falso). nombre2, ..., Nombres de las variables. El nombre de una variable debe comenzar con una letra, un smbolo de subrayado o un smbolo de dlar. Los dems caracteres del nombre pueden ser letras, smbolos de subrayado o smbolo de dlar. Debe considerarse tambin que una letra mayscula se considera diferente de una letra minscula.

nombre1, nombren

Ejemplo: Declaracin de variables. La siguiente instruccin declara la variable edad de tipo ENTERO y la variable descuento de tipo REAL. ENTERO edad REAL descuento Esto crea los casilleros de memoria edad y descuento. Luego de la creacin, las variables estn indefinidas ( ? ). edad descuento ? ?

La siguiente instruccin declara las variables nota1, nota2 y nota3, todas de tipo ENTERO. ENTERO nota1, nota2, nota3 Esto crea los casilleros de memoria nota1, nota2 y nota3. Luego de la creacin, las variables estn indefinidas ( ? ). nota1 nota2 nota3 ? ? ?

1.4 Literales
Se denominan literales a todos aquellos valores que figuran en el pseudocdigo y pueden ser: Literales enteros 12, 20300, 15, etc. Literales reales 3.1416, 2345.456, etc. Literales de carcter 'a', 'B', ';', '<', '+', etc. Literales de cadena "Hola", "Algoritmos Computacionales", etc. Literales lgicos verdadero, falso

1.5 Expresiones Aritmticas


Una expresin aritmtica es una combinacin de variables, literales y operadores aritmticos.

1.5.1 Operadores Aritmticos


En la tabla que sigue se muestran los operadores aritmticos que vamos a utilizar. Tabla Operadores aritmticos Operador + Significado Suma Resta Ejemplo a+b a-b

* / %

Multiplicacin Divisin Residuo

a*b a/b a%b

Los operadores aritmticos pueden utilizarse con tipos enteros y reales. Si en una operacin con dos operandos, ambos operandos son enteros, el resultado es un entero; si alguno de ellos es real, el resultado es real. As, 15/4 es 3 y no 3.75; en cambio, 15.0/4 es 3.75.

1.5.2 Reglas de jerarqua de los operadores aritmticos


Cuando una expresin aritmtica tiene ms de un operador aritmtico, el orden de aplicacin de los operadores sigue un orden preciso determinado por las reglas de jerarqua de los operadores aritmticos, que se muestran en la siguiente tabla. Tabla Reglas de jerarqua de los operadores aritmticos Operador () *, /, % +, Orden de evaluacin Se evalan en primer lugar Se evalan en segundo lugar Se evalan en tercer lugar

Si existen parntesis anidados, se evala primero la expresin en el par ms interno. Si varios operadores o parntesis tienen la misma jerarqua, la evaluacin ser de izquierda a derecha. Ejemplo: Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?

Solucin e = a/b/c Como todos los operadores tienen la misma jerarqua, la evaluacin ser de izquierda a derecha: Primero, se dividir a entre b. Segundo, el resultado ya obtenido de a/b se dividir entre c. Note que el orden de ejecucin esta de acuerdo con la expresin algebraica, por lo que no se requiere ninguna pareja de parntesis.

a e= b c

Ejemplo: Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?

Solucin e = a*b*c/d/e Como todos los operadores tienen la misma jerarqua, la evaluacin ser de izquierda a derecha: Primero, se multiplicar a por b. Segundo, el resultado ya obtenido de a*b se multiplicar por c. Tercero, el resultado ya obtenido de a*b*c se dividir entre d. Cuarto, el resultado ya obtenido de a*b*c/d se dividir entre e. Note que el orden de ejecucin esta de acuerdo con la expresin algebraica, por lo que no se requiere ninguna pareja de parntesis.

abc e= d e

1.6 Expresiones Lgicas o booleanas


Una expresin lgica combina variables, literales, operadores aritmticos, operadores relacionales y operadores lgicos. Los operadores relacionales y los operadores lgicos se muestran en las tablas que presentamos a continuacin. Ambos generan un resultado booleano. Tabla Operadores relacionales Operador > >= < <= == != Significado mayor que mayor o igual que menor que menor o igual que igual a diferente de Ejemplo a>b a >= b a<b a <= b a == b a != b

Tabla Operadores lgicos o booleanos Operador ! && || Tablas de verdad: a Verdadero Falso a Falso Falso Verdadero verdadero b Falso Verdadero Falso Verdadero !a Falso Verdadero a && b Falso Falso Falso Verdadero a || b Falso Verdadero Verdadero Verdadero Significado no y Ejemplo !a a && b a || b

1.7 Instrucciones Algortmicas Bsicas


Existen tres instrucciones algortmicas bsicas que son las siguientes.

1.7.1 Entrada
Consiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable. En general, la accin de ingresar un dato a una variable se expresa en el pseudocdigo mediante la palabra LEER, de la siguiente forma: LEER variable Por ejemplo, la instruccin: LEER estatura solicita el ingreso de un valor, desde algn dispositivo de entrada (como el teclado), para guardar el valor digitado en la variable estatura.

1.7.2 Salida
Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla. En general, la accin de mostrar el valor de una variable se expresa en el pseudocdigo mediante la palabra DESPLEGAR de la siguiente forma: DESPLEGAR (variable) Por ejemplo, la instruccin: DESPLEGAR (ImporteCompra) muestra, en algn dispositivo de salida (como la pantalla), el valor de la variable ImporteCompra.

1.7.3 Cuerpo del algoritmo


En el cuerpo (o body, en Ingls) es donde escribimos lo que hace en s el algoritmo. Es decir, es donde escribimos, en forma ordenada, los pasos a seguir (las instrucciones) para resolver el problema que resuelve el algoritmo. Las instrucciones pueden ser cualesquiera de las que mencionamos a continuacin.

1.7.3.1 ASIGNACIN
Consiste en asignar a una variable el valor de una expresin. La expresin puede ser una simple variable, un simple literal o una combinacin de variables, literales y operadores. La asignacin se expresa en el pseudocdigo de la siguiente forma: variable = expresin Donde variable y el valor de expresin deben tener el mismo tipo de dato. Cuando se asigna un valor ENTERO a una variable REAL, entonces el valor ENTERO se convertir en REAL antes de almacenarse. As, al asignar el valor ENTERO 25 a una variable REAL, se almacenar 25.0. Ejemplo: Algoritmo para expresar en centmetros y pulgadas una cantidad dada en metros. Sobre este mismo ejemplo ya vimos antes su algoritmo computacional escrito en lenguaje natural. Veamos ahora una solucin en pseudocdigo, utilizando conceptos computacionales de variable, entrada de datos y salida de resultados. La solucin considera que 1 metro = 100 centmetros y que 1 pulgada = 2.54 centmetros. INICIO // Declara las variables M, C y P REAL M, C, P // Solicita el ingreso de la cantidad en metros, guardando dicho valor en la variable M LEER M

// Calcula la cantidad en centmetros y lo asigna a la variable C C = M*100 // Calcula la cantidad en pulgadas y lo asigna a la variable P P = C/2.54 // Muestra los valores de las variables C y P DESPLEGAR (C, P) FIN

1.7.3.2 DECISIN SIMPLE


SI condicin ......... FIN SI (IF cond ENDIF)

1.7.3.3 DECISIN CON CASO OPUESTO


SI condicin .......... SI NO ......... FIN SI (IF cond ELSE ENDIF)

1.7.3.4 ITERACIN HACIA ADELANTE


PARA valor inicial HASTA valor final ................ FIN PARA (FOR TO [STEP] ENDFOR)

1.7.3.5 ITERACIN HACIA ATRS


PARA valor inicial HASTA valor final PASO -1 ................ FIN PARA

1.7.3.6 BUCLES

1.

Con chequeo de condicin al principio MIENTRAS condicin HACER .............. FIN MIENTRAS (DO WHILE cond)

2.

Con chequeo de condicin al final REPETIR .............. HASTA condicin

1.7.3.7 CHEQUEO DE CASOS


EN CASO QUE variable SEA CASO 1: ................. CASO 2: ................. CASO 3: ................. EN OTRO CASO ................. FIN EN CASO (DO CASE CASE cond 1: ................. CASE cond 2: ................. OTHERWISE: ................. ENDCASE)

RUTINAS Y PASAJE DE PARMETROS

Una rutina es un conjunto de sentencias que tienen asociado un identificador (nombre de la rutina) y se ejecutan como un grupo cuando se le invoca. Con las rutinas (tambin llamadas subprogramas) se dispone de una estructura muy apropiada para practicar el mtodo de desarrollo en etapas sucesivas, que consiste en abordar el diseo de los programas descomponiendo el Problema en partes ms sencillas y repitiendo este proceso sucesivamente hasta que la solucin de cada una de las partes sea trivial. Entonces resulta fcil desarrollar cada uno de los elementos del programa, depurarlos y probarlos independientemente hasta que funcionen correctamente. Con ese enfoque, el programa queda organizado en mdulos, que se expresan en forma de rutinas. El diseo modular va dirigido a conseguir programas fiables y legibles: - El esfuerzo de la programacin se concentra finalmente en subproblemas pequeos y sencillos. - Es fcil escribir mdulos pequeos libres de error y verificarlos independientemente con datos simulados. - Los listados pequeos son ms legibles. - Resulta natural la adaptacin al trabajo en equipo. Las tareas de desarrollar los mdulos se pueden repartir entre varias personas. Generalmente se usan dos tipos de rutinas: los PROCEDIMIENTOS y las FUNCIONES. Los procedimientos se usan para realizar un conjunto de acciones. Se invocan con una sentencia ejecutable denominada "llamada a procedimiento". Las funciones se usan para obtener y devolver un valor. Se invocan cuando un identificador de funcin aparece dentro de una expresin.

Variables
En las rutinas se pueden utilizar y modificar variables del resto del programa en determinadas condiciones. Las variables GLOBALES son conocidas a lo largo de todo el programa y existen durante toda la ejecucin. A las variables que slo tienen significado en una parte del programa, se les llama LOCALES. Son las que se declaran en un procedimiento o funcin y son conocidas slo en el mismo y en cualquier otro que est anidado dentro. Tienen la existencia asegurada slo mientras dura la ejecucin del procedimiento o funcin donde han sido declaradas, despus se libera el espacio que ocupaban en memoria quedando disponible para ser utilizado por otras. En tercer lugar, se habla de variables DEL SISTEMA, refirindose a las que estn definidas en el lenguaje (compilador). Obviamente, stas son conocidas en cualquier parte del programa.

En estas condiciones, queda claro que en una rutina (procedimiento o funcin) se pueden manejar cualquier objeto global y todos los que hayan sido declarados localmente. No obstante sea posible, no conviene actuar sobre variables globales desde el interior de los subprogramas para no correr el riesgo de modificar inadvertidamente valores externos al procedimiento o funcin. Es preferible trabajar con variables de mbito local y disponer de alguna va para relacionarlas con las definidas a nivel global y con las que son locales de otras rutinas.

Parmetros
En todos estos casos se necesita disponer de algn mecanismo para intercambiar valores entre las rutinas y el resto del programa. Ello se consigue mediante las listas de PARAMETROS, llamados tambin ARGUMENTOS. Se denomina parmetros o argumentos de una rutina (procedimiento o funcin) a aquellos datos (variables o expresiones) que son necesarios para la ejecucin de la rutina.

Se puede ver entonces a la rutina o subprograma como una caja negra que realiza una funcin determinada, para lo cual necesita ciertos datos de entrada para producir ciertos datos de salida.

Cuando Se hace -

se disea una rutina, se especifica: QU debe hacer la rutina Qu DATOS DE ENTRADA necesita Qu DATOS DE SALIDA produce entonces una distincin entre: Parmetros de entrada: datos de entrada necesarios para ejecutar la rutina Parmetros de salida: datos de salida que produce la rutina luego de ejecutarse Parmetros de entrada/salida: datos que son usados como entrada y en los que tambin se guarda un resultado de salida

En la especificacin de la rutina se describen los parmetros formales. Con respecto a esto debe decirse que: Los parmetros se especifican entre parntesis Los parmetros se separan con comas (',') La especificacin de los parmetros formales incluye: o Una de las palabras ENTRADA, SALIDA, ENTRADA/SALIDA, segn sea un dato de entrada, de salida o de entrada/salida respectivamente o Al igual que en una declaracin de variables, se incluye el tipo y el nombre del parmetro

Ejemplo: disear un procedimiento Sumar que tome como entrada dos nmeros enteros y devuelva como salida el resultado de su suma. A continuacin se especifica: QU debe hacer la rutina: sumar dos nmeros enteros y devolver el resultado de la suma. Qu DATOS DE ENTRADA necesita: sumando1 y sumando2 de tipo entero. Qu DATOS DE SALIDA produce: resultado de tipo entero. ENTRADA entero sumando1 entero sumando2 SALIDA entero resultado

Suma

La especificacin del procedimiento Sumar es la siguiente: SUBPROGRAMA Sumar (ENTRADA entero sumando1, ENTRADA entero sumando2, SALIDA entero resultado) comienzo resultado = sumando1 + sumando2 fin

Los parmetros que se indican en la declaracin de las rutinas se llaman PARAMETROS FORMALES. Son identificadores de variables locales con las que se pueden introducir y sacar valores en las rutinas. En las funciones, los parmetros formales slo permiten la entrada, puesto que la salida produce un valor nico que va asociado al identificador de la propia funcin. Los parmetros que se indican en la llamada a las rutinas son los PARAMETROS REALES. La correspondencia entre los parmetros formales y los reales se establece por la posicin que ocupan en las listas, y la sustitucin se realiza aplicando algunos de los mecanismos siguientes: por VALOR, por

REFERENCIA. Segn el mecanismo que acta, se habla de varias clases de parmetros:

PARMETROS POR VALOR


En la sustitucin POR VALOR, se evala el parmetro real, y el valor resultante de dicha evaluacin se asigna al parmetro formal correspondiente. El parmetro real se puede expresar como una constante, una variable o una expresin. El uso de un parmetro pasado por valor consiste en la mera transferencia de un valor a la rutina que se invoc (llam). Estos son parmetros de entrada. Se pueden modificar dentro de la rutina, pero ello no afecta al parmetro real correspondiente. No permiten sacar informacin de la rutina.

PARMETROS POR REFERENCIA


Permiten aplicar el mecanismo de sustitucin POR REFERENCIA, por el que se produce una asociacin entre parmetro real y parmetro formal que consiste en una especie de sustitucin. En realidad se asignan al identificador de parmetro formal las mismas direcciones de memoria que corresponden al parmetro real, de manera que cualquier modificacin que se produzca dentro de la rutina afecta a los parmetros reales que son entidades externas al mismo. Para describir grficamente la situacin, se puede imaginar una flecha para cada parmetro formal, que una su nombre con la direccin de memoria donde est almacenado su parmetro real correspondiente. Toda operacin que afecte al parmetro formal, en realidad se realiza sobre el parmetro real. Con este mecanismo de sustitucin por referencia, se puede conseguir la transferencia de informacin con las rutinas en los dos sentidos: entrada y salida.

Ejemplos de Invocaciones
De acuerdo a lo que vimos hasta ahora, veremos ejemplos de invocaciones (llamadas) a procedimientos y funciones.

A Procedimientos
El subprograma invocador, puede invocar al procedimiento Sumar, con diferentes valores de parmetros segn sea necesario. SUBPROGRAMA invocador entero V1, V2, V3; caracter c; comienzo /*no hace falta inicializar V1 pues es pasado como parmetro de salida (parmetro de retorno) */ invocar Sumar (1, 2, V1); /* V1 tiene el valor 3 luego de la ejecucin de Sumar */ invocar Sumar (V1,1+2, V2); /* V2 tiene el valor 6 luego de la ejecucin de Sumar y V1 no cambia su valor por ser parmetro de entrada */ /* se inicializa V3 pues es pasado como parmetro de entrada, as que tiene que ir con algun valor */ V3 := 10; /* esto se lee as: a V3 se le asigna el valor 10 */ invocar Sumar (V2,V3, V2); /* una misma variable se pasa como primer parmetro y tercer parmetro; V2 va con valor 6, y tiene el valor 16 luego de la ejecucin de Sumar. V3 no cambia su valor por ser parmetro de entrada */ /*en este punto se cumple que V1=3, V2=16 y V3=10 */ invocar Sumar (1,3,5); invocar Sumar (1,3,c); fin invocador; /* ERROR, no se puede pasar un valor como parmetro de salida */ /* ERROR, no hay compatibilidad de tipos en el tercer parmetro */

La invocacin de un subprograma se realiza con parmetros reales. Con respecto a esto debe decirse que:

Se asocia segn el orden de aparicin, cada parmetro formal con cada parmetro real. Por ejemplo, en invocar Sumar (V1, 3, V2) se asocia: - el parmetro real V1 con el parmetro formal sumando1; - el parmetro real 3 con el parmetro formal sumando2; - el parmetro real V2 con el parmetro formal resultado; Cada invocacin es independiente de las dems, es decir, con cada invocacin existe una nueva asociacin entre parmetros reales y formales, y por lo tanto no se recuerda nada de posibles invocaciones anteriores. Debe haber coincidencia o compatibilidad de tipos entre los parmetros formales y los parmetros reales. Por ejemplo, invocar Sumar (1, 3, c) arroja un ERROR debido a que el parmetro real c es de tipo caracter y el parmetro formal resultado es de tipo entero. El parmetro real que se asocia con un parmetro formal de ENTRADA puede ser tanto una variable como una expresin. Por ejemplo, en invocar Sumar (V1,1+2, V2); - el parmetro real V1 es una variable, cuyo valor se asocia con el parmetro formal sumando1 - el parmetro real 1+2 es una expresin, cuyo valor se asocia con el parmetro formal sumando2

El parmetro real que se asocia con un parmetro formal de SALIDA debe ser una variable, que es donde se guarda el resultado devuelto por la rutina a la que se invoc. Por ejemplo, en invocar Sumar (V2, V3, V2); - el parmetro real V2 es una variable que se asocia (en el tercer parmetro) con el parmetro formal de nombre resultado; pero en invocar Sumar (1,3,5) - es un ERROR intentar asociar un valor a un parmetro formal de salida.

A Funciones
Existe un caso especial de procedimiento, el que retorna slo un dato de salida. En este caso, en lugar de definir un subprograma de la siguiente forma SUBPROGRAMA nombre_subprograma (ENTRADA., SALIDA tipo_salida nombre_salida) siendo que tiene un nico parmetro de salida, se puede definir como una funcin que devuelve un valor del tipo tipo_salida tipo_salida FUNCION nombre_funcion (ENTRADA ...)

Por ejemplo, en lugar de definir un procedimiento Sumar que reciba dos parmetros de entrada (sumando1 y sumando2), y devuelva el resultado en el parmetro de salida (resultado) SUBPROGRAMA Sumar (ENTRADA entero sumando1, ENTRADA entero sumando2, SALIDA entero resultado) se puede definir la funcin Sumar, que reciba los mismos parmetros de entrada que el procedimiento, pero

en la especificacin de una funcin se debe indicar el tipo de dato de salida que devuelve la funcin: entero FUNCION Sumar (ENTRADA entero sumando1, ENTRADA entero sumando2)

La implementacin de la funcin Sumar es ligeramente diferente al procedimiento, dado que

todas las funciones deben devolver un valor del tipo que especifican en su definicin. sumando1, ENTRADA entero sumando2)

entero FUNCION Sumar (ENTRADA entero comienzo devolver (sumando1 + sumando2); fin Sumar;

A diferencia del procedimiento Sumar, en la funcin no existe el parmetro de salida resultado. Veamos entonces cmo queda ahora el invocador a la funcin Sumar: SUBPROGRAMA invocador entero V1, V2, V3; caracter c; comienzo /* a V1 se le asigna el resultado de la funcin Sumar */ V1 := invocar Sumar (1, 2); /* V1 tiene el valor 3 luego de la ejecucin de Sumar */ /* a V2 se le asigna el resultado de la funcin Sumar */ V2 := invocar Sumar (V1,1+2); /* V2 tiene el valor 6 luego de la ejecucin de Sumar y V1 no cambia su valor por ser parmetro de entrada */ /* se inicializa V3 pues es pasado como parmetro de entrada */ V3 := 10;

/* a V2 se le asigna el resultado de la funcin Sumar */ V2 := invocar Sumar (V2,V3); /* una misma variable se pasa como primer parmetro y se usa para guardar el valor devuelto por la funcin; V2 tiene el valor 16 luego de la ejecucin de Sumar y V3 no cambia su valor por ser parmetro de entrada */ /*en este punto se cumple que V1=3, V2=16 y V3=10 */ 5 := invocar Sumar (1,3); c := invocar Sumar (1,3); la variable c*/ fin invocador; /* ERROR, no se puede asignar nada a un valor */ /*ERROR, no hay compatibilidad de tipos entre la funcin Sumar y

La invocacin a una funcin es tambin ligeramente diferente a la invocacin de un procedimiento. Al respecto debe decirse que:

Ya que las funciones pueden considerarse en s mismas como el valor de salida que devuelven, pueden formar parte de una expresin. Es decir, la invocacin puede usarse en una expresin de la parte derecha de una asignacin, o en una expresin que forma parte de una condicin. Por ejemplo, V1 := invocar Sumar (1, 2); V2 := invocar Sumar (V1,1+2); se asigna a las variables V1 y V2 el resultado de diferentes invocaciones de la funcin Sumar. En este ejemplo, se puede encontrar una sola instruccin equivalente a ambas instrucciones: V2 := invocar Sumar (invocar Sumar (1, 2), 1+2); En primer lugar se evala la invocacin ms interna Sumar (1,2). El resultado es 3 y se toma como primer parmetro real de la invocacin ms externa. Se evala la expresin del segundo parmetro real 1+2, y a continuacin se realiza la invocacin ms externa Sumar (3, 3). Por ltimo, el resultado 6 se asigna a la variable V2.

Al igual que en la asociacin de parmetros reales y formales debe haber compatibilidad de tipos, tambin debe haberla entre el tipo que devuelve la funcin y la expresin en que se usa. Por ejemplo, c := invocar Sumar (1,3); retorna un ERROR debido a que no hay compatibilidad de tipos entre la funcin Sumar y la variable c.

Conclusiones
El uso de rutinas en un programa, permite dividir un problema en varios problemas ms chicos y por lo tanto ms fciles de solucionar. La modularizacin obtenida, permite un mantenimiento ms sencillo y nos brinda la posibilidad de reutilizar el cdigo de un mdulo (rutina) en otros programas. Para el pasaje de informacin entre rutinas, se utilizan parmetros, tambin llamados argumentos. Los parmetros pueden ser: de entrada, de salida o de entrada/salida. Esto determina si los parmetros se pasan: por valor (parmetros de entrada), lo que implica que la rutina llamada no cambia el valor que dicho parmetro tena en la rutina llamadora; o si se pasan por referencia (parmetros de entrada/salida), mediante el cual la rutina llamada puede cambiar el valor original y la rutina llamadora recibe el nuevo valor. El pasaje de parmetros es fundamental para asegurar un correcto flujo de informacin entre los distintos mdulos de un programa, evitando actuar sobre variables globales desde el interior de las rutinas para no correr el riesgo de modificar inadvertidamente valores externos a las mismas.

Anda mungkin juga menyukai