APRENDER LOS FUNDAMENTOS y PRINCIPIOS DE PROGRAMACIÓN ESTRUCTURADA EN COMPUTACIÓN

Page 1

Algoritmos y Estructura de Datos

APRENDER LOS FUNDAMENTOS O PRINCIPIOS DE PROGRAMACIÓN ESTRUCTURADA EN COMPUTACIÓN.

Prof. Ing. Humberto Coveñas Coveñas.

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-1


Algoritmos y Estructura de Datos

ALGORITMOS Y PROGRAMAS Este Título trata de ser una introducción a la metodología y tecnología de la programación, con el objetivo de proporcionar al lector los procedimientos y técnicas para el desarrollo de programas. Los programas se escriben con el ánimo de resolver problemas, con ayuda de las computadoras y que la primera medida a considerar, es el análisis del problema en cuestión y la obtención, en su caso, de un algoritmo adecuado. Por este punto empezaremos nuestra exposición, hasta llegar a los métodos y etapas a seguir para obtener una aplicación informática. Si bien los conceptos que aquí se introducen son fundamentales para la realización de programas, este capítulo no debe leerse como si se tratara de un manual de programación, sino como un fundamento de lo que llamamos programación estructurada, mas allá de la sintaxis y de la semántica de un lenguaje de programación concreto.

CONCEPTO DE ALGORITMO Sabemos que para que un ordenador pueda llevar adelante una tarea cualquiera, se tiene que contar con un algoritmo que le indique, a través de un programa, que es lo que debe hacer con la mayor precisión posible. Como consecuencia de lo anterior es la importancia del estudio de los algoritmos en Computación. Un algoritmo es “una sucesión finita de pasos no ambiguos (claros) que se pueden ejecutar en un tiempo finito”, cuya razón de ser es la de resolver problemas; por tanto “problema” para nosotros, serán aquellas cuestiones, conceptuales o prácticas, cuya solución es expresable mediante un algoritmo y que estas tengan solución en un computador. SOLUCION DE PROBLEMAS Y EL USO DEL OREDNADOR

Solución de problemas

Analizar el problema

Diseñar un algoritmo

Programar el algoritmo

Fig.: pasos para la solución de un problema

En esta línea, el matemático G. Poyla propuso, a finales de 1940, una metodología general para la resolución de problemas matemáticos, que ha sido adaptada para el caso en que se cuente con un ordenador como recurso. Esta

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-2


Algoritmos y Estructura de Datos

sistemática, de forma muy esquematizada, se dividir en tres fases (ver Fig):

TRES PASOS 1. Análisis del problema 2. Diseño del algoritmo 3. Programación del algoritmo

ANALISIS DEL PROBLEMA El objetivo del análisis del problema, es ayudar al programador a llegar a una cierta comprensión de la naturaleza del mismo. Este análisis supone, en particular, la superación de una serie de pasos (Ver Figura2) o o o

Definir el problema con total precisión. Especificar los datos de partida necesarios para la resolución. (especificaciones de entrada). Especificar la información que debe proporcionarse al resolverse (especificaciones de salida).

Analizar el problema

Definir el problema

Buscar datos de Entrada

Buscar datos de Salida

Fig.: pasos para analizar un problema

Veamos un Ejemplo para hacer un algoritmo para Ir al cine. en un primer análisis nos conduce a un esbozo de solución, descomponiéndolo en cuatro módulos sucesivos:

1. 2. 3. 4.

ir al cine donde proyectan XYZ comprar una entrada ver la película regresar a casa

Estos cuatro pasos se pueden refinar un poco más y así este problema lo podríamos descomponer de la siguiente forma:

Inicio {algoritmo para ver la película XYZ} Consultar la cartelera de cines Si proyectan “película XYZ” entonces Ir al cine correspondiente Sino proyectan “XYZ” Declarar el fracaso del objetivo y terminar fin Algunas de estas acciones son primitivas para nosotros, es decir, no es necesario descomponerlas más, como el abandonar el cine. Sin embargo hay otras acciones que son susceptibles de mayor descomposición. Este

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-3


Algoritmos y Estructura de Datos

es el caso de la acción “acudir al cine correspondiente”

Inicio {acudir al cine correspondiente} encontrar el asiento correspondiente mientras proyectan la película hacer ver la película abandonar el cine regresar a casa fin De esta forma, podríamos seguir hasta la descomposición de las distintas acciones en instrucciones susceptibles de ser interpretadas, directamente por el ordenador. Ejemplo de análisis de suma de dos números: Imagínese que nos piden un programa para sumar dos números Datos de entrada: los dos números Datos de salida: la suma Algoritmo 1. 2. 3. 4.

ingresamos primer numero ingresamos segundo numero sumamos ambos números mostramos el resultado

Ejemplo para elaborar el análisis para obtener el área y la longitud de una circunferencia. 1. Utilizar las fórmulas del área y la circunferencia en función del radio. 2. Las entradas de datos se reducen al dato correspondiente al radio del círculo. Dada la naturaleza del mismo y el procesamiento al cual lo someteremos, su tipo de dato debe ser un número real. 3. Las salidas serán dos variables también reales: área y circunferencia. La finalización de la fase de análisis del problema nos llevaría ha lo siguiente: Entradas: Radio del círculo (variable RADIO). Salidas: Superficie del círculo (variable AREA). Circunferencia del círculo (variable CIRCUNFERENCIA). Variables: RADIO, AREA, CIRCUNFERENCIA: tipo real.

