Clase de turbo C

62
Introducci´ on Diagramas de flujo Dise˜ no de diagramas Pseudoc´ odigo GNU Octave Ejemplos 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 erminos de la licencia de documentaci´on libre GNU.

Transcript of Clase de turbo C

Page 1: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Introduccion a los ComputadoresAlgoritmos computacionales

CNM-130

Departamento de MatematicasFacultad de Ciencias Exactas y Naturales

Universidad de Antioquia

Copyleft «2009. Reproduccion permitida bajo los

terminos de la licencia de documentacion libre GNU.

Page 2: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Contenido

1 Introduccion

2 Diagramas de flujo

3 Construccion de diagramas de flujo

4 Pseudocodigo

5 GNU Octave

6 Ejemplos

Page 3: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Etapas en la resolucion de un problema

Definicion del problema: el enunciado completo del problema,¿que es lo que se pretende obtener?

Analisis del problema:

un conjunto de datos de entrada (la informacion dada)

un conjunto de datos de salida (lo que se desea obtener)

Relaciones que vinculen los datos de entrada y salida

Diseno de la solucion: se debe proponer o aplicar un modelo paralograr sistematizar la busqueda de la solucion.

Codificacion: en esta etapa se describen los pasos que se debenejecutar para resolver el problema (algoritmo).

Prueba: se verifica el funcionamiento de la solucion propuesta y sedetectan los errores que se presenten con la posterior correccion de losmismos (depuracion).

Page 4: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Algoritmos

Definicion 1.1 (Algoritmo)

Un algoritmo es una secuencia finita de instrucciones, reglas o pasos quedescriben de modo preciso las operaciones que un computador debe realizarpara ejecutar una tarea determinada en un tiempo finito.

Cinco propiedades ampliamente aceptadas como requisitos para unalgoritmo (Knuth):

Finitud: Un algoritmo siempre debe terminar despues de un numerofinito de pasos.

Precision: cada paso de un algoritmo debe estar precisamente definidoy sin ambiguedades.

Entrada: un algoritmo tiene cero o mas entradas que le son dadas antesde que el algoritmo comience, o dinamicamente mientras corre.

Salida: un algoritmo tiene una o mas salidas.

Eficacia: las operaciones a realizar en un algoritmo deben sersuficientemente basicas como para que en principio puedan serrealizadas de manera exacta y en un tiempo finito por un hombreusando papel y lapiz.

Page 5: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo

Algoritmo para preparar “frıjoles con chicharron” para 8 raciones. Losdatos de entrada (ingredientes) son:

2 libras de frıjoles.

1 cucharada de aceite vegetal ode girasol.

1/4 de libra de tocino cortadoen trocitos.

2 zanahorias peladas.

2 cubos de caldo de carne.

1 cucharada de sal.

16 tazas de agua.

Algoritmo

1 Se lavan bien los frıjoles y se dejan remojando en el aguadesde la noche anterior.

2 Al dıa siguiente, se ponen en la olla a presion con el agua enque se remojaron, el aceite, el tocino y la zanahoria.

3 Se cocinan sin sal hasta que esten blandos, aproximadamente por1 hora.

4 Se licua 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 mas con la olla destapada hasta queespesen.

Page 6: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Otros ejemplos

Muchos algoritmos no requieren de un computador para su ejecucion:

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 practica, un algoritmo es solo una parte de las etapas requeridaspara resolver un problema:

Diseno del algoritmo.

Implementacion del algoritmo en un lenguaje de programacion adecuado(codificacion).

Ejecucion y validacion del programa por el computador.

Page 7: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Diseno de algoritmos

Herramientas utilizadas para disenar algoritmos

Diagramas de flujo: representacion esquematica de un algoritmo quemuestra graficamente los pasos a seguir para alcanzar la solucion de unproblema.

Pseudocodigos: forma generica de escribir un algoritmo, por medio deun lenguaje simple sin necesidad de conocer la sintaxis de un lenguajede programacion.

El diagrama de flujo se compone de figuras que ilustran los pasos oprocesos a seguir para alcanzar la solucion del problema.

