Está en la página 1de 28

Universidad Nacional de Entre Ros Facultad de Ingeniera Departamento de Informtica

FUNDAMENTOS DE PROGRAMACIN

UNIDAD 1 ALGORITMOS COMPUTACIONALES

Unidad 1

Ing. Horacio Loyarte 2012

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

UNIDAD 1

Algoritmos computacionales

Resumen de Conceptos
Algoritmo
Es comn encontrar el trmino de algoritmo como sinnimo de procedimiento, tcnica o mtodo. Pero expresaremos su significado ms especficamente.

Definicin
Un algoritmo es un conjunto finito de operaciones (instrucciones-pasos) que seguidos en un determinado orden permiten resolver un problema.

Caractersticas de un algoritmo
Las caractersticas principales de todo algoritmo son: FINITUD: permite arribar a la solucin de un problema despus de una cantidad finita de pasos. PRECISION: cada paso debe expresarse en forma clara y precisa y no debe dar lugar a ambigedades. GENERALIDAD: la solucin debe ser aplicable a un conjunto de problemas del mismo tipo y no a un problema particular. Obsrvese que en la definicin y en las caractersticas no se hace mencin alguna de resolucin computacional de un algoritmo. Efectivamente, existen ciertos problemas cuya solucin algortmica no requiere para su ejecucin la presencia de una computadora. Por ejemplo: l Una receta de cocina. l Un manual de instalacin de un artefacto. l La multiplicacin de dos nmeros. l Comprar 1 Kg. de pan. Como observacin, se puede decir que un algoritmo debe estar expresado en un lenguaje comprensible para el ejecutante. Y las acciones o pasos descriptos deben ser tales que el ejecutante sea capaz de realizarlas. Tambin es observable que un problema determinado puede ser resuelto con varios algoritmos diferentes. Es deseable encontrar una solucin eficaz. Se puede afirmar que un algoritmo es eficaz si resuelve el problema con un mnimo de recursos y en el menor tiempo posible. Obsrvese el siguiente caso a resolver mediante el planteo de un algoritmo. Ejemplo Problema: Ver una pelcula en DVD. Elementos (datos): reproductor de DVD, televisor, control remoto del resproductor. Mtodo y divisin modular: En problemas pequeos con solucin casi trivial no es necesario seleccionar un mtodo ni realizar una divisin del problema.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

Algoritmo: Comienzo Encender el televisor. Pulsar el botn del canal para Video. Tomar la caja con el DVD. Sacar el DVD. Si el DVD tiene la etiqueta hacia abajo Darlo vuelta. Colocar el DVD en la video reproductora. Seleccionar opcin Inicio de pelcula en la interfaz inicial del video. Mientras contine la pelcula Verla Fin El problema del planteo de este tipo de algoritmos, es que el ejecutante debe estar entrenado para reconocer y realizar las acciones descriptas. Hay personas que entienden perfectamente lo que es Seleccionar opcin Inicio de pelcula en la interfaz inicial del video, mientras otras no pueden ejecutar tal accin pues desconocen su significado. Los algoritmos computacionales tienen la ventaja de proponer un conjunto de acciones, que cualquier computadora puede ejecutar. Ejemplo Problema: Hallar el rea de un tringulo rectngulo, cuya altura es 10cm y su base 5cm. Anlisis del problema Datos: base (10cm) y altura (5cm) del tringulo. Resultado: rea del tringulo. Condiciones: rea tringulo = base * altura /2 Algoritmo Comienzo Multiplicar 10 por 5 (Base por altura) Dividir el resultado del producto anterior por 2 (rea de un tringulo) Informar el valor del cociente Fin Nota: La resolucin del problema anterior tiene un defecto importante, de acuerdo a las caractersticas deseables de un algoritmo. El mismo consiste en que resuelve un problema particular. Es decir, calcula el rea de un tringulo de base 10 cm y altura 5 cm, y no el rea de cualquier tringulo. Para un diseo ms general es necesario modificar el algoritmo de la forma siguiente: Algoritmo Comienzo Conocer base y altura del tringulo. Multiplicar base por altura. Dividir el producto anterior por 2. Informar el valor del cociente. Fin A continuacin se definen algunos de los elementos mencionados en la descripcin de algoritmos.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

Procesador o Ejecutante
Es la entidad capaz de comprender un enunciado y ejecutar las tareas descriptas en un algoritmo. El ejecutante de un algoritmo puede ser una persona, o una computadora.

Ambiente
El ejecutante, para poder resolver un problema a travs de un algoritmo, requiere contar con los elementos y recursos adecuados. Ese conjunto de recursos para resolver un determinado trabajo se define como ambiente del problema.

Acciones y Primitivas
Vimos que el planteo de la solucin de un problema, implica la ejecucin de un conjunto de pasos que conforman lo que definimos como algoritmo. Cada uno de esos pasos se llama accin. La accin es un evento que modifica el ambiente de un algoritmo. A su vez, decimos que una accin es primitiva, si el ejecutante, para llevarla a cabo no requiere de ningn tipo de informacin adicional. La accin no-primitiva implica que para ser resuelta, el ejecutante requiere que sea descompuesta en acciones primitivas.

