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