Los sımbolos presentados permiten crear una estructura grafica flexibleque ilustra los pasos a seguir.

Un diagrama de flujo permite con facilidad la posterior escritura de unprograma en algun lenguaje de programacion.

Page 8: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Diagramas de flujo

Sımbolo utilizado para marcar el inicio y el fin deldiagrama de flujo.

Sımbolo utilizado para ingresar los datos de entrada(expresa lectura).

Sımbolo utilizado para representar un proceso. En suinterior se expresan asignaciones, operacionesaritmeticas, cambios de valor de celdas en memoria, etc.

Sımbolos utilizados para indicar la direccion del flujodel diagrama.

Sımbolo utilizado para representar la estructuraselectiva si entonces; en su interior se almacena unacondicion que determina el flujo del diagrama.

Sımbolo utilizado para representar la estructuraselectiva si entonces/sino; en su interior se almacenauna condicion que determina el flujo del diagrama.

Page 9: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Diagramas de flujo

Sımbolo utilizado para representar una decisionmultiple. En su inetrior se almacena un selector ydependiendo de su valor, se sigue por una de las ramas.

Sımbolo utilizado para representar la impresion de unresultado (expresa escritura).

Sımbolo utilizado para expresar conexion dentro deuna misma pagina.

Sımbolo utilizado para expresar conexion entrepaginas diferentes.

Sımbolo utilizado para expresar un modulo de unproblema: para continuar con el flujo normal deldiagrama es necesario primero resolver el subproblemaenunciado en su interior.

Page 10: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Diagramas de flujo

Esquema general de un diagrama de flujo

Page 11: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Reglas para la construccion de diagramas de flujo

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

Las lineas utilizadas para indicar la direccion del flujo del diagramadeben ser rectas verticales y horizontales y no se deben cruzar.

Page 12: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Reglas para la construccion de diagramas de flujo

Todas las lineas utilizadas para indicar la direccion del flujo deldiagrama deben estar conectadas.

El diagrama de flujo debe ser constuido de arriba hacia abajo(top-down) y de izquierda a derecha (left-right).

La notacion empleada en el diagrama de flujo debe ser independientedel lenguaje de programacion.

Si el diagrama de flujo requiere mas de una hoja para su construccion,se debe utilizar conectores adecuados y enumerar las paginasconvenientemente.

A un sımbolo del diagrama (excepto lıneas) no puede llegar mas de unalınea.

Page 13: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Ejemplo 3.1

Construya un diagrama de flujo tal que dado los datos A, B, C y D querepresentan numeros enteros, escriba los mismos en orden inverso.

Solucion

Diagrama de flujo general Diagrama de flujo en DFD

Page 14: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Ejemplo 3.2

Escriba (en papel) un diagrama de flujo que tenga como entradas los datosenteros A y B y escriba el resultado de la siguiente expresion:

(A+B)2

3

Implemente el diagrama tambien en DFD.

Solucion

Consideraciones:

Datos: A y B (variables de tipo entero).

Para indicar un proceso utilizamos

Para asignar un valor o una expresion a una variable utilizamos

variable ← expresion o valor

Page 15: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Explicacion de las variables:

A, B: variables de tipo entero.

RES: variable de tipo real, almacenael resultado de la operacion.

# A B RES1 5 6 40, 332 7 10 96,333 0 3 3,004 12 2 65,335 14 -5 27,00

Page 16: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Ejemplo 3.3

Un estudiante obtiene 5 calificaciones a lo largo del semestre. Escriba (enpapel) un diagrama de flujo que imprima el promedio de sus calificaciones.Implementelo tambien en DFD.

Solucion

Consideraciones:

Datos:

CAL1, CAL2, CAL3, CAL4, CAL5

variables de tipo real que representan las 5 calificaciones del alumno.

El promedio de las calificaciones esta dado por

CAL1+ CAL2+ CAL3+ CAL4 + CAL5

5

Page 17: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Las observaciones anteriores nos conducen al siguiente diagrama deflujo.

