Introducción a los Computadores Algoritmos computacionales

Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Introducci´ on a los Computadores Algoritmos computacionales CNM-130 Departamento de Matem´ aticas Facultad de Ciencias Exactas y Naturales Universidad de Antioquia « Copyleft 2009. Reproducci´ on permitida bajo los t´ erminos de la licencia de documentaci´ on libre GNU. Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Contenido 1 Introducci´ on 2 Diagramas de flujo 3 Construcci´ on de diagramas de flujo 4 Pseudoc´ odigo 5 GNU Octave 6 Ejemplos Pseudoc´ odigo GNU Octave Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Etapas en la resoluci´on de un problema Definici´ on del problema: el enunciado completo del problema, ¿qu´e es lo que se pretende obtener? An´ alisis del problema: un conjunto de datos de entrada (la informaci´ on dada) un conjunto de datos de salida (lo que se desea obtener) Relaciones que vinculen los datos de entrada y salida Dise˜ no de la soluci´ on: se debe proponer o aplicar un modelo para lograr sistematizar la b´ usqueda de la soluci´ on. Codificaci´ on: en esta etapa se describen los pasos que se deben ejecutar para resolver el problema (algoritmo). Prueba: se verifica el funcionamiento de la soluci´ on propuesta y se detectan los errores que se presenten con la posterior correcci´ on de los mismos (depuraci´ on). Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Algoritmos Definici´ on 1.1 (Algoritmo) Un algoritmo es una secuencia finita de instrucciones, reglas o pasos que describen de modo preciso las operaciones que un computador debe realizar para ejecutar una tarea determinada en un tiempo finito. Cinco propiedades ampliamente aceptadas como requisitos para un algoritmo (Knuth): Finitud: Un algoritmo siempre debe terminar despu´ es de un n´ umero finito de pasos. Precisi´ on: cada paso de un algoritmo debe estar precisamente definido y sin ambiguedades. Entrada: un algoritmo tiene cero o m´ as entradas que le son dadas antes de que el algoritmo comience, o din´ amicamente mientras corre. Salida: un algoritmo tiene una o m´ as salidas. Eficacia: las operaciones a realizar en un algoritmo deben ser suficientemente b´ asicas como para que en principio puedan ser realizadas de manera exacta y en un tiempo finito por un hombre usando papel y l´ apiz. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Ejemplo Algoritmo para preparar “fr´ıjoles con chicharr´ on” para 8 raciones. Los datos de entrada (ingredientes) son: 2 libras de fr´ıjoles. 2 zanahorias peladas. 1 cucharada de aceite vegetal o de girasol. 2 cubos de caldo de carne. 1/4 de libra de tocino cortado en trocitos. 16 tazas de agua. 1 cucharada de sal. Algoritmo 1 Se lavan bien los fr´ ıjoles y se dejan remojando en el agua desde la noche anterior. 2 Al d´ ıa siguiente, se ponen en la olla a presi´ on con el agua en que se remojaron, el aceite, el tocino y la zanahoria. 3 Se cocinan sin sal hasta que est´ en blandos, aproximadamente por 1 hora. 4 Se lic´ ua una peque~ na cantidad de los fr´ ıjoles con la zanahoria, los cubos de caldo y la sal, y se agrega a los fr´ ıjoles. 5 Se cocinan media hora m´ as con la olla destapada hasta que espesen. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Otros ejemplos Muchos algoritmos no requieren de un computador para su ejecuci´ on: Cambiar la llanta de un carro Ir al banco a pagar una cuenta Ir a un restaurante a comer Determinar la cantidad de dinero que nos deben devolver al pagar el bus Comprar una libra de azucar En la pr´ actica, un algoritmo es s´ olo una parte de las etapas requeridas para resolver un problema: Dise˜ no del algoritmo. Implementaci´ on del algoritmo en un lenguaje de programaci´ on adecuado (codificaci´ on). Ejecuci´ on y validaci´ on del programa por el computador. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Dise˜ no de algoritmos Herramientas utilizadas para dise˜ nar algoritmos Diagramas de flujo: representaci´ on esquem´ atica de un algoritmo que muestra gr´ aficamente los pasos a seguir para alcanzar la soluci´ on de un problema. Pseudoc´ odigos: forma gen´ erica de escribir un algoritmo, por medio de un lenguaje simple sin necesidad de conocer la sint´ axis de un lenguaje de programaci´ on. El diagrama de flujo se compone de figuras que ilustran los pasos o procesos a seguir para alcanzar la soluci´ on del problema. Los s´ımbolos presentados permiten crear una estructura gr´ afica flexible que ilustra los pasos a seguir. Un diagrama de flujo permite con facilidad la posterior escritura de un programa en alg´ un lenguaje de programaci´ on. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Diagramas de flujo S´ımbolo utilizado para marcar el inicio y el fin del diagrama de flujo. S´ımbolo utilizado para ingresar los datos de entrada (expresa lectura). S´ımbolo utilizado para representar un proceso. En su interior se expresan asignaciones, operaciones aritm´eticas, cambios de valor de celdas en memoria, etc. S´ımbolos utilizados para indicar la direcci´ on del flujo del diagrama. S´ımbolo utilizado para representar la estructura selectiva si entonces; en su interior se almacena una condici´ on que determina el flujo del diagrama. S´ımbolo utilizado para representar la estructura selectiva si entonces/sino; en su interior se almacena una condici´ on que determina el flujo del diagrama. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Diagramas de flujo S´ımbolo utilizado para representar una decisi´ on m´ ultiple. En su inetrior se almacena un selector y dependiendo de su valor, se sigue por una de las ramas. S´ımbolo utilizado para representar la impresi´ on de un resultado (expresa escritura). S´ımbolo utilizado para expresar conexi´ on dentro de una misma p´ agina. S´ımbolo utilizado para expresar conexi´ on entre p´ aginas diferentes. S´ımbolo utilizado para expresar un m´ odulo de un problema: para continuar con el flujo normal del diagrama es necesario primero resolver el subproblema enunciado en su interior. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo Diagramas de flujo Esquema general de un diagrama de flujo GNU Octave Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Reglas para la construcci´ on de diagramas de flujo Todo diagrama de flujo debe tener un inicio y un fin. Las lineas utilizadas para indicar la direcci´ on del flujo del diagrama deben ser rectas verticales y horizontales y no se deben cruzar. Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Reglas para la construcci´ on de diagramas de flujo Todas las lineas utilizadas para indicar la direcci´ on del flujo del diagrama deben estar conectadas. El diagrama de flujo debe ser constuido de arriba hacia abajo (top-down) y de izquierda a derecha (left-right). La notaci´ on empleada en el diagrama de flujo debe ser independiente del lenguaje de programaci´ on. Si el diagrama de flujo requiere m´ as de una hoja para su construcci´ on, se debe utilizar conectores adecuados y enumerar las p´ aginas convenientemente. A un s´ımbolo del diagrama (excepto l´ıneas) no puede llegar m´ as de una l´ınea. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Construcci´on de diagramas de flujo Ejemplo 3.1 Construya un diagrama de flujo tal que dado los datos A, B, C y D que representan n´ umeros enteros, escriba los mismos en orden inverso. Soluci´ on Diagrama de flujo general Diagrama de flujo en DFD Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Ejemplo 3.2 Escriba (en papel) un diagrama de flujo que tenga como entradas los datos enteros A y B y escriba el resultado de la siguiente expresi´ on: (A + B)2 3 Implemente el diagrama tambi´en en DFD. Soluci´ on Consideraciones: Datos: A y B (variables de tipo entero). Para indicar un proceso utilizamos Para asignar un valor o una expresi´ on a una variable utilizamos variable ← expresi´ on o valor Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Explicaci´ on de las variables: A, B: variables de tipo entero. RES: variable de tipo real, almacena el resultado de la operaci´ on. # 1 2 3 4 5 A 5 7 0 12 14 B 6 10 3 2 -5 RES 40, 33 96,33 3,00 65,33 27,00 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Ejemplo 3.3 Un estudiante obtiene 5 calificaciones a lo largo del semestre. Escriba (en papel) un diagrama de flujo que imprima el promedio de sus calificaciones. Implem´entelo tambi´en en DFD. Soluci´ on Consideraciones: Datos: CAL1, CAL2, CAL3, CAL4, CAL5 variables de tipo real que representan las 5 calificaciones del alumno. El promedio de las calificaciones est´ a dado por CAL1+ CAL2+ CAL3+ CAL4 + CAL5 5 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Las observaciones anteriores nos conducen al siguiente diagrama de flujo. CAL1, CAL2, CAL3, CAL4, CAL5: Variables de tipo entero. PRO: Variable de tipo real, almacena el resultado de la operaci´ on. # 1 2 3 4 5 CAL1 8 9 9 8,5 7,3 CAL2 8,5 8 10 9 6,8 CAL3 9 9 10 7,5 9,5 CAL4 7 7 8 6 8 CAL5 6 9 9 6,5 8,5 PRO 7,7 8,4 9,2 7,5 8,02 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Ejemplo 3.4 Escriba (en papel) un diagrama de flujo que permita calcular e imprimir el cuadrado y el cubo de un entero positivo NUM e implem´entelo en DFD. Soluci´ on NUM: variable de tipo entero. CUA: variable de tipo real, almacena el cuadrado del n´ umero que se ingresa. CUB: variable de tipo real, almacena el cubo del n´ umero que se ingresa. # 1 2 3 4 5 NUM 7 15 8 12 30 CUA 49 225 64 144 900 CUB 343 3375 512 1728 27000 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Ejemplo 3.5 Escriba (en papel) un diagrama de flujo tal que dado como datos la base y la altura de un rect´ angulo, calcule su per´ımetro y ´ area. Realice el diagrama tambi´en en DFD. Soluci´ on Consideraciones: Datos: BASE, ALTURA Donde: BASE: variable de tipo real que representa la base del rect´ angulo. ALTURA: variable de tipo real que representa la altura del rect´ angulo. Recuerde que: El a ´rea de un rect´ angulo est´ a dada por a ´rea = base × altura El per´ımetro de un rect´ angulo est´ a dada por per´ımetro = 2 × (base + altura) Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Construcci´on de diagramas de flujo Las observaciones anteriores nos conducen al siguiente diagrama de flujo. BASE, ALTURA: variables de tipo real. AREA: variable de tipo real, almacena el ´ area del rect´ angulo. PERIMETRO: variable de tipo real, almacena el per´ımetro del rec´ angulo. # 1 2 3 4 5 BASE 8 9 9 8,5 7,3 ALTURA 8,5 8 10 9 6,8 AREA 9 9 10 7,5 9,5 PERIMETRO 7 7 8 6 8 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Terminolog´ıa b´asica Programa: conjunto de instrucciones que ejecuta un computador para alcanzar un resultado espec´ıfico (Von Neumann, 1946). Un programa se escribe en un lenguaje de programaci´ on a partir de un diagrama de flujo dise˜ nado con anterioridad. Los lenguajes de programaci´ on est´ an constituidos por un conjunto de 1 Reglas sint´ acticas: especif´ıcan la formaci´ on (sint´ axis) de instrucciones v´ alidas. 2 Reglas sem´ anticas: especifican el significado de las instrucciones v´ alidas. Pasos en la resoluci´ on de un problema: 1 Desarrollo de un algoritmo (soluci´ on general). 2 Construcci´ on de un diagrama de flujo. 3 Construcci´ on de un programa en un lenguaje de programaci´ on. Previo al paso (3), utilizaremos un “lenguaje” llamado pseudoc´ odigo: Es independiente de cualquier lenguaje de programaci´ on. Carece del rigor y formalismo expresados en las reglas (1) y (2). Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Instrucciones en pseudoc´odigo Lectura de datos: Leer A, VEL, C Proceso: Hacer TEMP ← TEMP + 1 Escritura: Escribir A, VEL Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Ejemplos Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.1) INVERTIR DATOS { Dado un conjunto de datos de entrada el programa invierte el orden de los mismos y los imprime } { A, B, C y D son variables de tipo entero } 1 Leer A, B, C, D 2 Escribir D, C, B, A Observaciones Todo programa tiene un nombre que lo define y que se elige teniendo en cuenta las reglas para la construcci´ on de identificadores. Entre llaves {· · · } van comentarios que indican la funci´ on del programa. Escribir un programa es sencillo cuando se conoce las instrucciones del pseudoc´ odigo. La “tarea intelectual” consiste en la construcci´ on del diagrama de flujo. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Ejemplos Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.2) CALCULA { Dado dos enteros A y B, el programa calcula el resultado de una expresi´ on } { A y B son variables de tipo entero, RES es una variable de tipo real } 1 Leer A, B 2 Hacer RES ← (A + B) ∧ 2/3 3 Escribir RES Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Ejemplos Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.3) PROMEDIO CALIFICACION { Dadas las calificaciones de un estudiante, calcula su promedio } { CAL1, CAL2, CAL3, CAL4, CAL5 y PRO son variables de tipo real} 1 Leer CAL1, CAL2, CAL3, CAL4, CAL5 2 Hacer PRO ← (CAL1 + CAL2 + CAL3 + CAL4 + CAL5)/5 3 Escribir PRO Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Ejemplos Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.4) CUADRADO CUBO { Dado un entero positivo, el programa calcula el cuadrado y el cubo de dicho n´ umero. } { NUM es una variable de tipo entero, CUA y CUB son variables de tipo real } 1 Leer NUM 2 Hacer CUA ← NUM*NUM 3 Hacer CUB ← NUM∧3 4 Escribir CUA y CUB Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Ejemplos Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.5) CUADRADO CUBO { Dados la base y la altura de un rect´ angulo, calcula su per´ımetro y su ´ area. } { BASE, ALTURA, AREA Y PERIMETRO son variables de tipo real } 1 Leer BASE, ALTURA 2 Hacer AREA ← BASE*ALTURA 3 Hacer PERIMETRO ← 2*(BASE+ALTURA) 4 Escribir AREA y PERIMETRO Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Aspectos b´asicos “Lenguaje” de alto nivel interpretado, orientado principalmente a computaci´ on cient´ıfica Pretende ser compatible con MATLAB Proporciona una l´ınea de comandos interactiva para resolver problemas matem´ aticos num´ericamente Incluye una colecci´ on de algoritmos y funciones matem´ aticas Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Aspectos b´asicos Ventajas Sencillo de utilizar Software libre: se distribuye bajo licencia GNU, GPL (General Public License) Sint´ axis muy similar a MATLAB C´ odigo abierto: amplia comunidad de soporte (foros, etc.) A diferencia de MATLAB. . . No soporta programaci´ on orientada a objetos Capacidad de gr´ aficos limitada (GUI’s) Pocos toolboxes disponibles No dispone de los millones de una compa˜ n´ıa como MathWorks, Inc. Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Aspectos b´asicos: iniciando GNU Octave: ~$ octave GNU Octave, version 3.0.1 Copyright (C) 2008 John W. Eaton and others. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type ‘warranty’. Octave was configured for "x86_64-pc-linux-gnu". Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit http://www.octave.org/help-wanted.html Report bugs to (but first, please read http://www.octave.org/bugs.html to learn how to write a helpful report). For information about changes from previous versions, type ‘news’. octave:1> Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Algunos operadores aritm´eticos Operador Operaci´ on Ejemplo Resultado ∧ ∗ / + − rem Potencia Multiplicaci´ on Divisi´ on Suma Resta M´ odulo (residuo) 2∧3 7∗3 10/4 3−4 7−4 rem(10, 3) 8 21 2.5000 −1 3 1 octave:#> 3+4 ans = 7 octave:#> 4+6/2+3 ans = 10 octave:#> 5/10*2+5 ans = 6 octave:#> (4+6)/(2+3) ans = 2 octave:#> 5/(10*2+5) ans = 0.20000 octave:#> 0∧0 ans = 1 octave:#> 2+4*3^2 ans = 38 octave:#> rem(17,3) ans = 2 Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Operadores relacionales (de comparaci´ on) Operador Operaci´ on Ejemplo Resultado == != < > = Igual Diferente de Menor que Mayor que Menor o igual que Mayor o igual que 4 == 5 2!=3 10 < 4 5>-4 7= 10 0 1 0 1 1 0 octave:#> 1+2>7-3 ans = 0 octave:#> 3>4 12==2 5/3>=11/7 ans = 1 octave:#> 1>2==(2 2∧(2/3) < 3∧(3/4) ans = 1 Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Operadores l´ogicos (booleanos) Operador Operaci´ on Ejemplo Resultado & | ! y o negaci´ on 2&3 3|5 !7 1 1 0 A B A&B A|B !A Operador Jerarqu´ ıa 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 0 0 () ∧ ∗, /, rem ==, ! =, , = ! & | (mayor)  (menor) octave:#> 0&1|1 ans = 1 octave:#> 5*4>4&0 1&(1|0) ans = 0 octave:#> 2∧(3&0/5)>rem(45,6) ans = 0 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Variables y formatos Variables: expresiones (identificadores) asociados a datos almacenados en un sistema de memoria Algunos tipos de datos: Real de doble precisi´ on: 8 bytes (15 cifras exactas) String: ’cadena de caracteres’ octave:#> base=3 base = 3 octave:#> cadena=’hola’; a=3; octave:#> alt=4 altura = 4 octave:#> cadena cadena = hola octave:#> area = base*alt area = 12 octave:#> a=2*a a = 6 octave:#> perim = 2*base+2*alt perim = 14 octave:#> area == 2*a ans = 1 Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Variables y formatos Tipo Formato short long short e long e short g long g punto punto punto punto punto punto π fijo, 5 d´ıgitos fijo, 15 d´ıgitos flotante, 5 d´ıgitos flotante, 15 d´ıgitos fijo o flotante, 5 d´ıgitos fijo o flotante, 15 d´ıgitos 3.1416 3.14159265358979 3.1416e+000 3.141592653589793e+000 3.1416 3.14159265358979 octave:#> b=1/3 b = 0.33333 octave:#> format long e octave:#> format long octave:#> c c = 1.23123123123123e-01 octave:#> b b = 0.333333333333333 octave:#> format octave:#> c = 41/333 c = 0.123123123123123 octave:#> c c = 0.12312 Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Variables predefinidas Variable Uso ans pi e i eps Inf NaN almacena el u ´ ltimo resultado almacena el valor de π = 3,1415 . . . almacena el valor de √ e = 2,7183 . . . almacena el valor de −1 epsilon de la m´ aquina infinito resultado no n´ umerico (Not a Number) octave:#> pi ans = 3.1416 octave:#> eps ans = 2.22044604925031e-16 octave:#> format long octave:#> 1/0 warning: division by zero ans = Inf octave:#> pi ans = 3.14159265358979 octave:#> e ans = 2.71828182845905 octave:#> 0/0 warning: division by zero ans = NaN Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Entorno de trabajo Variables utilizadas en una sesi´ on de trabajo (who, whos) Historial de o ´rdenes ejecutadas (↓, ↑) octave:#> who -v *** local user variables: __nargin__ c a cadena alt ans area b base ans area b base perim octave:#> clear cadena octave:#> who -v *** local user variables: __nargin__ c perim a alt Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Entorno de trabajo octave:#> who -v *** local user variables: __nargin__ a alt ans area b base c perim octave-3.0.1:32> whos -v *** local user variables: Prot ==== rwrwd rwd rwd rwd rwd rwd rwd rwd Name ==== __nargin__ a alt ans area b base c perim Size ==== 1x1 1x1 1x1 1x1 1x1 1x1 1x1 1x1 1x1 Total is 9 elements using 65 bytes Bytes ===== 8 8 8 1 8 8 8 8 8 Class ===== double double double logical double double double double double Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Funciones matem´aticas Funci´ on Uso sqrt(x) exp(x) log(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) calcula la ra´ız cuadrada de x funci´ on exponencial funci´ on logaritmo natural calcula sen(x) calcula cos(x) calcula tan(x) calcula sen−1 (x) calcula cos−1 (x) calcula tan−1 (x) octave:#> cos(pi) ans = -1 octave:#> cos(a)∧2+sen(a)∧2 ans = 1.0000 octave:#> exp(1) ans = 2.7183 octave:#> log(e) ans = 1 octave:#> 4*atan(1) ans = 3.1416 octave:#> 2*sin(3*pi/2) ans = -2 Ejemplos Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Instrucciones de entrada/salida Salida de datos: disp("texto") printf("cadena de formato", arg1, arg2,...) Entero Punto fijo Punto flotante Caracter Cadena de caracteres d, i f, g e c s octave:#> disp("¡hola, mundo!") ¡hola, mundo! octave:#> m=3; octave:#> disp(m) 3 octave:#> pulg=2.54; cent=6.4516; octave:#> printf(" %d pulgadas equivalen a %f cen´ ımetros \n", m, cent); 3 pulgadas equivalen a 6.451600 cent´ ımetros octave:#> printf(" %f pulgadas equivalen a %f cent´ ımetros \n", pulg, cent); 2.540000 pulgadas equivale a 6.451600 cent´ ımetros octave:#> printf(" %f pulgadas equivalen a %e cen´ ımetros \n", pulg, cent); 2.540000 pulgadas equivale a 6.451600e+00 cent´ ımetros Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos Instrucciones de entrada/salida Entrada de datos por teclado: input("texto") i