Algoritmos Computacionales
Los problemas y algoritmos desarrollados anteriormente reflejan situaciones de la vida diaria. En la mayora de los casos fueron planteados para que los resuelva o ejecute una persona. Pero el objetivo es desarrollar algoritmos que pueden ser interpretados por una computadora. Para ello es necesario utilizar un lenguaje que interprete una computadora y que permita una descripcin precisa de cada una de las acciones a emplear en la solucin del problema. Esta unidad propone describir la formalizacin necesaria para el desarrollo de Algoritmos Computacionales empleando un pseudolenguaje similar a los empleados en la confeccin de programas. De aqu en ms, cuando se mencione al ejecutante de un algoritmo, se estar haciendo referencia a una computadora. En el ejemplo que se propone a continuacin se desarrolla un algoritmo completo de acuerdo a la formalizacin que se propone. Ejemplo Problema: plantear un algoritmo computacional que calcule la hipotenusa de un tringulo rectngulo. Se conoce como informacin de entrada las longitudes de los catetos. Anlisis del Problema: Datos: Longitudes de los catetos. Resultado a informar: Hipotenusa. Relaciones entre datos y resultados: Teorema de Pitgoras.
Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

Algoritmo: Proceso Hipotenusa Leer A,B; H RC(A2+B2); Escribir 'Hipotenusa =',H; FinProceso

Descripcin de los elementos presentes en el ejemplo


En el ejemplo A, B y H constituyen identificadores de variables; 2 e 'Hipotenusa =' son constantes; Leer, Escribir y son las acciones primitivas de la lectura, escritura y asignacin respectivamente; RC(A 2 + B 2) es una expresin numrica y RC ( ) es la funcin cuadrada. En esta unidad se desarrollarn todos estos elementos que conforman un lenguaje algortmico formal que llamado pseudocdigo. La forma general de un algoritmo escrito en pseudocdigo es la siguiente: PROCESO nombre del proceso accin 1; accin 2; . . . FINPROCESO

Elementos de un algoritmo computacional


Constante
Se define constante, como el valor que no puede alterarse en el transcurso de un algoritmo. Ejemplos de constantes: 123 'Lpez' Falso 3.1459

Esta informacin se expresa mediante un valor intrnseco y nico que no puede alterarse. Se utilizarn con frecuencia estos datos para asignarlos a variables o construir expresiones.

Variable
Una variable es una posicin de memoria capaz de almacenar un nico valor por vez. A medida que se ejecuten las acciones que describe el algoritmo esa variable podr representar a nuevos valores. En un algoritmo una variable se referencia a travs de nombres o identificadores. En el ejemplo inicial del clculo de la hipotenusa: Proceso Hipotenusa Leer A,B; H RC(A2+B2); Escribir 'Hipotenusa =',H;
Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

FinProceso se observa que 2 e Hipotenusa = constituyen constantes. A, B H son variables.

Nombres o identificadores
Para proponer el nombre o identificador de algn elemento del algoritmo -como las variables- el diseador tiene amplia libertad y solo debe respetar tres reglas simples: 1) Utilizar slo letras y/o dgitos y/o guin bajo, comenzando siempre con una letra. 2) No utilizar palabras claves para acciones primitivas que emplea el pseudocdigo: LEER, ESCRIBIR, MIENTRAS, HACER, SEGUN, etc., o para las funciones internas: RC, SEN, TRUNC, LN, etc., o las palabras que corresponden a las constantes lgicas VERDAD y FALSO 3) No hacer distincin entre maysculas y minsculas. Esto implica que VENTA, venta y Venta, constituyen en el algoritmo el mismo nombre. Esta sintaxis y sus restricciones no representan inconvenientes para proponer nombres de cualquier elemento del algoritmo: variables, algoritmos, procedimientos, funciones, archivos; pues se dispone de un sinnmero de combinaciones diferentes de letras y dgitos. Ejemplos de identificadores: Venta x12 resultado SUMA2 M3M

Se mencion que el diseador del algoritmo tiene total libertad para proponer nombres a sus elementos, aunque como consejo, es conveniente proponer identificadores que tengan alguna relacin con lo que el elemento representa. En nuestro ejemplo inicial del clculo de la hipotenusa de un tringulo rectngulo, se podra haber empleado los nombres de variables CATETO1, CATETO2, HIPOT, en lugar A, B, H.

Expresin
Se define como expresin a un conjunto de operandos ligados por operadores cuya evaluacin arroja un resultado. En el ejemplo inicial RC(A 2 + B 2) es una expresin numrica (relacin de Pitgoras) que permite calcular el valor de la hipotenusa. Ejemplos de expresiones: 2+a-x*5 45 A < B TRUNC(R) + 1

Tipos de Informacin
Se puede clasificar la informacin que puede manejar una computadora a travs de un algoritmo en los tipos siguientes:

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

l l l

tipo NUMERICO tipo CARACTER tipo LOGICO

Esta clasificacin nos define los tipos primitivos de la informacin. Se estudiar a cada uno de ellos y su modo de empleo.

Tipo Numrico
Constantes Numricas Los valores o constantes de tipo numrico se decimal y pueden estar precedidos por los signos '+ o '-'. La ausencia de signo implica un nmero positivo. Se pueden subdividir en reales y enteros, o admitir clasificaciones ms detalladas, de acuerdo al lenguaje de programacin empleado. Para la formalizacin propuesta mediante el empleo de un pseudocdigo universal, no se harn distinciones de esta clase y simplemente se hablar de tipo numrico. Un detalle importante: los nmeros reales deben separar su parte entera de la fraccin decimal con un punto en lugar de la coma. Se reserva la coma como separador. No se utilizar ningn smbolo para separacin de miles. Ejemplos de constantes numricas: 14 -12500 +1.9452 -567.91 1.3E+2 -0.94E-3