CAL1, CAL2, CAL3, CAL4, CAL5:Variables de tipo entero.

PRO: Variable de tipo real, almacena elresultado de la operacion.

# CAL1 CAL2 CAL3 CAL4 CAL5 PRO1 8 8,5 9 7 6 7,72 9 8 9 7 9 8,43 9 10 10 8 9 9,24 8,5 9 7,5 6 6,5 7,55 7,3 6,8 9,5 8 8,5 8,02

Page 18: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Ejemplo 3.4

Escriba (en papel) un diagrama de flujo que permita calcular e imprimir elcuadrado y el cubo de un entero positivo NUM e implementelo en DFD.

Solucion

NUM: variable de tipo entero.

CUA: variable de tipo real, almacenael cuadrado del numero que seingresa.

CUB: variable de tipo real, almacenael cubo del numero que se ingresa.

# NUM CUA CUB1 7 49 3432 15 225 33753 8 64 5124 12 144 17285 30 900 27000

Page 19: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Ejemplo 3.5

Escriba (en papel) un diagrama de flujo tal que dado como datos la base y laaltura de un rectangulo, calcule su perımetro y area. Realice el diagramatambien en DFD.

Solucion

Consideraciones:

Datos: BASE, ALTURA

Donde:

BASE: variable de tipo real que representa la base del rectangulo.

ALTURA: variable de tipo real que representa la altura del rectangulo.

Recuerde que:

El area de un rectangulo esta dada por

area = base× altura

El perımetro de un rectangulo esta dada por

perımetro = 2× (base + altura)

Page 20: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Construccion de diagramas de flujo

Las observaciones anteriores nos conducen al siguiente diagrama deflujo.

BASE, ALTURA: variables de tipo real.

AREA: variable de tipo real, almacenael area del rectangulo.

PERIMETRO: variable de tipo real,almacena el perımetro del recangulo.

# BASE ALTURA AREA PERIMETRO1 8 8,5 9 72 9 8 9 73 9 10 10 84 8,5 9 7,5 65 7,3 6,8 9,5 8

Page 21: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Terminologıa basica

Programa: conjunto de instrucciones que ejecuta un computador paraalcanzar un resultado especıfico (Von Neumann, 1946).

Un programa se escribe en un lenguaje de programacion a partir deun diagrama de flujo disenado con anterioridad.

Los lenguajes de programacion estan constituidos por un conjunto de

1 Reglas sintacticas: especifıcan la formacion (sintaxis) de instruccionesvalidas.

2 Reglas semanticas: especifican el significado de las instruccionesvalidas.

Pasos en la resolucion de un problema:

1 Desarrollo de un algoritmo (solucion general).

2 Construccion de un diagrama de flujo.

3 Construccion de un programa en un lenguaje de programacion.

Previo al paso (3), utilizaremos un “lenguaje” llamado pseudocodigo:

Es independiente de cualquier lenguaje de programacion.

Carece del rigor y formalismo expresados en las reglas (1) y (2).

Page 22: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Instrucciones en pseudocodigo

Lectura de datos:

Leer A, VEL, C

Proceso:

Hacer TEMP ← TEMP + 1

Escritura:

Escribir A, VEL

Page 23: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocodigo para el diagrama de flujo del ejemplo (3.1)

INVERTIR DATOS

{ Dado un conjunto de datos de entrada elprograma invierte el orden de los mismos ylos 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 encuenta las reglas para la construccion de identificadores.

Entre llaves {· · · } van comentarios que indican la funcion del programa.

Escribir un programa es sencillo cuando se conoce las instrucciones delpseudocodigo. La “tarea intelectual” consiste en la construccion deldiagrama de flujo.

Page 24: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocodigo para el diagrama de flujo del ejemplo (3.2)

CALCULA

{ Dado dos enteros A y B, el programacalcula el resultado de una expresion }

{ A y B son variables de tipo entero, RES esuna variable de tipo real }

1 Leer A, B

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

3 Escribir RES

Page 25: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocodigo 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 PROson variables de tipo real}