DISEÑO DEL ALGORITMO Diseñar un algoritmo puede ser una tarea difícil y su aprendizaje no es inmediato, ya que requiere una buena dosis de experiencia y creatividad. El periodo que existe entre el análisis de un problema y el diseño de su solución recibe el nombre de periodo de incubación. Y el proceso mental, que se da durante el mismo sigue siendo un tema de investigación para los psicólogos. Para diseñar algoritmos hay que tener presente los requisitos siguientes:

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-4


Algoritmos y Estructura de Datos

o o o

El algoritmo debe tener un orden de realización de cada paso. Estar definido sin ambigüedad y Ser finito Conocer una herramienta para expresar algoritmos.

Diseñar un algoritmo

Diagrama de Flujo

Pseudocódigo

Fig.: Herramientas para diseñar algoritmos

Estas herramientas (Diagrama de flujo y Pseudocódigo) los veremos con más detalle más adelante.

Diseño Descendente o Modular. Los problemas complejos se pueden resolver más eficazmente cuando se descomponen en subproblemas que sean más fáciles resolver el original. Este método se denomina divide y vencerás y consiste en convertir un problema complejo en otros más simples (llamados módulos) que, una vez resueltos, en su conjunto nos solucionen el original. Seguir dividiendo estos subproblemas en otros más simples, se le denomina diseño descendente. Las ventajas más importantes de este tipo de diseño son: 1) El problema se comprende más fácilmente al dividirse en módulos o partes más simples. Adelantemos que cuando demos el salto a la programación, utilizaremos esta idea constantemente, de forma que hablaremos también de procedimientos, o subprogramas. 2) Las modificaciones en los módulos son más fáciles, pues estamos ante algoritmos más sencillos. 3) La comprobación del problema se puede realizar más fácilmente, al poder localizar los posibles fallos con mayor precisión.

Refinamiento por pasos Como es natural, dependiendo de la complejidad del problema se necesitarán diferentes y sucesivos niveles de refinamiento antes de que pueda obtenerse un algoritmo con suficiente nivel de detalle. Así en el Ejemplo, del cálculo de la longitud y superficie de un círculo, a pesar de presentar un bajo nivel de complejidad, en su diseño, se puede descomponer en subproblemas más simples: 1) leer datos de entrada, 2) calcular superficie y longitud, 3) escribir resultados.

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-5


Algoritmos y Estructura de Datos

PROGRAMACION DEL ALGORITMO Una vez que el algoritmo está diseñado y representado, se debe pasar a la fase de resolución práctica del problema con el ordenador. Esta fase se descompone a su vez en las siguientes subfases: 1. Codificar el algoritmo en algún lenguaje de programación. 2. Ejecutar el programa 3. Comprobar el programa. (Ver Figura)

Programar el Algoritmo

C# Codificar el algoritmos en un lenguaje de programación

Ejecutar el Programa

Comprobar el programa

Fig.: pasos para Programar el algoritmo

Codificación: La fase de conversión de un algoritmo en instrucciones de un lenguaje de programación (para nuestro caso usaremos C#). El código deberá estar escrito de acuerdo con la sintaxis del lenguaje de programación ya que solamente las instrucciones sintácticamente correctas pueden ser interpretadas por el computador. Ejecución. Tras la codificación del programa, éste deberá ejecutarse en un computador. El resultado de esta primera ejecución es incierto, ya que existe una alta posibilidad de que aparezcan errores, bien en la codificación bien en el propio algoritmo. Por tanto, el paso siguiente consiste en. Comprobación comprobar el correcto funcionamiento del programa y en asegurarse, en la medida de lo posible, de la validez de los resultados proporcionados por la máquina.

Se debe separar el diseño del algoritmo de su posterior implementación en un lenguaje de programación específico y por eso la finalidad de este curso.

COMO EXPRESAMOS LOS ALGORITMOS Debemos buscar una forma que todos podamos crear un algoritmo y que cualquier persona que conoce de programación entienda y sepa plasmar este algoritmo en un programa. De hecho, la codificación en un lenguaje de programación, es una representación muy utilizada de un algoritmo, sin embargo tiene el inconveniente de que no todas las personas conocen el lenguaje que se haya elegido. Por ello, existen diferentes métodos que permiten que se pueda independizar el algoritmo de su correspondiente codificación. Existen muchas formas e representar algoritmos (Formulas, Diagramas de flujo, Pseudocódigo, diagramas Nassi-Shneiderman (NSD), TopDown).

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-6


Algoritmos y Estructura de Datos

En este curso veremos en detalle dos de ellos: 1) Pseudocódigo. 2) Diagrama de flujo

EXPRESANDO ALGORITMOS CON PSEUDOCÓDIGO El pseudocódigo Es una forma de representar un algoritmo. Es un intermedio entre un algoritmo y un lenguaje de programación Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución a un problema determinado. El pseudocódigo utiliza para representar las sucesivas acciones, palabras reservadas (similares a sus homónimas en los lenguajes de programación), tales como: Inicio (Main) Para iniciar un algoritmo Fin (End) para finalizar un algoritmo Leer/ingresar para indicar ingreso de datos. Imprimir/mostrar para indicar salida de datos Parar (stop) para detener el algoritmo. Si entonces (if-then) para denostar una condición Sino (else) es parte de la estructura Si Mentras hacer (while-do) para hacer acciones repetitivas Repetir hasta (repeat-until) para hacer acciones repetitivas A lo largo de este Curso, a medida que vayamos describiendo las estructuras de control utilizadas en los programas, iremos haciendo una lista de las instrucciones más usuales del pseudocódigo. Ventajas del uso del pseudocódigo:  Permitiendo que el programador se pueda concentrar en la lógica y en las estructuras de control y no tenga que preocuparse, de las reglas sintácticas y semánticas de un lenguaje específico. Consiguientemente es más fácil de modificar, en el caso de que se descubran errores o anomalías en la lógica del algoritmo.  Aunque el pseudocódigo es independiente del lenguaje de alto nivel que vaya a utilizarse, un algoritmo expresado en pseudocódigo puede ser traducido más fácilmente a muchos de ellos. Ejemplo 1 “Escribir circunferencia”