En los 2 ltimos ejemplos se indican constantes numricas con notacin cientfica. Donde la cifra a la derecha de la E indica el exponente de la potencia de base 10. Es decir: 1.3 E+2 = 1.3*102 = 130 Variables Numricas Una posicin de memoria, que contenga cualquier valor de tipo numrico se denomina Variable Numrica. Las variables se identifican en un algoritmo a travs de nombres o identificadores. Expresiones Numricas Las expresiones numricas se plantean en general con constantes numricas, variables numricas y funciones; y los operadores algebraicos como nexo: Operadores algebraicos + : suma : resta * : multiplicacin / : divisin : potenciacin mod : resto de la divisin entera Es de mencionar que ciertos lenguajes de programacin no disponen de todos los operadores antes descritos, as como es posible hallar otros operadores algebraicos adicionales a los presentados. La jerarqua de estos operadores es idntica a la planteada por el lgebra de nmeros y slo puede ser alterada a travs de la intercalacin de niveles de parntesis. Ejemplos de expresiones numricas

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

2+a*102-800/C 1-(2*TOT-30 )(1+P) AREA*(Y+1.34 /(X2-T )) X mod 2 Obsrvese que el operador de radicacin no existe; pero esto no es un problema porque esta operacin puede plantearse fcilmente a travs de la potenciacin de exponente fraccionario:

De todas maneras es comn hallar en casi todos los lenguajes de programacin una funcin que realiza el clculo de la raz cuadrada. En pseudocdigo se utiliza para el ejemplo inicial y se llama RC( ). Adems se asume que el ejecutante del algoritmo, conoce y puede resolver ciertas funciones numricas. A estas funciones se las llama funciones predefinidas y tienen la propiedad de devolver un valor o resultado, al ser aplicadas sobre un argumento que se indica entre parntesis. Funciones Predefinidas Algunas de las funciones predefinidas que incluye el pseudocdigo: RC( ) : Raz cuadrada ABS( ) : Valor absoluto LN( ) : Logaritmo natural EXP( ) : Funcin exponencial SEN( ) : Seno de un ngulo en radianes COS( ) : Coseno de un ngulo en radianes ATAN( ) : Arco Tangente del argumento TRUNC( ) : Parte entera del argumento REDON( ) : Entero ms cercano AZAR( ) : Entero aleatorio no-negativo Con estos nuevos elementos, se puede ampliar el uso de expresiones numricas. Ejemplos de expresiones numricas TRUNC(2/3)-ABS(X)-2*(X-1) SEN(X)+1-TAN(C/2) (-b+RC(b*b-4*a*c))/(2*a) Nota: Los lenguajes de programacin suelen disponer de un nmero mucho mayor de funciones predefinidas.

Tipo Caracter
Constantes Tipo Caracter Se incluyen aqu a todos los caracteres y smbolos del cdigo ASCII (Cdigo Standard Americano para Intercambio de Informacin), los cuales pueden obtenerse de las teclas o combinaciones de teclas de su computadora, es decir, las letras del alfabeto en minsculas y las letras maysculas, los signos de puntuacin, los operadores aritmticos, parntesis, el espacio en blanco, caracteres especiales, etc.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

10

Tambin se incluyen dentro de este tipo a las cadenas de caracteres, como los apellidos, nombres, direcciones y tambin cadenas de caracteres numricos: Ejemplos de constantes tipo carcter 'Luis Rodrguez' '25 de Mayo' 'Z' '3124' 'Resultado=' '123/890-12'

Importante: En este tipo de informacin: el conjunto de caracteres ASCII, es un conjunto ordenado, y por tanto existe una relacin de precedencia u orden entre sus elementos. Cada elemento del conjunto tiene un nmero de orden en lo que se conoce como tabla o cdigo ASCII, y ese nmero es el que determina la relacin de orden: El cdigo ASCII se ha convertido en un standard mundial que permite compatibilizar la informacin que manejan las computadoras. La siguiente tabla muestra algunos de los caracteres del cdigo ASCII y su correspondiente nmero de orden. En total son 255 caracteres.

Si se tiene en cuenta la relacin de orden dada por el cdigo ASCII se puede afirmar que son verdaderas las expresiones siguientes: La letra 'a' es mayor que la letra 'B'. (a tienen nmero de orden 97 que es mayor al 66 de la B)
Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

11

El caracter '5' es menor que la letra 'A'. (el carcter 5 tiene cdigo 53 y el de la letra A es 65) La cadena de caracteres 'Mario' es menor que Roberto. (se encuentra antes alfabticamente) Se observa que a las constantes tipo caracter o las cadenas de caracteres se indican entre apstrofos o simples comillas. Esto es para evitar confundir estos datos con identificadores de otros elementos del algoritmo. Por ejemplo, 'A' es un dato tipo caracter y A un identificador de un elemento del algoritmo. Variables Tipo Caracter Una posicin de memoria, que contenga cualquier dato de tipo caracter o cadena de caracteres se denomina Variable Tipo Caracter. Expresiones Tipo Caracter En el pseudolenguaje que se emplear en esta primer parte de Fundamentos de Programacin no se utilizarn operadores ni funciones para el manejo de caracteres y cadenas de caracteres. Por lo que las expresiones de este tipo quedan reducidas a simples constantes o variables.