1 Leer CAL1, CAL2, CAL3, CAL4, CAL5

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

3 Escribir PRO

Page 26: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocodigo para el diagrama de flujo del ejemplo (3.4)

CUADRADO CUBO

{ Dado un entero positivo, el programacalcula el cuadrado y el cubo de dichonumero. }

{ NUM es una variable de tipo entero, CUA yCUB son variables de tipo real }

1 Leer NUM

2 Hacer CUA ← NUM*NUM

3 Hacer CUB ← NUM∧3

4 Escribir CUA y CUB

Page 27: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos

Programa en pseudocodigo para el diagrama de flujo del ejemplo (3.5)

CUADRADO CUBO

{ Dados la base y la altura de un rectangulo,calcula su perımetro y su area. }

{ BASE, ALTURA, AREA Y PERIMETROson variables de tipo real }

1 Leer BASE, ALTURA

2 Hacer AREA ← BASE*ALTURA

3 Hacer PERIMETRO ←2*(BASE+ALTURA)

4 Escribir AREA y PERIMETRO

Page 28: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Aspectos basicos

“Lenguaje” de alto nivel interpretado, orientado principalmente acomputacion cientıfica

Pretende ser compatible con MATLAB

Proporciona una lınea de comandos interactiva para resolver problemasmatematicos numericamente

Incluye una coleccion de algoritmos y funciones matematicas

Page 29: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Aspectos basicos

Ventajas

Sencillo de utilizar

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

Sintaxis muy similar a MATLAB

Codigo abierto: amplia comunidad de soporte (foros, etc.)

A diferencia de MATLAB. . .

No soporta programacion orientada a objetos

Capacidad de graficos limitada (GUI’s)

Pocos toolboxes disponibles

No dispone de los millones de una companıa como MathWorks, Inc.

Page 30: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Aspectos basicos: iniciando GNU Octave:

~$ octave