38 downloads 51 Views 1MB Size

Recommend Stories


Tema 2: Introducción a los algoritmos
Tema 2: Introducción a los algoritmos Objetivos: este tema pretende mostrar al alumno cómo, a partir de unas especificaciones de un problema del mund

Arquitectura de los Computadores
Instrucciones. Programas. Estructura Funcional de un Ordenador. Microprocesador. {CPU}

Conceptos básicos de los computadores
Conceptos básicos de los computadores Montse Peiron Guàrdia PID_00153517 © FUOC • PID_00153517 Índice Introducción ...............................

Story Transcript

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Introducci´ on a los Computadores Algoritmos computacionales CNM-130 Departamento de Matem´ aticas Facultad de Ciencias Exactas y Naturales Universidad de Antioquia

«

Copyleft 2009. Reproducci´ on permitida bajo los t´ erminos de la licencia de documentaci´ on libre GNU.

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Contenido

1

Introducci´ on

2

Diagramas de flujo

3

Construcci´ on de diagramas de flujo

4

Pseudoc´ odigo

5

GNU Octave

6

Ejemplos

Pseudoc´ odigo

GNU Octave

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Etapas en la resoluci´on de un problema Definici´ on del problema: el enunciado completo del problema, ¿qu´e es lo que se pretende obtener? An´ alisis del problema: un conjunto de datos de entrada (la informaci´ on dada) un conjunto de datos de salida (lo que se desea obtener) Relaciones que vinculen los datos de entrada y salida

