You are on page 1of 62

Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Introducción a los Computadores


Algoritmos computacionales

CNM-130

Departamento de Matemáticas
Facultad de Ciencias Exactas y Naturales
Universidad de Antioquia

Copyleft « 2009. Reproducción permitida bajo los


términos de la licencia de documentación libre GNU.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Contenido

1 Introducción

2 Diagramas de flujo

3 Construcción de diagramas de flujo

4 Pseudocódigo

5 GNU Octave

6 Ejemplos
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Etapas en la resolución de un problema

Definición del problema: el enunciado completo del problema,


¿qué es lo que se pretende obtener?

Análisis del problema:


un conjunto de datos de entrada (la información dada)
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


lograr sistematizar la búsqueda de la solución.

Codificación: en esta etapa se describen los pasos que se deben


ejecutar para resolver el problema (algoritmo).

Prueba: se verifica el funcionamiento de la solución propuesta y se


detectan los errores que se presenten con la posterior corrección de los
mismos (depuración).
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Algoritmos

Definición 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és de un número


finito de pasos.
Precisión: cada paso de un algoritmo debe estar precisamente definido
y sin ambiguedades.
Entrada: un algoritmo tiene cero o más entradas que le son dadas antes
de que el algoritmo comience, o dinámicamente mientras corre.
Salida: un algoritmo tiene una o más salidas.
Eficacia: las operaciones a realizar en un algoritmo deben ser
suficientemente básicas como para que en principio puedan ser
realizadas de manera exacta y en un tiempo finito por un hombre
usando papel y lápiz.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo
Algoritmo para preparar “frı́joles con chicharrón” para 8 raciones. Los
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
que se remojaron, el aceite, el tocino y la zanahoria.
3 Se cocinan sin sal hasta que estén blandos, aproximadamente por
1 hora.
4 Se licúa 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ás con la olla destapada hasta que
espesen.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Otros ejemplos

Muchos algoritmos no requieren de un computador para su ejecución:

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


para resolver un problema:

Diseño del algoritmo.

Implementación del algoritmo en un lenguaje de programación adecuado


(codificación).

Ejecución y validación del programa por el computador.


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Diseño de algoritmos

Herramientas utilizadas para diseñar algoritmos

Diagramas de flujo: representación esquemática de un algoritmo que


muestra gráficamente los pasos a seguir para alcanzar la solución de un
problema.

Pseudocódigos: forma genérica de escribir un algoritmo, por medio de


un lenguaje simple sin necesidad de conocer la sintáxis de un lenguaje
de programación.

El diagrama de flujo se compone de figuras que ilustran los pasos o


procesos a seguir para alcanzar la solución del problema.

Los sı́mbolos presentados permiten crear una estructura gráfica flexible


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.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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.

Sı́mbolos utilizados para indicar la dirección del flujo


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.

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.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Diagramas de flujo

Sı́mbolo utilizado para representar una decisión


múltiple. 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ón de un


resultado (expresa escritura).

Sı́mbolo utilizado para expresar conexión dentro de


una misma página.

Sı́mbolo utilizado para expresar conexión entre


páginas diferentes.

Sı́mbolo utilizado para expresar un módulo de un


problema: para continuar con el flujo normal del
diagrama es necesario primero resolver el subproblema
enunciado en su interior.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Diagramas de flujo

Esquema general de un diagrama de flujo


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Reglas para la construcción de diagramas de flujo

Todo diagrama de flujo debe tener un inicio y un fin.

Las lineas utilizadas para indicar la dirección del flujo del diagrama
deben ser rectas verticales y horizontales y no se deben cruzar.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Reglas para la construcción de diagramas de flujo


Todas las lineas utilizadas para indicar la dirección 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ón empleada en el diagrama de flujo debe ser independiente


del lenguaje de programación.

Si el diagrama de flujo requiere más de una hoja para su construcción,


se debe utilizar conectores adecuados y enumerar las páginas
convenientemente.

A un sı́mbolo del diagrama (excepto lı́neas) no puede llegar más de una


lı́nea.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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úmeros enteros, escriba los mismos en orden inverso.

Solución

Diagrama de flujo general Diagrama de flujo en DFD


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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ón:

(A + B)2
3
Implemente el diagrama también en DFD.

Solución
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


variable ← expresión o valor
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción de diagramas de flujo

Explicación de las variables:

A, B: variables de tipo entero.

RES: variable de tipo real, almacena


el resultado de la operación.

# 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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éntelo también en DFD.

Solución

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

CAL1+ CAL2+ CAL3+ CAL4 + CAL5


5
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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ón.

# 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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éntelo en DFD.

Solución

NUM: variable de tipo entero.

CUA: variable de tipo real, almacena


