Algoritmos computacionales


Resumen de Conceptos

Introducción:

Los problemas y algoritmos desarrollados en la unidad anterior, reflejan situaciones de la vida diaria. En la mayoría 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 descripción precisa de cada una de las acciones a emplear en la solución del problema. Esta unidad propone describir la formalización necesaria para el desarrollo de Algoritmos Computacionales empleando un pseudolenguaje similar a los empleados en la confección de programas.. De aquí en más, cuando se mencione al ejecutante de un algoritmo, se estará haciendo referencia a una computadora. En el ejemplo que se propone a continuación se desarrolla un algoritmo completo de acuerdo a la formalización que se propone. Ejemplo Problema: plantear un algoritmo computacional que calcule la hipotenusa de un triángulo rectángulo. Se conoce como información de entrada las longitudes de los catetos.

Análisis del Problema: Datos: Longitudes de los catetos. Resultado a informar: Hipotenusa. Relaciones entre datos y resultados: Teorema de Pitágoras.

Algoritmo: Proceso Hipotenusa Leer A,B; H  RC(A2+B2); Escribir 'Hipotenusa =',H; FinProceso

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 asignación respectivamente; RC(A  2 + B  2) es una expresión numérica y RC ( ) es la función cuadrada. En esta unidad se desarrollarán todos estos elementos que conforman un lenguaje algorítmico formal que llamado pseudocódigo.

Descripción de los elementos presentes en el ejemplo

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

3

La forma general de un algoritmo escrito en pseudocódigo es la siguiente: PROCESO nombre del proceso acción 1; acción 2; . . . FINPROCESO

Elementos de un algoritmo computacional
Se define constante, como el valor que no puede alterarse en el transcurso de un algoritmo.

Constante

Ejemplos de constantes: 123 Esta información se expresa mediante un valor intrínseco y único que no puede alterarse. Se utilizarán con frecuencia estos datos para asignarlos a variables o construir expresiones. 'López' Falso 3.1459

Una variable es una posición 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 través de nombres o identificadores. En el ejemplo inicial del cáclculo de la hipotenusa:

Variable

Proceso Hipotenusa Leer A,B; H  RC(A2+B2); Escribir 'Hipotenusa =',H; FinProceso se observa que 2 e ‘Hipotenusa=’ constituyen constantes. A, B H son variables.

Para proponer el nombre o identificador de algún elemento del algoritmo -como las variables- el diseñador tiene amplia libertad y solo debe respetar tres reglas simples:

Nombres o identificadores

1) Utilizar sólo letras y/o dígitos, comenzando siempre con una letra. 2) No utilizar palabras claves para acciones primitivas que emplea el pseudocódigo: LEER, ESCRIBIR, MIENTRAS, HACER, SEGUN, etc., o para las funciones internas: RC, SEN, TRUNC, LN, etc., o las palabras que corresponden a las constantes lógicas VERDAD y FALSO

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

4

3) No hacer distinción entre mayúsculas y minúsculas. 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 sinnúmero de combinaciones diferentes de letras y dígitos. Ejemplos de identificadores: venta Se mencionó que el diseñador del algoritmo tiene total libertad para proponer nombres a sus elementos, aunque como consejo, es conveniente proponer identificadores que tengan alguna relación con lo que el elemento representa. En nuestro ejemplo inicial del cálculo de la hipotenusa de un triángulo rectángulo, se podría haber empleado los nombres de variables CATETO1, CATETO2, HIPOT, en lugar A, B, H. x12 resultado SUMA2 M3M

Se define como expresión a un conjunto de operandos ligados por operadores cuya evaluación arroja un resultado. En el ejemplo incial RC(A  2 + B  2) es una expresión numérica (relación de Pitágoras) que permite calcular el valor de la hipotenusa.

Expresión

Ejemplos de expresiones: 2+a-x*5 45 A < B TRUNC(R) + 1

Tipos de Información
Se puede clasificar la información que puede manejar una computadora a través de un algoritmo en los tipos siguientes:
  

tipo NUMERICO tipo CARACTER tipo LOGICO

Esta clasificación nos define los tipos primitivos de la información. Se estudiará a cada uno de ellos y su modo de empleo.