Dise˜ no de la soluci´ on: se debe proponer o aplicar un modelo para lograr sistematizar la b´ usqueda de la soluci´ on. Codificaci´ on: en esta etapa se describen los pasos que se deben ejecutar para resolver el problema (algoritmo). Prueba: se verifica el funcionamiento de la soluci´ on propuesta y se detectan los errores que se presenten con la posterior correcci´ on de los mismos (depuraci´ on).

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Algoritmos Definici´ on 1.1 (Algoritmo) Un algoritmo es una secuencia finita de instrucciones, reglas o pasos que describen de modo preciso las operaciones que un computador debe realizar para ejecutar una tarea determinada en un tiempo finito. Cinco propiedades ampliamente aceptadas como requisitos para un algoritmo (Knuth): Finitud: Un algoritmo siempre debe terminar despu´ es de un n´ umero finito de pasos. Precisi´ on: cada paso de un algoritmo debe estar precisamente definido y sin ambiguedades. Entrada: un algoritmo tiene cero o m´ as entradas que le son dadas antes de que el algoritmo comience, o din´ amicamente mientras corre. Salida: un algoritmo tiene una o m´ as salidas. Eficacia: las operaciones a realizar en un algoritmo deben ser suficientemente b´ asicas como para que en principio puedan ser realizadas de manera exacta y en un tiempo finito por un hombre usando papel y l´ apiz.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo Algoritmo para preparar “fr´ıjoles con chicharr´ on” para 8 raciones. Los datos de entrada (ingredientes) son: 2 libras de fr´ıjoles.