el cuadrado del número que se
ingresa.

CUB: variable de tipo real, almacena


el cubo del número que se ingresa.

# NUM CUA CUB


1 7 49 343
2 15 225 3375
3 8 64 512
4 12 144 1728
5 30 900 27000
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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ángulo, calcule su perı́metro y área. Realice el diagrama
también en DFD.

Solución
Consideraciones:
Datos: BASE, ALTURA
Donde:
BASE: variable de tipo real que representa la base del rectángulo.
ALTURA: variable de tipo real que representa la altura del rectángulo.

Recuerde que:
El área de un rectángulo está dada por
área = base × altura
El perı́metro de un rectángulo está dada por
perı́metro = 2 × (base + altura)
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Construcción 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 área del rectángulo.

PERIMETRO: variable de tipo real,


almacena el perı́metro del recángulo.

# 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Terminologı́a básica
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


un diagrama de flujo diseñado con anterioridad.

Los lenguajes de programación están constituidos por un conjunto de


1 Reglas sintácticas: especifı́can la formación (sintáxis) de instrucciones
válidas.
2 Reglas semánticas: especifican el significado de las instrucciones
válidas.

Pasos en la resolución de un problema:


1 Desarrollo de un algoritmo (solución general).
2 Construcción de un diagrama de flujo.
3 Construcción de un programa en un lenguaje de programación.

Previo al paso (3), utilizaremos un “lenguaje” llamado pseudocódigo:


Es independiente de cualquier lenguaje de programación.
Carece del rigor y formalismo expresados en las reglas (1) y (2).
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Instrucciones en pseudocódigo

Lectura de datos:

Leer A, VEL, C

Proceso:

Hacer TEMP ← TEMP + 1

Escritura:

Escribir A, VEL
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos
Programa en pseudocódigo 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ón de identificadores.
Entre llaves {· · · } van comentarios que indican la función del programa.
Escribir un programa es sencillo cuando se conoce las instrucciones del
pseudocódigo. La “tarea intelectual” consiste en la construcción del
diagrama de flujo.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocódigo para el diagrama de flujo del ejemplo (3.2)

CALCULA
{ Dado dos enteros A y B, el programa
calcula el resultado de una expresión }
{ 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ón Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocódigo 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ón Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocódigo 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úmero. }
{ 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ón Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocódigo para el diagrama de flujo del ejemplo (3.5)

CUADRADO CUBO
{ Dados la base y la altura de un rectángulo,
calcula su perı́metro y su área. }
{ 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ón Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Aspectos básicos

“Lenguaje” de alto nivel interpretado, orientado principalmente a


computación cientı́fica

Pretende ser compatible con MATLAB

Proporciona una lı́nea de comandos interactiva para resolver problemas


matemáticos numéricamente

Incluye una colección de algoritmos y funciones matemáticas


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Aspectos básicos

Ventajas

Sencillo de utilizar

Software libre: se distribuye bajo licencia GNU, GPL (General Public


License)

Sintáxis muy similar a MATLAB

Código abierto: amplia comunidad de soporte (foros, etc.)

A diferencia de MATLAB. . .

No soporta programación orientada a objetos

Capacidad de gráficos limitada (GUI’s)

Pocos toolboxes disponibles

No dispone de los millones de una compañı́a como MathWorks, Inc.


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Aspectos básicos: 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 <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>
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Algunos operadores aritméticos


Operador Operación Ejemplo Resultado
∧ Potencia 2∧3 8
∗ Multiplicación 7∗3 21
/ División 10/4 2.5000
+ Suma 3−4 −1
− Resta 7−4 3
rem Módulo (residuo) 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Operadores relacionales (de comparación)


Operador Operación 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Operadores lógicos (booleanos)

Operador Operación Ejemplo Resultado


& y 2&3 1
| o 3|5 1
! negación !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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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)
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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Variables predefinidas
Variable Uso
ans almacena el último 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
Inf infinito
NaN resultado no númerico (Not a Number)

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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Entorno de trabajo
Variables utilizadas en una sesión de trabajo (who, whos)

Historial de órdenes 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Funciones matemáticas

Función Uso
sqrt(x) calcula la raı́z cuadrada de x
exp(x) función exponencial
log(x) función logaritmo natural
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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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: ");


Ingrese el número 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ón Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Scripts
Archivos de texto plano sin formato, con extensión .m, que contienen
una sucesión de comandos de Octave
Se editan con cualquier editor de texto (usaremos geany)
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos de scripts

hola mundo.m

% Progarma Hola mundo en Octave, versión "emo"


printf("¡Hola, maldito mundo!\n");

promedio.m

% Calcula el promedio de dos números reales

% Lee los valores de num1 y num2


num1 = input("Ingrese el primer número: ");
num2 = input("Ingrese el segundo número: ");

% Calcula el promedio y lo almacena en la variable prom


prom = (num1+num2)/2;

% Imprime los números ingresados y su promedio


printf("El promedio de %g y %g es: %g \n", num1, num2, prom);
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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:
(A + B)2
3

Solución

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);
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplos de scripts