Tipo Numérico
Constantes Numéricas Los valores o constantes de tipo numérico se decimal y pueden estar precedidos por los signos '+ o '-' . La ausencia de signo implica un número positivo. Se pueden subdividir en reales y enteros, o admitir clasificaciones más detalladas, de acuerdo al lenguaje de programación empleado. Para la formalización propuesta mediante el empleo de un pseudocódigo universal, no se harán distinciones de esta clase y simplemente se hablará de tipo numérico.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

5

Un detalle importante: los números reales deben separar su parte entera de la fracción decimal con un punto en lugar de la coma. Se reserva la coma como separador. No se utilizará ningún símbolo para separación de miles. Ejemplos de constantes numéricas: 14 En los 2 últimos ejemplos se indican constantes numéricas con notación científica. 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 Numéricas Una posición de memoria, que contenga cualquier valor de tipo numérico se denomina Variable Numérica. Las variables se identifican en un algoritmo a través de nombres o identificadores. Expresiones Numéricas Las expresiones numéricas se plantean en general con constantes numéricas, variables numéricas y funciones; y los operadores algebraicos como nexo: -12500 +1.9452 -567.91 1.3E+2 -0.94E-3

Operadores algebraicos + : suma : resta * : multiplicación / : división  : potenciación Es de mencionar que ciertos lenguajes de programación no disponen de todos los operadores antes descritos, así como es posible hallar otros operadores algebraicos adicionales a los presentados. La jerarquía de estos operadores es idéntica a la planteada por el álgebra de números y sólo puede ser alterada a través de la intercalación de niveles de paréntesis. Ejemplos de expresiones numéricas 2+a*102-800/C 1-(2*TOT-30 )(1+P) AREA*(Y+1.34 /(X2-T )) Obsérvese que el operador de radicación no existe; pero esto no es un problema porque esta operación puede plantearse fácilmente a través de la potenciación de exponente fraccionario:
n m m n

a
De todas maneras es común hallar en casi todos los lenguajes de programación una función que realiza el cálculo de la raíz cuadrada. En pseudocódigo se utiliza para el ejemplo inicial y se llama RC( ). Además se asume que el ejecutante del algoritmo, conoce y puede resolver ciertas funciones numéricas. 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 paréntesis.

a

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

6

Funciones Predefinidas Algunas de las funciones predefinidas que incluye el pseudocódigo: RC( ) : ABS( ) : LN( ) : EXP( ) : SEN( ) : COS( ) : ATAN( ) : TRUNC( ) : REDON( ) : Raíz cuadrada Valor absoluto Logaritmo natural Función exponencial Seno de un ángulo en radianes Coseno de un ángulo en radianes Arco Tangente del argumento Parte entera del argumento Entero mas cercano

Con estos nuevos elementos, se puede ampliar el uso de expresiones numéricas. Ejemplos de expresiones numéricas 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 programación suelen disponer de un número mucho mayor de funciones predefinidas.

Tipo Caracter
Constantes Tipo Caracter Se incluyen aquí a todos los caracteres y símbolos del código ASCII (Código Standard Americano para Intercambio de Información), los cuales pueden obtenerse de las teclas o combinaciones de teclas de su computadora, es decir, las letras del alfabeto en minúsculas y las letras mayúsculas, los signos de puntuación, los operadores aritméticos, paréntesis, el espacio en blanco, caracteres especiales, etc. También se incluyen dentro de este tipo a las cadenas de caracteres, como los apellidos, nombres, direcciones y también cadenas de caracteres numéricos: Ejemplos de constantes tipo carácter 'Luis Rodríguez' '25 de Mayo' 'Z' '3124' 'Resultado=' '123/890-12'

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

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

7

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