2 zanahorias peladas.

1 cucharada de aceite vegetal o de girasol.

2 cubos de caldo de carne.

1/4 de libra de tocino cortado en trocitos.

16 tazas de agua.

1 cucharada de sal.

Algoritmo 1

Se lavan bien los fr´ ıjoles y se dejan remojando en el agua desde la noche anterior.

2

Al d´ ıa siguiente, se ponen en la olla a presi´ on con el agua en que se remojaron, el aceite, el tocino y la zanahoria.

3

Se cocinan sin sal hasta que est´ en blandos, aproximadamente por 1 hora.

4

Se lic´ ua una peque~ na cantidad de los fr´ ıjoles con la zanahoria, los cubos de caldo y la sal, y se agrega a los fr´ ıjoles.

5

Se cocinan media hora m´ as con la olla destapada hasta que espesen.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Otros ejemplos Muchos algoritmos no requieren de un computador para su ejecuci´ on: Cambiar la llanta de un carro Ir al banco a pagar una cuenta Ir a un restaurante a comer Determinar la cantidad de dinero que nos deben devolver al pagar el bus Comprar una libra de azucar

En la pr´ actica, un algoritmo es s´ olo una parte de las etapas requeridas para resolver un problema: Dise˜ no del algoritmo. Implementaci´ on del algoritmo en un lenguaje de programaci´ on adecuado (codificaci´ on). Ejecuci´ on y validaci´ on del programa por el computador.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Dise˜ no de algoritmos Herramientas utilizadas para dise˜ nar algoritmos Diagramas de flujo: representaci´ on esquem´ atica de un algoritmo que muestra gr´ aficamente los pasos a seguir para alcanzar la soluci´ on de un problema. Pseudoc´ odigos: forma gen´ erica de escribir un algoritmo, por medio de un lenguaje simple sin necesidad de conocer la sint´ axis de un lenguaje de programaci´ on.

El diagrama de flujo se compone de figuras que ilustran los pasos o procesos a seguir para alcanzar la soluci´ on del problema. Los s´ımbolos presentados permiten crear una estructura gr´ afica flexible que ilustra los pasos a seguir. Un diagrama de flujo permite con facilidad la posterior escritura de un programa en alg´ un lenguaje de programaci´ on.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Diagramas de flujo S´ımbolo utilizado para marcar el inicio y el fin del diagrama de flujo. S´ımbolo utilizado para ingresar los datos de entrada (expresa lectura). S´ımbolo utilizado para representar un proceso. En su interior se expresan asignaciones, operaciones aritm´eticas, cambios de valor de celdas en memoria, etc. S´ımbolos utilizados para indicar la direcci´ on del flujo del diagrama. S´ımbolo utilizado para representar la estructura selectiva si entonces; en su interior se almacena una condici´ on que determina el flujo del diagrama. S´ımbolo utilizado para representar la estructura selectiva si entonces/sino; en su interior se almacena una condici´ on que determina el flujo del diagrama.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Diagramas de flujo S´ımbolo utilizado para representar una decisi´ on m´ ultiple. En su inetrior se almacena un selector y dependiendo de su valor, se sigue por una de las ramas. S´ımbolo utilizado para representar la impresi´ on de un resultado (expresa escritura). S´ımbolo utilizado para expresar conexi´ on dentro de una misma p´ agina.

S´ımbolo utilizado para expresar conexi´ on entre p´ aginas diferentes.

S´ımbolo utilizado para expresar un m´ odulo de un problema: para continuar con el flujo normal del diagrama es necesario primero resolver el subproblema enunciado en su interior.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

Diagramas de flujo

Esquema general de un diagrama de flujo

GNU Octave

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Reglas para la construcci´ on de diagramas de flujo Todo diagrama de flujo debe tener un inicio y un fin.