Tipo Lgico
Constantes de Tipo Lgico Dentro de este tipo se incluye a solo dos constantes o valores posibles: VERDADERO y FALSO. Esto implica tener en cuenta una nueva limitacin al proponer identificadores: no pueden utilizarse los nombres VERDADERO y FALSO para evitar ambigedades. Variables Lgicas Una posicin de memoria, que contenga cualquier dato de tipo lgico es una Variable Lgica. Expresiones Lgicas Aqu cobran mucha importancia una serie de operadores que nos permiten plantear expresiones de tipo lgico. Las expresiones mas simples son las relacionales que utilizan los operadores relacionales matemticos para comparar operandos de igual tipo. Operadores relacionales Operador Significado --------------- -----------------> Mayor que < Menor que = Igual que <= Menor o igual que >= Mayor o igual que <> Distinto que Ejemplos de expresiones lgicas relacionales

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

12

23<45 'ANA'<'LUIS'

A+2>=100 (2+B) >=Trunc(2+B)

'a'<>LETRA 7>'M'

Las expresiones lgicas simples mostradas en el ejemplo se conocen como expresiones relacionales, pues permiten comparar o relacionar a 2 operandos del mismo tipo. Justamente, la ultima expresin del ejemplo anterior no es valida, pues compara a una expresin numrica con un caracter. La algortmica computacional, permite tambin formar expresiones lgicas mas complejas a travs de los conectores que emplea la lgica proposicional: Operadores lgicos Operador Significado --------------- ----------------- Disyuncin Conjuncin ~ Negacin Dichos operadores son binarios en el caso de los dos primeros y unario en el caso del ltimo, y se definen de la siguiente forma:

a VERDADERO VERDADERO FALSO FALSO a VERDADERO VERDADERO FALSO FALSO

b VERDADERO FALSO VERDADERO FALSO b VERDADERO FALSO VERDADERO FALSO

a b VERDADERO VERDADERO VERDADERO FALSO a b VERDADERO FALSO FALSO FALSO

a VERDADERO FALSO

~a FALSO VERDADERO

Se observa entonces el valor de verdad de las expresiones lgicas propuestas en el ejemplo siguiente: Ejemplo: Expresin Lgica -------------------------------------Resultado -------------------------

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

13