un

algoritmo

que

calcule

la

superficie

de

una

Si no usáramos ninguna herramienta para expresar algoritmos y usáramos un lenguaje natural. No sigue ninguna norma ni estructura para su representación. No lo recomiendan debido a los problemas de ambigüedad y a la falta de precisión que presenta:

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-7


Algoritmos y Estructura de Datos

1) Inicio. 2) Leer RADIO. 3) Establecer a S el resultado de multiplicar RADIO por RADIO por la constante PI (3.14). 4) Escribir el valor contenido en S. 5) Fin. Solución usando Pseudocódigo inicio leer (radio) s = PI * radio * radio Imprimir (“La superficie de la circunferencia de radio es: ” , s ) Fin Ejemplo 2 Desarrolle un algoritmo para saber el promedio de un de un alumno que tiene tres notas en el curso de computación Solución usando Pseudocódigo inicio leer (primera nota) leer (segunda nota) leer (tercera nota) promedio = (primera nota+ segunda nota+ tercera nota)/3 Imprimir (“el promedio es: ” , promedio ) Fin Como se habrá podido dar cuenta nos falta aun refinar nuestro algoritmo ya que estamos considerando que los datos que le proporcionamos a nuestro algoritmo son del tipo de dato que queremos por ejemplo suponemos para el primer ejemplo que el radio es un valor numérico, también las notas pare el ejemplo2 sin embargo para el computador estos datos son desconocido. Por lo tanto mas adelante veremos que habrá que agregarle algo adicional a nuestros algoritmos.

EXPRESANDO ALGORITMOS CON DIAGRAMA DE FLUJO (Flowchart) El diagrama de flujo es otra forma de representar un algoritmo. Para ganar claridad expositiva se han desarrollado una serie de símbolos gráficos que permiten representar los algoritmos y que son universalmente reconocidos. Veamos algunos ejemplos: A continuación, se muestran los símbolos utilizados habitualmente en la confección de organigramas, cuyo significado completaremos más adelante. Indica el inicio y el final de nuestro diagrama de flujo.

Indica la entrada y salida de datos.

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-8


Algoritmos y Estructura de Datos

Símbolo de proceso y nos indica la asignación de un valor en la memoria y/o la ejecución de una operación aritmética.

Símbolo de decisión indica la realización de una comparación de valores.

Líneas de flujo o dirección. Indican la secuencia en que se realizan las operaciones

Algunos símbolos adicionales que iremos usando a medida que entrando adentrándonos en el tema.

vallamos

Se utiliza para representar los subprogramas.

Conector dentro de página. Representa la continuidad del diagrama dentro de la misma página.

Conector fuera de página. Representa la continuidad del diagrama en otra página.

Indica la salida de información por impresora

Indica la salida de información en la pantalla o monitor

Los organigramas o diagramas de flujo son herramientas gráficas utilizadas tanto para representar algoritmos. Están compuestos por una serie de símbolos, unidos con flechas, donde cada símbolo representa una acción distinta y las flechas el orden de realización de las acciones.

El Ejemplo “Escribir un algoritmo que calcule la superficie de una circunferencia” expresado en Diagrama de flujo.

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-9


Algoritmos y Estructura de Datos

Ejemplo 2 Desarrolle un algoritmo para saber el promedio de un de un alumno que tiene tres notas en el curso de computación Solución usando Diagrama de flujo

INICIO

LEER PRIMERA NOTA LEER SEGUNDA NOTA LEER TERCERA NOTA

PROMEDIO= (RRIMERA NOTA + SEGUNDA NOTA + TERCERA NOTA) /3

IMPRIMIR PROMEDIO

FIN

Ejercicios 1) Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere que: área = base x altura y perímetro = 2 x (base+altura). 2) Diseñe un pseudocódigo para convertir una longitud dada en metros a sus equivalentes en centímetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centímetros, 1 pulgada = 2.54 centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies.

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-10


Algoritmos y Estructura de Datos

Veamos un poco lo que sucede en cada paso cuando creamos un algoritmo. Cuando decimos Inicio significa que ponemos el procesador a funcionar nuestro problema, a continuación leemos los datos, luego hacemos los cálculos, y al final terminamos mostrando los datos que necesitamos. VEAMOS EL EJEMPLO 1. 2. 3. 4. 5. 6. 7.

Inicio leer (primera nota) leer (segunda nota) leer (tercera nota) promedio = (primera nota+ segunda nota+ tercera nota)/3 Imprimir (“el promedio es: ” , promedio ) Fin

PROCESADOR

MEMORIA PRIMER NOTA SEGUNDA NOTA TERCERA NOTA

1. El procesador inicia el proceso 2. Se ingresa la primera nota a la memoria 3. Se ingresa la segunda nota a la memoria 4. Se ingresa la tercera nota a la memoria En este punto la memoria del computador no sabe tipo de datos son los que va a procesar nosotros estamos asumiendo que son numero pero que pasaría sino lo fueran entonces veamos esto.

TIPOS DE DATOS