Las lineas utilizadas para indicar la direcci´ on del flujo del diagrama deben ser rectas verticales y horizontales y no se deben cruzar.

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Reglas para la construcci´ on de diagramas de flujo Todas las lineas utilizadas para indicar la direcci´ on del flujo del diagrama deben estar conectadas. El diagrama de flujo debe ser constuido de arriba hacia abajo (top-down) y de izquierda a derecha (left-right). La notaci´ on empleada en el diagrama de flujo debe ser independiente del lenguaje de programaci´ on. Si el diagrama de flujo requiere m´ as de una hoja para su construcci´ on, se debe utilizar conectores adecuados y enumerar las p´ aginas convenientemente. A un s´ımbolo del diagrama (excepto l´ıneas) no puede llegar m´ as de una l´ınea.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Construcci´on de diagramas de flujo Ejemplo 3.1 Construya un diagrama de flujo tal que dado los datos A, B, C y D que representan n´ umeros enteros, escriba los mismos en orden inverso. Soluci´ on

Diagrama de flujo general

Diagrama de flujo en DFD

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo Ejemplo 3.2 Escriba (en papel) un diagrama de flujo que tenga como entradas los datos enteros A y B y escriba el resultado de la siguiente expresi´ on: (A + B)2 3 Implemente el diagrama tambi´en en DFD. Soluci´ on Consideraciones: Datos: A y B (variables de tipo entero). Para indicar un proceso utilizamos

Para asignar un valor o una expresi´ on a una variable utilizamos variable ← expresi´ on o valor

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo

Explicaci´ on de las variables: A, B: variables de tipo entero. RES: variable de tipo real, almacena el resultado de la operaci´ on. # 1 2 3 4 5

A 5 7 0 12 14

B 6 10 3 2 -5

RES 40, 33 96,33 3,00 65,33 27,00

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo Ejemplo 3.3 Un estudiante obtiene 5 calificaciones a lo largo del semestre. Escriba (en papel) un diagrama de flujo que imprima el promedio de sus calificaciones. Implem´entelo tambi´en en DFD.

Soluci´ on Consideraciones: Datos: CAL1, CAL2, CAL3, CAL4, CAL5 variables de tipo real que representan las 5 calificaciones del alumno. El promedio de las calificaciones est´ a dado por CAL1+ CAL2+ CAL3+ CAL4 + CAL5 5

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo Las observaciones anteriores nos conducen al siguiente diagrama de flujo. CAL1, CAL2, CAL3, CAL4, CAL5: Variables de tipo entero. PRO: Variable de tipo real, almacena el resultado de la operaci´ on.

# 1 2 3 4 5

CAL1 8 9 9 8,5 7,3

CAL2 8,5 8 10 9 6,8

CAL3 9 9 10 7,5 9,5

CAL4 7 7 8 6 8

CAL5 6 9 9 6,5 8,5

PRO 7,7 8,4 9,2 7,5 8,02

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo Ejemplo 3.4 Escriba (en papel) un diagrama de flujo que permita calcular e imprimir el cuadrado y el cubo de un entero positivo NUM e implem´entelo en DFD. Soluci´ on NUM: variable de tipo entero. CUA: variable de tipo real, almacena el cuadrado del n´ umero que se ingresa. CUB: variable de tipo real, almacena el cubo del n´ umero que se ingresa. # 1 2 3 4 5

NUM 7 15 8 12 30

CUA 49 225 64 144 900

CUB 343 3375 512 1728 27000

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo Ejemplo 3.5 Escriba (en papel) un diagrama de flujo tal que dado como datos la base y la altura de un rect´ angulo, calcule su per´ımetro y ´ area. Realice el diagrama tambi´en en DFD. Soluci´ on Consideraciones: Datos: BASE, ALTURA Donde: BASE: variable de tipo real que representa la base del rect´ angulo. ALTURA: variable de tipo real que representa la altura del rect´ angulo.

Recuerde que: El a ´rea de un rect´ angulo est´ a dada por a ´rea = base × altura El per´ımetro de un rect´ angulo est´ a dada por per´ımetro = 2 × (base + altura)

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Construcci´on de diagramas de flujo Las observaciones anteriores nos conducen al siguiente diagrama de flujo. BASE, ALTURA: variables de tipo real. AREA: variable de tipo real, almacena el ´ area del rect´ angulo. PERIMETRO: variable de tipo real, almacena el per´ımetro del rec´ angulo.

# 1 2 3 4 5

BASE 8 9 9 8,5 7,3

ALTURA 8,5 8 10 9 6,8

AREA 9 9 10 7,5 9,5

PERIMETRO 7 7 8 6 8

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Terminolog´ıa b´asica Programa: conjunto de instrucciones que ejecuta un computador para alcanzar un resultado espec´ıfico (Von Neumann, 1946). Un programa se escribe en un lenguaje de programaci´ on a partir de un diagrama de flujo dise˜ nado con anterioridad. Los lenguajes de programaci´ on est´ an constituidos por un conjunto de 1

Reglas sint´ acticas: especif´ıcan la formaci´ on (sint´ axis) de instrucciones v´ alidas.

2

Reglas sem´ anticas: especifican el significado de las instrucciones v´ alidas.

Pasos en la resoluci´ on de un problema: 1

Desarrollo de un algoritmo (soluci´ on general).

2

Construcci´ on de un diagrama de flujo.

3

Construcci´ on de un programa en un lenguaje de programaci´ on.

Previo al paso (3), utilizaremos un “lenguaje” llamado pseudoc´ odigo: Es independiente de cualquier lenguaje de programaci´ on. Carece del rigor y formalismo expresados en las reglas (1) y (2).

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Instrucciones en pseudoc´odigo

Lectura de datos: Leer A, VEL, C

Proceso: Hacer TEMP ← TEMP + 1

Escritura: Escribir A, VEL

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplos Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.1)

INVERTIR DATOS { Dado un conjunto de datos de entrada el programa invierte el orden de los mismos y los imprime } { A, B, C y D son variables de tipo entero } 1

Leer A, B, C, D

2

Escribir D, C, B, A

Observaciones Todo programa tiene un nombre que lo define y que se elige teniendo en cuenta las reglas para la construcci´ on de identificadores. Entre llaves {· · · } van comentarios que indican la funci´ on del programa. Escribir un programa es sencillo cuando se conoce las instrucciones del pseudoc´ odigo. La “tarea intelectual” consiste en la construcci´ on del diagrama de flujo.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplos

Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.2)

CALCULA { Dado dos enteros A y B, el programa calcula el resultado de una expresi´ on } { A y B son variables de tipo entero, RES es una variable de tipo real } 1

Leer A, B

2

Hacer RES ← (A + B) ∧ 2/3

3

Escribir RES

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplos

Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.3)

PROMEDIO CALIFICACION { Dadas las calificaciones de un estudiante, calcula su promedio } { CAL1, CAL2, CAL3, CAL4, CAL5 y PRO son variables de tipo real} 1

Leer CAL1, CAL2, CAL3, CAL4, CAL5

2