(7<10) ('a'<'c') VERDADERO ('A'<'a') (12>19) VERDADERO ( 37<18 FALSO ( SEN(x)<=1 ) VERDADERO ('MARIA'<'MARTA') VERDADERO ('MARIA'<'MARTA') (1>2) FALSO

Acciones Algortmicas
Primitivas
En el lenguaje algortmico (pseudocdigo), las primitivas se identifican con palabras claves o reservadas. Se han empleado en el ejemplo inicial las primitivas: LEER, ESCRIBIR y (asignar). La ejecucin de las acciones primitivas de un algoritmo suele ser diferente segn el caso, lo cual lleva a plantear la siguiente clasificacin: Primitivas de Estructura Secuencial Primitivas de Estructura Condicional Primitivas de Control Primitivas de Estructura Repetitiva En la prxima unidad se desarrollarn las estructuras algortmicas de control que implican el uso de primitivas de estructura condicional y de estructura repetitiva. Se plantea a continuacin, algunas acciones de estructura secuencial.

Acciones Primitivas de Estructura Secuencial


Asignacin Esta accin, permite a un identificador de variable, representar o memorizar cierto valor. Para describirla se utilizar la notacin siguiente: V E; Donde V es el nombre de la variable ( o simplemente la variable ) a la cual el ejecutante debe asignar el valor de la expresin E. El smbolo ' ' puede leerse toma el valor. Los tipos de V y E deben ser coincidentes, en caso contrario ser causa de error. Segn el tipo de V y E una asignacin puede ser: l Asignacin numrica. l Asignacin tipo caracter. l Asignacin lgica. Si V es una variable numrica y E cualquier expresin de tipo numrica la asignacin es numrica. Ejemplos de Asignaciones Numricas
Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

14

A 43; X A; NUM 3*X/A+2;

( A toma el valor 43 ) ( X toma el valor contenido en A ) ( NUM toma el valor del resultado de hacer 3*X/A+2 )

Importante: Ntese que para poder realizar una asignacin aritmtica se debe evaluar primero la expresin de la derecha, por lo tanto es perfectamente vlida la accin: NN+1; que puede leerse: tomar el valor actual de N, sumarle 1, y asignar ese resultado a la variable N. Por ejemplo, si antes de la accin, N contena el valor 8, luego de dicha accin contendr 9. Obsrvese que esta accin algortmica no tiene nada que ver con los conceptos asimilados en matemticas, donde N=N+1 es una expresin incompatible. Del mismo modo se definen las asignaciones tipo caracter y tipo lgica. Ejemplos de Asignaciones tipo caracter LETRA 'A'; // LETRA toma el valor 'A' X3 A; // X toma el valor contenido en A NOMBRE 'Jorge'; // NOMBRE toma el valor de 'Jorge' Ejemplos de Asignaciones Lgicas M FALSO; CIERTO 34 <= 78 ; G (A<2) (C=10); //M toma el valor FALSO //CIERTO toma el valor VERDADERO //G toma el valor lgico // resultante de la expresin (A<2) (C=10) )

Entrada Todo algoritmo tiene por objetivo principal producir resultados, pudiendo o no incorporar informacin del medio externo (datos), al ambiente o sistema que observa. Esta incorporacin de valores desde el exterior, nos lleva a definir una accin algortmica primitiva de Lectura o Entrada. Se usar para ello la palabra clave LEER que permitir al ejecutante identificar esta accin, seguida de la variable o lista de variables, que representan en el algoritmo la los valores que deben ser ingresados. Ejemplos de entrada de datos LEER Dat; LEER Nombre, Apellido, DNI; Esta accin tiene el mismo efecto que una asignacin, solo que esta ltima utiliza valores del ambiente del algoritmo; en cambio la lectura asigna valores desde el exterior.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

15

Tambin esta accin contribuye a hacer a los algoritmos de uso general, pues permite incorporar informacin nueva para producir nuevos resultados. Sin esta accin, la ejecucin de un algoritmo producir siempre la misma respuesta. Las acciones de lectura y asignacin permiten definir variables en un algoritmo. Salida La accin primitiva que permite a un algoritmo comunicar resultados o salida de informacin al medio exterior, se representar con la palabra clave ESCRIBIR; y a continuacin una variable, una constante, una lista de variables y/o constantes o expresiones. Ejemplos de salida: ESCRIBIR ESCRIBIR ESCRIBIR ESCRIBIR Dat, Nombre; 23; 'Dato=',X; 'Resultado=',3*X+(X-1)/2;

Se destacan algunas diferencias entre las acciones de lectura y escritura. La lectura se realiza solamente a travs de variables; y por lo tanto, si se lee una variable que ya fue definida en el algoritmo, implicara un acceso destructivo; esto es, la variable perder su valor para tomar el del nuevo dato que se ingresa. En cambio, si se escriben resultados a travs de variables el ejecutante realizara un acceso no destructivo a dichas variables, pues solo necesita conocer su contenido, para ejecutar la escritura. Aqu las variables conservan sus valores despus de la accin. En el ejemplo inicial para calcular la hipotenusa la expresin utilizada era: H RC(A2+B2); en ese caso se accede a los valores A y B en forma no destructiva (se usan sus valores para el clculo sin modificarlos). Las acciones de lectura y escritura son conocidas como acciones de entrada/salida o abreviadamente E/S.

Representacin Grfica de Algoritmos Computacionles


Las acciones descritas antes corresponden a un lenguaje algortmico denominado pseudocdigo. El pseudocdigo es una de las formas que se puede emplear para representar algoritmos. Adems, se disearn algoritmos en forma grfica a travs de los llamados diagramas de flujo. En un diagrama de flujo, las estructuras de las primitivas del pseudocdigo se representan con una forma geomtrica identificatoria o bloque. Estos bloques se unen con flechas que nos indican la secuencia u orden en que deben ejecutarse las instrucciones, es decir el flujo o recorrido que ha de seguirse en el diagrama. Por ejemplo, para las acciones de lectura y escritura se emplear un paralelogramo con una pequea flecha que apunta hacia adentro o hacia afuera

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

16

del bloque, respectivamente. Para la accin de asignacin, se utilizar un rectngulo. Una de las ventajas del empleo de diagramas de flujo, es la visualizacin plana de las acciones que forman el algoritmo, permitiendo seguir fcilmente su lgica. Estas ventajas se apreciaran mas adelante, cuando se describan primitivas de estructura condicional y repetitiva. Se observan ahora, algunas de las formas geomtricas que identifican acciones en un diagrama de flujo. En las prximas unidades se incorporarn nuevas acciones con su simbologa correspondiente:

Inicio o fin de proceso

Asignacin

Escritura o salida de informacin

Lectura o entrada de datos

Estructura condicional Si-entonces

Conectores

Veamos un ejemplo de aplicacin de Diagramas de Flujo en la resolucin de un problema: Problema: Intercambiar los valores de 2 variables numricas que se leen como datos. Algoritmo ( en pseudocdigo ) Proceso Intercambio Leer A,B; AUX A; A B; B AUX; Escribir A,B; FinProceso Algoritmo ( diagrama de flujo )
Proceso Intercambio

A,B

AUX <- A

A <- B

B <- AUX

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

A,B

Fin Proceso

Unidad 1

17

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

18

Prueba de escritorio o seguimiento de algoritmos


En las etapas de resolucin de problemas se propuso la etapa de prueba luego de escribir la codificacin (algoritmo). Probar un algoritmo es ejecutar cada una de las acciones incluidas en l; pero cmo efectuar una prueba en un algoritmo escrito en pseudocdigo o mediante un diagrama de flujo ?. La prueba de escritorio o seguimiento de un algoritmo puede efectuarse de la siguiente manera: Proponga un conjunto de datos. Estos datos deben coincidir en cantidad y tipo con las variables que aparecen en las acciones de lectura. Construya una tabla y coloque --encabezando cada columna de la tabla-cada una de las variables que aparezcan en el algoritmo. Escriba SALIDA en el encabezado de la ultima columna de la tabla. Aqu se anotarn los resultados que produzca el algoritmo como consecuencia de la accin de Escribir . Comience a ejecutar las acciones del algoritmo. Cuando encuentre una asignacin de una variable coloque el valor o dato a asignar en la columna correspondiente a esa variable. Si lee una variable, tome el dato de prueba propuesto para esa variable y colquelo en la columna de esa variable. Si vuelve a asignar o a leer una variable ya creada, contine anotando en la columna correspondiente. Al terminar de ejecutar las acciones, los resultados o salida del algoritmo deben aparecer en la columna de SALIDA. Ejemplo El siguiente algoritmo calcula el promedio de 3 nmeros utilizando una sola variable para leer los datos de entrada. Proceso Promedio 1 Sum 0; 2 Leer X; 3 Sum Sum+X; 4 Leer X; 5 Sum Sum+X; 6 Leer X; 7 Sum Sum+X; 8 Prom Sum/3; 9 Escribir Promedio=,Prom; FinProceso Se realizar la prueba o seguimiento para los datos 15, 40 y 35. Cada accin del algoritmo se halla numerada para poder seguir en detalle la modificacin de cada variable. Cada fila de la tabla se corresponde con una accin Sum x
1 2 3 4 5 6 7 8 9 0 15 15 40 55 35

Prom

Salida

90 30 Promedio= 30

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

19

algortmica. La variables sera la indicada a la derecha

tabla

con

las

Obsrvese en la fila 1, se ha asignado 0 a la variable sum. En la fila 2 la accin es Leer X y como el primer dato propuesto para la prueba es 15, se coloca 15 en la columna de la x. En el paso 3 se debe sumar sum+x, para lo cual se observa en la tabla que el valor actual de sum es cero y el de x es 15 con lo cual la operacin arroja 15; luego, se asigna ese resultado a sum. Es decir que en el paso 3 la variable sum cambi tomando un nuevo valor (15) y perdiendo el anterior(0). As sucesivamente hasta llegar a la accin de salida en el paso 9, donde se refleja el resultado de dicha accin en la ltima columna de la derecha de la tabla.

Documentacin
La documentacin de programas es fundamental para diseadores y usuarios. En pseudocdigo solo se documentarn los algoritmos internamente, esto es, se efectuarn comentarios de ciertas acciones o grupos de acciones para permitir al diseador o al equipo de diseo releer el algoritmo con facilidad. Esto evita a veces, tener que recordar por qu se defini tal variable, o por qu se utiliz tal expresin, etc. Para documentar internamente un algoritmo en pseudocdigo se emplear la doble barra ( // ) y a continuacin el texto o la frase explicativa. Al ejecutar el algoritmo, este texto a la derecha de la // debe ser ignorado pues no constituye una accin algortmica. Obsrvese el ejemplo: Ejemplo:

Calcular el rea del trapecio de la figura conociendo como datos la base menor b, el ngulo y la altura h.

h b

Algoritmo Proceso Trapecio Leer b, alfa, h; //si x es la diferencia entre // la base mayor y b x 2*(h/TAN(alfa)); Bmayor b+x; // clculo del rea del trapecio AreaT (Bmayor+b)*h/2; Escribir `Area trapecio=`, AreaT; FinProceso Utilice comentarios con frecuencia, le evitar prdidas de tiempo a la hora de recordar pasos, o depurar algoritmos.
Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

20

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

21

Sntesis
Un algoritmo es un conjunto finito de operaciones (instrucciones-pasos) que seguidos en un determinado orden permiten resolver un problema. Para codificar un algoritmo se debe utilizar un lenguaje adecuado que describa las acciones o pasos a realizar. Ese lenguaje est ligado al ejecutante encargado de procesar las acciones Se puede escribir un algoritmo usando nuestro lenguaje natural. Ese algoritmo podr ser ejecutado por una persona la cual entiende nuestro lenguaje (y que sepa cmo realizar cada accin). En tal caso se est en presencia de un algoritmo no computacional. Al escribir un algoritmo usando un lenguaje similar al que puede interpretar una computadora se est en presencia de un algoritmo computacional. Si usamos un lenguaje de programacin, el algoritmo constituye un programa. Un algoritmo debe: a) completar siempre un nmero determinado de pasos durante su ejecucin, independientemente de los datos del problema (Finitud). b) tener acciones que puedan ser interpretadas por el ejecutante sin dar lugar a ambigedades (Precisin). c) resolver un grupo de casos similares o de igual tipo (Generalidad). Para plantear algoritmos computacionales y dar solucin a problemas diversos se requiere de un lenguaje algortmico formal. Se emplear un pseudolenguaje de estructura y sintaxis similar al de los lenguajes de programacin de computadoras: pseudocdigo. Esa formalizacin es necesaria para utilizar -ms tarde- lenguajes de programacin y construir programas que una computadora pueda interpretar. Para codificar un algoritmo computacional empleando pseudocdigo se debe comenzar con la palabra Proceso <Nombre>. A continuacin se plantean las acciones que conforman el algoritmo y se finaliza con la palabra FinProceso. Los elementos del pseudocdigo presentes en un algoritmo son las constantes, variables, identificadores, expresiones y primitivas del lenguaje. Las variables son lugares de memoria que permiten almacenar informacin. Se las suele identificar con nombres (identificadores). Una de las formas de colocar un dato en una variable es a travs de la asignacin. Otra forma es con la accin de lectura. Por ejemplo: X<4.5; Leer z;

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