GNU Octave, version 3.0.1Copyright (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 orFITNESS 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 <[email protected]> (but first, please readhttp://www.octave.org/bugs.html to learn how to write a helpful report).

For information about changes from previous versions, type ‘news’.

octave:1>

Page 31: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Algunos operadores aritmeticos

Operador Operacion Ejemplo Resultado

∧ Potencia 2 ∧ 3 8∗ Multiplicacion 7 ∗ 3 21/ Division 10/4 2.5000+ Suma 3− 4 −1− Resta 7− 4 3

rem Modulo (residuo) rem(10, 3) 1

octave:#> 3+4ans = 7

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

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

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

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

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

octave:#> 0∧0ans = 1

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

Page 32: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Operadores relacionales (de comparacion)

Operador Operacion 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-3ans = 0

octave:#> 1<2<3ans = 1

octave:#> 1>2==2<3ans = 1

octave:#> 1>2==(2<3)ans = 0

octave:#> 3>4<5ans = 1

octave:#> 1/3<0.33333ans = 0

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

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

Page 33: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Operadores logicos (booleanos)

Operador Operacion Ejemplo Resultado

& y 2&3 1

| o 3|5 1

! negacion !7 0

A B A&B A|B !A

0 0 0 0 10 1 0 1 11 0 0 1 01 1 1 1 0

Operador Jerarquıa

() (mayor)∧

∗, /, rem==, ! =, <,>,<=, >= �

!&| (menor)

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

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

octave:#> 5*4>4&0<3ans = 1

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

Page 34: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Variables y formatos

Variables: expresiones (identificadores) asociados a datos almacenadosen un sistema de memoria

Algunos tipos de datos:

Real de doble precision: 8 bytes (15 cifras exactas)

String: ’cadena de caracteres’

octave:#> base=3base = 3

octave:#> alt=4altura = 4

octave:#> area = base*altarea = 12

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

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

octave:#> cadenacadena = hola

octave:#> a=2*aa = 6

octave:#> area == 2*aans = 1

Page 35: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Variables y formatos

Tipo Formato π

short punto fijo, 5 dıgitos 3.1416long punto fijo, 15 dıgitos 3.14159265358979short e punto flotante, 5 dıgitos 3.1416e+000long e punto flotante, 15 dıgitos 3.141592653589793e+000short g punto fijo o flotante, 5 dıgitos 3.1416long g punto fijo o flotante, 15 dıgitos 3.14159265358979

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

octave:#> format long

octave:#> bb = 0.333333333333333

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

octave:#> format long e

octave:#> cc = 1.23123123123123e-01

octave:#> format

octave:#> cc = 0.12312

Page 36: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Variables predefinidas

Variable Uso

ans almacena el ultimo resultadopi almacena el valor de π = 3,1415 . . .e almacena el valor de e = 2,7183 . . .

i almacena el valor de√−1

eps epsilon de la maquinaInf infinitoNaN resultado no numerico (Not a Number)

octave:#> pians = 3.1416

octave:#> format long

octave:#> pians = 3.14159265358979

octave:#> eans = 2.71828182845905

octave:#> epsans = 2.22044604925031e-16

octave:#> 1/0warning: division by zeroans = Inf

octave:#> 0/0warning: division by zeroans = NaN

Page 37: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Entorno de trabajo

Variables utilizadas en una sesion de trabajo (who, whos)

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

Page 38: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Entorno de trabajo

octave:#> who -v

*** local user variables:

__nargin__ alt area base perima ans b c

octave-3.0.1:32> whos -v

*** local user variables:

Prot Name Size Bytes Class==== ==== ==== ===== =====rw- __nargin__ 1x1 8 doublerwd a 1x1 8 doublerwd alt 1x1 8 doublerwd ans 1x1 1 logicalrwd area 1x1 8 doublerwd b 1x1 8 doublerwd base 1x1 8 doublerwd c 1x1 8 doublerwd perim 1x1 8 double

Total is 9 elements using 65 bytes

Page 39: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Funciones matematicas

Funcion Uso

sqrt(x) calcula la raız cuadrada de x

exp(x) funcion exponenciallog(x) funcion logaritmo naturalsin(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)ans = -1

octave:#> exp(1)ans = 2.7183

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

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

octave:#> log(e)ans = 1

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

Page 40: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Instrucciones de entrada/salidaSalida de datos:

disp("texto")

printf("cadena de formato", arg1, arg2,...)

Entero d, iPunto fijo f, gPunto flotante e

Caracter c

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

Page 41: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo 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:#> palabrapalabra = casa

octave:#> letras = input("Ingrese el numero de letras: ");Ingrese el numero de letras: 4

octave:#> letrasletras = 4

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

Page 42: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Scripts

Archivos de texto plano sin formato, con extension .m, que contienenuna sucesion de comandos de Octave

Se editan con cualquier editor de texto (usaremos geany)

Page 43: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos de scripts

hola mundo.m

% Progarma Hola mundo en Octave, version "emo"

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

promedio.m

% Calcula el promedio de dos numeros reales

% Lee los valores de num1 y num2num1 = input("Ingrese el primer numero: ");num2 = input("Ingrese el segundo numero: ");

% Calcula el promedio y lo almacena en la variable promprom = (num1+num2)/2;

% Imprime los numeros ingresados y su promedioprintf("El promedio de %g y %g es: %g \n", num1, num2, prom);

Page 44: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo 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 molecularpeso molecular = peso C + peso H + peso O

% Calculo del porcentaje de oxigenoporcentaje O = peso O/peso molecular*100

Page 45: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos de scripts

Ejemplo 5.1

Escriba un programa (script) en Octave que tenga como entradas los datosenteros A y B y escriba el resultado de la siguiente expresion:

(A + B)2

3

Solucion

operacion.m

% Dados dos enteros A y B, calcula

% (A+B)∧2/3

% Lee los valores de A y BA = input("Ingrese A: ");B = input("Ingrese B: ");

RES = (A+B)∧2/3;

% Imprime contenido de la variable RESdisp(RES);

Page 46: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplos de scripts

Ejemplo 5.2 (Area y perımetro de un rectangulo)

Escriba un programa (script) en Octave tal que dado como datos la base y laaltura de un rectangulo, calcule su perımetro y area.

Solucion

rectangulo.m

% Dados la base y la altura de un rectangulo, 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);

Page 47: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Funciones

Son scripts que tienen una sintaxis predefinida

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

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

Sintaxis de una funcion

function nombre(argumentos)

sentencias

end

cuadrado.m

function y = cuadrado(x)

% Calcula el cuadrado de

% un numero

y = x*x;

end

octave:#> cuadrado(3)ans = 9

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

octave:#> cuadrado(t)error: ‘t’ undefined near line 2 column 10error: evaluating argument list element number 1

octave:#> help cuadradocalcula el cuadrado de un numero real

Page 48: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo de funcion

Ejemplo 5.3 (Area y perımetro de un rectangulo con funciones)

Resuelva el ejemplo (5.2) del rectangulo utilizando funciones.

Solucion

area.m

function z = area(x,y)

% Calcula el area de un

% cuadrado de lados x e y

z = x*y;

end

perimetro.m

function z = perimetro(x,y)

% Calcula el perımetro de un

% cuadrado de lados x e y

z = 2*(x+y);

end

rectangulo2.m

% Dados la base y la altura de un rectangulo, 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);

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

