1. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Introducci´n a los Computadores
o
Algoritmos computacionales
CNM-130
Departamento de Matem´ticas
a
Facultad de Ciencias Exactas y Naturales
Universidad de Antioquia
Copyleft « 2009. Reproducci´n permitida bajo los
o
t´rminos de la licencia de documentaci´n libre GNU.
e o
2. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Contenido
1 Introducci´n
o
2 Diagramas de flujo
3 Construcci´n de diagramas de flujo
o
4 Pseudoc´digo
o
5 GNU Octave
6 Ejemplos
3. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Etapas en la resoluci´n de un problema
o
Definici´n del problema: el enunciado completo del problema,
o
¿qu´ es lo que se pretende obtener?
e
An´lisis del problema:
a
un conjunto de datos de entrada (la informaci´n dada)
o
un conjunto de datos de salida (lo que se desea obtener)
Relaciones que vinculen los datos de entrada y salida
Dise˜ o de la soluci´n: se debe proponer o aplicar un modelo para
n o
lograr sistematizar la b´squeda de la soluci´n.
u o
Codificaci´n: en esta etapa se describen los pasos que se deben
o
ejecutar para resolver el problema (algoritmo).
Prueba: se verifica el funcionamiento de la soluci´n propuesta y se
o
detectan los errores que se presenten con la posterior correcci´n de los
o
mismos (depuraci´n).
o
4. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Algoritmos
Definici´n 1.1 (Algoritmo)
o
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´s de un n´ mero
e u
finito de pasos.
Precisi´n: cada paso de un algoritmo debe estar precisamente definido
o
y sin ambiguedades.
Entrada: un algoritmo tiene cero o m´s entradas que le son dadas antes
a
de que el algoritmo comience, o din´micamente mientras corre.
a
Salida: un algoritmo tiene una o m´s salidas.
a
Eficacia: las operaciones a realizar en un algoritmo deben ser
suficientemente b´sicas como para que en principio puedan ser
a
realizadas de manera exacta y en un tiempo finito por un hombre
usando papel y l´piz.
a
5. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo
Algoritmo para preparar “fr´ıjoles con chicharr´n” para 8 raciones. Los
o
datos de entrada (ingredientes) son:
2 libras de fr´
ıjoles. 2 zanahorias peladas.
1 cucharada de aceite vegetal o 2 cubos de caldo de carne.
de girasol. 1 cucharada de sal.
1/4 de libra de tocino cortado 16 tazas de agua.
en trocitos.
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´n con el agua en
ı o
que se remojaron, el aceite, el tocino y la zanahoria.
3 Se cocinan sin sal hasta que est´n blandos, aproximadamente por
e
1 hora.
4 Se lic´a una peque~a cantidad de los fr´joles con la zanahoria,
u n ı
los cubos de caldo y la sal, y se agrega a los fr´joles.
ı
5 Se cocinan media hora m´s con la olla destapada hasta que
a
espesen.
6. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Otros ejemplos
Muchos algoritmos no requieren de un computador para su ejecuci´n:
o
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´ctica, un algoritmo es s´lo una parte de las etapas requeridas
a o
para resolver un problema:
Dise˜o del algoritmo.
n
Implementaci´n del algoritmo en un lenguaje de programaci´n adecuado
o o
(codificaci´n).
o
Ejecuci´n y validaci´n del programa por el computador.
o o
7. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Dise˜o de algoritmos
n
Herramientas utilizadas para dise˜ar algoritmos
n
Diagramas de flujo: representaci´n esquem´tica de un algoritmo que
o a
muestra gr´ficamente los pasos a seguir para alcanzar la soluci´n de un
a o
problema.
Pseudoc´digos: forma gen´rica de escribir un algoritmo, por medio de
o e
un lenguaje simple sin necesidad de conocer la sint´xis de un lenguaje
a
de programaci´n.
o
El diagrama de flujo se compone de figuras que ilustran los pasos o
procesos a seguir para alcanzar la soluci´n del problema.
o
Los s´
ımbolos presentados permiten crear una estructura gr´fica flexible
a
que ilustra los pasos a seguir.
Un diagrama de flujo permite con facilidad la posterior escritura de un
programa en alg´n lenguaje de programaci´n.
u o
8. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o 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´ticas, cambios de valor de celdas en memoria, etc.
e
S´
ımbolos utilizados para indicar la direcci´n del flujo
o
del diagrama.
S´
ımbolo utilizado para representar la estructura
selectiva si entonces; en su interior se almacena una
condici´n que determina el flujo del diagrama.
o
S´
ımbolo utilizado para representar la estructura
selectiva si entonces/sino; en su interior se almacena
una condici´n que determina el flujo del diagrama.
o
9. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Diagramas de flujo
S´
ımbolo utilizado para representar una decisi´n
o
m´ltiple. En su inetrior se almacena un selector y
u
dependiendo de su valor, se sigue por una de las ramas.
S´
ımbolo utilizado para representar la impresi´n de un
o
resultado (expresa escritura).
S´
ımbolo utilizado para expresar conexi´n dentro de
o
una misma p´gina.
a
S´
ımbolo utilizado para expresar conexi´n entre
o
p´ginas diferentes.
a
S´
ımbolo utilizado para expresar un m´dulo de un
o
problema: para continuar con el flujo normal del
diagrama es necesario primero resolver el subproblema
enunciado en su interior.
10. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Diagramas de flujo
Esquema general de un diagrama de flujo
11. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Reglas para la construcci´n de diagramas de flujo
o
Todo diagrama de flujo debe tener un inicio y un fin.
Las lineas utilizadas para indicar la direcci´n del flujo del diagrama
o
deben ser rectas verticales y horizontales y no se deben cruzar.
12. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Reglas para la construcci´n de diagramas de flujo
o
Todas las lineas utilizadas para indicar la direcci´n del flujo del
o
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´n empleada en el diagrama de flujo debe ser independiente
o
del lenguaje de programaci´n.
o
Si el diagrama de flujo requiere m´s de una hoja para su construcci´n,
a o
se debe utilizar conectores adecuados y enumerar las p´ginas
a
convenientemente.
A un s´ımbolo del diagrama (excepto l´
ıneas) no puede llegar m´s de una
a
l´
ınea.
13. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
Ejemplo 3.1
Construya un diagrama de flujo tal que dado los datos A, B, C y D que
representan n´meros enteros, escriba los mismos en orden inverso.
u
Soluci´n
o
Diagrama de flujo general Diagrama de flujo en DFD
14. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
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´n:
o
(A + B)2
3
Implemente el diagrama tambi´n en DFD.
e
Soluci´n
o
Consideraciones:
Datos: A y B (variables de tipo entero).
Para indicar un proceso utilizamos
Para asignar un valor o una expresi´n a una variable utilizamos
o
variable ← expresi´n o valor
o
15. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
Explicaci´n de las variables:
o
A, B: variables de tipo entero.
RES: variable de tipo real, almacena
el resultado de la operaci´n.
o
# A B RES
1 5 6 40, 33
2 7 10 96,33
3 0 3 3,00
4 12 2 65,33
5 14 -5 27,00
16. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
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´ntelo tambi´n en DFD.
e e
Soluci´n
o
Consideraciones:
Datos:
CAL1, CAL2, CAL3, CAL4, CAL5
variables de tipo real que representan las 5 calificaciones del alumno.
El promedio de las calificaciones est´ dado por
a
CAL1+ CAL2+ CAL3+ CAL4 + CAL5
5
17. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
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´n.
o
# CAL1 CAL2 CAL3 CAL4 CAL5 PRO
1 8 8,5 9 7 6 7,7
2 9 8 9 7 9 8,4
3 9 10 10 8 9 9,2
4 8,5 9 7,5 6 6,5 7,5
5 7,3 6,8 9,5 8 8,5 8,02
18. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
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´ntelo en DFD.
e
Soluci´n
o
NUM: variable de tipo entero.
CUA: variable de tipo real, almacena
el cuadrado del n´mero que se
u
ingresa.
CUB: variable de tipo real, almacena
el cubo del n´mero que se ingresa.
u
# NUM CUA CUB
1 7 49 343
2 15 225 3375
3 8 64 512
4 12 144 1728
5 30 900 27000
19. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
Ejemplo 3.5
Escriba (en papel) un diagrama de flujo tal que dado como datos la base y la
altura de un rect´ngulo, calcule su per´
a ımetro y ´rea. Realice el diagrama
a
tambi´n en DFD.
e
Soluci´n
o
Consideraciones:
Datos: BASE, ALTURA
Donde:
BASE: variable de tipo real que representa la base del rect´ngulo.
a
ALTURA: variable de tipo real que representa la altura del rect´ngulo.
a
Recuerde que:
El area de un rect´ngulo est´ dada por
´ a a
area = base × altura
´
El per´
ımetro de un rect´ngulo est´ dada por
a a
ımetro = 2 × (base + altura)
per´
20. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Construcci´n de diagramas de flujo
o
Las observaciones anteriores nos conducen al siguiente diagrama de
flujo.
BASE, ALTURA: variables de tipo real.
AREA: variable de tipo real, almacena
el ´rea del rect´ngulo.
a a
PERIMETRO: variable de tipo real,
almacena el per´
ımetro del rec´ngulo.
a
# BASE ALTURA AREA PERIMETRO
1 8 8,5 9 7
2 9 8 9 7
3 9 10 10 8
4 8,5 9 7,5 6
5 7,3 6,8 9,5 8
21. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Terminolog´ b´sica
ıa a
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´n a partir de
o
un diagrama de flujo dise˜ado con anterioridad.
n
Los lenguajes de programaci´n est´n constituidos por un conjunto de
o a
1 Reglas sint´cticas: especif´
a ıcan la formaci´n (sint´xis) de instrucciones
o a
v´lidas.
a
2 Reglas sem´nticas: especifican el significado de las instrucciones
a
v´lidas.
a
Pasos en la resoluci´n de un problema:
o
1 Desarrollo de un algoritmo (soluci´n general).
o
2 Construcci´n de un diagrama de flujo.
o
3 Construcci´n de un programa en un lenguaje de programaci´n.
o o
Previo al paso (3), utilizaremos un “lenguaje” llamado pseudoc´digo:
o
Es independiente de cualquier lenguaje de programaci´n.
o
Carece del rigor y formalismo expresados en las reglas (1) y (2).
22. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Instrucciones en pseudoc´digo
o
Lectura de datos:
Leer A, VEL, C
Proceso:
Hacer TEMP ← TEMP + 1
Escritura:
Escribir A, VEL
23. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos
Programa en pseudoc´digo para el diagrama de flujo del ejemplo (3.1)
o
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´n de identificadores.
o
Entre llaves {· · · } van comentarios que indican la funci´n del programa.
o
Escribir un programa es sencillo cuando se conoce las instrucciones del
pseudoc´digo. La “tarea intelectual” consiste en la construcci´n del
o o
diagrama de flujo.
24. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos
Programa en pseudoc´digo para el diagrama de flujo del ejemplo (3.2)
o
CALCULA
{ Dado dos enteros A y B, el programa
calcula el resultado de una expresi´n }
o
{ 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
25. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos
Programa en pseudoc´digo para el diagrama de flujo del ejemplo (3.3)
o
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
26. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos
Programa en pseudoc´digo para el diagrama de flujo del ejemplo (3.4)
o
CUADRADO CUBO
{ Dado un entero positivo, el programa
calcula el cuadrado y el cubo de dicho
n´mero. }
u
{ 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
27. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos
Programa en pseudoc´digo para el diagrama de flujo del ejemplo (3.5)
o
CUADRADO CUBO
{ Dados la base y la altura de un rect´ngulo,
a
ımetro y su ´rea. }
calcula su per´ a
{ 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
28. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Aspectos b´sicos
a
“Lenguaje” de alto nivel interpretado, orientado principalmente a
computaci´n cient´
o ıfica
Pretende ser compatible con MATLAB
Proporciona una l´
ınea de comandos interactiva para resolver problemas
matem´ticos num´ricamente
a e
Incluye una colecci´n de algoritmos y funciones matem´ticas
o a
29. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Aspectos b´sicos
a
Ventajas
Sencillo de utilizar
Software libre: se distribuye bajo licencia GNU, GPL (General Public
License)
Sint´xis muy similar a MATLAB
a
C´digo abierto: amplia comunidad de soporte (foros, etc.)
o
A diferencia de MATLAB. . .
No soporta programaci´n orientada a objetos
o
Capacidad de gr´ficos limitada (GUI’s)
a
Pocos toolboxes disponibles
No dispone de los millones de una compa˜´ como MathWorks, Inc.
nıa
30. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Aspectos b´sicos: iniciando GNU Octave:
a
~$ 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 <bug@octave.org> (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>
31. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Algunos operadores aritm´ticos
e
Operador Operaci´n
o Ejemplo Resultado
∧ Potencia 2∧3 8
∗ Multiplicaci´n
o 7∗3 21
/ Divisi´n
o 10/4 2.5000
+ Suma 3−4 −1
− Resta 7−4 3
rem M´dulo (residuo)
o rem(10, 3) 1
octave:#> 3+4 octave:#> 4+6/2+3
ans = 7 ans = 10
octave:#> 5/10*2+5 octave:#> (4+6)/(2+3)
ans = 6 ans = 2
octave:#> 5/(10*2+5) octave:#> 0∧0
ans = 0.20000 ans = 1
octave:#> 2+4*3^2 octave:#> rem(17,3)
ans = 38 ans = 2
32. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Operadores relacionales (de comparaci´n)
o
Operador Operaci´n
o Ejemplo Resultado
== Igual 4 == 5 0
!= Diferente de 2!=3 1
< Menor que 10 < 4 0
> Mayor que 5>-4 1
<= Menor o igual que 7<=7 1
>= Mayor o igual que 3.5 >= 10 0
octave:#> 1+2>7-3 octave:#> 3>4<5
ans = 0 ans = 1
octave:#> 1<2<3 octave:#> 1/3<0.33333
ans = 1 ans = 0
octave:#> 1>2==2<3 octave:#> 5/3>=11/7
ans = 1 ans = 1
octave:#> 1>2==(2<3) octave:#> 2∧(2/3) < 3∧(3/4)
ans = 0 ans = 1
33. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Operadores l´gicos (booleanos)
o
Operador Operaci´n
o Ejemplo Resultado
& y 2&3 1
| o 3|5 1
! negaci´n
o !7 0
A B A&B A|B !A Operador Jerarqu´
ıa
0 0 0 0 1 () (mayor)
0 1 0 1 1 ∧
1 0 0 1 0 ∗, /, rem
1 1 1 1 0 ==, ! =, <, >, <=, >=
!
&
| (menor)
octave:#> 0&1|1 octave:#> 5*4>4&0<3
ans = 1 ans = 1
octave:#> 1&(1|0) octave:#> 2∧(3&0/5)>rem(45,6)
ans = 0 ans = 0
34. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o 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´n: 8 bytes (15 cifras exactas)
o
String: ’cadena de caracteres’
octave:#> base=3 octave:#> cadena=’hola’; a=3;
base = 3
octave:#> alt=4 octave:#> cadena
altura = 4 cadena = hola
octave:#> area = base*alt octave:#> a=2*a
area = 12 a = 6
octave:#> perim = 2*base+2*alt octave:#> area == 2*a
perim = 14 ans = 1
35. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Variables y formatos
Tipo Formato π
short punto fijo, 5 d´
ıgitos 3.1416
long punto fijo, 15 d´ıgitos 3.14159265358979
short e punto flotante, 5 d´ ıgitos 3.1416e+000
long e punto flotante, 15 d´ ıgitos 3.141592653589793e+000
short g punto fijo o flotante, 5 d´ ıgitos 3.1416
long g punto fijo o flotante, 15 d´ ıgitos 3.14159265358979
octave:#> b=1/3 octave:#> format long e
b = 0.33333
octave:#> format long octave:#> c
c = 1.23123123123123e-01
octave:#> b octave:#> format
b = 0.333333333333333
octave:#> c = 41/333 octave:#> c
c = 0.123123123123123 c = 0.12312
36. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Variables predefinidas
Variable Uso
ans almacena el ultimo resultado
´
pi almacena el valor de π = 3,1415 . . .
e almacena el valor de e = 2,7183 . . .
√
i almacena el valor de −1
eps epsilon de la m´quina
a
Inf infinito
NaN resultado no n´ merico (Not a Number)
u
octave:#> pi octave:#> eps
ans = 3.1416 ans = 2.22044604925031e-16
octave:#> format long
octave:#> 1/0
warning: division by zero
ans = Inf
octave:#> pi
ans = 3.14159265358979
octave:#> 0/0
warning: division by zero
octave:#> e ans = NaN
ans = 2.71828182845905
37. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Entorno de trabajo
Variables utilizadas en una sesi´n de trabajo (who, whos)
o
Historial de ordenes ejecutadas (↓, ↑)
´
octave:#> who -v
*** local user variables:
__nargin__ a alt ans area b base
c cadena perim
octave:#> clear cadena
octave:#> who -v
*** local user variables:
__nargin__ a alt ans area b base
c perim
38. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Entorno de trabajo
octave:#> who -v
*** local user variables:
__nargin__ alt area base perim
a ans b c
octave-3.0.1:32> whos -v
*** local user variables:
Prot Name Size Bytes Class
==== ==== ==== ===== =====
rw- __nargin__ 1x1 8 double
rwd a 1x1 8 double
rwd alt 1x1 8 double
rwd ans 1x1 1 logical
rwd area 1x1 8 double
rwd b 1x1 8 double
rwd base 1x1 8 double
rwd c 1x1 8 double
rwd perim 1x1 8 double
Total is 9 elements using 65 bytes
39. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Funciones matem´ticas
a
Funci´n
o Uso
sqrt(x) calcula la ra´ cuadrada de x
ız
exp(x) funci´n exponencial
o
log(x) funci´n logaritmo natural
o
sin(x) calcula sen(x)
cos(x) calcula cos(x)
tan(x) calcula tan(x)
asin(x) calcula sen−1 (x)
acos(x) calcula cos−1 (x)
atan(x) calcula tan−1 (x)
octave:#> cos(pi) octave:#> cos(a)∧2+sen(a)∧2
ans = -1 ans = 1.0000
octave:#> exp(1) octave:#> log(e)
ans = 2.7183 ans = 1
octave:#> 4*atan(1) octave:#> 2*sin(3*pi/2)
ans = 3.1416 ans = -2
40. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Instrucciones de entrada/salida
Salida de datos: Entero d, i
Punto fijo f, g
disp("texto") Punto flotante e
Caracter c
printf("cadena de formato", arg1, arg2,...) Cadena de caracteres 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
ı
41. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o 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´mero de letras: ");
u
Ingrese el n´mero de letras: 4
u
octave:#> letras
letras = 4
octave:#> printf("La palabra %s tiene %d letras n", palabra, letras);
La palabra casa tiene 4 letras
42. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Scripts
Archivos de texto plano sin formato, con extensi´n .m, que contienen
o
una sucesi´n de comandos de Octave
o
Se editan con cualquier editor de texto (usaremos geany)
43. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos de scripts
hola mundo.m
% Progarma Hola mundo en Octave, versi´n "emo"
o
printf("¡Hola, maldito mundo!n");
promedio.m
% Calcula el promedio de dos n´meros reales
u
% Lee los valores de num1 y num2
num1 = input("Ingrese el primer n´mero: ");
u
num2 = input("Ingrese el segundo n´mero: ");
u
% Calcula el promedio y lo almacena en la variable prom
prom = (num1+num2)/2;
% Imprime los n´meros ingresados y su promedio
u
printf("El promedio de %g y %g es: %g n", num1, num2, prom);
44. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
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
45. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
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´n:
o
(A + B)2
3
Soluci´n
o
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);
46. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplos de scripts
´
Ejemplo 5.2 (Area y per´
ımetro de un rect´ngulo)
a
Escriba un programa (script) en Octave tal que dado como datos la base y la
altura de un rect´ngulo, calcule su per´
a ımetro y area.
´
Soluci´n
o
rectangulo.m
% Dados la base y la altura de un rect´ngulo, el programa
a
% calcula su ´rea y su per´metro
a ı
% 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 ´rea es %f y el per´metro es %f n", AREA, PERIMETRO);
a ı
47. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Funciones
Son scripts que tienen una sintaxis predefinida Sintaxis de una funci´n
o
Programas que resultan complejos por medio de function nombre(argumentos)
scripts, se simplifican por medio de funciones
sentencias
Una vez definidas, las funciones se invocan desde end
la l´
ınea de comandos o desde un script
cuadrado.m octave:#> cuadrado(3)
ans = 9
function y = cuadrado(x)
% Calcula el cuadrado de octave:#> cuadrado(-2.5678)
% un n´mero
u 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´mero real
u
48. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo de funci´n
o
´
Ejemplo 5.3 (Area y per´
ımetro de un rect´ngulo con funciones)
a
Resuelva el ejemplo (5.2) del rect´ngulo utilizando funciones.
a
Soluci´n
o
area.m rectangulo2.m
% Dados la base y la altura de un rect´ngulo, el programa
a
function z = area(x,y) % calcula su ´rea y su per´metro
a ı
% Calcula el ´rea de un
a % Lee los valores de la base y la altura
% cuadrado de lados x e y BASE = input("Ingrese la base: ");
ALTURA = input("Ingrese la altura: ");
z = x*y;
AREA = area(BASE,ALTURA);
PERIMETRO = perimetro(BASE,ALTURA);
end
printf("El ´rea es %f y el per´metro es %f n", AREA, PERIMETRO);
a ı
perimetro.m
octave:#> rectangulo2
function z = perimetro(x,y) Ingrese la base: 2
% Calcula el per´metro de un
ı Ingrese la altura: 3
% cuadrado de lados x e y El ´rea es 6.000000 y el per´metro es 10.000000
a ı
z = 2*(x+y);
end
49. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.1
Ejemplo 6.1
Realice un algoritmo (diagrama de flujo, pseudoc´digo) tal que dado el costo
o
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´ntelo
e
en DFD.
Soluci´n
o
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.
50. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o 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 Leer PRECIO, PAGO
2 Hacer DEVO ← PAGO − PRECIO
3 Escribir DEVO
# PRECIO PAGO DEVO
1 34 60 26
2 124.7 213 88,13
3 24.53 100 75,47
4 12 21 9
51. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.2
Ejemplo 6.2
Realice un algoritmo (diagrama de flujo, pseudoc´digo) que reciba como
o
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´ntelo en DFD.
e
Soluci´n
o
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.
52. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o 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 Leer NOM, PES, ALT
2 Hacer PESOKG ← PESO∗1000
3 Hacer ALTMT ← ALT∗0,3047
4 Escribir NOM, PESOKG, ALTMT
# NOM PES ALT PESKG ALTMT
1 tiranosaurio 5 30 5000 9,15
2 poderosaurio 15 90 15000 27,42
3 perderosaurio 50 80 50000 24,37
4 brontosaurio 25 70 25000 21,32
53. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.3
Ejemplo 6.3
En una gasolinera las m´quinas registran el combustible surtido en galones
a
pero el precio de la gasolina est´ fijado en litros. Realice un algoritmo
a
(diagrama de flujo, pseudoc´digo) que calcule e imprima el valor que hay
o
que cobrarle al cliente e implem´ntelo en DFD.
e
Soluci´n
o
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´n equivale a 3.785 litros.
o
1 litro de gasolina cuesta $1480.
54. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o 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 Leer GAL
2 Hacer TOTAL ← GAL∗3,785 ∗ 1480
3 Escribir TOTAL
# GAL TOTAL
1 10,38 58146,684
2 15,90 89068,62
3 8,40 47055,12
4 9,66 54113,388
55. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.4
Ejemplo 6.4
Realice un algoritmo (diagrama de flujo, pseudoc´digo) que reciba como
o
datos el radio y la altura de un cilindro y calcule e imprima su ´rea y
a
volumen. Implem´ntelo en DFD.
e
Soluci´n
o
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 area del cilindro.
´
Consideraciones:
El volumen y el area de un cilindro est´n dados respectivamente por
´ a
volumen = πr2 × h y area = 2πr × h
donde r es el radio de la base, h es su altura y π = 3,141592 . . .
56. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.4
CILINDRO
{ Dado el radio y la altura de un cilindro,
calcula su ´rea y su volumen.}
a
{ RADIO, ALT, VOL y AREA son variables de tipo
real. }
1 Leer RADIO, ALT
2 Hacer VOL ← 3.141592 ∗ RADIO∧2 ∗ ALT
3 Hacer AREA ← 2 ∗ 3,141592∗ RADIO ∗ ALT
4 Escribir VOL, AREA
# RADIO ALT VOL AREA
1 45,22 11,60 74519,33 3295,86
2 17,30 8,45 7945,09 918,51
3 69,30 72,40 1092332,40 31524,75
4 125,30 117,40 5790552,70 92427,01
57. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.5
Ejemplo 6.5
Realice un algoritmo (diagrama de flujo, pseudoc´digo) que calcule e
o
imprima el n´mero de segundos que hay en un determinado n´mero de
u u
d´
ıas. Implem´ntelo en DFD.
e
Soluci´n
o
Datos:
DIAS: variable de tipo entero que representa el n´mero de d´
u ıas.
Variables de salida:
SEG: variable de tipo real. Almacena la cantidad de segundos que hay
en un n´mero determinado de d´
u ıas.
58. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.5
SEGUNDOS EN DIAS
{ Dado un n´mero determinado de d´
u ıas,
calcula cu´ntos segundos tienen ´stos. }
a e
{ DIAS es una variable de tipo entero y SEG es
una variable de tipo real. }
1 Leer DIAS
2 Hacer SEG ← DIAS∗24 ∗ 60 ∗ 60
3 Escribir DIAS
# DIAS SEG
1 1 86400
2 7 604800
3 15 1296000
4 30 2592000
59. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.6
Ejemplo 6.6
Se desea conocer cu´ntos meses han transcurrido entre enero de 1949 y
a
enero de 2002. Realice un algoritmo (diagrama de flujo, pseudoc´digo) que
o
resuelva dicho problema e implem´ntelo en DFD.
e
Soluci´n
o
Variables:
ATRANS: variable de tipo entero; almacena el n´mero de meses que hay
u
entre 1949 y 2002.
MESES
{ Determina el n´mero de meses que hay
u
entre 1949 y 2002. }
1 Hacer ATRANS ← (2002 − 1949) ∗ 12
2 Escribir ATRANS
60. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.7
Ejemplo 6.7 (Generalizaci´n del ejemplo 6.6)
o
Se desea determinar los meses transcurridos entre los inicios de dos a˜os
n
cualesquiera. Realice un algoritmo (diagrama de flujo, pseudoc´digo) que
o
resuelva dicho problema e implem´ntelo en DFD.
e
Soluci´n
o
Datos:
AINICIAL: variable de tipo entero, representa el a˜o inicial.
n
AFINAL: variable de tipo entero, representa el a˜o final.
n
ATRANS: variable de tipo entero; almacena el n´mero de a˜os que hay
u n
entre el a˜o inicial y el a˜o final.
n n
Variables de salida:
MTRANS: variable de tipo entero; almacena el n´mero de meses
u
transcurridos entre el a˜o inicial y el a˜o final.
n n
61. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Ejemplo 6.7
MESES GENERAL
{ Dado un n´mero determinado de d´
u ıas,
calcula cu´ntos segundos tienen ´stos. }
a e
{ DIAS es una variable de tipo entero y SEG es
una variable de tipo real. }
1 Leer AINICIAL, AFINAL
2 Hacer ATRANS ← AFINAL−AINICIAL
3 Hacer MTRANS ← 12∗MTRANS
4 Escribir ATRANS
# ANICIAL AFINAL MTRANS
1 1982 2008 312
2 1969 1987 216
3 1883 1972 1068
4 1944 1949 60
62. Introducci´n Diagramas de flujo Dise˜ o de diagramas
o n Pseudoc´digo
o GNU Octave Ejemplos
Referencias
O. Cair´
o
Metodolog´ de la programaci´n
ıa o
Segunda edici´n. Alfaomega Grupo Editor, S.A., 2005
o
J.W. Eaton
GNU Octave: A high-level interactive language for numerical
computations
Network Theory Ltd., 2002