22

La informacin que maneja un algoritmo puede ser de naturaleza diferente, por ello se definen 3 tipos de datos: numrico, caracter y lgico. Para cada tipo se plantean operaciones diferentes y no se pueden mezclar en una misma expresin datos de distinto tipo. Dentro del tipo numrico se pueden emplear los operadores algebraicos de la matemtica bsica y se dispone de una serie de funciones predefinidas similares a las que Ud. puede hallar en una calculadora cientfica: SEN, COS, TRUNC, LN, etc. Las expresiones permiten combinar variables, constantes y operadores para realizar clculos y comparaciones necesarios para resolver diversos casos. El tipo lgico tiene 2 constantes: VERDADERO y FALSO. En una expresin lgica se pueden usar operadores relacionales y operadores lgicos. El tipo caracter se basa en el conjunto de caracteres del cdigo ASCII. Cada caracter tiene un nmero de orden y gracias a ese orden es posible establecer relaciones de orden: menor que, igual que, mayor que. Las acciones primitivas son rdenes perfectamente definidas y preestablecidas para que el ejecutante (la computadora) las interprete y las lleve a cabo. Las acciones primitivas de estructura secuencial, se denominan as porque se ejecutan una tras otra secuencialmente. Son ellas: la lectura o ingreso de datos, la asignacin, la escritura o salida de informacin. Estas acciones se identifican unvocamente a travs de palabras claves. Estas palabras son reservadas y no pueden emplearse como identificadores de otros elementos del algoritmo. Los algoritmos computacionales tambin pueden representarse grficamente a travs de diagramas de flujo. En estos diagramas los bloques o formas grficas representan acciones. El diseo en 2 dimensiones permite seguir con ms claridad la lgica propuesta. Es posible probar algoritmos mediante un seguimiento del mismo. Esto es, proponer una lista de datos que coincida con la cantidad y tipo de variables a leer. Luego ejecute cada accin y anote en una tabla de variables como estas se van modificando. Cada accin de escribir con el estado actual de las variables me permite determinar la salida del algoritmo. La documentacin interna de algoritmos puede hacerse en pseudocdigo a travs de la doble barra (//). Utilice estos comentarios para describir la lgica aplicada a ciertas acciones, o para recordar por qu efectu cierto clculo, etc. Estos comentarios son tiles a la hora depurar (corregir) el cdigo o interpretar la lgica del algoritmo ms gilmente.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

23

Por ltimo: Los conceptos tratados hasta aqu, contribuyen a formalizar la metodologa del diseo de algoritmos computacionales a travs de ciertas reglas formales, eliminando acciones ambiguas o carentes de precisin. Esto no quiere decir, que planteado un problema, el algoritmo que lo resuelva responda a una metodologa nica. Al contrario, el diseo de los algoritmos requiere una gran dosis de creatividad, y es comn hallar varios caminos para la obtencin de un resultado. Solo se trata de establecer pautas claras y precisas para que el ejecutante (luego, la computadora) las interprete y pueda procesar la secuencia de acciones que conforman un algoritmo computacional.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

24

Actividades
Introduccin
Los problemas a desarrollar de aqu en adelante sern planteados de forma que el ejecutante pueda ser una computadora. Esto nos exige el uso de un lenguaje libre de ambigedades que permita expresar de forma unvoca las acciones que debern ser llevadas a cabo por la computadora. Para ello haremos uso de un pseudocdigo con las especificaciones presentadas anteriormente. Se trata de un pseudolenguaje muy limitado pero con el cual podremos representar la algoritmos sencillos de forma detallada, y a la vez de estructura similar al lenguaje de programacin que posteriormente emplearemos (C+ +). Adems, haremos uso de la herramienta PSeint (http://pseint.sourceforge.net), un intrprete de pseudocdigo que nos permitir probar nuestros algoritmos en la computadora.

Ejercicios
Ejercicio 1.1 Observe el siguiente programa expresado en pseudocodigo Proceso Ejercicio21 Escribir 'Ingrese un valor: ' Leer var; Escribir 'El valor ingresado es: ', var; FinProceso a. Explique qu hace el programa. b. El valor ingresado se guarda en la variable cuyo identificador es var, proponga 3 identificadores invlidos teniendo en cuenta las reglas vistas anteriormente. Observe e interprete los errores presentados por PSeint al tratar de utilizarlos c. Verifique si el intrprete hace distinciones entre maysculas/minsculas en identificadores. Ejercicio 1.2 Modifique el pseudocdigo del ejercicio anterior para que el valor de la variable no sea ingresado por el usuario, sino asignado a partir de una constante. Proponga tres ejemplos de constantes numricas, una constante de carcter y una constante lgica. Compruebe la correcta expresin de dichas constantes mediante el intrprete. Ejercicio 1.3 Dadas las siguientes constantes, si estn escritas correctamente seale el tipo; en caso contrario, indique el error: a) TGB4 b) 'silla' c) '41$/'

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