Aquí veremos como el ordenador trata los datos, esto es operaciones, etc.). los clasificaremos en los siguientes tipos:

(almacena, hace

TIPOS DE DATOS

NUMERICOS

ENTEROS

Sin punto decimal

CADENAS O ALFANUMERICOS

CARACTER

Grupo de letras, simbolos, numeros

Solo una letras, simbolos

REALES

Con punto decimal

@123 H_XYZ

@123 H_XYZ

LOGICOS O BOOLEANOS

FECHAS

Solo puede contener un valor que puede ser verdadero o falso

Sirven para representar fechas

Descripción de algunos de ellos:

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-11


Algoritmos y Estructura de Datos

NUMERICOS Almacenan números y con ellos podremos realizar operaciones aritméticas. A su vez pueden ser: Enteros: Son todos los números positivos o negativos. Ejemplo: 734, -123, 0, -1 Reales: Son todos los números decimales. Ejemplo: -0.123, 67.8, 32.02 CADENA o ALFANUMERICOS Almacena caracteres alfanuméricos. Pueden ser: Letras (Desde la A hasta la Z.) Caracteres especiales (Guiones, paréntesis, signos de puntuación, etc.) Números (Con ellos no se pueden realizar operaciones aritméticas.) BOOLEANOS Sólo pueden tener dos valores: verdad o falso. Estos datos no pueden leerse como datos, pero pueden imprimirse. Se forman a partir de los operadores relacionales y lógicos.

OPERADORES

Todos los símbolos que representan enlaces entre cada uno de los argumentos que intervienen en una operación se llaman operadores, y se utilizan para construir expresiones. Los operadores pueden ser: RELACIONALES O CONDICIONALES Se utilizan para formar expresiones booleanas, es decir, expresiones que al ser evaluadas producen un valor booleano: verdad o falso. < Menor que = Igual > Mayor que <= Menor o igual que >= Mayor o igual que <> Distinto de ARITMETICOS Para tratar los números se utilizan los operadores aritméticos, que junto con las variables numéricas forman expresiones aritméticas. + Suma Resta * Multiplicación ^ Potenciación / División real DIV División entera MOD Resto de la división entera Los operadores DIV y MOD son los de menor prioridad. Ejemplos: 25 <= 25 25 <> 25

Guía del estudiante

Verdadero Falso

Prof: Coveñas Coveñas Humberto

Pag-12


Algoritmos y Estructura de Datos

25 <> 4 Verdadero 50 <= 100 Verdadero 500 >= 1 Verdadero 1 = 6 Falso LOGICOS O BOOLEANOS Combinan sus operandos de acuerdo con las reglas del Algebra de Boole con el fin de producir un nuevo valor que se convierta en el valor de la expresión. o o o

OR O (Suma lógica) Es cierta cuando al menos uno de sus operandos es cierto AND Y (Producto lógico) es cierta cuando ambos operandos son ciertos al mismo tiempo NOT (Negación) Afecta a la expresión cambiando su estado lógico: si era verdad lo transforma en falso, y viceversa.

Ejemplo: estudiamos informática o nos vamos al cine. Ejemplo: es de día y hace sol. PARENTESIS Los paréntesis () se utilizan para anidar expresiones. ORDEN DE EVALUACION La prioridad o o o o o o o

a la hora de evaluar los operadores en cualquier expresión es: Paréntesis (empezando por los más internos) Potencias Productos y divisiones Sumas y restas Concatenación Relacionales Lógicos

CONSTANTES, VARIABLES Y TIPOS PREDEFINIDOS CONSTANTES Se llama constante a toda posición de memoria, referenciada por un nombre de constante, donde se almacena un valor que no puede cambiarse o permanece invariable a lo largo del proceso. Las constantes pueden ser: Enteras Ejemplo: an_recto = 90 Reales Ejemplo: pi = 3.14159 De caracteres o alfanuméricas Contienen caracteres como letras mayúsculas, minúsculas, dígitos, signos de puntuación y otros símbolos especiales. Ejemplo: ciudad = "29400 - Ronda" VARIABLES Se considera variable a una zona de memoria referencia por un nombre de variable, donde se puede almacenar el valor de un dato, que puede cambiarse

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-13


Algoritmos y Estructura de Datos

cuando lo deseemos. Para que estén perfectamente definidas las variables, especificar: o Su nombre. o El tipo de dato: numérico, alfanumérico o booleano. o El valor que va a tomar en un principio: inicialización.

hay

que

Consideraciones: o El nombre sólo puede empezar obligatoriamente por una letra y sin contener espacios en blanco, pero pueden contener dígitos y algunos caracteres especiales como el subrayado. o Las palabras reservadas no se pueden utilizar para nombrar a las variables. Según los tipos de datos que almacenan, las variables pueden ser: Ejemplos: Numéricas nombre-variable = numero Ejemplo: contador = 35 Alfanuméricas nombre-variable = "comentario" nombre-variable = espacios(numero ) Ejemplo: nombre = "Domingo" Ejemplo: apellido = espacios( 30 ) Booleanas nombre-variable = VALOR-BOOLEANO Ejemplo: fin = FALSO La asignación introduce en una variable un valor o el contenido de otra variable. Tanto estos valores como la variable a la que se asigna deben ser del mismo tipo. Se escriben: nombre-variable = valor-inicial nombre-variable-1 = nombre-variable-2 Ejemplo:

ape = "Rodríguez" apellido = ape

COMO ASIGNAMOS VALORES A LAS VARIABLES Para asignar un valor a una variable se utilizará el símbolo que en este contexto significa “Toma el valor de ”. De forma general tendremos que: Nombre_variable expresión Ejemplos: C 13 (esto quiere decir que C toma el valor de 13) B 25 (esto quiere decir que B toma el valor de 25) X C + B (X contendrá el valor 13 + 25 = 38) Nota: Se usa el símbolo (asignación) para no confundir = de (comparación), en algunas ocasiones también se usa el símbolo = para asignación pero con la

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-14


Algoritmos y Estructura de Datos

condición que para denotar comparación se use == Ejercicio: a 10 b 20 c 5 a a+3 b b+4–a c a+b+c a a+c b 4 c c+3-b+2 Qué valores quedan almacenados en las variables a, b y c ? Ejercicio: a 8 b 7 c 5 d 8 a a+b–c+d b a+b–c+d c a+b–c+d d a+b–c+d a a+b–c+d b a+b–c+d c a+b–c+d d a+b–c+d Qué valores quedan almacenados en las variables a, b c y d ? Ya hemos visto de manera general los tipos de datos que el computador reconoce, entonces continuando veremos como quedaría a partir de ahora nuestro a algoritmo. Ejemplo 2 Desarrolle un algoritmo para saber el promedio de un de un alumno que tiene tres notas en el curso de computación Solución usando Pseudocódigo Inicio

Fin

Nota1: entero Nota2: entero Nota3: entero Promedio: entero promedio = (Nota1+ Nota2+ Nota3)/3 Imprimir (“el promedio es: ” , promedio )

Entonces ya sabemos que debemos hacer  Primero inicio  Segundo declarar nuestras variables y constantes.  Hacer cálculos o proceso  Mostra los resultados

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-15


Algoritmos y Estructura de Datos

ESTRUCTURAS DE CONTROL Anteriormente, vimos los elementos básicos constitutivos de un programa: palabras reservadas (inicio, si-entonces, etc.) identificadores (nombres de variables, procedimientos, etc.) caracteres especiales (coma, punto y coma, apóstrofo, etc.) constantes variables expresiones instrucciones Sin embargo como hemos visto al diseñar algoritmos para escribir un programa, además de estos elementos básicos, hemos de conocer determinadas estructuras, cuyo objetivo es controlar su ejecución y sin cuya comprensión es imposible programar. Llamaremos estructuras de control a las acciones que tienen por objeto marcar el orden de realización de los distintos pasos de un programa ó algoritmo. Cada estructura tiene un punto de entrada y uno de salida, lo que facilita la depuración de posibles errores. Estas son de tres tipos -

-

estructuras secuenciales estructuras selectivas estructuras repetitivas

ESTRUCTURAS SECUANCIALES Son aquéllas en las que una acción (instrucción) sigue a otra de acuerdo con su orden de escritura. Las tareas se suceden de tal modo que tras la salida (final) de una se efectúa la entrada (principio) en la siguiente y así sucesivamente hasta el fin del proceso. Su organigrama obedece al esquema de la Figura 6:

Algunos problemas se pueden resolver con la sola utilización de esta estructura, como por ejemplo el cálculo del área del circulo Capítulo anterior.

ESTRUCTURAS DE SELECCIÓN

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-16


Algoritmos y Estructura de Datos

La estructura de selección, se ejecuta condicionalmente, es decir, si una cierta condición es verdadera se ejecuta un bloque de instrucciones, si es falsa se ejecuta un bloque diferente de instrucciones. Por ejemplo, si en el cine proyectan "XYZ", entonces hay que formar fila para comprar los billetes e ingresar al cine, si no, decidimos otra actividad como ir a bailar. Si utilizamos una selección es para indicar que según el resultado cierto o falso de una expresión vamos a tomar una decisión de realizar determinadas acciones especificadas; seleccionamos las acciones a realizar. La instrucción que permite tomar una decisión, basada en una condición es Si...Entonces. Al evaluar la condición, Si...entonces puede devolver solo dos resultados posibles: Verdadero o Falso; es decir, Si o No. El formato de la estructura de selección es:

CONDICIONAL SIMPLE SI <condición> ENTONCES instrucción1 instrucción 2 ................... instrucción n FIN SI SI <condición> ENTONCES <instrucciones cuando la condición es verdad> SINO <instrucciones cuando la condición es falsa> FIN SI

CONDICIONAL COMPUESTA SI

<condición1 > ENTONCES <acciones1>

SINO SI <condición2> ENTONCES <acciones2> SINO SI <condición3> ENTONCES <acciones3> SINO ... <accionesn> FIN SI FIN SI FIN SI

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-17


Algoritmos y Estructura de Datos

Su representación en DIAGRAMA DE FLUJO

Si condición es verdadera

Si condición es falsa CONDICION

Ejemplo. Dados dos números, establecer cuál es mayor. Comenzamos leyendo ambos números, que en el ejemplo se llamarán NumeroA y NumeroB. Luego debemos comparar como es uno contra el otro (puede ser NumeroA contra NumeroB o bien comparar NumeroB contra NumeroA

inicio leer NumeroA, NumeroB Si NumeroA < NumeroB entonces imprimir "El mayor es:", NumeroB si-no imprimir "El mayor es:", NumeroA fin-si fin En este ejemplo, que pasaría si los números fueran iguales?. Hagamos la prueba Ejemplo: NumeroA=100 y NumeroB=100 se ejecutan las instrucciones: Si NumeroA < NumeroB entonces imprimir "El mayor es:", NumeroB El resultado de la condición Por lo tanto, al ser falsa la condición, se ejecuta la instrucción imprimir "El mayor es:", NumeroA. El algoritmo ofrecerá una solución incorrecta cuando los números son iguales. Para solucionar esto, tenemos que prever el caso de que los números sean iguales. inicio leer NumeroA, NumeroB Si NumeroA < NumeroB entonces imprimir "El mayor es:", NumeroB Si-no Si NumeroA > NumeroB entonces imprimir "El mayor es:", NumeroA Si-no imprimir "Los números son iguales" fin-si fin-si fin

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-18


Algoritmos y Estructura de Datos

Esta solución contiene dos estructuras de repetición, una dentro de la otra (anidada). En caso de ser necesario podemos anidar tantas estructuras de selección como sea necesario. Otro ejemplo de estructuras de repetición anidadas, consiste en dado un número del 1 al 7, que el programa imprima el nombre del día de la semana. inicio leer numero Si numero=1 entonces imprimir "Domingo" si-no Si numero=2 entonces imprimir="Lunes" si-no Si numero=3 entonces imprimir "Martes" si-no Si numero=4 entonces imprimir "Miercoles" si-no Si Numero=5 entonces imprimir "Jueves" si-no Si numero=6 entonces imprimir "Viernes" si-no Si numero=7 entonces imprimir "Sábado" si-no imprimir "Número entre (1 y 7)" fin-si fin-si fin-si fin-si fin-si fin-si fin-si fin Ejercicios: Ejemplos Introducir un número por teclado y determinar si es positivo o negativo. Para saber si un número es positivo o negativo, debemos saber si es menor o mayor a cero.. Utilizando la condicional Si... Ejemplo dado un número del 1 al 5, que el programa imprima el nombre del numero.

SELECCIÓN MULTIPLE Resulta bastante tedioso anidar un montón de Si ... entonces, como en el ejemplo del día de la semana. Cuando queramos o necesitemos hacer numerosas comparaciones podemos usar otra estructura de selección múltiple llamada Según Sea. El formato de estructura de selección Según sea es:

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-19


Algoritmos y Estructura de Datos

La estructura de decisión múltiple en pseudocódigo se puede representar de diversas formas, aunque la más simple es la siguiente

según_sea <variable> hacer caso <Valor1>: <accione(s)1> caso <Valor2>: <accione(s)2> caso <Valor3>: <accione(s)3> ... Otro caso instrucción o instrucciones fin acaso Algunos usan la usan de forma diferente.

En caso de <variable> hacer caso <Valor1>: <accione(s)1> caso <Valor2>: <accione(s)2> caso <Valor3>: <accione(s)3> ... Otro caso instrucción o instrucciones fin acaso

Su representación en DIAGRAMA DE FLUJO

Así, utilizando esta estructura, el problema del día de la semana será así: inicio Leer numero Según sea numero caso 1: imprimir "Domingo" caso 2: imprimir="Lunes" caso 3: imprimir="Martes" caso 4: imprimir "Miercoles" caso 1: imprimir "Jueves" caso 1: imprimir "Viernes" caso 1: imprimir "Sábado" Otro Caso imprimir "El número debe estar entre 1 y 7" fin-según fin El uso de una u otra estructura depende de cada persona, pero en general

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-20


Algoritmos y Estructura de Datos

cuando las condiciones a evaluar son muchas, se utiliza Según Sea La estructura según sea admite varias condiciones por ejemplo:

Según sea MES caso 1,3,5,7,8,10,12 : TDias = 31 caso 2,4,6,11: TDias =30 caso 2: TDias=28 fin-según ESTRUCTURAS REPETITIVAS La estructura repetitiva se utiliza cuando se quiere que un conjunto de instrucciones se ejecuten un cierto número finito de veces. Llamamos bucle o ciclo a todo proceso que se repite un cierto número de veces dentro de un pseudocódigo o un programa. Es imprescindible que se establezcan mecanismos para controlar esta tarea repetitiva, ya que si éstos no existen, el bucle puede convertirse en un proceso infinito. Una forma de hacerlo es utilizar una variable llamada contador, cuyo valor se incrementa o decremento en una cantidad constante en cada repetición que se produzca. Existen dos tipos de estructuras repetitivas: La primera es aquella en donde se tiene perfectamente establecido el número de veces que n grupo de acciones se van a ejecutar (20, 5, 2 veces). Un ejemplo de la primera sería imprimir los datos de los alumnos de una clase (se conoce cuantos alumnos hay). Por tanto se usa esta estructura.

Estructura repetitiva DESDE La sintaxis es:

DESDE variable inicial HASTA Variable final DE [incremento] <Instrucción o instrucciones> ... FIN_DESDE Donde: variable inicial : variable de inicio o contador inicial. variable final : valor final de la variable inicial. [incremento]: el número que se incrementa (o decrementa) a la variable inicial en cada iteración del bucle, si se omite es 1. La segunda en la que el número de repeticiones es desconocido y se hará hasta que se cumpla o no cierta condición. Un ejemplo de esta puede ser el mostrar un mensaje de error cada vez que el

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-21


Algoritmos y Estructura de Datos

usuario pulse una determinada tecla (no sabemos cuantas veces pulsará esa tecla). Las acciones que forman parte del cuerpo del bucle son ejecutadas de forma repetitiva mediante la ocurrencia o no de una condición.

Estructura MIENTRAS (“while”)

Como su nombre lo indica, esta estructura repite el cuerpo del bucle mientras se cumpla una determinada condición. Su sintaxis es: Mientras (condición sea verdadera) <Instrucción o Instrucciones> ... fin mientras Lo primero que el computador hace es examinar la condición, lo que puede dar como resultado dos posibilidades:  Si la condición es verdadera: Se ejecutan las <Instrucción o Instrucciones>  Las estará repitiendo hasta que la condición no se cumpla, entonces se sale del ciclo y se siguen ejecutando la o las instrucciones que vienen a continuación y están fuera del bucle.  La condición no se cumple: No entrará en el ciclo.  De esto se deduce que el cuerpo del bucle de una estructura mientras puede repetirse cero o más veces, veces que son determinadas por el cumplimiento o no de la condición. Ejemplo mientras contraseña < > "josua" imprimir "La contraseña es incorrecta !" fin-mientras imprimir "Ha ingresado la contraseña correcta"

Estructura REPETIR HASTA La estructura repetir cumple la misma función que la estructura mientras. Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez, antes de comprobar la condición de repetición. Para ello la estructura repetir hasta se ejecuta hasta que se cumpla una condición determinada que se comprueba al final del bucle. La sintaxis es: repetir <Instrucción o Instrucciones> hasta (condición sea verdadera) Repetir es opuesta a la estructura mientras. El bucle repetir hasta se repite hasta que la condición sea verdadera. Sea el siguiente algoritmo:

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-22


Algoritmos y Estructura de Datos

Ejemplo inicio contador 1 repetir leer número contador contador+1 hasta (contador=30) escribir “números leídos: 30” fin Recordemos una vez más las diferencias entre estructuras mientras y repetir MIENTRAS REPETIR HASTA Comprobación de la condición al final, Comprobación de la condición al inicio, después de haber ingresado una vez al antes de entrar al bucle bucle Las instrucciones del cuerpo del bucle se ejecutan en forma repetitiva si la condición es verdadera

Las instrucciones del cuerpo del bucle se ejecutan si la condición es verdadera

Las acciones del bucle se pueden ejecutar 0 o más veces

Las acciones del bucle se ejecutan por lo menos una vez

Ejemplos: 1) Imprimir todos los números del 1 al 100. 2) Calcular el factorial de un número N, usando la estructura repetir. inicio leer N Factorial 1 I 1 repetir Factorial Factorial * I I I+1 hasta I > N escribir “el factorial del número”, N, “es”, Factorial fin