Ejemplo 5.2 (Área y perı́metro de un rectángulo)

Escriba un programa (script) en Octave tal que dado como datos la base y la
altura de un rectángulo, calcule su perı́metro y área.

Solución

rectangulo.m

% Dados la base y la altura de un rectángulo, el programa


% calcula su área 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 área es %f y el perı́metro es %f \n", AREA, PERIMETRO);


Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Funciones

Son scripts que tienen una sintaxis predefinida Sintaxis de una función

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 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo de función

Ejemplo 5.3 (Área y perı́metro de un rectángulo con funciones)


Resuelva el ejemplo (5.2) del rectángulo utilizando funciones.

Solución
area.m rectangulo2.m

% Dados la base y la altura de un rectángulo, el programa


function z = area(x,y) % calcula su área y su perı́metro
% Calcula el área de un % 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);
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

z = 2*(x+y);
end
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.1

Ejemplo 6.1

Realice un algoritmo (diagrama de flujo, pseudocódigo) 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éntelo
en DFD.

Solución
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ón Diagramas de flujo Diseño de diagramas Pseudocódigo 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.2
Ejemplo 6.2

Realice un algoritmo (diagrama de flujo, pseudocódigo) 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éntelo en DFD.

Solución
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ón Diagramas de flujo Diseño de diagramas Pseudocódigo 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.3

Ejemplo 6.3

En una gasolinera las máquinas registran el combustible surtido en galones


pero el precio de la gasolina está fijado en litros. Realice un algoritmo
(diagrama de flujo, pseudocódigo) que calcule e imprima el valor que hay
que cobrarle al cliente e impleméntelo en DFD.

Solución
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.
1 litro de gasolina cuesta $1480.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.4
Ejemplo 6.4

Realice un algoritmo (diagrama de flujo, pseudocódigo) que reciba como


datos el radio y la altura de un cilindro y calcule e imprima su área y
volumen. Impleméntelo en DFD.

Solución
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 área del cilindro.
Consideraciones:
El volumen y el área de un cilindro están 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ón Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.4

CILINDRO
{ Dado el radio y la altura de un cilindro,
calcula su área y su volumen.}
{ 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.5

Ejemplo 6.5

Realice un algoritmo (diagrama de flujo, pseudocódigo) que calcule e


imprima el número de segundos que hay en un determinado número de
dı́as. Impleméntelo en DFD.

Solución

Datos:
DIAS: variable de tipo entero que representa el número de dı́as.

Variables de salida:
SEG: variable de tipo real. Almacena la cantidad de segundos que hay
en un número determinado de dı́as.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.5

SEGUNDOS EN DIAS
{ Dado un número determinado de dı́as,
calcula cuántos segundos tienen éstos. }
{ 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.6
Ejemplo 6.6

Se desea conocer cuántos meses han transcurrido entre enero de 1949 y


enero de 2002. Realice un algoritmo (diagrama de flujo, pseudocódigo) que
resuelva dicho problema e impleméntelo en DFD.

Solución
Variables:
ATRANS: variable de tipo entero; almacena el número de meses que hay
entre 1949 y 2002.

MESES
{ Determina el número de meses que hay
entre 1949 y 2002. }
1 Hacer ATRANS ← (2002 − 1949) ∗ 12
2 Escribir ATRANS
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.7

Ejemplo 6.7 (Generalización del ejemplo 6.6)

Se desea determinar los meses transcurridos entre los inicios de dos años
cualesquiera. Realice un algoritmo (diagrama de flujo, pseudocódigo) que
resuelva dicho problema e impleméntelo en DFD.

Solución

Datos:
AINICIAL: variable de tipo entero, representa el año inicial.
AFINAL: variable de tipo entero, representa el año final.
ATRANS: variable de tipo entero; almacena el número de años que hay
entre el año inicial y el año final.

Variables de salida:
MTRANS: variable de tipo entero; almacena el número de meses
transcurridos entre el año inicial y el año final.
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Ejemplo 6.7

MESES GENERAL
{ Dado un número determinado de dı́as,
calcula cuántos segundos tienen éstos. }
{ 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
Introducción Diagramas de flujo Diseño de diagramas Pseudocódigo GNU Octave Ejemplos

Referencias

O. Cairó
Metodologı́a de la programación
Segunda edición. Alfaomega Grupo Editor, S.A., 2005

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

You might also like