25

d) VERDADERO g) '------------'

e) 98,765,43 h) 7.2E+3

f) 345.2 i) '345.2'

Ejercicio 1.4 Teniendo en cuenta la definicin de expresin explicada en la teora, proponga 2 expresiones numricas y escriba un algoritmo en pseudocdigo que las asigne a 2 variables diferentes y muestre dichas variables por pantalla. Luego intente responder: es posible mostrar el resultado de una expresin en pantalla sin almacenarla previamente en una variable? Averige si su respuesta es correcta intentando realizar esto con el interprete PSeint. Ejercicio 1.5 Escriba un programa en pseudocdigo que permita al usuario ingresar 2 valores numricos y los compare mediante 3 de los operadores relacionales vistos. El programa debe mostrar por pantalla los resultados de dichas comparaciones asignndolas previamente a una variable. a. Utilice el programa ingresando valores numricos y comprobando su correcto funcionamiento.De que tipo son los valores que tiene por salida el programa? b. Utilice nuevamente el programa pero esta vez ingresando variables de tipo carcter. Funciona? Por qu/Por que no?

Ejercicio 1.6 Realice un programa que permita al usuario ingresar un numero e informe a. Si el numero es entero o tiene parte decimal b. Si el numero es mayor que 5 y menor que 20 Ejercicio 1.7 Dadas las siguientes expresiones, si estn planteadas en forma incorrecta seale la causa, en caso contrario seale el tipo y el resultado de cada una: a) 3 + 4 3 - 9 * 3 b) 145 < '789' c) 'FICH' < 79 d) TRUNC(x) <= REDOND(x) e) V (54>97) f) ('a'<'c') V (35>98) Ejercicio 1.8 Proponga 2 ejemplos de asignaciones para cada uno de los tipos de datos estudiados. Ejercicio 1.9 Observe las proposiciones siguientes. Describa qu representa para Ud. cada una de ellas, de acuerdo a la formalizacin algortmica que conoce: a) CALC = 189 c) CALC 154 e) AB12 AB12 + 1 Ejercicio 1.10 b) 'DATO' = X d) ABC 980<'980' f) T 'X' = T

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