Page 49: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.1

Ejemplo 6.1

Realice un algoritmo (diagrama de flujo, pseudocodigo) tal que dado el costode un artıculo vendido y la cantidad de dinero entregada por el cliente,calcule e imprima el cambio que se debe entregar al mismo. Implementeloen DFD.

Solucion

Datos:

PRECIO: variable de tipo real que representa el precio del producto.

PAGO: variable de tipo real que representa el pago a realizar por elcliente.

Variables de salida:

DEVO: variable de tipo real. Almacen el cambio que se le debe entregaral cliente.

Nota: asumimos que el pago del cliente es mayor que el precio del producto.

Page 50: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.1

DEVUELTO

{ Dado el costo de un producto y la cantidadde dinero entregada por el cliente, calcula elvuelto que hay que entregar al cliente. }

{ PRECIO, PAGO Y DEVO son variables de tiporeal. }

1 Leer PRECIO, PAGO

2 Hacer DEVO ← PAGO − PRECIO

3 Escribir DEVO

# PRECIO PAGO DEVO

1 34 60 262 124.7 213 88,133 24.53 100 75,474 12 21 9

Page 51: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.2

Ejemplo 6.2

Realice un algoritmo (diagrama de flujo, pseudocodigo) que reciba comodatos el nombre de un dinosaurio, su peso (en toneladas) y su altura (enpies), y que escriba el nombre del dinosaurio, su peso en kilogramos y sualtura en metros. Implementelo en DFD.

Solucion

Datos:

NOM: variable de tipo cadena de caracteres que indica el nombre deldinosaurio.

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.

Page 52: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.2

DINOSAURIO

{ Dado el nombre de un dinosaurio, su pesoen toneladas y su altura en pies, el programaescribe el nombre del dinosaurio, su peso enkilogramos y su altura en metros. }