Hacer PRO ← (CAL1 + CAL2 + CAL3 + CAL4 + CAL5)/5

3

Escribir PRO

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplos

Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.4)

CUADRADO CUBO { Dado un entero positivo, el programa calcula el cuadrado y el cubo de dicho n´ umero. } { NUM es una variable de tipo entero, CUA y CUB son variables de tipo real } 1

Leer NUM

2

Hacer CUA ← NUM*NUM

3

Hacer CUB ← NUM∧3

4

Escribir CUA y CUB

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplos

Programa en pseudoc´ odigo para el diagrama de flujo del ejemplo (3.5)

CUADRADO CUBO { Dados la base y la altura de un rect´ angulo, calcula su per´ımetro y su ´ area. } { BASE, ALTURA, AREA Y PERIMETRO son variables de tipo real } 1

Leer BASE, ALTURA

2

Hacer AREA ← BASE*ALTURA

3

Hacer PERIMETRO ← 2*(BASE+ALTURA)

4

Escribir AREA y PERIMETRO

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Aspectos b´asicos

“Lenguaje” de alto nivel interpretado, orientado principalmente a computaci´ on cient´ıfica Pretende ser compatible con MATLAB Proporciona una l´ınea de comandos interactiva para resolver problemas matem´ aticos num´ericamente Incluye una colecci´ on de algoritmos y funciones matem´ aticas

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Aspectos b´asicos Ventajas Sencillo de utilizar Software libre: se distribuye bajo licencia GNU, GPL (General Public License) Sint´ axis muy similar a MATLAB C´ odigo abierto: amplia comunidad de soporte (foros, etc.)

A diferencia de MATLAB. . . No soporta programaci´ on orientada a objetos Capacidad de gr´ aficos limitada (GUI’s) Pocos toolboxes disponibles No dispone de los millones de una compa˜ n´ıa como MathWorks, Inc.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Aspectos b´asicos: iniciando GNU Octave:

~$ octave

GNU Octave, version 3.0.1 Copyright (C) 2008 John W. Eaton and others. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type ‘warranty’. Octave was configured for "x86_64-pc-linux-gnu". Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit http://www.octave.org/help-wanted.html Report bugs to (but first, please read http://www.octave.org/bugs.html to learn how to write a helpful report). For information about changes from previous versions, type ‘news’. octave:1>

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Algunos operadores aritm´eticos Operador

Operaci´ on

Ejemplo

Resultado

∧ ∗ / + − rem

Potencia Multiplicaci´ on Divisi´ on Suma Resta M´ odulo (residuo)

2∧3 7∗3 10/4 3−4 7−4 rem(10, 3)

8 21 2.5000 −1 3 1

octave:#> 3+4 ans = 7

octave:#> 4+6/2+3 ans = 10

octave:#> 5/10*2+5 ans = 6

octave:#> (4+6)/(2+3) ans = 2

octave:#> 5/(10*2+5) ans = 0.20000

octave:#> 0∧0 ans = 1

octave:#> 2+4*3^2 ans = 38

octave:#> rem(17,3) ans = 2

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Operadores relacionales (de comparaci´ on) Operador

Operaci´ on

Ejemplo

Resultado

== != < > =

Igual Diferente de Menor que Mayor que Menor o igual que Mayor o igual que

4 == 5 2!=3 10 < 4 5>-4 7= 10

0 1 0 1 1 0

octave:#> 1+2>7-3 ans = 0

octave:#> 3>4 12==2 5/3>=11/7 ans = 1

octave:#> 1>2==(2 2∧(2/3) < 3∧(3/4) ans = 1

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Operadores l´ogicos (booleanos) Operador

Operaci´ on

Ejemplo

Resultado

& | !

y o negaci´ on

2&3 3|5 !7

1 1 0

A

B

A&B

A|B

!A

Operador

Jerarqu´ ıa

0 0 1 1

0 1 0 1

0 0 0 1

0 1 1 1

1 1 0 0

() ∧ ∗, /, rem ==, ! =, , = ! & |

(mayor)

 (menor)

octave:#> 0&1|1 ans = 1

octave:#> 5*4>4&0 1&(1|0) ans = 0

octave:#> 2∧(3&0/5)>rem(45,6) ans = 0

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Variables y formatos Variables: expresiones (identificadores) asociados a datos almacenados en un sistema de memoria Algunos tipos de datos: Real de doble precisi´ on: 8 bytes (15 cifras exactas) String: ’cadena de caracteres’

octave:#> base=3 base = 3

octave:#> cadena=’hola’; a=3;

octave:#> alt=4 altura = 4

octave:#> cadena cadena = hola

octave:#> area = base*alt area = 12

octave:#> a=2*a a = 6

octave:#> perim = 2*base+2*alt perim = 14

octave:#> area == 2*a ans = 1

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Variables y formatos Tipo

Formato

short long short e long e short g long g

punto punto punto punto punto punto

π

fijo, 5 d´ıgitos fijo, 15 d´ıgitos flotante, 5 d´ıgitos flotante, 15 d´ıgitos fijo o flotante, 5 d´ıgitos fijo o flotante, 15 d´ıgitos

3.1416 3.14159265358979 3.1416e+000 3.141592653589793e+000 3.1416 3.14159265358979

octave:#> b=1/3 b = 0.33333

octave:#> format long e

octave:#> format long

octave:#> c c = 1.23123123123123e-01

octave:#> b b = 0.333333333333333

octave:#> format

octave:#> c = 41/333 c = 0.123123123123123

octave:#> c c = 0.12312

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Variables predefinidas Variable

Uso

ans pi e i eps Inf NaN

almacena el u ´ ltimo resultado almacena el valor de π = 3,1415 . . . almacena el valor de √ e = 2,7183 . . . almacena el valor de −1 epsilon de la m´ aquina infinito resultado no n´ umerico (Not a Number)

octave:#> pi ans = 3.1416

octave:#> eps ans = 2.22044604925031e-16

octave:#> format long octave:#> 1/0 warning: division by zero ans = Inf octave:#> pi ans = 3.14159265358979

octave:#> e ans = 2.71828182845905

octave:#> 0/0 warning: division by zero ans = NaN

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Entorno de trabajo Variables utilizadas en una sesi´ on de trabajo (who, whos) Historial de o ´rdenes ejecutadas (↓, ↑) octave:#> who -v *** local user variables: __nargin__ c

a

cadena

alt

ans

area

b

base

ans

area

b

base

perim

octave:#> clear cadena

octave:#> who -v *** local user variables: __nargin__ c

perim

a

alt

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Entorno de trabajo octave:#> who -v *** local user variables: __nargin__ a

alt ans

area b

base c

perim

octave-3.0.1:32> whos -v *** local user variables: Prot ==== rwrwd rwd rwd rwd rwd rwd rwd rwd

Name ==== __nargin__ a alt ans area b base c perim

Size ==== 1x1 1x1 1x1 1x1 1x1 1x1 1x1 1x1 1x1

Total is 9 elements using 65 bytes

Bytes ===== 8 8 8 1 8 8 8 8 8

Class ===== double double double logical double double double double double

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Funciones matem´aticas Funci´ on

