Download curso taller de introducción a la ing. en sistemas
Document related concepts
no text concepts found
Transcript
Toshiba INSTITUTO TECNOLÓGICO DE CD.GUZMÁN CURSO TALLER DE INTRODUCCIÓN A LA ING. EN SISTEMAS COMPUTACIONALES INTRODUCCIÓN A LA PROGRAMACIÓN OBJETIVO Desarrollar en el aspirante sus habilidades Lógicas que se aplican a la solución de los problemas susceptibles de ser computarizados ACADEMIA DE ING. EN SISTEMAS COMPUTACIONALES Agosto 2014 ÍNDICE 1. INTRODUCCIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. INTRODUCCIÓN A LOS ALGORITMOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. Algoritmos cotidianos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Torta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2. Orden de enchiladas (quesadillas). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3. Cambiar un foco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Definición de problemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1. Leer y comprender el problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2. Identificar entradas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3. Identificar salidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.4. Identificar proceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.5. Identificar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. EXPRESIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Expresiones matemáticas simples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Jerarquía de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Funciones matemáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. Expresiones matemáticas combinadas con funciones matemáticas . . . . . . . . . . . . 3.6. Ejercicios de evaluación de expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. ALGORITMIA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Definición de algoritmo y características. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Diseño del algoritmos con pseudocódigos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Proceso de un programa en la computadora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Ejercicios sencillos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. MEMORIA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1. Localidades (tamaño y dirección) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Asignación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. DECISIONES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1. Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. Operadores lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3. Decisiones simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4. Decisiones anidadas (complejas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5. Decisiones múltiples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7. CICLOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1. Ciclos contados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2. Ciclos condicionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. Anexo A. Sintaxis para el Pseudocódigo utilizado en el diseño de algoritmos. . . Pág. 1 2 2 2 2 3 3 3 3 4 4 4 5 5 5 6 8 9 9 10 10 10 10 11 13 13 14 15 17 19 21 23 24 26 27 28 28 30 34 1 1. INTRODUCCIÓN Para cursar la Ingeniería en Sistemas Computacionales es necesario que el aspirante tenga habilidad lógico-matemática, que generalmente ha ido adquiriendo conforme avanzó en sus estudios de nivel medio superior. Por otra parte, independientemente del antecedente académico que haya adquirido el aspirante, es necesario que conozca aspectos básicos del desarrollo de algoritmos y de una manera general, que aplique sus habilidades del pensamiento para encontrar lo esencial de un problema y lo resuelva utilizando la computadora sin importar que tenga conocimientos o no de algún lenguaje de programación Como puede leerse en el objetivo del curso, se desea que el aspirante desarrolle su capacidad de razonamiento lógico para resolver problemas usando la computadora. Para ellos se dividió su contenido de acuerdo a lo que se indica enseguida. En el capítulo denominado introducción a los algoritmos se trata de comprender acciones cotidianas para convertirlas en algoritmos, posteriormente dado un problema, identificar sus partes (entradas, salidas, datos y el proceso a ejecutar). En el capítulo 3 (expresiones) se aprenderá como escribir cualquier expresión matemática en un formato que se utiliza en la computadora, y que usa la mayoría de los lenguajes de programación de computadoras. En el capítulo de algoritmia, se aprenderá el concepto de algoritmo, sus partes y la forma de representar la solución de un problema usando algoritmos. El capítulo 5 cubre el tema de memoria, que sin incluir conocimientos técnicos de electrónica digital, se aprenderá a relacionar lo que físicamente es la memoria, con los datos que maneja un programa cuando se ejecuta. En el capítulo 6 llamado decisiones se aprenderá a identificar las bifurcaciones que son necesarias incluir en la solución de los problemas y la forma de escribirlas en los algoritmos. En el capítulo 7 se aprenderá a identificar los diversos tipos de ciclos para elegir el apropiado y codificarlo en el algoritmo que representa la solución del problema. El capítulo 8 incluye diversos problemas que el aspirante puede resolver por su cuenta aplicando los conocimientos y habilidades que ha ido adquiriendo en el presente curso. 1 2. INTRODUCCIÓN A LOS ALGORITMOS 2.1. Algoritmos cotidianos 2.1.1. Torta ¿Qué hacemos si tenemos hambre? ¿Qué hacemos primeramente? Nos dirigimos al refrigerador y vamos en busca de algo para comer pero resulta que no hay nada preparado, ¡ah! pero observamos que hay todos los ingredientes para hacer una torta de jamón. ¿Qué hacemos primero? ¿Podríamos poner el jamón antes de untar la mayonesa en el pan? Por supuesto que no, entonces, ¿cuáles serían los pasos a seguir para preparar dicha torta y podérnosla comer? Una posible forma de preparar una torta, es la siguiente: 1. Tomar el pan. 2. Partirlo a la mitad. 3. Untarle la mayonesa. 4. Poner una rebanada de jamón. 5. Rebanar un jitomate. 6. Poner el jitomate encima del jamón. 7. Rebanar una cebolla. 8. Poner la cebolla encima del jitomate. 9. Tapar la torta. 10. Comerla. ¿De qué nos damos cuenta en este pequeño ejemplo? Si reflexionamos un poco, muchas de las actividades que realizamos diariamente pueden ser traducidas a pasos, ¿Cómo? Sí, para realizar actividades como vestirse, peinarse, comer, ir a la escuela o cualquier otra podemos escribirlas en pasos consecutivos. Piensa en qué actividades realizas cotidianamente y que las puedes describir en una serie de pasos a seguir. 2.1.2. Hacer quesadillas Los pasos necesarios para preparar unas quesadillas, pueden ser los siguientes: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Sacar tortillas y queso. Sacar sartén o comal. Calentar sartén o comal. Cortar el queso. Calentar las tortillas. Agregar a la tortilla la cantidad suficiente de queso. Doblar por la mitad. Esperar a que se derrita el queso. Sacar del sartén o comal. Servir y disfrutar. 2 2.1.3. Cambiar un foco ¿Qué se necesita para cambiar un foco fundido? 1. 2. 3. 4. 5. 6. 7. 8. Sitúa la escalera debajo del foco fundido. Elige el foco nuevo igual que el anterior. Sube por la escalera hasta alcanzar el foco. Gira el foco fundido en contra de las manecillas del reloj hasta quitarlo. Ubica el nuevo foco en el mismo lugar donde se quitó el anterior. Enrosca el foco hasta que quede fijo. Baja de la escalera y retírala. Prende la luz. En ejemplos como éste se pueden identificar las características y el concepto de lo que es un algoritmo. Se pueden identificar las entradas: foco nuevo y escalera, así como la serie de pasos que lo componen. Se puede decir, que se tiene un orden lógico hasta llegar al final. El elemento de salida en este caso es la luz prendida. Eso es lo que se espera al final del algoritmo. ¿Qué sucede cuando se cambia alguno de los pasos?, ¿qué sucede si se omiten pasos?, ¿cómo empezar un algoritmo y cómo terminarlo?, ¿cuáles serían los resultados y cómo seguir los pasos? 2.2. Definición de problemas Para resolver un problema se requiere seguir una serie de pasos que comienza con la definición y comprensión del problema y conduce a la resolución de mismo, hasta llegar a la implantación del programa. 2.2.1. Leer y comprender el problema Este proceso inicia cuando surge la necesidad de resolver algún problema mediante la computadora. Se debe identificar el problema y comprender la utilidad de la solución que se pretende alcanzar. Se debe tener una visión general del problema estableciendo las condiciones iniciales (datos de entrada) y además los límites del problema, es decir, donde empieza y donde termina (el proceso a seguir). Así como también la salida y resultado esperado (datos de salida). 2.2.2. Identificar entradas Es necesario entender en detalle el problema para obtener una radiografía en término de los datos disponibles como materia prima, es decir, los datos de entrada y así definir el proceso necesario para convertir los datos en la información requerida. Identificar los datos de entrada 3 requiere que se analice a fondo qué se necesita para poder encontrar una solución al problema y cuáles son los datos indispensables que se requieren como datos iniciales. 2.2.3. Identificar salidas Las salidas o datos de salida se presentan una vez que ha finalizado el proceso y se ha llegado a la solución del problema, se requiere desde el principio saber cuáles son esos datos de salida para poder verificar en el proceso que no se vaya a perder o cambiar alguno de estos datos. 2.2.4. Identificar proceso Una vez que se tienen identificados tanto los datos de entrada como de salida se requiere conocer cuál es el proceso que se debe seguir para solucionar el problema. Consiste en una serie de pasos que permitirán llegar al resultado esperado. Estos pasos no deben omitirse o de lo contrario se perderá la solución esperada. 2.2.5. Identificar datos También es conocida como lectura de datos, consiste en recibir desde un dispositivo de entrada, como el teclado, un valor. Ejercicios: Desarrolla un algoritmo para realizar una llamada telefónica desde un teléfono público. Desarrolla un algoritmo para hacer palomitas de maíz en un horno de microondas. 4 3. EXPRESIONES Las operaciones aritméticas fundamentales permiten modificar la apariencia de los datos para generar información; en otras palabras, procesar los datos que entran como materia prima para convertirlos en información que saldrá de la computadora. 3.1. Operadores aritméticos La tabla 3.1 muestra los operadores aritméticos que se pueden utilizar para realizar operaciones aritméticas: Operador + * / mod Significado Ejemplo Resultado Suma a+b Suma de a y b Resta a–b Resta de a y b Multiplicación a*b Producto de a por b División a/b Cociente de a por b Módulo a mod b Resto de a entre b Tabla 3.1 Operadores aritméticos En donde: 1. Los operadores aritméticos +, -, * y / pueden ser utilizados con tipos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real. 2. El operador mod por lo general se trabaja con números enteros, aunque algunos lenguajes permiten la operación con números reales. Nota: Si operador1 es 0, el resultado de / o mod no está definido. Si operador2 es negativo, el resultado de la operación mod es negativo. Ejemplos: Expresión 7 mod 2 12 mod 3 0 mod 5 Resultado 1 0 0 Expresión -15 mod 6 3 mod 5 -15 mod -7 Resultado -3 3 -1 3.2. Expresiones matemáticas Una expresión matemática es un conjunto de datos o funciones unidos por operadores aritméticos. FORMATO: variable = expresión 5 En donde: Variable Es el nombre de la variable en la que se asignará el resultado de la expresión. Expresión Es un valor constante o una variable o una expresión algebraica o fórmula (para calcular un valor) El cual se le asigna a la variable que está a la izquierda del símbolo =. = Es el símbolo que indica la asignación del valor de expresión a la variable. 3.3. Jerarquía de operadores Las expresiones aritméticas deben escribirse en una línea para que puedan introducirse a la computadora. La forma en que se escribe una expresión determina la forma en que será evaluada. Por ejemplo, la expresión matemática: 𝑁= 𝑥+𝑦 𝑦−1 Deberá escribirse como: n = (x+y) / (y-1) La computadora examina toda la expresión y va evaluando cada componente de acuerdo a cierto orden de precedencia que tienen las operaciones aritméticas: 1. Operaciones entre paréntesis. Primero busca lo que está entre paréntesis y lo evalúa. En caso de haber paréntesis anidados, evalúa primero los más internos y luego prosigue con los externos. 2. Operaciones Unarias. A continuación se evalúan las operaciones unarias, es decir, de cambio de signo. Ejemplo a -4 le cambia el signo a 4. 3. Multiplicación y división. Posteriormente evalúa las operaciones de multiplicación y división, las cuales tienen el mismo nivel de precedencia. 4. Suma y resta. Estas operaciones se evalúan al final, ya que tienen el más bajo nivel de precedencia. Nota 1: Cuando existen varias operaciones de un mismo nivel, se evalúan en orden de izquierda a derecha. Nota 2: en el ejemplo se encerraron entre paréntesis las operaciones (x+y) y (y-1) para cerciorarse de que se hiciera primero la suma, luego la resta y por último la división. Si la expresión se hubiera escrito n = x+y / y-1, estaría incorrecta, porque la computadora primero haría la división de y/y, luego la suma y después la resta, lo que arrojaría un resultado incorrecto. 6 Ejemplos de evaluación de expresiones: 1. 4+2*5 Primero la multiplicación; después, la suma 4 + 10 14 2. 23 * 2 / 5 De izquierda a derecha por la regla asociativa 46 / 5 9 3. 3 + 5 * ( 10 – (2 + 4) ) 3 + 5 * ( 10 – 6) 3+5*4 3 + 20 23 primero paréntesis mas interno segundo paréntesis multiplicación suma 4. ( 9 + 3 ) * 5 / 4 mod 7 + 1 12 * 5 / 4 mod 7 + 1 60 / 4 mod 7 + 1 15 mod 7 + 1 1+1 2 paréntesis multiplicación división módulo suma 5. x – ( A + B / 2) + y * z Escritura de fórmulas matemáticas En la tabla 3.2 se muestran algunos ejemplos de cómo escribir una fórmula matemática a una expresión aritmética, considerando la jerarquía de los operadores. 7 Fórmulas matemáticas Expresión aritmética a=b*c 𝑎 = 𝑏𝑐 b*b–4*a*c 𝑏 2 – 4𝑎𝑐 𝑦2 − 𝑦1 m = (y2 – y1) / (x2 – x1) 𝑚= 𝑥2 − 𝑥1 x+y-z 𝑥+𝑦−𝑧 𝑥+𝑦 (x + y) / (z + w) 𝑧+𝑤 5 5 / (1 + x * x) 2 1+ 𝑥 𝑌 x=a+b–y/z 𝑋 =𝐴+𝐵− 𝑍 𝐴𝐶 𝐵 w=(a*c/d)+b/c 𝑊= + 𝐷 𝐶 𝑇 𝑌−2 +𝑅 z=(t*(y–2)+r)/s 𝑍= 𝑆 𝐶𝐸 − 𝐵𝐹 x = (c*e - b*f) / (a*e - b*d) 𝑋= 𝐴𝐸 − 𝐵𝐷 9 f = 9 / 5 * c + 32 𝐹 = 𝐶 + 32 5 Tabla 3.2 Conversión de funciones matemáticas a expresiones aritméticas 3.4. Funciones matemáticas Para facilitar el cálculo matemático, todos los lenguajes de programación cuentan con funciones matemáticas incluidas en su biblioteca de funciones. En la tabla 3.3 se listan algunas las funciones cuya sintaxis está basada en la herramienta PSInt. Función Significado RC(X) Raíz Cuadrada de X ABS(X) Valor Absoluto de X LN(X) Logaritmo Natural de X EXP(X) Función Exponencial de X SEN(X) Seno de X COS(X) Coseno de X ATAN(X) Arcotangente de X REDON(X) Entero más cercano a X Tabla 3.3 Funciones matemáticas de PSInt 8 Ejemplos: 𝑎=𝑏− 𝑐 𝑏 =|𝑎| 𝑦 = 𝑠𝑒𝑛(𝑥) a = b – RC(c) b = ABS(a) y = SEN ( X ) 3.5. Expresiones matemáticas combinadas con funciones matemáticas Los operadores matemáticos pueden combinarse con las funciones matemáticas, cómo puede apreciarse en los siguientes ejemplos: 9−4 e = RC(9 - 4) / 3 e= 3 1 − cos 𝑎 v = (1 – cos(a)) / 2 𝑣= 2 a = 3.1416 * n * n 𝑎 = 𝜋𝑛2 3.6. Ejercicios de evaluación de expresiones 1.- ¿Cuál es el valor de cada una de las siguientes expresiones? a. c. e. g. 15 * 14 – 3 * 7 (24 + 2 * 6) / 4 3 + 4 * (8 * (4 – (9 + 3) / 6)) 4 – 40 / 5 b. d. f. h. –4*5*2 a * b + 7 * 8 donde a = 5 y b = 8 4*3*5+8*4*2-5 (- 5) / (- 2) 2.- Escribir las siguientes expresiones matemáticas como expresiones de computadoras a. d. g. 𝑥 + 1 𝑦 𝑥+𝑦 𝑥−𝑦 𝑦 𝑥+ 𝑧 𝑦 𝑥− 𝑧 b. e. 𝑏 𝑐+𝑑 𝑎+𝑏 c. 𝑐 𝑑 2 h. [(𝑎 + 𝑏 )] f. 2 i. 𝑥𝑦 1−4𝑍𝑥 𝑥𝑦 𝑚𝑛 (𝑥 + 𝑦)2 (𝑎 − 𝑏) 9 4. ALGORITMIA “La Algoritmia es la ciencia que estudia técnicas para diseñar algoritmos eficientes y evaluar la eficacia de un algoritmo”. 4.1 Definición de algoritmo y características “Un algoritmo es una secuencia ordenada y cronológica de pasos que llevan a la solución de un problema o a la ejecución de una tarea o actividad”[1]. La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida. Las características principales que debe cumplir un algoritmo son: Debe ser preciso. Indicar el orden de realización de cada paso. Debe ser definido. Si se sigue un algoritmo varias veces, se debe obtener el mismo resultado cada vez. Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento, es decir tener un número finito de pasos. 4.2 Diseño del algoritmos con pseudocódigos Ver anexo A. 4.3 Proceso de un programa en la computadora El proceso de resolución del problema, incluye el análisis del problema así como el diseño y verificación del algoritmo. 1. Análisis del problema a. Definición del problema b. Datos de entrada c. Proceso d. Salida 2. Diseño del algoritmo 3. Verificación del algoritmo 4. Codificación del algoritmo 5. Ejecución del programa 6. Verificación del programa 10 4.4 Ejercicios sencillos 1. Diseñar algoritmo que lea cinco números y calcule e imprima el producto, su suma y media aritmética. Proceso Producto_Suma_Media Definir a, b ,c, d, e, Producto, Suma como Entero; Definir media como Real; Leer a, b, c, d, e; Producto = a * b * c * d * e; Suma = a + b + c + d + e; Media = (a + b + c + d + e) / 5; Escribir Producto, Suma, Media; FinPoceso 2. Diseñar un algoritmo que calcule la distancia recorrida (m) por un automóvil, que tiene una velocidad constante (m/s) durante un Tiempo (seg.). Proceso Distancia_Recorrida Definir Tiempo, Velocidad, Distancia como Entero; Leer Velocidad, Tiempo; Distancia = Velocidad * Tiempo; Escribir Distancia; FinProceso 3. Diseñar un algoritmo lea el nombre de un empleado, su salario básico por hora y el número de horas trabajadas en el mes. Calcular su salario mensual e imprimir tanto el nombre como su salario mensual. Proceso salario Definir nombre como Cadena; Definir SalarioxHora, SMes como Definir HorasT como Flotante; Leer nombre, SalarioxHora, HorasT; SMes = SalarioxHora * HorasT; Escribir nombre, SMes; FinPeoceso 4. Diseñar un algoritmo que lea el peso de una persona en libras e imprima su peso en kilogramos y gramos (una libra equivale a 0.454 kilogramos). 5. Diseñar un algoritmo que calcule el Área de un triángulo. 6. Diseñar un algoritmo que calcule el Área de un círculo. 11 7. Diseñar un algoritmo que permita convertir grados a radianes y diseñar otro algoritmo que convierta de radianes a grados. Dar a conocer el resultado de dichas conversiones. Radianes = ¶/180 X grados Grados = 180/¶ X radianes 8. Diseñar un algoritmo que lea un número de pies y calcule e imprima su equivalente en yardas, pulgadas, centímetros 1 pie = 12 pulgadas 1 yarda = 3 pies 1 pulgada = 2.54 cm 1 metro = 100 cm 9. Diseñar un algoritmo que lea una cantidad de horas e imprima su equivalente en segundos, minutos y días. 10. Diseñar un algoritmo que lea la cantidad de dólares que se va a comprar y el tipo de cambio en pesos (costo de un dólar en pesos). Calcular e imprimir la cantidad que se debe pagar en pesos por la cantidad de dólares indicada. [1] Leobardo López Román. Metodología de la Programación. Segunda Edición. Alfaomega. [2] Luis Joyanes Aguilar, Luis Rodríguez Baena y Matilde Fernández Azuela. Fundamentos de Programación. Mc. Graw Hill. 12 5. MEMORIA Sin perder de vista el objetivo principal del curso, en este tema se tocará la memoria de la computadora y la relación que existe entre ella y los datos que puede manejar cualquier programa que se ejecutará en dicha computadora. 5.1. Localidades (tamaño y dirección) La memoria es una de las partes internas más importantes de la computadora. Está formada por un conjunto de circuitos electrónicos en la cual se almacena el programa que está en ejecución, los datos que requiere para trabajar así como los resultados obtenidos. Dado que está formada por circuitos electrónicos, éstos requieren energía eléctrica para trabajar, por lo tanto, cuando la energía se desconecta (o se apaga la computadora) lo almacenado en la memoria desaparece. A lo anterior se le llama memoria volátil. La memoria está compuesta por localidades, todas ellas del mismo tamaño. Una localidad es un espacio físico de la memoria para almacenar un byte (mas adelante en una materia del plan de estudios se aprenderá todo lo relacionado con el byte). La figura 5.1 representa un esquema de la memoria. Como puede observarse, cada rectángulo representa una posición de memoria y cada uno de ellos su tamaño es idéntico a los demás. localidad dirección n n-1 n-2 9 8 7 6 5 4 3 2 1 0 Figura 5.1. Esquema de la memoria 13 En cada posición de memoria se puede almacenar un dato. En la parte derecha del dibujo existe una serie de números consecutivos que inician en 0 y concluyen en n. Dicho número se utiliza para identificar cada una de las posiciones de memoria y diferenciarla de las demás. A dicho número se le denomina dirección. Así por ejemplo: la posición marcada con 9 es la dirección 9 en la cual se puede almacenar un dato, 5 es otra y n-2 es otra dirección de memoria. La capacidad de memoria de una computadora está limitada por los circuitos electrónicos que conforman dicha memoria. Es obvio pensar que una computadora que tiene más capacidad de memoria es más costosa que otra que tenga menos, debido que posee más circuitos electrónicos para conformarla. Por ello la capacidad de memoria es en sí la cantidad de localidades que pueda tener. Dado por N (ver la figura) que representa la dirección máxima. Así por ejemplo, si una computadora tiene 230 localidades de memoria (1073‟741,824) en realidad tiene una capacidad de 1 Gigabyte. Dicha capacidad, en la actualidad es suficiente para una computadora portátil pequeña. Como se mencionó, un programa de computadora, para trabajar con sus datos y obtener resultados utiliza direcciones de memoria (números) para almacenar dichos datos. Para las personas es más difícil aprender números que aprender nombres. Por esa razón en los programas de computadora no será necesario utilizar direcciones de memoria tales como son (números), en su lugar se utilizan variables. Esa es la importancia de las variables, manejan los datos de una forma sencilla dentro de los programas sin utilizar de manera directa las direcciones de memoria. Dichas variables las utiliza el programador en las líneas de código del programa para hacer referencia a los datos almacenados en la memoria. 5.2. Tipos de datos Para cualquier programa, existen diversos tipos de datos, entre los cuales los más utilizados son numéricos, caracteres y cadenas. Otros mas que se utilizan con menos frecuencia pero que son muy importantes son los lógicos y punteros entre otros (también estos datos se aprenderán en una materia de primer semestre). Para efectos de facilitar la comprensión de estos temas solamente se hará mención de números sin fracción (todos enteros). Los datos numéricos, como su nombre lo dice son números, mismos que pueden ser de varios tipos. Si se habla de la edad de una persona, pues se utiliza un número que puede estar en un rango de 0 a 150 (dado que se está afirmando que no hay personas que puedan tener edad mayor a 150). Otro ejemplo puede ser si consideramos un taller mecánico, en el cual para facilitar la administración del propio taller a cada empleado que trabaja ahí se le asigna un número, si el taller tiene muy pocos empleados (menos de 100), pueden usarse números de 1 a 99. Si ahora se considera el dinero que maneja el propio taller mecánico para cobro de las reparaciones, es posible que una reparación llegue cerca de los 100,000 pesos, entonces aquí se utilizan números más grandes, que quizás puedan llegar a ser hasta 99,999 pesos. Otro ejemplo diferente puede ser para aplicaciones de los astrónomos que manejan distancias de millones de kilómetros. En este caso se usarán número más grandes. 14 Existen datos considerados como tipo carácter, mismo que se explican aquí. Haciendo referencia al taller mecánico de un ejemplo anterior, y suponiendo que para llevar el control administrativo de dicho taller, es necesario considerar datos de los empleados (mismos que tienen un puesto a desempeñar, como pueden ser velador, recepcionista, contador, mecánico, etc.) Si se registra el sexo de cada persona se puede usar una letra, para tal efecto por ejemplo M para masculino y F para femenino. En este caso un dato que puede ser manejado por una sola letra, se le denomina dato tipo caracter. En cambio para manipular el nombre de la persona, es necesario utilizar un conjunto de letras para que pueda almacenarse nombre, apellido paterno y materno. Quizás puedan ser necesario 40 caracteres para que haya espacio para almacenar nombres muy largos. Para este tipo de datos se puede usar una cadena de caracteres. De la misma manera, debe usarse un dato tipo cadena de caracteres para manejar el puesto que desempeña. Pero en este caso, la cadena que se use en el nombre de la persona será más larga (porque tiene más letras) que para el puesto. En conclusión, dependiendo del problema se identifican los datos y para cada dato debe identificarse que tipo es, según sus valores posibles. Ahora surge la pregunta, ¿Cómo es que una variable representa un dato?. Suponiendo que el programa requiere manejar el dato sexo una letra), entonces se utiliza una variable, que en este ejemplo se le llama s. Entonces, cada vez que en el programa se use la variable s, se hace referencia a una dirección de memoria en la cual estará almacenada el valor (que como se mencionó puede ser F o M). Cuando un programa se ejecuta, ya se asignó usan dirección de memoria para la variable s, en este caso se supone que es la dirección 8. El programador no necesita saber que en la dirección 8 está almacenada la letra que representa el sexo, para él, solo es importante saber que la variable es s y cada vez que se utilice dicha variable está haciendo referencia a la dirección 9. Entonces significa que no es necesario que el programador conozca que en la dirección 9 (posición 9) se almacena la letra correspondiente al sexo. En conclusión, para cada tipo de datos que maneja el programa se utiliza una variable y cada variable representa una posición de memoria en la cual se almacena el dato. 5.3. Asignación Asignación es un proceso muy importante que sucede dentro de la computadora, en él intervienen varios elementos físicos y lógicos. Para explicarlo, considerar el que se desea calcular el área de un triángulo. Para ello, se requieren tres variables: a, b y h de acuerdo a lo siguiente: a representa el área del triángulo, b es una variable que representa el valor de la base y h que se usará para representar la altura. El hecho de que esas tres variables se utilicen en un programa que haga el cálculo, significa que hay una dirección de memoria en la cual se almacenará el valor de b, en otra el valor de h y una más (para la variable a ) para almacenar el resultado, sin embargo en el programa se usarán las variables que pueden tener valores diferentes cada vez que se ejecute el programa. 15 La expresión que calcula el área es la siguiente: b*h/2 Esa expresión se interpreta de la siguiente forma: el valor que tenga b se multiplica por h y el resultado se divide entre 2. El resultado final obtenido de la expresión es necesario almacenarlo en la memoria mientras el programa sigue en ejecución. La necesidad de almacenarlo es para usarlo posteriormente, por ello se definió una localidad de memoria llamada a. la ecuación queda de la siguiente manera: a = b*h/2 Matemáticamente se dice que a es igual al resultado de la expresión. Desde el punto de vista de un programa de computadora en realidad es una instrucción que se llama asignación. Técnicamente asignación consiste en almacenar un valor en una variable, ese valor puede ser el resultado de una expresión, una constante o el valor de otra variable. Ejemplos: X = Y L = 18 En el primer ejemplo se asigna el valor de Y a la variable X, el segundo se asigna el valor 18 a la variable L. Se concluye que la asignación es en sí el almacenar un valor en la memoria representado por la variable escrita del lado izquierdo del signo igual. 16 6. DECISIONES Las estructuras lógicas selectivas se encuentran en la solución algorítmica de casi todo tipo de problemas. Se utilizan cuando en el desarrollo de la solución de un problema se debe tomar una decisión, para establecer un proceso o señalar un camino alternativo a seguir. Esta toma de decisión se basa en la evaluación de una o más condiciones que señalarán como alternativa o consecuencia la rama a seguir. Para reconocer esta toma de decisiones en la vida diaria, se pueden hacer los siguientes ejercicios: 1. Resuelve los siguientes laberintos, mostrados en las figuras 6.1 y 6.2, pensando en las decisiones que se tomaron para ir por un camino u otro. Figura 6.1 Laberinto 1 17 Figura 6.2 Laberinto 2 2. Describe las opciones y las decisiones que realizas a diario para llegar desde tu casa al curso de Inducción en el Tecnológico. 18 6.1. Operadores relacionales Los operadores relacionales son operadores que permiten comparar dos operandos. Los operandos pueden ser números, alfanuméricos, constantes o variables. Las constantes o variables a su vez, pueden ser de tipo entero, real, carácter o cadena de caracteres. El resultado de una expresión con operandos relacionales es verdadero o falso. En la tabla 6.1 se presentan los operadores relacionales, la operación que pueden realizar, un ejemplo de su uso y el resultado de dicho ejemplo. OPERADOR == <> < > <= >= OPERACIÓÓN Igual que Diferente a Menor que Mayor que Menor o igual que Mayor o igual que EJEMPLO „hola‟ = = „lola‟ „a‟ <> „b‟ 7 < 15 11 > 22 15 <= 22 20 >=35 RESULTADO FALSO VERDADERO VERDADERO FALSO VERDADERO FALSO Tabla 6.1 Operadores Relacionales Nótese que las expresiones matemáticas de mayor o igual que y menor o igual que se escriben utilizando los símbolos de mayor o menor seguidos de un igual (>=, <=). La evaluación de una comparación da lugar a un resultado de verdadero o falso. Este resultado puede servir de base para tomar una decisión, pero también puede almacenarse en una variable booleana. Por ejemplo: Tec = H < 3 da lugar a que la variable Tec adquiera valor verdadero si H es menor que tres, o falso si H no es menor que tres. En la tabla 6.2 se muestra un ejemplo de distintas expresiones de comparación entre dos variables A y B, suponiendo los siguientes valores A = 2 y B =7. EXPRESIÓN A>B A<B A >= B A <= B B>A A–B>0 A+B>0 Res = A > B (A / B) * B <> A A <> B A==B EVALUACIÓN Falso Verdadero Falso Verdadero Verdadero Falso Verdadero Falso es almacenado en la variable Res No es factible de evaluar Verdadero Falso Tabla 6.2 Ejemplo de aplicación de los operadores relacionales 19 Se ha dejado una expresión sin evaluación aunque la computadora le asignará un valor: verdadero o falso. Lo que no es tan inmediato es decir qué opción será la que aplique. Depende de factores como la prioridad de las operaciones, el número de decimales, etc. Si se piensa en que una computadora, a efectos matemáticos, funciona como una calculadora, se puede hacer en la casa la siguiente experiencia: 1. Con una calculadora no científica, dividir 2 entre 7. Una calculadora con 8 dígitos devuelve el resultado con 7 decimales como 0,2857142. A continuación se multiplica el resultado por 7 y se obtiene 1,9999994. 2. Con una calculadora más avanzada se puede obtener un resultado de 2/7 con más decimales y un valor final igual a 2. Pero con esta misma calculadora se puede dividir 1 entre 3, obtener un valor 0,3 periódico y luego multiplicar por 3 para obtener 0,999999999. (A / B) * B se tiene claro que es igual a A. Por ejemplo (2/7) * 7 = 2. Pero una computadora podría devolver un resultado (2/7) * 7 = 1,999. Con lo cual se diría que (A / B) * B es distinto de A. En definitiva, una computadora no trabaja con infinitos decimales y puede dar lugar a resultados inesperados. Estos casos habrán de ser previstos por el programador, que tomará las medidas que estime convenientes. La forma de operar de las computadoras o las características del lenguaje que se esté utilizando en un momento dado pueden dar lugar a aparentes fallos o resultados inesperados. No son muy habituales pero conviene tener en cuenta que pueden aparecer. A estos “resultados inesperados” se les llama paradojas. El caso de (A / B) * B <> A se le denomina “paradoja de los decimales finitos”. Conocer las paradojas de un lenguaje y manejarlas a su antojo es un hobby para muchos programadores. Ejemplos 1. Suponiendo que P tiene el valor de 5 y Q el valor de 3. La expresión a evaluar es P > Q si se sustituyen los valores la expresión queda 5 >3, al evaluar esta expresión da el valor de VERDADERO. La siguiente expresión a evaluar es P < Q, la expresión es 5 < 3, al evaluarla el resultado es FALSO. 20 2. Si se evalúa una expresión más larga quedaría de la siguiente manera: A = 10 B = 5 (A * 2 – 4) >= (B * 3 + 6) (10 * 2 – 4) >= (5 * 3 + 6) (20 – 4) >= (15 + 6) 16 >= 21 FALSO 3. (6 * 5 + 20 / 4) <= (6 ^ 3 div 7) (30 + 20 / 4) <= (216 div 7) (50 / 4) <= 30 12.5 <= 30 VERDADERO 6.2. Operadores lógicos Los operadores lógicos son operadores que permiten formular condiciones complejas a partir de condiciones simples. Los operadores lógicos son de conjunción (y), disyunción (o) y negación (no). En la tabla 6.3 se presenta el operador lógico, la expresión lógica y significado de dicha expresión, teniendo en cuenta la jerarquía correspondiente. OPERADOR LÓGICO JERARQUÍA NO (mayor) Y (menor) O EXPRESIÓN LÓGICA SIGNIFICADO No P NO P No es cierto que P Es FALSO que P PyQ P sin embargo Q PoQ PoQ o P o Q o ambas Mínimo P o Q Tabla 6.3 Operadores Lógicos En la tabla 6.4 se presenta la tabla de verdad de los operadores lógicos. P Q ~P ~Q PoQ PyQ VERDADERO VERDADERO FALSO FALSO VERDADERO FALSO VERDADERO FALSO FALSO FALSO VERDADERO VERDADERO FALSO VERDADERO FALSO VERDADERO VERDADERO VERDADERO VERDADERO FALSO VERDADERO FALSO FALSO FALSO Tabla 6.4 Tabla de Verdad de los Operadores Lógicos 21 En resumen: Los operadores lógicos combinan condiciones, según el tipo de operador se deberá cumplir una u otra función. En la tabla 6.5 se describe el significado de los operadores. OPERADOR AND OR NOT SIGNIFICADO Almacenara True, sólo si todos las condiciones son verdaderas Almacenara True, sólo si alguna de las condiciones es verdadera Cambia el valor al contrario Tabla 6.5 Significado de los operadores lógicos Ejemplos Para entender mejor el para qué sirven estos operadores se presentan unos ejemplos y su resolución: 1. Evaluamos varias expresiones compuestas (5 > 3) y VERDADERO y FALSO Resultado: FALSO (8 < 4) (5 > 3) y (4 < 8) VERDADERO y VERDADERO Resultado: VERDADERO (5 > 3) o (8 < 4) VERDADERO o FALSO Resultado: VERDADERO (5 < 3) o (8 < 4) FALSO o FALSO Resultado: FALSO NO (5 < 3) NO FALSO Resultado: VERDADERO 2. NO (15 > 7 * 2) NO (15 > 14) NO VERDADERO Resultado: FALSO 3. (7 + 5 – 6) > (9 + 7 * 8 – 36 / 5) (12 – 6) > (9 + 56 – 36 / 5) 6 > (9 + 56 – 7.2) 6 > (65 – 7.2) 6 > 57.8 Resultado: FALSO 22 4. ((9+4 ((9 + ((9 + (17 < * (5-3)) < (10/2+20)) O (((8 * 3+12) –5 * 4) > (7 * 4/2)) 4 * 2) < (5 + 20)) O (((24 + 12) – 20) > (28 / 2)) 8) < 25) O ((36 – 20) > 14) 25) O (16 > 14) VERDADERO O VERDADERO Resultado: VERDADERO 6.3. Decisiones simples Una decisión simple tiene una rama de entrada con una sola entrada y dos ramas de salida con una salida cada una. Cuando se ejecuta el proceso, el flujo del proceso toma una rama de salida si una determinada condición es verdadera y la otra rama si la misma condición es falsa. La decisión selecciona la salida según los datos de entrada. La estructura si – entonces, evalúa la condición y en tal caso: si la condición es verdadera, entonces ejecuta la acción Si (o acciones si son varias). Si la condición es falsa, entonces no se hace nada. Ejemplos 1. Construir un algoritmo tal, que dado como dato la calificación de un alumno en un examen, escriba “Aprobado” en caso que esa calificación fuese mayor que 6. Proceso Calificaciones Leercal; Sical> 6 Entonces Escribir “Aprobado”; FinSi FinProceso 2. Dado como dato el sueldo de un trabajador, aplíquele un aumento del 15% si su sueldo es inferior a $1000. Imprima en este caso, el nuevo sueldo del trabajador. Proceso Sueldo LeerSue; SiSue< 1000 Entonces Aum = Sue * 0.15; Nsue = Sue + Aum; EscribirNsue; FinSi FinProceso 23 Ejercicios propuestos: Dado un número, imprimir si es positivo. Dado un número, imprimir si es par. Dado un número, imprimir si su cuadrado es mayor que 100. 6.4. Decisiones anidadas (complejas) Las decisiones a veces tienen más de un camino, es decir cuando se tienen dos opciones de alternativas de acción y por la naturaleza de éstas, se debe ejecutar una o la otra pero no ambas a la vez, es decir son mutuamente excluyentes. Por ejemplo: 1. Al tener dos números y comparar cuál de ellos es el mayor. Proceso Compara A=5; B=10; Si (A>B) Entonces Escribir “A es el mayor”; Sino Escribir “B es el mayor”; FinSi FinProceso Pero a veces se necesitan seguir otros caminos una vez que ya se ha tomado uno de los dos caminos principales, es decir, ya se tomó una alternativa, pero se deben tomar otras decisiones. A esto se le denominan “decisiones anidadas”. Ejemplo: Se necesita calcular el sueldo de un empleado tomando en cuenta que las horas trabajadas deben ser de 8 horas diarias de lunes a viernes. Además se debe tomar en cuenta que a la semana son 40 horas. Una cantidad mayor, esta se calcula como horas extra, donde cada hora extra se paga doble, pero si se trabajan más de 50 horas, las horas se deben pagar triple. Como datos de entrada se requiere: horastrabajadas, sueldoporhora 24 Como datos de salida: sueldo, sueldodoble, sueldotriple Para el proceso: Proceso Horas Si (horastrabajadas<= 40) Entonces sueldo = horastrabajadas * sueldoporhora; Sino Si (horastrabajadas<= 50) Entonces sueldodoble = (40 * sueldoporhora) + ((horastrabajadas - 40) * (sueldoporhora * 2)); Sino sueldotriple = (40 * sueldoporhora) + ((horastrabajadas – 50) * (sueldoporhora * 3)); FinSi FinSi FinProceso Las decisiones anidadas se utilizan cuando se tienen dos alternativas para solucionar el problema y además de cada vía posible se tienen otras posibles soluciones u opciones para elegir una sola alternativa para resolver el problema. Ejercicios propuestos: Calcular el valor de X y Y, teniendo como entrada el valor de X y calculando el de Y de acuerdo con las siguientes condiciones: Si X< 0 entonces Y = 3X + 6 Si X> = 0 entonces Y = X 2 + 6 Calcular e imprimir el precio de un terreno del cual se tienen los siguientes datos: largo, ancho y precio por metro cuadrado. Si el terreno tiene más de 400 metros cuadrados se hace un descuento de 10%. Calcular el costo de un pedido de un artículo del cual se tiene la descripción, la cantidad pedida y el precio unitario. Si la cantidad pedida excede de 50 unidades, se hace un descuento de 15%. 25 6.5. Decisiones múltiples Cuando se tienen más de dos opciones alternativas de acción, se debe tomar un solo camino para resolver el problema. En este tipo de decisiones se tienen diversas alternativas y un solo camino es el que debe tomarse. Esta estructura funciona de la siguiente manera: se presentan varios caminos y se debe seleccionar uno solo de todos los posibles, se realiza la acción o acciones correspondientes y se finaliza con la selección. Ejemplo: leer el número de día y presentar el día correspondiente. Proceso DiaSemana Definir dia como entero; Leer dia; Según dia Hacer 1: Escribir “Domingo”; 2: Escribir “Lunes”; 3: Escribir “Martes”; 4: Escribir “Miércoles”; 5: Escribir “Jueves”; 6: Escribir “Viernes”; 7: Escribir “Sábado”; De otro modo: Escribir “Dato erróneo”; FinSegun FinProceso Ejercicios propuestos: En un almacén de venta de trajes, si se compra uno se hace el 50% de descuento, si se compran dos, se hace el 55%, si se compran 3, el 60% y si se compran más de 3 el 65%. Solicitar la cantidad de trajes a comprar además del precio unitario. Como salida, escribir el subtotal por pagar, el descuento y el total por pagar. Leer los datos de un empleado (nombre, tipo de empleado y sueldo), calcule el incremento de sueldo y su nuevo sueldo de acuerdo a lo siguiente: si es tipo de empleado 1 se le aumentará el 5%, si es tipo 2 se le aumentará 7%, si es tipo 3 el 9%, si es tipo 4 el 12% y si es tipo 5 el 15%. Como resultado, escribir el nombre, tipo de empleado y el nuevo sueldo 26 6.6. Ejercicios Resuelve los siguientes ejercicios: 1. A = 5 y B =1 6 (A ^ 2) > (B * 2) 2. ((5 * 4 - 8) + (18 / 3)) > ((4 * 6 - 7) + (2 * 5 + 6 /(3 * 3 - 7) )) 3. X=6 Y=7 (1580 mod X * 2 ^ Y) > (Y + 8 * X + (Y div 3)) 4. Escribir si una persona es mayor de edad (mayor de 18), tomando como base la edad proporcionada. 5. Escribir sólo el número mayor de dos números leídos. 6. Escribir si un estudiante es admitido en la Universidad o no con base a los promedios que tenga en la preparatoria y del examen de admisión. El promedio mínimo es de 85. Ejemplo: Promedio de la Preparatoria 85, calificación del examen de admisión 80, el promedio es 82.5000 por lo tanto NO es admitido. 7. Presionar una tecla y escribir que tipo de tecla es, mayúscula, minúscula, dígito o carácter especial. 8. Introducir los segundos y escribir a cuantas horas, minutos y segundos equivale. 9. Escribir a qué mes corresponde en número. Por ejemplo: número de mes 3 y equivale al mes de Marzo. 10. Escribir qué tipo de alumno es según su calificación, considerando que si el alumno tiene 100 se escriba EXCELENTE. Si tiene entre: a. 90 y 99 MUY BUENO b. 80 y 89 BUENO c. 70 y 79 REGULAR d. 60 y 69 MALO e. 0 y 59 REPROBADO 27 7. CICLOS 7.1. Ciclos contados Ciclo PARA Este ciclo es uno de los más usados para repetir una instrucción o conjunto de instrucciones, sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una o más instrucciones. Su formato general es: Para<variable> = <inicial>Hasta<final>Con Paso<paso>Hacer <Instrucción(es)> FinPara Las instrucciones dentro de un ciclo resuelve el problema de repetir todo el programa o cierta parte del programa más de una vez, ya que estas instrucciones se repiten cada vez en cada pasada del ciclo. Analizando este ciclo en cada una de sus partes: La palabra Para indica que se realizaran una serie de instrucciones repetitivas. El valor inicial se almacena en la variable. Mediante la palabra Hasta vamos a indicar la cantidad de veces que se repetirán las instrucciones. Con Paso indicamos los cambios que aplicaremos a la variable que se evalúa en el Hasta Usando la palabra Hacer indicamos el comienzo de las instrucciones que necesitamos se repitan Y la palabra FinPara la utilizamos para indicar que es el fin de las instrucciones y el fin de este ciclo. Con el buen uso de este ciclo Para logramos que nuestros programas sean de una menor cantidad de líneas y el tamaño del mismo al guardarlo sea también menor, por ejemplo si necesitamos pedir el nombre dirección y teléfono de 45 personas tendríamos que poner 45 instrucciones para leer el nombre, otras 45 para pedir la dirección, y otro tanto igual para pedir el teléfono, si hacemos uso de este ciclo solamente ponemos tres instrucciones que se repitan 45 veces y nuestro programa es mucho menor que el que resultaría de repetir las 3 instrucciones para cada una de las 45 personas. 28 Ejemplos del ciclo Para Ejemplo Uno: En este ejemplo calcularemos el promedio de una lista de N datos Proceso Promedio Escribir "Ingrese la cantidad de datos:" Leer n acum=0 Para i=1 Hasta n Hacer Escribir "Ingrese el dato ",i,":" Leer dato acum=acum+dato FinPara prom = acum/n Escribir "El promedio es: ",prom FinProceso Ejemplo Dos: En este ejemplo calcularemos la sumatoria de una lista de N datos Proceso Sumatoria Escribir "Ingrese la cantidad de datos:" Leer n suma=0 Para i=1Hasta n Hacer Escribir "Ingrese el dato ",i,":" Leer dato suma=suma+dato FinPara Escribir "La sumatoria es: ", suma FinProceso 29 Ejercicio a desarrollar: Anotar las líneas de código necesarias para obtener el valor factorial de un x número. Ejemplo factorial de 5 = 120 puesto que: Valor del x = 5 5-1=4 y se multiplican 5x4=20 El resultado se multiplica por 3 20*3=60 El resultado se multiplica por 2 60 * 2 =120 Y el resultado se multiplica por uno y nos da el mismo resultado Obsérvese que el valor de x se multiplica por x-1,x-2,x-3 y así consecutivamente, o sea las veces que se multiplica es el valor de x-1. 7.2. Ciclos condicionados Ciclo Mientras La instrucción Mientras ejecuta una secuencia de instrucciones mientras una condición sea verdadera. Mientras<condición>Hacer <instrucciones> FinMientras <condicion>: Permite que se realicen las instrucciones mientras que la condición sea verdadera. <instrucciones>: Representa el conjunto de actividades a realizar. 30 Ejemplo 1 Si se quiere adquirir un refresco, que cuesta 9 pesos, de una máquina despachadora de refrescos y se cuenta con puras monedas de un peso, el proceso sería el siguiente. Proceso refresco Definircontador como entero Inicializarcontador= 0 Elegir refresco Mientrascontador< 9 Hacer Depositar moneda Incrementar contador en uno (contador=contador+1) FinMientras Tomar el refresco FinProceso Ejemplo 2 Se requiere enviar un mensaje de texto a través del celular, considera que ya se eligió el contacto y que se presenta el cuadro de texto donde se escribirá el mensaje. Proceso EnviarMensaje Definir salida como entero Inicializar salida= 0 Mientrassalida<> enviar Hacer Entrar salida= caracter Escribir salida FinMientras FinProceso Ejemplo 3 Se quiere sumar los números comprendidos entre el 1 y el 100, es decir, el resultado de 1+2+3…+100 31 Proceso Suma Definir s,i como entero Inicializar s= 0 Inicializar i = 1 Mientrasi<= 100 Hacer s = s+i i = i+1 FinMientras Escribir s FinProceso Ejercicios o Hacer el cálculo de la suma de los números impares comprendidos entre el 0 y el 100 o Se requiere mostrar y contar los múltiplos de 7 que hay entre 1 y 700 o Mostrar la tabla de multiplicar del 1 al 10, elegida por el usuario. Ejemplo: si el usuario elige la tabla 3, se debe representar 3 x 1 = 3, 3 x 2 = 6, etc. Ciclo Repetir… hasta que ( Do… while) El ciclo, Repetir… hasta que, es otra estructura de repetición de instrucciones que se utiliza en los casos en que no se sabe con exactitud cuántas veces se han de repetir las instrucciones del ciclo, pero se sabe que dichas instrucciones se ejecutarán al menos por una vez. La figura 7.1 muestra la estructura del ciclo. En esta estructura se tiene un conjunto de instrucciones que son las actividades del ciclo y al final se incluye una instrucción, llamada Condición, que cuando se cumple, indica en qué momento se debe terminar el ciclo de repeticiones. Instrucciones Falso Condición Verdadero Figura 7.1 Fin del ciclo 32 En el cuerpo de las instrucciones debe haber alguna acción que cambie el estado de los elementos que se evalúan en la Condición, para asegurar que el ciclo se terminará en algún momento, de lo contrario se entraría en un ciclo infinito. Ejemplo: Si un atleta va a hacer ejercicio en una pista de atletismo hasta que se canse, la secuencia de instrucciones sería: Repetir Dar una vuelta a la pista trotando Hasta que Esté suficientemente cansado Este caso se representa en la figura 7.2.El atleta, al llegar a la pista, deberá inmediatamente dar al Dar una vuelta a la pista trotando 1 menos una vuelta a la pista . Una vez que terminó la primera vuelta se pregunta ¿Ya está suficientemente cansado? Si la respuesta es No ¿Suficientemente negativa entonces el atleta repetirá la instrucción cansado? “Dar una vuelta a la pista trotando”, y así sucesivamente, hasta que la respuesta a la Sí Figura 7.2 pregunta sea afirmativa, con lo que se termina el ciclo y se pasa a la siguiente instrucción, tal vez ir a tomar una ducha. Ejercicios: Diseñar un código para sumar los números naturales consecutivos a partir del número n dado por el usuario, hasta que la suma alcance al menos el valor k, también dado por el usuario, para k > n. Diseñar un código de un programa que permita leer una cadena de caracteres hasta que se introduzca un espacio en blanco. Diseñar un código que permita a una estación de gasolina, bombear el combustible hasta que se alcance la cantidad de litros ordenada por el cliente. Diseñar un código para un guardia de seguridad en la puerta de un antro, que permita el acceso de clientes hasta que se alcance el límite de clientes permitido por protección civil. 1 En este caso el atleta deberá dar una vuelta a la pista aun cuando al llegar al campo de entrenamiento ya esté suficientemente cansado. 33 8. Anexo A. Sintaxis para el Pseudocódigo utilizado en el diseño de algoritmos Para que una computadora pueda resolver un problema es necesario que se le indiquen las instrucciones para ello. Estas instrucciones es lo que constituye el programa de la computadora, y definen los pasos que debe de seguir la computadora para obtener el resultado que se está solicitando. Estos pasos son los que conformarán el algoritmo de solución y que es necesario diseñar para garantizar que el resultado sea el esperado. Existen diversas formas de describir y diseñar un algoritmo, partiendo de una simple narración de paso o yéndonos al uso de palabras prediseñadas (pseudopalabras) que se asocien con las instrucciones de la computadora llamadas pseudocódigos, aunque de manera gráfica también podemos diseñar un algoritmo haciendo uso de diagramas de flujo, diagramas de N-S (NassiSchneiderman), Diagramas de Warnier, diagramas de actividades entre otros. En este curso se tocará sólo el uso de pseudocódigo para el diseño de un algoritmo. Parte de su sintaxis estará basada en herramienta PSeInt, la cual se puede encontrar en la página: http://pseint.sourceforge.net/, y en el libro Metodología de la programación orientada a objetos, segunda edición, de Leobardo López Román, de la editorial AlfaOmega. Estructura básica Todo algoritmo en pseudocógido bajo PSeInt tiene la siguiente estructura general: Caso PSeInt Proceso NombreProceso accion 1; accion 1; . . . accion n; FinProceso Comienza con la palabra clave Proceso seguida del nombre del programa, luego le sigue una secuencia de instrucciones y finaliza con la palabra FinProceso. Una secuencia de instrucciones es una lista de una o más instrucciones, cada una terminada en punto y coma. Cabe mencionar que en lugar de utilizarse la palabra proceso, es más común y general la palabra algoritmo, pero respetando sintaxis de la herramienta PSeInt se trabajará bajo el nombre de proceso para indicar el nombre e inicio del algoritmo a diseñar. A continuación se tiene la estructura general de un algoritmo sin seguir herramienta alguna: 34 Caso general Algoritmo Nombre del algoritmo Inicio accion 1; accion 1; . . . accion n; FinAlgoritmo Las acciones incluyen operaciones de entrada y salida, asignaciones de variables, estructuras condicionales si-entonces o de selección múltiple y/o estructuras cíclicas mientras, repetir o para. Operadores y Funciones Se dispone de un conjunto básico de operadores y funciones que pueden ser utilizados para la construcción de expresiones más o menos complejas. Y las cuales se presentan en la tabla A.1 y en la tabla A.2. Operador Relacionales > < = <= >= Lógicos &oY |oO ~ o NO Algebraicos + * / ^ % o MOD Significado Ejemplo Mayor que Menor que Igual que Menor o igual que Mayor o igual que 3>2 'ABC'<'abc' 4=3 'a'<='b' 4>=5 Conjunción (y). Disyunción (o). Negación (no). (7>4) & (2=1) //falso (1=1 | 2=1) //verdadero ~(2<5) //falso Suma Resta Multiplicación División Potenciación Módulo (resto de la división entera) total <- cant1 + cant2 stock <- disp – venta area <- base * altura porc <- 100 * parte / total sup <- 3.41 * radio ^ 2 resto <- num MOD div Tabla A.1 Relación de operadores 35 La jerarquía de los operadores matemáticos es igual a la del álgebra, aunque puede alterarse mediante el uso de paréntesis. A continuación se listan las funciones integradas disponibles: Función Significado RC(X) Raíz Cuadrada de X ABS(X) Valor Absoluto de X LN(X) Logaritmo Natural de X EXP(X) Función Exponencial de X SEN(X) Seno de X COS(X) Coseno de X ATAN(X) Arcotangente de X TRUNC(X) Parte entera de X REDON(X) Entero más cercano a X AZAR(X) Entero aleatorio entre 0 y X-1 Tabla A.2 Relación de funciones matemáticas Comentarios Dentro de un algoritmo también se pueden poner comentarios, lo que nos permite de alguna manera ir documentando internamente nuestro pseudocódigo, para ello se utilizarán dos diagonales juntas //. Los comentarios se pueden introducir luego de una instrucción, o en líneas separadas. Todo lo que precede a //, hasta el fin de la línea, no será tomado en cuenta al interpretar el algoritmo. Declaración de variables y constantes Dado que al momento de solucionar un problema es necesario contar con una serie de datos de entrada, y en ocasiones de datos generados a partir de otros datos durante el proceso para obtener algún resultado es necesario definir variables que contendrán dichos datos, los cuales pueden ser a su vez de diversos tipos de datos, para que sean reconocidos por el programa es necesario hacer una declaración o definición antes de ser utilizadas dichas variables, para ello se seguirá el formato siguiente: Definir <variable>,<variable>, …,<variable> como <tipoDato>; Definir <constante> = <valor>; 36 Ejemplo: Definir nombre como cadena; Definir TOTAL = 10; Los tipos de datos más comunes son: numéricos (enteros, y reales), cadenas (delimitadas por comilla), caracteres (delimitados por apostrofes), booleanos (verdadero y falso). Asignación La instrucción de asignación permite almacenar un valor en una variable. Es común utilizar una flecha dirigida hacia a la izquierda para denotar la asignación como lo muestra tanto el símbolo de la figura A.1 como la instrucción, pero para nuestro caso utilizaremos el símbolo de igual (=). Para el caso de PSeInt <variable> <- <expresión> ; <variable> <- <valor> ; Para nuestro caso: <variable> =<expresión> ; <variable> = <valor> ; Ejemplo: a=10; b=3.2; res=12+2-b; Al ejecutarse la asignación, primero se evalúa la expresión de la derecha y luego se asigna el resultado a la variable de la izquierda. El tipo de la variable y el de la expresión deben coincidir. var = Expresión Figura A.1 Símbolo Asignación 37 Entradas La instrucción Leer permite ingresar información desde el ambiente. Leer <variablel>, <variable2>, ...,<variableN> ; Ejemplo: Leer altura; Leer altura, base; Esta instrucción lee N valores desde el ambiente (en este caso el teclado) y los asigna a las N variables mencionadas. Pueden incluirse una o más variables, por lo tanto el comando leerá uno o más valores. La figura A.2 ilustra el símbolo que puede ser utilizado para la entrada de datos. Figura A.2 Símbolo Entrada de datos Salidas La instrucción Escribir permite mostrar valores al ambiente. Escribir <exprl> , <expr2> , ... , <exprN> ; Ejemplo: Escribir “Dame tu nombre”; Escribir “Esta es una impresión”; Esta instrucción imprime al ambiente (en este caso en la pantalla) los valores obtenidos de evaluar N expresiones. Dado que puede incluir una o más expresiones, mostrará uno o más valores. La figura A.3 ilustra el símbolo que puede ser utilizado para la salida de datos. Figura A.3 Símbolo Salida de datos 38 Estructuras condicionales Condicional Si-Entonces La secuencia de instrucciones ejecutadas por la instrucción Si-Entonces-Sino depende del valor de una condición lógica. Si <condición> Entonces <instrucciones> Sino <instrucciones> FinSi Al ejecutarse esta instrucción, se evalúa la condición y se ejecutan las instrucciones que correspondan: las instrucciones que le siguen al Entonces si la condición es verdadera, o las instrucciones que le siguen al Sino si la condición es falsa. La condición debe ser una expresión lógica, que al ser evaluada retorna Verdadero o Falso. La cláusula Entonces debe aparecer siempre, pero la cláusula Sino puede no estar. En ese caso, si la condición es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente. Ejemplo: Si a<b Entonces Escribir a, “es menor que ”, b; Sino Escribir a, “no es menor que “, b; FinSi La figura A.4 ilustra el símbolo que puede ser utilizado para definir una instrucción condicional del tipo si-entonces-sino. Figura A.4 Símbolo Condición si-entonces-sino 39 Selección Múltiple La secuencia de instrucciones ejecutada por una instrucción Segun depende del valor de una variable numérica. Segun <variable> Hacer <número1>: <instrucciones> <número2>,<número3>: <instrucciones> <...> De Otro Modo: <instrucciones> FinSegun Esta instrucción permite ejecutar opcionalmente varias acciones posibles, dependiendo del valor almacenado en una variable de tipo numérico. Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia de instrucciones asociada con dicho valor. Cada opción está formada por uno o más números separados por comas, dos puntos y una secuencia de instrucciones. Si una opción incluye varios números, la secuencia de instrucciones asociada se debe ejecutar cuando el valor de la variable es uno de esos números. Opcionalmente, se puede agregar una opción final, denominada De Otro Modo, cuya secuencia de instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las opciones anteriores. Ejemplo: Proceso DiasSemana Definir dia como entero; Escribe “Escribe el número que corresponde al día de la semana”; Leer dia; Según dia Hacer 1: Escribir “Lunes”; 2: Escribir “Martes”; 3: Escribir “Miércoles”; : 7: Escribir “Domingo”; De Otro Modo: Escribir “Dato erróneo”; FinSegun FinProceso 40 La figura A.5 ilustra el símbolo que puede ser utilizado para definir una instrucción de selección o condición múltiple. Figura A.5 Símbolo Selección (o condición) Múltiple Estructuras cíclicas Ciclo Mientras La instrucción Mientras ejecuta una secuencia de instrucciones mientras una condición sea verdadera. Mientras <condición> Hacer <instrucciones> FinMientras Al ejecutarse esta instrucción, la condición es evaluada. Si la condición resulta verdadera, se ejecuta una vez la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecución del cuerpo del ciclo se vuelve a evaluar la condición y, si es verdadera, la ejecución se repite. Estos pasos se repiten mientras la condición sea verdadera. Ejemplo: Proceso EjemploMientras Definir i como entero; i=1; Mientras i<=5 Hacer Escribir “El valor de i=”, i; I=i+1; FinMientras FinProceso 41 Algo importante mencionar es que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera vez la condición resulta ser falsa. Hay que tener cuidado con lo siguiente: si la condición siempre es verdadera, al ejecutar esta instrucción se produce un ciclo infinito. A fin de evitarlo, las instrucciones del cuerpo del ciclo deben contener alguna instrucción que modifique la o las variables involucradas en la condición, de modo que ésta sea falsificada en algún momento y así finalice la ejecución del ciclo. Ejemplo: La figura A.6 ilustra el símbolo que puede ser utilizado para definir una instrucción de tipo cíclica, para este caso del ciclo Mientras. Figura A.6 Símbolo Ciclo Mientras Ciclo Repetir La instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condición sea verdadera. Repetir <instrucciones> Hasta Que <condición> Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera. 42 Ejemplo: Proceso EjemploRepetir Definir i como entero; i=1; Repetir Escribir “El valor de i=”, i; I=i+1; Hasta Que i>5; FinProceso Cabe mencionar que dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez. Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo. La figura A.7 ilustra el símbolo que puede ser utilizado para definir una instrucción de tipo cíclica, para este caso del ciclo Repetir. Figura A.7 Símbolo Ciclo Repetir Ciclo Para La instrucción Para ejecuta una secuencia de instrucciones un número determinado de veces. Para <variable> = <inicial> Hasta <final> ( Con Paso <paso> ) Hacer <instrucciones> FinPara 43 Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de instrucciones que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso> unidades y se evalúa si el valor almacenado en <variable> superó al valor <final>. Si esto es falso se repite hasta que <variable> supere a <final>. Si se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en 1. Ejemplo: Proceso EjemploPara Definir i como entero; i=1; Para i=1 Hasta i=5 Hacer Escribir “El valor de i=”, i; FinPara FinProceso La figura A.7 ilustra el símbolo que puede ser utilizado para definir una instrucción de tipo cíclica, para este caso del ciclo Para. Figura A.8 Símbolo Ciclo Para 44