26

Dado el siguiente algoritmo: a) realice un seguimiento con los valores de prueba 73 y 105; b) proponga un enunciado para un problema que tenga al algoritmo por solucin; c) intente hacer un seguimiento con los datos 290 y 'Luis Lpez' y exprese su conclusin. Proceso Ejercicio210 Leer A, B; Escribir 'Valores Iniciales:', A, B; Aux A; A B; B Aux; Escribir "Valores Actuales:', A,B; FinProceso Ejercicio 1.11 Escriba un algoritmo que permita calcular el rea de un circulo y el rea de un rectngulo. El usuario debe ingresar los datos de entrada por teclado. Proponga mensajes alusivos para pedir los datos de entrada y mostrar los datos de salida. Ejercicio 1.12 Resuelva los ejercicios siguientes en base a las etapas de resolucin de problemas que Ud. conoce. Exprese los algoritmos empleando pseudocdigo y diagramas de flujo. a) Calcule las races o soluciones de una ecuacin cuadrtica del tipo ax 2+ bx + c=0, conociendo como datos los coeficientes a, b y c. Suponer que los datos corresponden a ecuaciones de races reales. b) Un usuario desea conocer cunto debe pagar por el consumo de energa elctrica realizado en el ltimo perodo. Se conocen el costo del KW sin impuestos, la lectura actual del medidor y la lectura del perodo anterior. Adems en concepto de impuestos los usuarios abonan un 22% sobre el total correspondiente al consumo. c) Un canal tiene seccin trapezoidal como indica la figura. Se conocen como h datos la base b, el nivel h y el ngulo de inclinacin de las paredes (alfa). Si la b velocidad media de la corriente es conocida y tiene un valor v, determine e informe el caudal medio Q que pasa por dicho canal. (Nota: Q medio se calcula con el producto entre la velocidad media y el rea de la seccin). e) Se ingresa como dato un nmero entero de 8 cifras (ejemplo: 12081982) correspondiente a una fecha de nacimiento de una persona, donde las 2 primeras cifras representan el da, las 2 siguientes el mes y las 4 ltimas el ao. Obtenga e informe separadamente el da, mes y ao de dicha fecha. d) Considere una dato de entrada como el del ejercicio anterior, calcule e informe la edad de esa persona al da de hoy utilizando una constante que indique la fecha actual.

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

27

f) Obtener la liquidacin del sueldo de un empleado en base al detalle indicado ms abajo. La empresa empleadora, bonifica sobre el sueldo bsico (SB) la antigedad del empleado con un 1.2% por ao. Adems paga el presentismo con una monto fijo (MP). Entre los descuentos, se deben contabilizar: el aporte jubilatorio (AJ) que representa un 11% del sueldo bsico; aporte a obra social (OS) con un 3% del bsico y el aporte gremial (AG) con un 1% del bsico. El empleador paga adems $ 30.00 por esposa y $ 40.00 por cada hijo. Son datos del problema: nombre y apellido del empleado, DNI, sueldo bsico, antigedad en aos, estado civil ( 1 si es casado, 0 si es soltero ), nmero de hijos, presentismo ( 1 si corresponde cobrar, 0 si no cobra ). Obtenga una salida con mensajes alusivos describiendo los haberes, los descuentos y el sueldo neto a cobrar.:

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012

Unidad 1

28

Cuestionario
1.1 Qu es un algoritmo? Y un algoritmo computacional? 1.2. Dentro de las caractersticas deseables en un algoritmo se habla de finitud. 1.3. Qu caso puede proponer como ejemplo donde un algoritmo no cumpla con esta caracterstica (algoritmo infinito)? 1.4. Qu inconvenientes puede observar en el planteo de algoritmos usando nuestro lenguaje natural? 1.4. Qu diferencias existen entre accin algortmica y el de accin primitiva? 1.5. Seale la diferencia entre un identificador y una variable. 1.6. Una constante es una expresin? Y una variable? 1.7 En una misma expresin lgica pueden aparecer variables y constantes de tipo carcter y de tipo lgico?. Explique. 1.8 Es posible comparar dos expresiones de diferente tipo en una expresin lgica relacional? 1.9 Es posible plantear un algoritmo sin la accin de lectura? Explique. 1.10 Puede plantearse un algoritmo sin la accin de escritura? Explique. 1.11 En una proposicin de asignacin, qu variables intervinientes deben estar previamente definidas? 1.12 En una proposicin de asignacin, qu variables intervinientes pierden el valor que guardaban anteriormente? 1.13 Es posible leer una variable que fue definida en un paso anterior? 1.14 Se puede proponer como salida una variable que no ha sido definida antes? 1.15 Cules acciones algortmicas permiten definir (crear) una variable dentro de un algoritmo? 1.16 Cules acciones sobre una variable son destructivas y cuales no? Por qu?

Fi-UNER- Fundamentos de Programacin/Introduccin a la Programacin 2012