Uso

sqrt(x) exp(x) log(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x)

calcula la ra´ız cuadrada de x funci´ on exponencial funci´ on logaritmo natural calcula sen(x) calcula cos(x) calcula tan(x) calcula sen−1 (x) calcula cos−1 (x) calcula tan−1 (x)

octave:#> cos(pi) ans = -1

octave:#> cos(a)∧2+sen(a)∧2 ans = 1.0000

octave:#> exp(1) ans = 2.7183

octave:#> log(e) ans = 1

octave:#> 4*atan(1) ans = 3.1416

octave:#> 2*sin(3*pi/2) ans = -2

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Instrucciones de entrada/salida Salida de datos: disp("texto") printf("cadena de formato", arg1, arg2,...)

Entero Punto fijo Punto flotante Caracter Cadena de caracteres

d, i f, g e c s

octave:#> disp("¡hola, mundo!") ¡hola, mundo! octave:#> m=3; octave:#> disp(m) 3 octave:#> pulg=2.54; cent=6.4516; octave:#> printf(" %d pulgadas equivalen a %f cen´ ımetros \n", m, cent); 3 pulgadas equivalen a 6.451600 cent´ ımetros octave:#> printf(" %f pulgadas equivalen a %f cent´ ımetros \n", pulg, cent); 2.540000 pulgadas equivale a 6.451600 cent´ ımetros octave:#> printf(" %f pulgadas equivalen a %e cen´ ımetros \n", pulg, cent); 2.540000 pulgadas equivale a 6.451600e+00 cent´ ımetros

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Instrucciones de entrada/salida Entrada de datos por teclado: input("texto") input("texto", "s") octave:#> palabra = input("Ingrese una palabra: ","s"); Ingrese una palabra: casa

octave:#> palabra palabra = casa

octave:#> letras = input("Ingrese el n´ umero de letras: "); Ingrese el n´ umero de letras: 4

octave:#> letras letras = 4

octave:#> printf("La palabra %s tiene %d letras \n", palabra, letras); La palabra casa tiene 4 letras

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Scripts Archivos de texto plano sin formato, con extensi´ on .m, que contienen una sucesi´ on de comandos de Octave Se editan con cualquier editor de texto (usaremos geany)

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos de scripts

hola mundo.m

% Progarma Hola mundo en Octave, versi´ on "emo" printf("¡Hola, maldito mundo!\n");

promedio.m

% Calcula el promedio de dos n´ umeros reales % Lee los valores de num1 y num2 num1 = input("Ingrese el primer n´ umero: "); num2 = input("Ingrese el segundo n´ umero: "); % Calcula el promedio y lo almacena en la variable prom prom = (num1+num2)/2; % Imprime los n´ umeros ingresados y su promedio printf("El promedio de %g y %g es: %g \n", num1, num2, prom);

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos de scripts

pmol.m

% Este programa calcula el peso molecular de una molecula % organica. % Calculo de los g/mol de cada elemento. peso C = 12*9 ; peso H = 1*6 ; peso O = 16*4; % Calculo del peso molecular peso molecular = peso C + peso H + peso O % Calculo del porcentaje de oxigeno porcentaje O = peso O/peso molecular*100

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos de scripts Ejemplo 5.1 Escriba un programa (script) en Octave que tenga como entradas los datos enteros A y B y escriba el resultado de la siguiente expresi´ on: (A + B)2 3 Soluci´ on

operacion.m

% Dados dos enteros A y B, calcula % (A+B)∧2/3 % Lee los valores de A y B A = input("Ingrese A: "); B = input("Ingrese B: "); RES = (A+B)∧2/3; % Imprime contenido de la variable RES disp(RES);

Ejemplos

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplos de scripts ´ Ejemplo 5.2 (Area y per´ımetro de un rect´ angulo) Escriba un programa (script) en Octave tal que dado como datos la base y la altura de un rect´ angulo, calcule su per´ımetro y a ´rea. Soluci´ on

rectangulo.m % Dados la base y la altura de un rect´ angulo, el programa % calcula su ´ area y su per´ ımetro % Lee los valores de la base y la altura BASE = input("Ingrese la base: "); ALTURA = input("Ingrese la altura: "); AREA = BASE*ALTURA; PERIMETRO = 2*(BASE+ALTURA); printf("El ´ area es %f y el per´ ımetro es %f \n", AREA, PERIMETRO);

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Funciones Son scripts que tienen una sintaxis predefinida

Sintaxis de una funci´ on

Programas que resultan complejos por medio de scripts, se simplifican por medio de funciones

function nombre(argumentos)

Una vez definidas, las funciones se invocan desde la l´ınea de comandos o desde un script

end

cuadrado.m

sentencias

octave:#> cuadrado(3) ans = 9

function y = cuadrado(x) % Calcula el cuadrado de % un n´ umero

octave:#> cuadrado(-2.5678) ans = 6.5936

y = x*x; end

octave:#> cuadrado(t) error: ‘t’ undefined near line 2 column 10 error: evaluating argument list element number 1 octave:#> help cuadrado calcula el cuadrado de un n´ umero real

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo de funci´on ´ Ejemplo 5.3 (Area y per´ımetro de un rect´ angulo con funciones) Resuelva el ejemplo (5.2) del rect´ angulo utilizando funciones. Soluci´ on area.m

function z = area(x,y) % Calcula el ´ area de un % cuadrado de lados x e y z = x*y; end

rectangulo2.m % Dados la base y la altura de un rect´ angulo, el programa % calcula su ´ area y su per´ ımetro % Lee los valores de la base y la altura BASE = input("Ingrese la base: "); ALTURA = input("Ingrese la altura: "); AREA = area(BASE,ALTURA); PERIMETRO = perimetro(BASE,ALTURA); printf("El ´ area es %f y el per´ ımetro es %f \n", AREA, PERIMETRO);

perimetro.m

function z = perimetro(x,y) % Calcula el per´ ımetro de un % cuadrado de lados x e y z = 2*(x+y); end

octave:#> rectangulo2 Ingrese la base: 2 Ingrese la altura: 3 El ´ area es 6.000000 y el per´ ımetro es 10.000000

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.1 Ejemplo 6.1 Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) tal que dado el costo de un art´ıculo vendido y la cantidad de dinero entregada por el cliente, calcule e imprima el cambio que se debe entregar al mismo. Implem´entelo en DFD. Soluci´ on Datos: PRECIO: variable de tipo real que representa el precio del producto. PAGO: variable de tipo real que representa el pago a realizar por el cliente. Variables de salida: DEVO: variable de tipo real. Almacen el cambio que se le debe entregar al cliente. Nota: asumimos que el pago del cliente es mayor que el precio del producto.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.1

DEVUELTO { Dado el costo de un producto y la cantidad de dinero entregada por el cliente, calcula el vuelto que hay que entregar al cliente. } { PRECIO, PAGO Y DEVO son variables de tipo real. }

# 1 2 3 4

1

Leer PRECIO, PAGO

2

Hacer DEVO ← PAGO − PRECIO

3

Escribir DEVO