{ NOM es una variable de tipo cadena decaracteres. PES, ALT, PESKG, y ALTMT sonvariables 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,152 poderosaurio 15 90 15000 27,423 perderosaurio 50 80 50000 24,374 brontosaurio 25 70 25000 21,32

Page 53: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.3

Ejemplo 6.3

En una gasolinera las maquinas registran el combustible surtido en galonespero el precio de la gasolina esta fijado en litros. Realice un algoritmo(diagrama de flujo, pseudocodigo) que calcule e imprima el valor que hayque cobrarle al cliente e implementelo en DFD.

Solucion

Datos:

GAL: variable de tipo real que representa los galones de gasolinasurtidos al cliente.

Variables de salida:

TOTAL: variable de tipo real, almacena el total que debe pagar el cliente.

Consideraciones:

1 galon equivale a 3.785 litros.

1 litro de gasolina cuesta $1480.

Page 54: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.3

GASOLINA

{ Dado los galones de gasolina surtidos a uncliente, calcula el precio que debe pagar elcliente. }

{ 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,6842 15,90 89068,623 8,40 47055,124 9,66 54113,388

Page 55: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.4

Ejemplo 6.4

Realice un algoritmo (diagrama de flujo, pseudocodigo) que reciba comodatos el radio y la altura de un cilindro y calcule e imprima su area yvolumen. Implementelo en DFD.

Solucion

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 estan 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 . . .

Page 56: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo 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 tiporeal. }

1 Leer RADIO, ALT

2 Hacer VOL ← 3.141592 ∗ RADIO∧2 ∗ ALT3 Hacer AREA ← 2 ∗ 3,141592∗ RADIO ∗ ALT4 Escribir VOL, AREA

# RADIO ALT VOL AREA

1 45,22 11,60 74519,33 3295,862 17,30 8,45 7945,09 918,513 69,30 72,40 1092332,40 31524,754 125,30 117,40 5790552,70 92427,01

Page 57: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.5

Ejemplo 6.5

Realice un algoritmo (diagrama de flujo, pseudocodigo) que calcule eimprima el numero de segundos que hay en un determinado numero dedıas. Implementelo en DFD.

Solucion

Datos:

DIAS: variable de tipo entero que representa el numero de dıas.

Variables de salida:

SEG: variable de tipo real. Almacena la cantidad de segundos que hayen un numero determinado de dıas.

Page 58: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.5

SEGUNDOS EN DIAS

{ Dado un numero determinado de dıas,calcula cuantos segundos tienen estos. }

{ DIAS es una variable de tipo entero y SEG esuna variable de tipo real. }

1 Leer DIAS

2 Hacer SEG ← DIAS∗24 ∗ 60 ∗ 60

3 Escribir DIAS

# DIAS SEG

1 1 864002 7 6048003 15 12960004 30 2592000

Page 59: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.6

Ejemplo 6.6

Se desea conocer cuantos meses han transcurrido entre enero de 1949 yenero de 2002. Realice un algoritmo (diagrama de flujo, pseudocodigo) queresuelva dicho problema e implementelo en DFD.

Solucion

Variables:

ATRANS: variable de tipo entero; almacena el numero de meses que hayentre 1949 y 2002.

MESES

{ Determina el numero de meses que hayentre 1949 y 2002. }

1 Hacer ATRANS ← (2002− 1949) ∗ 12

2 Escribir ATRANS

Page 60: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.7

Ejemplo 6.7 (Generalizacion del ejemplo 6.6)

Se desea determinar los meses transcurridos entre los inicios de dos anoscualesquiera. Realice un algoritmo (diagrama de flujo, pseudocodigo) queresuelva dicho problema e implementelo en DFD.

Solucion

Datos:

AINICIAL: variable de tipo entero, representa el ano inicial.

AFINAL: variable de tipo entero, representa el ano final.

ATRANS: variable de tipo entero; almacena el numero de anos que hayentre el ano inicial y el ano final.

Variables de salida:

MTRANS: variable de tipo entero; almacena el numero de mesestranscurridos entre el ano inicial y el ano final.

Page 61: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Ejemplo 6.7

MESES GENERAL

{ Dado un numero determinado de dıas,calcula cuantos segundos tienen estos. }

{ DIAS es una variable de tipo entero y SEG esuna variable de tipo real. }

1 Leer AINICIAL, AFINAL

2 Hacer ATRANS ← AFINAL−AINICIAL3 Hacer MTRANS ← 12∗MTRANS4 Escribir ATRANS

# ANICIAL AFINAL MTRANS

1 1982 2008 3122 1969 1987 2163 1883 1972 10684 1944 1949 60

Page 62: Clase de turbo C

Introduccion Diagramas de flujo Diseno de diagramas Pseudocodigo GNU Octave Ejemplos

Referencias

O. CairoMetodologıa de la programacionSegunda edicion. Alfaomega Grupo Editor, S.A., 2005

J.W. EatonGNU Octave: A high-level interactive language for numericalcomputationsNetwork Theory Ltd., 2002