ANIDAMIENTO DE ESTRUCTURAS En un algoritmo pueden existir varias estructuras repetitivas, siendo sus bucles respectivos anidados o independientes. Se dice que los bucles son anidados cuando están dispuestos de tal modo que unos son interiores a otros. Nótese que, en ningún caso, se admite que sean cruzados, pues su ejecución sería ambigua (Ver Figura 14 donde las líneas indican el principio y el fin de cada bucle)

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-23


Algoritmos y Estructura de Datos

Ejemplo: Calcular los factoriales de n números leídos por el teclado. Anteriormente vimos el “el factorial de un número N” Entonces esto se resuelve: inicio leer n //lectura de la cantidad de números desde i = 1 hasta n hacer “el factorial de un número N” fin_desde fin inicio leer n {lectura de la cantidad de números} desde i = 1 hasta n hacer leer NUMERO FACTORIAL 1 desde j = 1 hasta NUMERO hacer FACTORIAL FACTORIAL *j fin_desde escribir “el factorial del número”, FACTORIAL fin_desde fin

NUMERO,

“es”,

PROGRAMACION MODULAR Una vez estudiadas las estructuras de control, hemos de ver cómo se implementa la descomposición en módulos independientes denominados subprogramas o subalgoritmos. Un subprograma es una colección de instrucciones que forman una unidad de programación, escrita independientemente del programa principal, con el que se asociará a través de un proceso de transferencia, de forma que el control pasa al subprograma en el momento que se requieran sus servicios y volverá al programa principal cuando aquél se haya ejecutado. Esta descomposición nos interesa por dos razones:

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-24