PRECIO 34 124.7 24.53 12

PAGO 60 213 100 21

DEVO 26 88,13 75,47 9

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.2 Ejemplo 6.2 Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que reciba como datos el nombre de un dinosaurio, su peso (en toneladas) y su altura (en pies), y que escriba el nombre del dinosaurio, su peso en kilogramos y su altura en metros. Implem´entelo en DFD. Soluci´ on Datos: NOM: variable de tipo cadena de caracteres que indica el nombre del dinosaurio. PES: variable de tipo real que representa el peso del dinosaurio. ALT: variable de tipo real que representa la altura del dinosaurio. Variables de salida: PESKG: variable de tipo real, almacena el peso del dinosaurio en Kg. ALTMT: variable de tipo real, almacena el peso del dinosaurio en mt. Consideraciones: 1 tonelada equivale a 1000 kilogramos. 1 pie equivale a 0.3047 metros.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.2 DINOSAURIO { Dado el nombre de un dinosaurio, su peso en toneladas y su altura en pies, el programa escribe el nombre del dinosaurio, su peso en kilogramos y su altura en metros. } { NOM es una variable de tipo cadena de caracteres. PES, ALT, PESKG, y ALTMT son variables de tipo real. }

# 1 2 3 4

NOM tiranosaurio poderosaurio perderosaurio brontosaurio

1

Leer NOM, PES, ALT

2

Hacer PESOKG ← PESO∗1000

3

Hacer ALTMT ← ALT∗0,3047

4

Escribir NOM, PESOKG, ALTMT

PES 5 15 50 25

ALT 30 90 80 70

PESKG 5000 15000 50000 25000

ALTMT 9,15 27,42 24,37 21,32

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.3 Ejemplo 6.3 En una gasolinera las m´ aquinas registran el combustible surtido en galones pero el precio de la gasolina est´ a fijado en litros. Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que calcule e imprima el valor que hay que cobrarle al cliente e implem´entelo en DFD. Soluci´ on Datos: GAL: variable de tipo real que representa los galones de gasolina surtidos al cliente. Variables de salida: TOTAL: variable de tipo real, almacena el total que debe pagar el cliente. Consideraciones: 1 gal´ on equivale a 3.785 litros. 1 litro de gasolina cuesta $1480.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.3

GASOLINA { Dado los galones de gasolina surtidos a un cliente, calcula el precio que debe pagar el cliente. } { GAL y TOTAL son variableS de tipo real. }

# 1 2 3 4

1

Leer GAL

2

Hacer TOTAL ← GAL∗3,785 ∗ 1480

3

Escribir TOTAL

GAL 10,38 15,90 8,40 9,66

TOTAL 58146,684 89068,62 47055,12 54113,388

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.4 Ejemplo 6.4 Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que reciba como datos el radio y la altura de un cilindro y calcule e imprima su ´ area y volumen. Implem´entelo en DFD. Soluci´ on Datos: RADIO: variable de tipo real que representa el radio del cilindro. ALT: variable de tipo real que representa la altura del cilindro. Variables de salida: VOL: variable de tipo real, almacena el volumen del cilindro. AREA: variable de tipo real, almacena el a ´rea del cilindro. Consideraciones: El volumen y el a ´rea de un cilindro est´ an dados respectivamente por volumen = πr2 × h

y

area = 2πr × h

donde r es el radio de la base, h es su altura y π = 3,141592 . . .

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.4

CILINDRO { Dado el radio y la altura de un cilindro, calcula su ´ area y su volumen.} { RADIO, ALT, VOL y AREA son variables de tipo real. }

# 1 2 3 4

RADIO 45,22 17,30 69,30 125,30

1

Leer RADIO, ALT

2

Hacer VOL ← 3.141592 ∗ RADIO∧2 ∗ ALT

3

Hacer AREA ← 2 ∗ 3,141592∗ RADIO ∗ ALT

4

Escribir VOL, AREA

ALT 11,60 8,45 72,40 117,40

VOL 74519,33 7945,09 1092332,40 5790552,70

AREA 3295,86 918,51 31524,75 92427,01

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.5

Ejemplo 6.5 Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que calcule e imprima el n´ umero de segundos que hay en un determinado n´ umero de d´ıas. Implem´entelo en DFD.

Soluci´ on Datos: DIAS: variable de tipo entero que representa el n´ umero de d´ıas. Variables de salida: SEG: variable de tipo real. Almacena la cantidad de segundos que hay en un n´ umero determinado de d´ıas.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.5

SEGUNDOS EN DIAS { Dado un n´ umero determinado de d´ıas, calcula cu´ antos segundos tienen ´ estos. } { DIAS es una variable de tipo entero y SEG es una variable de tipo real. }

# 1 2 3 4

1

Leer DIAS

2

Hacer SEG ← DIAS∗24 ∗ 60 ∗ 60

3

Escribir DIAS

DIAS 1 7 15 30

SEG 86400 604800 1296000 2592000

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.6 Ejemplo 6.6 Se desea conocer cu´ antos meses han transcurrido entre enero de 1949 y enero de 2002. Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que resuelva dicho problema e implem´entelo en DFD. Soluci´ on Variables: ATRANS: variable de tipo entero; almacena el n´ umero de meses que hay entre 1949 y 2002. MESES { Determina el n´ umero de meses que hay entre 1949 y 2002. } 1

Hacer ATRANS ← (2002 − 1949) ∗ 12

2

Escribir ATRANS

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.7 Ejemplo 6.7 (Generalizaci´ on del ejemplo 6.6) Se desea determinar los meses transcurridos entre los inicios de dos a˜ nos cualesquiera. Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que resuelva dicho problema e implem´entelo en DFD. Soluci´ on Datos: AINICIAL: variable de tipo entero, representa el a˜ no inicial. AFINAL: variable de tipo entero, representa el a˜ no final. ATRANS: variable de tipo entero; almacena el n´ umero de a˜ nos que hay entre el a˜ no inicial y el a˜ no final. Variables de salida: MTRANS: variable de tipo entero; almacena el n´ umero de meses transcurridos entre el a˜ no inicial y el a˜ no final.

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Ejemplos

Ejemplo 6.7

MESES GENERAL { Dado un n´ umero determinado de d´ıas, calcula cu´ antos segundos tienen ´ estos. } { DIAS es una variable de tipo entero y SEG es una variable de tipo real. }

# 1 2 3 4

1

Leer AINICIAL, AFINAL

2

Hacer ATRANS ← AFINAL−AINICIAL

3

Hacer MTRANS ← 12∗MTRANS

4

Escribir ATRANS

ANICIAL 1982 1969 1883 1944

AFINAL 2008 1987 1972 1949

MTRANS 312 216 1068 60

Introducci´ on Diagramas de flujo Dise˜ no de diagramas

Pseudoc´ odigo

GNU Octave

Referencias

O. Cair´ o Metodolog´ıa de la programaci´ on Segunda edici´ on. Alfaomega Grupo Editor, S.A., 2005

J.W. Eaton GNU Octave: A high-level interactive language for numerical computations Network Theory Ltd., 2002

Ejemplos

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.