'' '!' '"' '#' '$' '%' '&' ''' '(' ')' '*' '+' ',' '-' '.' '/'

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

'0' '1' '2' '3' '4' '5' '6' '7' '8' '9' ':' ';' '<' '=' '>' '?'

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

'@' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O'

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' '[' '\' ']' '^' '_'

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

'`' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o'

112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '{' '|' '}' '~' '• '

Si se tiene en cuenta la relación de orden dada por el código ASCII se puede afirmar que son verdaderas las expresiones siguientes: La letra 'a' es mayor que la letra 'B'. (‘a’ tienen número de orden 97 que es mayor al 66 de la ‘B’) El caracter '5' es menor que la letra 'A'. (el carácter ‘5’ tiene código 53 y el de la letra ‘A’ es 65) La cadena de caracteres 'Mario' es menor que ‘Roberto’. (se encuentra antes alfabéticamente) Se observa que a las constantes tipo caracter o las cadenas de caracteres se indican entre apóstrofos 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 posición 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 Programación no se utilizarán 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 Lógico
Constantes de Tipo Lógico Dentro de este tipo se incluye a solo dos constantes o valores posibles: VERDADERO y FALSO. Esto implica tener en cuenta una nueva limitación al proponer identificadores: no pueden utilizarse los nombres VERDADERO y FALSO para evitar ambigüedades.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

8

Variables Lógicas Una posición de memoria, que contenga cualquier dato de tipo lógico es una Variable Lógica. Expresiones Lógicas Aquí cobran mucha importancia una serie de operadores que nos permiten plantear expresiones de tipo lógico. Las expresiones mas simples son las relacionales que utilizan los operadores relacionales matemáticos 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 lógicas relacionales 23<45 'ANA'<'LUIS' Las expresiones lógicas simples mostradas en el ejemplo se conocen como expresiones relacionales, pues permiten comparar o relacionar a 2 operandos del mismo tipo. Justamente, la ultima expresión del ejemplo anterior no es valida, pues compara a una expresión numérica con un caracter. La algorítmica computacional, permite también formar expresiones lógicas mas complejas a través de los conectores que emplea la lógica proposicional: (2+B) >=Trunc(2+B) 7>'M' A+2>=100 'a'<>LETRA

Operadores lógicos Operador Significado --------------- ----------------- Disyunción  Conjunción ~ Negación Se observa entonces el valor de verdad de las expresiones lógicas propuestas en el ejemplo siguiente: Ejemplo: Expresión Lógica -------------------------------------(7<10)  ('a'<'c') ('A'<'a')  (12>19)

Resultado ------------------------VERDADERO VERDADERO

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

9

( 37<18 ) ( SEN(x)<=1 ) ('MARIA'<'MARTA') ('MARIA'<'MARTA')  (1>2) FALSO VERDADERO VERDADERO

FALSO

Acciones Algorítmicas
En el lenguaje algorítmico (pseudocódigo), las primitivas se identifican con palabras claves o reservadas. Se han empleado en el ejemplo inicial las primitivas: LEER, ESCRIBIR y  (asignar). La ejecución de las acciones primitivas de un algoritmo suele ser diferente según el caso, lo cual lleva a plantear la siguiente clasificación:

Primitivas

Primitivas de Estructura Secuencial Primitivas de Estructura Condicional Primitivas de Control Primitivas de Estructura Repetitiva

En la próxima unidad se desarrollarán las estructuras algorítmicas de control que implican el uso de primitivas de estructura condicional y de estructura repetitiva. Se plantea a continuación, algunas acciones de estructura secuencial.

Acciones Primitivas de Estructura Secuencial
Esta acción, permite a un identificador de variable, representar o memorizar cierto valor. Para describirla se utilizará la notación siguiente:

Asignación

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 expresión E. El símbolo ' ' puede leerse toma el valor. Los tipos de V y E deben ser coincidentes, en caso contrario será causa de error. Según el tipo de V y E una asignación puede ser:  Asignación numérica.  Asignación tipo caracter.  Asignación lógica. Si V es una variable numérica y E cualquier expresión de tipo numérica la asignación es numérica.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

10

Ejemplos de Asignaciones Numéricas ( A toma el valor 43 ) A  43; ( X toma el valor contenido en A ) X  A; NUM  3*X/A+2; ( NUM toma el valor del resultado de hacer 3*X/A+2 ) Importante: Nótese que para poder realizar una asignación aritmética se debe evaluar primero la expresión de la derecha, por lo tanto es perfectamente válida la acción: NN+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 acción, N contenía el valor 8, luego de dicha acción contendrá 9. Obsérvese que esta acción algorítmica no tiene nada que ver con los conceptos asimilados en matemáticas, donde N=N+1 es una expresión incompatible. Del mismo modo se definen las asignaciones tipo caracter y tipo lógica. 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 Lógicas

M  FALSO; //M toma el valor FALSO CIERTO  34 <= 78 ; //CIERTO toma el valor VERDADERO G (A<2)  (C=10); //G toma el valor lógico // resultante de la expresión (A<2)  (C=10) )

Todo algoritmo tiene por objetivo principal producir resultados, pudiendo o no incorporar información del medio externo (datos), al ambiente o sistema que observa. Esta incorporación de valores desde el exterior, nos lleva a definir una acción algorítmica primitiva de Lectura o Entrada. Se usará para ello la palabra clave LEER que permitirá al ejecutante identificar esta acción, seguida de la variable o lista de variables, que representan en el algoritmo la los valores que deben ser ingresados.

Entrada

Ejemplos de entrada de datos LEER Dat; LEER Nombre, Apellido, DNI;

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

11

Esta acción tiene el mismo efecto que una asignación, solo que esta última utiliza valores del ambiente del algoritmo; en cambio la lectura asigna valores desde el exterior. También esta acción contribuye a hacer a los algoritmos de uso general, pues permite incorporar información nueva para producir nuevos resultados. Sin esta acción, la ejecución de un algoritmo producirá siempre la misma respuesta. Las acciones de lectura y asignación permiten definir variables en un algoritmo.

La acción primitiva que permite a un algoritmo comunicar resultados o salida de información al medio exterior, se representará con la palabra clave ESCRIBIR; y a continuación una variable, una constante, una lista de variables y/o constantes o expresiones.

Salida

Ejemplos 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 través 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 través 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 después de la acción. En el ejemplo inicial para calcular la hipotenusa la expresión utilizada era: H  RC(A2+B2); en ese caso se accede a los valores A y B en forma no destructiva (se usan sus valores para el cálculo sin modificarlos). Las acciones de lectura y escritura son conocidas como acciones de entrada/salida o abreviadamente E/S.

Representación Gráfica de Algoritmos Computacionales
Las acciones descritas antes corresponden a un lenguaje algorítmico denominado pseudocódigo. El pseudocódigo es una de las formas que se puede emplear para representar algoritmos. Además, se diseñarán algoritmos en forma gráfica a través de los llamados diagramas de flujo. En un diagrama de flujo, las estructuras de las primitivas del pseudocódigo se representan con una forma geométrica 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 pequeña flecha que apunta hacia adentro o hacia afuera

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

12

del bloque, respectivamente. Para la acción de asignación, se utilizará un rectángulo. Una de las ventajas del empleo de diagramas de flujo, es la visualización plana de las acciones que forman el algoritmo, permitiendo seguir fácilmente su lógica. Estas ventajas se apreciaran mas adelante, cuando se describan primitivas de estructura condicional y repetitiva. Se observan ahora, algunas de las formas geométricas que identifican acciones en un diagrama de flujo. En las próximas unidades se incorporarán nuevas acciones con su simbología correspondiente:

Inicio o fin de proceso

Asignación

Escritura o salida de información

Lectura o entrada de datos

V

F

Estructura condicional Si-entonces Ejemplo

Conectores

Problema: Intercambiar los valores de 2 variables numéricas que se leen como datos. Algoritmo ( en pseudocódigo ) Proceso Intercambio Leer A,B; AUX  A; A  B; B  AUX; Escribir A,B; FinProceso Algoritmo ( diagrama de flujo )

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

13

Proceso Intercambio

A,B

AUX <- A

A <- B

B <- AUX

A,B

Fin Proceso

Prueba de escritorio o seguimiento de algoritmos
En las etapas de resolución de problemas se propuso la etapa de prueba luego de escribir la codificación (algoritmo). Probar un algoritmo es ejecutar cada una de las acciones incluidas en él; pero cómo efectuar una prueba en un algoritmo escrito en pseudocódigo o mediante un diagrama de flujo ?. La prueba de escritorio o seguimiento de un algoritmo puede efectuarse de la siguiente manera: a) Proponga un conjunto de datos. Estos datos deben coincidir en cantidad y tipo con las variables que aparecen en las acciones de lectura. b) Construya una tabla y coloque --encabezando cada columna de la tabla-cada una de las variables que aparezcan en el algoritmo. c) Escriba SALIDA en el encabezado de la ultima columna de la tabla. Aquí se anotarán los resultados que produzca el algoritmo como consecuencia de la acción de Escribir . d) Comience a ejecutar las acciones del algoritmo. Cuando encuentre una asignación de una variable coloque el valor o dato a asignar en la columna correspondiente a esa variable. e) Si lee una variable, tome el dato de prueba propuesto para esa variable y colóquelo en la columna de esa variable. f) Si vuelve a asignar o a leer una variable ya creada, continúe anotando en la columna correspondiente. g) 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 números utilizando una sola variable para leer los datos de entrada. Proceso Promediar Sum  0; Leer X; Sum  Sum+X;

1 2 3

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

14

4 5 6 7 8 9

Leer X; Sum  Sum+X; Leer X; Sum  Sum+X; Prom  Sum/3; Escribir ‘Promedio=’,Prom; FinProceso

Se realizará la prueba o seguimiento para los datos 15, 40 y 35.

Cada acción del algoritmo se halla numerada para poder seguir en detalle la modificación de cada Sum x Prom Salida variable. 1 0 Cada fila de la tabla se 15 corresponde con una acción 2 3 algorítmica. La tabla con las 15 4 variables sería la indicada a 40 la derecha 5 55 6 35 7 90 8 30 9 Promedio= 30 Obsérvese en la fila 1, se ha asignado 0 a la variable sum. En la fila 2 la acción 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 operación 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 acción de salida en el paso 9, donde se refleja el resultado de dicha acción en la última columna de la derecha de la tabla.

Documentación
La documentación de programas es fundamental para diseñadores y usuarios. En pseudocódigo solo se documentarán los algoritmos internamente, esto es, se efectuarán comentarios de ciertas acciones o grupos de acciones para permitir al diseñador o al equipo de diseño releer el algoritmo con facilidad. Esto evita a veces, tener que recordar por qué se definió tal variable, o por qué se utilizó tal expresión, etc. Para documentar internamente un algoritmo en pseudocódigo se empleará la doble barra ( // ) y a continuación el texto o la frase explicativa. Al ejecutar el algoritmo, este texto a la derecha de la // debe ser ignorado pues no constituye una acción algorítmica. Obsérvese el ejemplo:

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

15

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

h



Algoritmo b 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; // cálculo del área del trapecio AreaT  (Bmayor+b)*h/2; Escribir `Area trapecio=`, AreaT; FinProceso

Utilice comentarios con frecuencia, le evitará pérdidas de tiempo a la hora de recordar pasos, o depurar algoritmos.

Síntesis
1. Para plantear algoritmos computacionales y dar solución a problemas diversos se requiere de un lenguaje algorítmico formal. Se empleará un pseudolenguaje de estructura y sintaxis similar al de los lenguajes de programación de computadoras: pseudocódigo. Esa formalización es necesaria para utilizar -más tarde- lenguajes de programación y construir programas que una computadora pueda interpretar. Para codificar un algoritmo computacional empleando pseudocódigo se debe comenzar con la palabra Proceso <Nombre>. A continuación se plantean las acciones que conforman el algoritmo y se finaliza con la palabra FinProceso. Los elementos del pseudocódigo presentes en un algoritmo son las constantes, variables, identificadores, expresiones y primitivas del lenguaje. Las variables son lugares de memoria que permiten almacenar información. Se las suele identificar con nombres (identificadores). Una de las formas de colocar un dato en una variable es a través de la asignación. Otra forma es con la acción de lectura. Por ejemplo: X<-4.5; Leer z; La información que maneja un algoritmo puede ser de naturaleza diferente, por ello se definen 3 tipos de datos: numérico, caracter y lógico. Para cada tipo se plantean operaciones diferentes y no se pueden mezclar en

2.

3.

4.

5.

6.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

16

una misma expresión datos de distinto tipo. 7. Dentro del tipo numérico se pueden emplear los operadores algebraicos de la matemática básica y se dispone de una serie de funciones predefinidas similares a las que Ud. puede hallar en una calculadora científica: SEN, COS, TRUNC, LN, etc. Las expresiones permiten combinar variables, constantes y operadores para realizar cálculos y comparaciones necesarios para resolver diversos casos. El tipo lógico tiene 2 constantes: VERDADERO y FALSO. En una expresión lógica se pueden usar operadores relacionales y operadores lógicos. El tipo caracter se basa en el conjunto de caracteres del código ASCII. Cada caracter tiene un número 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 asignación, la escritura o salida de información. Estas acciones se identifican unívocamente a través de palabras claves. Estas palabras son reservadas y no pueden emplearse como identificadores de otros elementos del algoritmo. Los algoritmos computacionales también pueden representarse gráficamente a través de diagramas de flujo. En estos diagramas los bloques o formas gráficas representan acciones. El diseño en 2 dimensiones permite seguir con más claridad la lógica 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 acción y anote en una tabla de variables como estas se van modificando. Cada acción de escribir con el estado actual de las variables me permite determinar la salida del algoritmo. La documentación interna de algoritmos puede hacerse en pseudocódigo a través de la doble barra (//). Utilice estos comentarios para describir la lógica aplicada a ciertas acciones, o para recordar por qué efectuó cierto cálculo, etc. Estos comentarios son útiles a la hora depurar (corregir) el código o interpretar la lógica del algoritmo más ágilmente.

8.

9.

10.

11.

12.

13.

14.

15.

16.

Por último: Los conceptos tratados hasta aquí, contribuyen a formalizar la metodología del diseño de algoritmos computacionales a través de ciertas reglas formales, eliminando acciones ambiguas o carentes de precisión. Esto no quiere decir, que planteado un problema, el algoritmo que lo resuelva responda a una metodología única. Al contrario, el diseño de los algoritmos requiere una gran

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

17

dosis de creatividad, y es común hallar varios caminos para la obtención 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.

Actividades
Ejercicios
Ejercicio 2.1. Los siguientes ejemplos son casos de identificadores no válidos. Indique la causa. (total) 3resultado 2X4 SUMA-2 M3/M

Ejercicio 2.2 Proponga 5 ejemplos de constantes numéricas.

Ejercicio 2.3 Dadas las siguientes constantes, si están escritas correctamente señale el tipo; en caso contrario, indique el error: a) TGB4 d) VERDADERO g) '------------' b) 'silla' e) 98,765,43 h) 7.2E+3 c) '41$/' f) 85/4 i) 345.2

Ejercicio 2.4 Proponga 3 ejemplos de expresiones numéricas.

Ejercicio 2.5 Investigue los posibles valores de verdad (tablas de verdad) para cada uno de los operadores lógicos.

Ejercicio 2.6 Proponga 3 ejemplos de expresiones lógicas usando operadores relacionales y operadores lógicos.

Ejercicio 2.7 Dadas las siguientes expresiones, si están planteadas en forma incorrecta señale la causa, en caso contrario señale 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 2.8 Proponga 2 ejemplos de asignaciones para cada uno de los tipos de datos estudiados.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

18

Ejercicio 2.9 Observe las proposiciones siguientes. Describa qué representa para Ud. cada una de ellas, de acuerdo a la formalización algorítmica que conoce: a) CALC = 189 c) CALC  154 e) AB12  AB12 + 1 b) 'DATO' = X d) ABC  980<'980' f) T  'X' = T

Ejercicio 2.10 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 solución; c) intente hacer un seguimiento con los datos 290 y 'Luis López' y exprese su conclusión. Proceso Ejercicio210 Leer A, B; Escribir 'Valores Iniciales:', A, B; Aux  A; A  B; B  Aux; Escribir "Valores Actuales:', A,B; FinProceso

Ejercicio 2.11 En un algoritmo se deben ingresar los datos para calcular el área de un círculo y el área de un rectángulo. Proponga la acción de entrada correspondiente.

Ejercicio 2.12 En el mismo algoritmo del ejercicio anterior se desea mostrar los resultados del problema: área del círculo y área del rectángulo. Proponga la acción de salida, indicando con mensajes alusivos cual es el resultado que se muestra.

Ejercicio 2.13 Resuelva los ejercicios siguientes en base a las etapas de resolución de problemas que Ud. conoce. Exprese los algoritmos empleando pseudocódigo y diagramas de flujo. a) Calcule las raíces o soluciones de una ecuación cuadrática del tipo ax2+ bx + c=0, conociendo como datos los coeficientes a, b y c. Suponer que los datos corresponden a ecuaciones de raíces reales. b) Un usuario desea conocer cuánto debe pagar por el consumo de energía eléctrica realizado en el último período. Se conocen el costo del KW sin impuestos, la lectura actual del medidor y la lectura del período anterior. Además en concepto de impuestos los usuarios abonan un 22% sobre el total correspondiente al consumo. c) Un canal tiene sección trapezoidal como indica la figura. Se conocen como datos la base b, el nivel h y el ángulo de inclinación de las paredes (alfa). Si la velocidad media de la corriente es

h


b

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

19

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 sección). e) Obtener la liquidación del sueldo de un empleado en base al detalle indicado más abajo. La empresa empleadora, bonifica sobre el sueldo básico (SB) la antigüedad del empleado con un 1.2% por año. Además paga el presentismo con una monto fijo (MP). Entre los descuentos, se deben contabilizar: el aporte jubilatorio (AJ) que representa un 11% del sueldo básico; aporte a obra social (OS) con un 3% del básico y el aporte gremial (AG) con un 1% del básico. El empleador paga además $ 30.00 por esposa y $ 40.00 por cada hijo. Son datos del problema: nombre y apellido del empleado, DNI, sueldo básico, antigüedad en años, estado civil ( 1 si es casado, 0 si es soltero ), número de hijos, presentismo ( 1 si corresponde cobrar, 0 si no cobra ). Obtenga una salida como la siguiente:

Empleado: .......................... DNI: ................... Haberes Básico: .......................... Antigüedad: .......................... Presentismo: .......................... Salario Familiar: .......................... Descuentos Aporte Jubilatorio: .......................... Obra Social: .......................... Aporte Gremial: .......................... Líquido a Cobrar: ............................

:

Cuestionario
2.1 Señale la diferencia entre un identificador y una variable. 2.2. Una constante es una expresión ? Y una variable? 2.3 En una misma expresión lógica ¿ pueden aparecer variables y constantes de tipo caracter y de tipo lógico ?. Explique. 2.4 ¿Es posible comparar dos expresiones de diferente tipo en una expresión lógica relacional? 2.5 Es posible plantear un algoritmo sin la acción de lectura ? Explique. 2.6 ¿ Puede plantearse un algoritmo sin la acción de escritura ? Explique. 2.7 En una proposición de asignación, qué variables intervinientes deben estar previamente definidas?

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 2

20

2.8 ¿Es posible leer una variable que fue definida en un paso anterior ? 2.9 ¿Se puede proponer como salida una variable que no ha sido definida antes ? 2.10 ¿Cuáles acciones algorítmicas permitendefinir (crear) una variable dentro de un algoritmo ?

Recordatorio

Fundamentos de Programación Régimen de evaluación y promoción 2008
Evaluaciones parciales Se efectuarán 2 evaluaciones parciales de carácter individual. Para el cálculo del promedio entre ambas calificaciones, la del 2do parcial se computa doble. Solo se recupera el 2do Parcial y la nota del recuperatorio sustituye la nota inicial.

Promoción Promoverán directamente la asignatura sin examen final, aquellos alumnos que obtengan simultáneamente: a. Calificación de 80% o más de promedio entre las 2 evaluaciones parciales (computando doble el 2do parcial) b. 75% de asistencia a las clases teóricas y prácticas. Se admite la recuperación del 2do parcial para promover la materia. Regularidad Los alumnos que no promuevan directamente la asignatura pero cumplan con las dos condiciones siguientes, serán considerados alumnos regulares: a. Promedio de 50% entre los 2 parciales (la nota del 2do parcial vale doble). b. 75% de asistencia a las clases teóricas y prácticas. Alumnos Libres Serán considerados libres quienes no cumplan con las condiciones de regularidad.

Los alumnos libres rendirán el mismo examen final que los alumnos regulares, más ejercicios y/o preguntas adicionales.

Ingeniería Informática – Fundamentos de Programación 2008