Algoritmos y Estructura de Datos

1) Esta asociada al diseño descendente en la programación estructurada, ya que un subprograma, a su vez, puede llamar a sus propios subprogramas e incluso a sí mismo, recursivamente. 2) Permite reutilizar un programa dentro de la resolución de otros problemas distintos, puesto que los subprogramas se utilizan por el programa principal para ciertos propósitos específicos, aquellos pueden haber sido escritos con anterioridad para resolver otros problemas diferentes. Para poder utilizar esta aproximación, hay que respetar una determinada metodología que consta de dos etapas: 1) Asignar un nombre que identifique e independice cada módulo. 2) Parametrizar adecuadamente la entrada y la salida, a fin de que los datos que manda al programa principal puedan ser adecuadamente interpretados por el subprograma y viceversa. Existen dos tipos de subprogramas: funciones y rutinas o procedimientos, aunque no todos los lenguajes distinguen entre ellos. Aquí mantendremos esta distinción, con objeto de facilitar la exposición de la programación modular.

FUNCIONES Desde el punto de vista matemático, una función es una expresión que toma uno o más valores llamados argumentos y produce un valor que se llama resultado. Este resultado es además, único. Ejemplos de funciones matemáticas trigonométricas (seno, coseno, etc)

son

los

logaritmos,

funciones

“f “ es el nombre de la función y, „x‟ es el argumento. Para evaluar „f ‟ debemos darle un valor a „x‟. Así con x=3 se obtiene el valor 0,3 que se expresa escribiendo: f (3)=0.3. Una función puede tener varios argumentos. La función F(x,y) tiene dos argumentos. El en ambiente de programación y diseño de algoritmos, las funciones tienen exactamente el mismo significado. Es decir, se realizan ciertos cálculos con una o más variables de entrada y se produce un único resultado Definición de una función: Una función, como tal es un subprograma que tiene una constitución similar a un programa. Por consiguiente, constará de una cabecera con el nombre y los argumentos de la función, seguida por el cuerpo de la función, formado por una serie de acciones o instrucciones cuya ejecución produce un valor, el resultado de la función, que se devolverá al programa principal. La expresión de una función es Funcion

nombre_función

(arg1:Tipo_de_Dato, arg2: Tipo_de_Dato,....):Tipo_dato_devuelto

<Acciones> Fin de función

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-25


Algoritmos y Estructura de Datos

Donde: Función

Palabra reservada para declarar una función

Nombre_funcion

Nombre asociado con la función, que será un nombre de identificador válido sobre el que se almacenará el resultado.

Tipo_de_dato_devuelto

Es el tipo de dato que nos devolverá la función

Tipo_de_Dato: arg

lista de parámetros formales o argumentos: son nombres de identificadores que sólo se utilizan dentro del cuerpo de la función.

<Acciones>

instrucciones que constituyen la función, y que deben contener al menos una acción que asigne un valor como resultado de la función.

Ejemplo 1: básico de una función imaginemos que queremos hacer una función para sumar dos números enteros. Función Sumadosnum (num1: enteros, num2: entero): entero Declaración de variables Inicio Sumadosnum num1+num2 Fin función Ejemplo2: escribir una función que calcule el el área de circulo teniendo como dato el radio. Función Area (radio: real): real Declaración de constantes Pi=3.1415 Inicio Area Pi * radio * radio Fin función Ejemplo3: escribir en pseudocódigo una función que encuentre el valor absoluto de un número real. Función Vabs (num: real): real Inicio Si num >= 0 entonces Vabs num Sino Vabs num * (-1) Fin si Fin función Ejemplo4: escribir una función para crear el factorial de un número. Función factorial (X: entero): real Declaración de variables

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-26


Algoritmos y Estructura de Datos

F, j: entero inicio F 1 desde j=1 hasta X hacer F F * j fin-desde factorial F fin

Invocación a las funciones Una función puede ser llamada sólo mediante una referencia directa a la misma de la forma siguiente: nombre-función (lista de parámetros actuales) nombre-función

función que es invocada.

lista de parámetros actuales constantes, variables, expresiones, valores de funciones, nombres de subprogramas, que se corresponden con los parámetros formales, que hemos visto durante en la declaración de funciones. Al invocar una función, hay que pasarle una serie de parámetros, a fin de proporcionarle los argumentos de entrada necesarios para poder ejecutar sus acciones, para ello distinguiremos entre los argumentos de la definición de la función (parámetros formales o mudos) y los argumentos utilizados en su invocación (parámetros actuales). Cada vez que se llama a una función, se establece sistemáticamente una correspondencia entre parámetros formales y actuales. En consecuencia, debe haber exactamente una correspondencia, tanto en número como en tipo, de los parámetros actuales con los formales presuponiéndose una correspondencia, uno a uno, de izquierda a derecha entre ambos. Una llamada a la función implica los siguientes pasos: 1. A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual. 2. Se ejecuta el cuerpo de acciones de la función. 3. Se devuelve el valor de la función y se retorna al punto de llamada Ejemplo: Escribir la función: y = xn (potencia n de x, tanto si es positiva, como negativa) y utilizarla para calcular (2.5, 3) función potencia (x: real, n: entero) : real inicio y 1 desde i = 1 hasta abs(n) hacer y y * x fin_desde si n < 0 entonces y 1/y potencia y fin Su utilización sería: Z potencia (2.5, -3)

Guía del estudiante

Prof: Coveñas Coveñas Humberto

Pag-27


Algoritmos y Estructura de Datos

Transferencia: Una vez que los parámetros formales toman los valores de sus correspondientes parámetros actuales x 2.5 , n 3, se ejecuta el cuerpo de la función, devolviendo sus resultados al programa principal, resultando: z 0.064

PROCEDIMIENTOS O SUBRUTINAS Aunque las funciones son herramientas de programación muy útiles para la resolución de problemas, su alcance está limitado por el hecho de devolver un solo valor al programa principal. Con frecuencia se requieren subprogramas que intercambien un gran número de parámetros, por lo que existen procedimientos o subrutinas, subprogramas que ejecutan un módulo o proceso específico, sin que ningún valor de retorno esté asociado con su nombre. Un procedimiento se invoca normalmente, desde el programa principal mediante su nombre (identificador) y una lista de parámetros actuales; en algunos lenguajes se tiene que hacer a través de una instrucción específica llamar_a (call). Las funciones devuelven un sólo valor, mientras las subrutinas pueden devolver ninguno o varios. La forma de expresión de un procedimiento es similar a la de funciones: procedimiento nombre (lista de parámetros formales) <acciones> fin_procedimiento El procedimiento se llama mediante la instrucción: [Ejecutar] nombre (lista de parámetros actuales)

El ejemplo siguiente ilustra la definición y uso de un procedimiento para realizar la división de dos números y obtener el cociente y el resto. Variables enteras:

DIVIDENDO DIVISOR COCIENTE

Procedimiento división (Dividendo, Divisor: enteros) inicio Cociente Dividendo div Divisor Resto Dividendo – Cociente * Divisor Imprimir cociente, resto fin_procedimiento Algoritmo princpal Dec de Var M, N : entero inicio leer M, N Imprimir división (M, N) fin quedan por tocar completando…

Guía del estudiante

algunos

temas

más

que

pronto

Prof: Coveñas Coveñas Humberto

estaré

Pag-28


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.