Está en la página 1de 21

2

NDICE

Fundamentos de Informtica E.U.P. Universidad de Sevilla (I.T. Diseo Industrial)

Concepto de Algoritmo Datos: Variables y Constantes Tipo de datos compuestos: Vectores y Matrices Representacin de Algoritmos
Diagrama de Flujo, Pseudo cdigo Lenguajes de programacin: MATLAB

Introduccin a la Algortmica y a la Programacin en MATLAB

Programacin Estructurada
Estructura Secuencial Estructura Selectiva Simple (If) Doble (If-else) Mltiple Estructura Repetitiva While (Mientras) For (Para)

CONCEPTO DE ALGORITMO (1)

EJEMPLO DE ALGORITMO INTUITIVO: RECETA DE COCINA

Calabacines rehogados Un algoritmo es un conjunto de acciones que determinan la secuencia de los pasos a seguir para resolver un problema especfico. Otras definiciones:
Conjunto de reglas en cierto orden para resolver un problema. Una forma de describir la solucin de un problema en pasos sucesivos.
1. 2. 3. 4. 5. 6.

Pelar los calabacines y cortar en rodajas Aadir sal a los calabacines Poner los calabacines en una sartn con aceite a medio fuego Mover los calabacines hasta que estn trasparentes Sacar de la sartn y escurrir el aceite Aadir queso parmesano rallado; sino se dispone de parmesano, utilizar queso curado.

Los pasos de un algoritmo deben estar definidos:


con precisi precisin, no deben existir ambigedades que den origen a elegir una decisin equivocada. con un orden estricto. La alteracin de tal orden conducira a que el algoritmo no resolviera el problema correctamente

Cualquier error no funcionar. Pensar ej. Elementos del algoritmo


COCINA Ingredientes Ingredientes intermedios Acciones Orden de ejecucin de las acciones Resultado (Plato DE calabacines) PROGRAMACIN Entrada Variables, Constantes Sentencias Secuencialidad Salida

EJEMPLO DE ALGORITMO INTUITIVO: Qu pasa cuando no se especifica bien un algoritmo? Un ejemplo de algoritmo: est bien especificado? 1. Sal de casa 2. Ve a la tienda y pide dulces. 3. Si la tienda no tiene, vuelve al punto 2 4. Vuelve a casa.

EJEMPLO DE ALGORITMO INTUITIVO: Qu pasa cuando no se especifica bien un algoritmo? El algoritmo del ejemplo anterior est mal especificado:
2. Ve a la tienda y pide dulces. 3. Si la tienda no tiene, vuelve al punto 2

OK
Va a ser que no

EJEMPLO DE ALGORITMO INTUITIVO: Qu pasa cuando no se especifica bien un algoritmo? El algoritmo bien especificado sera el siguiente:

Conceptos bsicos: Qu pasa cuando no se especifica bien un algoritmo? Resultado de la ejecucin del algoritmo bien especificado:

Ahora s que le has cogido el truco

OK

1. Sal de casa 2. Ve a la tienda ms cercana que no hayas visitado y pide dulces. 3. Si la tienda no tiene y t no ests cansado, vuelve al punto 2 4. Vuelve a casa
2. Ve a la tienda y pide dulces. 3. Si la tienda no tiene, vuelve al punto 2

10

EJEMPLOS DE ALGORITMOS CONOCIDOS

EJEMPLO DE ALGORITMO DIFICIL


Descubrir si un nmero es primo: a partir de su definicin
1. 2. 3.
4.

Ejemplo 1: descubrir si un nmero es impar.


1. 2.

Leer numero rem(num,2) == 0? (es decir, es num divisible por 2?) a) SI: entonces ES PAR b) NO: entonces ES IMPAR

Leer el nmero y guardarlo en num. Guardo en k el valor 2. bucle


Es num divisible por k? (es decir, rem(num,k) == 0? )
5. 6. 7. 8.

Ejemplo 2: Convertir de decimal a binario. Hay que dividir por 2 mientras el cociente sea >= 2
1. 2.
3. 4. 5.

SI: no es primo. Fin del algoritmo. NO: An num puede ser un nmero primo. Continuar con paso siguiente.

Incrementar k en 1. Es k mayor o igual que num?


9. 10.

Leer numero decimal y guardarlo en D bucle (repeticin)


Hallo el resto de D/2, es decir, R=rem(D,2). Imprimir R (digito binario) Hallo el cociente: C=D/2 (me quedo con la parte entera) Es C mayor o igual que 2?
6. 7.

SI: es primo. Fin del algoritmo. NO: Continuar con el paso 3 (repetir del 3 al 10).

11.

finbucle UN ALGORITMO CONCRETO NO TIENE POR QU SER PTIMO


Ejemplo: Mejora en el algoritmo anterior: slo dividir por 2 e impares Ms mejoras? Puede que hubiera otras posibles mejoras.

S: Guardar C en D (D=C). Continuar con el paso 2 (repetir del 2 al 7). No: Imprimir C (digito binario). Fin del algoritmo.

Elementos del algoritmo


Datos de entrada, variables y constantes (Ej: num, k) Sentencias: manipulan los datos (Ej: rem(num,k)) Orden de ejecucin de las Sentencias (si el orden est mal Salida (por pantalla o datos de salida)

8.

finbucle

error lgico)

11

12

CONCEPTO DE ALGORITMO (2) Componentes informticas de un algoritmo: proceso (sentencias) datos de entrada datos de salida (resultados). Lenguaje para expresarlo (SINTAXIS). Ej: MATLAB
ALGORITMO
DATOS DE ENTRADA

CONCEPTO DE ALGORITMO (3)

La sintaxis consta de un conjunto de palabras y signos reservados que tienen una funcionalidad especfica. Son comandos, nombres de variables y caracteres especiales del lenguaje de programacin que usemos.
Ej: la palabra ans se corresponde con una variable creada automticamente por MATLAB. Ej: la palabra who se corresponde con un comando de MATLAB que sirve para conocer los nombres de las variables creadas hasta ese momento. Ej: la palabra disp() se corresponde con el nombre de una funcin de MATLAB que sirve para mostrar datos por pantalla. Ej: el signo % se utiliza para aadir comentarios que MATLAB no interpretar como cdigo a ejecutar.

PROCESAMIENTO

RESULTADOS

TECLADO

ARCHIVO

LENGUAJE (SINTAXIS)

PANTALLA

ARCHIVO

13

14

REPRESENTACIN DE LOS ALGORITMOS (1) Existen diversas herramientas para representar un algoritmo: Lenguajes de descripcin de algoritmos: Diagramas de Flujo Pseudocdigo Lenguajes de implementacin de algoritmos: Son los lenguajes de programacin, entre los que se encuentra el de MATLAB (otros ejemplos: C, JAVA,PHP,Perl,Javascript,...)

REPRESENTACIN DE LOS ALGORITMOS (1)

PSEUDOCDIGO: Es una mezcla de lenguaje de programacin y espaol (o cualquier otro idioma). Lo importante es entender el algoritmo y comprobar que sea correcto. La SINTAXIS usada no es tan importante por tratarse de un lenguaje informal. Ventajas: El lenguaje est cercano a nuestro idioma. Fcil comprensin del cdigo. Desventaja: No es ejecutable directamente en un ordenador.

15

16

REPRESENTACIN DE LOS ALGORITMOS (1)

REPRESENTACIN DE LOS ALGORITMOS (2)

PSEUDOCDIGO (Ejemplo):
1. ALGORITMO Problema1 2. ENTRADA 3. SALIDA 4. 5. 6. 7. 8. 9. 10. FIN LEE a LEE b LEE c p (a + b + c) / 2 s sqrt ( p * (p-a) * (p-b) * (p-c) ) ESCRIBE p , s a, b, c p, s

DIAGRAMA DE FLUJO: Es un lenguaje grfico que sirve para expresar la solucin del algoritmo. La SINTAXIS usada s es importante. Ventajas: Muy grfico. Permite entender de un vistazo la solucin algortmica. Desventajas: Ocupa mucho espacio. No es ejecutable en un ordenador.

17

18

REPRESENTACIN DE LOS ALGORITMOS (2)

REPRESENTACIN DE LOS ALGORITMOS (3)

DIAGRAMA DE FLUJO (Ejemplo):


ALUMNO INTERESADO EN HACER EVALUACIN ALTERNATIVA ALUMNO INTERESADO EN HACER SLO EVALUACIN CLSICA

SI
EX. PARCIAL BLOQUE TEMTICO 2 >=3.5

NO

SI
EVALUACIN BLOQUE TEMTICO 3 >=3.5

NO

SI
NOTA FINAL= (Nota Blq 1 * 0.15) + (Nota Blq 2 * 0.6)+ (Nota Blq 3*0.25)

SI
APROBADO, NOTABLE, SOBRESALIENTE

Nota FINAL >=5

NO

(60% Bloque 2)+ (40% Bloques 1 y 3)

El alumno puede seguir asistiendo a clases, pero ya no tiene la opcin de superar la asignatura por evaluacin alternativa

EX. PARCIAL BLOQUE TEMTICO 1 >=3.5

NO

Evaluacin Clsica
Un nico examen en las convocatorias oficiales

SI

Nota FINAL >=5

NO
SUSPENSO

APROBADO, NOTABLE, SOBRESALIENTE

LENGUAJE DE PROGRAMACIN: Es un lenguaje PROCESABLE POR EL ORDENADOR que sirve para expresar el cdigo del algoritmo. La SINTAXIS usada s es MUY importante. Ventaja: Es ejecutable en un ordenador. Desventajas: La sintaxis suele estar en ingls, pero es fcil acostumbrarse (son slo un conjunto limitado de palabras reservadas). La sintaxis es estricta. Hay que aprenderla bien, y tambin aprender a detectar los errores.

19

20

REPRESENTACIN DE LOS ALGORITMOS (3)

Introduccin a la programacin imperativa (1)


Hay dos grandes paradigmas de la programacin:
Programacin Imperativa (es la ms bsica y la que aprenderemos en nuestro curso) Programacin Orientada a Objetos (es ms avanzada, y hace uso de la programacin imperativa)

LENGUAJE DE PROGRAMACIN (Ejemplo: MATLAB)


function result = negativo() img1=imread('foto.jpg'); img2=img1 [numfil,numcol,canales]=size(img2); image(img1); for i=1:numfil for j=1:numcol for k=1:canales img2(i,j,k)= 255 - img1(i,j,k); img2(i,j,k)= 255 - img1(i,j,k); img2(i,j,k)= 255 - img1(i,j,k); end end end figure image(img2) imwrite (img2,imagen_resultante.jpg); end

En cualquiera de los dos paradigmas el ordenador slo reconoce el lenguaje mquina (lenguaje ensamblador). Las programadores tienen dificultades para trabajar con el lenguaje mquina por estar muy cercano a la arquitectura del ordenador (CPU, Sistema Operativo,etc.). Solucin: lenguajes de programacin de alto nivel (Ej: lenguaje C, MATLAB, JAVA,)
Pueden sustituir varias instrucciones del lenguaje mquina por una sola instruccin de un lenguaje ms cercano al lenguaje matemtico de fcil compresin para el programador Ms fcil desarrollo y mantenimiento del software. No es necesario conocer el hardware del ordenador Portabilidad del software.

21

22

Introduccin a la programacin imperativa (2)

Introduccin a la programacin imperativa (3)


Compilar: mediante un programa llamado compilador se genera un fichero ejecutable a partir de un fichero con cdigo fuente escrito en un lenguaje de alto nivel. Ej: lenguaje C. Interpretar: mediante un programa llamado intrprete se traduce sentencia a sentencia (instruccin a instruccin) y a continuacin se ejecuta el cdigo de la sentencia traducida. Ej: MATLAB es un lenguaje interpretado (aunque tambin permite compilar). Ventajas/desventajas:
La compilacin permite la ejecucin ms rpida de programas, da la posibilidad de optimizar cdigo, y hace la aplicacin independiente del compilador. Pero tiene la desventaja de que el fichero ejecutable final ocupa ms espacio (al ser cdigo mquina), y adems es ms difcil depurar errores. La interpretacin ahorra compilacin, ocupa menos tamao, facilita la portabilidad entre sistemas operativos, y la depuracin de errores sintcticos es ms fcil porque slo te da el primero que encuentra (hasta que es depurado y entonces te da el siguiente error, si lo hay). Pero tiene la desventaja de depender del intrprete para ejecutarse.

Cdigo ensamblador Cdigo lenguaje MATLAB variable3 = variable2 + 5; MOV R3, [R4] ADD R3, 5 MOV [R5], R3 ; R3 variable2 ; R3 variable2 + 5 ; variable3 R3

Es necesario un proceso de traduccin de lenguaje en alto nivel al lenguaje mquina (lenguaje ensamblador) Traduccin Dos posibilidades de traduccin de un programa escrito en un lenguaje de alto nivel:
Compilar el cdigo Interpretar el cdigo

23

24

DATOS: VARIABLES Y CONSTANTES

DATOS: VARIABLES Y CONSTANTES


Los valores que pueden tomar las variables y las constantes pertenecen a un TIPO (tipo de dato). As, por ejemplo existen tipos:
Numricos: enteros, reales, etc. Caracteres: contienen texto
Ejemplo: Una variable que contenga el nombre de una persona.

DATO es cualquier objeto manipulable por el ordenador y que contiene informacin Se distinguen dos clases de datos:
VARIABLES: Objeto cuyo valor cambia durante la ejecucin de un programa.
Ejemplo: Las variables num y k del algoritmo de los nmeros primos

Booleanos: su valor slo puede ser verdadero o falso


Ejemplo: Las respuestas a preguntas rem(num,k)==0? Normalmente en los lenguajes de programacin el valor numrico 0 se corresponde con el valor falso, y el resto de los valores numricos se corresponden con el valor verdadero.

CONSTANTES: Objeto cuyo valor NO cambia durante la ejecucin de un programa.


Ejemplo: el nmero pi. Una variable que creemos y le demos slo un valor inicial sin modificarlo funciona como una constante. Ej: x=0 %si x no varia su valor dentro del algoritmo funciona como constante

En MATLAB todas las variables sern reales de doble precisin (double) mientras no se fuerce a que sean de otro tipo. Ej: num, k en el algoritmo de los nmero primos seran variables reales. Al ser todas las variables por defecto de tipo real de doble precisin, en MATLAB NO ES NECESARIO DECLARAR LAS VARIABLES ANTES DE USARLAS (mientras que la declaracin de variables es obligaroria en la mayora de los lenguajes de programacin).

25

26

DATOS: VARIABLES Y CONSTANTES

DATOS: VARIABLES Y CONSTANTES


En MATLAB una variable se crea la primera vez que se utiliza.

En MATLAB una variable se crea la primera vez que se utiliza.


Los nombres distinguen maysculas de minsculas
Ej: La variable Var1 no es la misma que las variables VAR1, var1,

CONSEJOS PARA CREAR NOMBRES DE VARIABLES: Utilizar siempre nombres en minsculas. No usar caracteres raros ni acentos ni la letra .
Ej: anio %en lugar de ao

A las variables hay que darles un valor inicial en una sentencia de asignacin: nombre_de_variable= expresin_o_valor donde el nombre_de_variable siempre tiene que estar a la izquierda de la asignacin Ej: x=3; y=5; y=x
% la variable y tomar el valor 3 % si invertimos el orden x=y entonces la x tomar el valor 5

Si el nombre de la variable est compuesto por ms de una palabra usar un guin bajo _ para unirlas.
Ej: nombre_empleado %en lugar de nombre empleado que MATLAB interpretara como dos variables nombre y empleado.

Ej (incorrecto): x=z+1
%dar un error porque la variable z no tiene valor inicial y por tanto no se le puede sumar 1. Es decir, una variable no debe aparecer por primera vez en lectura (como la variable z) antes que en escritura.

Ej (correcto):
x=2 x=x+1 % al final x valdr 3. Es correcto porque en la variable x se escribi primero
un valor inicial 2.

27

28

DATOS: VARIABLES Y CONSTANTES En MATLAB la variable ans (del ingls answer) contiene el valor de la ltima operacin calculada por el programa en ejecucin. Esta variable es creada automticamente por MATLAB y no podemos crear otra variable con el mismo nombre. Ej: al ejecutar la operacin 1+3*8 en MATLAB nos devolver el valor resultante en la variable ans, a no ser que la metamos explcitamente en una variable creada por nosotros: >> 1+3*8 ans = 25 >> n=1+3*8 n= 25

SENTENCIA DE ASIGNACIN

En la sentencia de asignacin: nombre_de_variable= expresion_o_valor


nombre_de_variable: nombre de variable definida previamente en alguna sentencia de declaracin. = operador de asignacin. Indica que el valor calculado en expresin debe ser almacenado en nombre_de_variable. expresion_o_valor: indica cmo se calcula el valor a almacenar.

29

30

SENTENCIA DE ASIGNACIN

SENTENCIA DE ASIGNACIN

CUIDADO! No confundir la asignacin con una comparacin de igualdad.


Para la asignacin se emplea un nico =
Ej: x=z %da a x el valor que tenga z

En la sentencia de asignacin: nombre_de_variable= expresion_o_valor donde la expresion_o_valor puede ser:


un valor una expresin aritmtica, una expresin lgica (que expresa una condicin, y est sujeta al lgebra de Boole) o una mezcla, es decir una expresin aritmtico-lgica.

Para la comparacin se emplea doble ==


Ej: x==z %compara si x e z tienen el mismo valor

Para la desigualdad se usa ~=


Ej: x~=z %compara si x e z tienen distinto valor

31

32

EXPRESIONES ARITMTICAS
Expresin ARITMTICA

EXPRESIONES LGICAS (CONDICIONES)


Se modelan como variables y/o expresiones del lgebra de Boole una expresin de condicin es cierta falsa.

Resultado de la expresin
El resultado de la expresin es el valor de la constante El resultado de la expresin es el valor de la variable Suma Expresin1 y Expresin2, que son, a su vez, expresiones ms pequeas Resta Expresin2 a Expresin1 Multiplica Expresin1 y Expresin2 Divide Expresin1 entre Expresin2 El resultado es la Expresin cambiada de signo funcin

Constante Nombre_de_Variable Expresin1 + Expresin2 Expresin1 Expresin2 Expresin1 * Expresin2 Expresin1 / Expresin2 - Expresin

Expresin RELACIONAL
Operando1 > Operando2 Operando1 >= Operando2 Operando1 < Operando2 Operando1 <= Operando2 Operando1 == Operando2 Operando1 ~= Operando2

Resultado de la expresin
Es verdadero si Operando1 ES MAYOR QUE Operando2 Es verdadero si Operando1 ES MAYOR O IGUAL QUE Operando2 Es verdadero si Operando1 ES MENOR QUE Operando2 Es verdadero si Operando1 ES MENOR O IGUAL QUE Operando2 Es verdadero si Operando1 ES IGUAL QUE Operando2 Es verdadero si Operando1 ES DISTINTO QUE Operando2

funcion(lista_parmetros) El resultado de la expresin es el valor devuelto por la

33

34

EXPRESIONES LGICAS (CONDICIONES)


Expresin LGICA (sintaxis en MATLAB)
Operando1 & Operando2 Es verdadero si Operando1 es verdadero Y Operando2 es verdadero and (Operando1, Operando 2) Operando1 | Operando2 Es verdadero si Operando1 es verdadero O Operando2 es verdadero or (Operando1, Operando 2)

EXPRESIONES LGICAS (CONDICIONES)


Se suelen emplear en las condiciones que controlan las estructuras selectivas e iterativas.
Ej: El siguiente cdigo pide al usuario un nmero y averigua si es par y positivo. num=input(Introduzca un nmero: ); if rem(num,2)==0 & num>0 disp(El nmero es par y positivo); end; Ej: El siguiente cdigo pide al usuario un nmero, evala si es entero, y le da la oportunidad de meterlo de nuevo num=input(Introduzca un nmero entero: ); while floor(num)~=num disp(Error. El nmero es real, tiene decimales); num=input(Tiene que introducir un nmero entero: ); end;

Resultado de la expresin

~ Operando1
Es verdadero si Operando1 NO es verdadero not (Operando1)

NOTA: Para poner el operador de negacin ~ se puede hacer de dos formas: 1. Pulsando la tecla Shift (la que sirve para poner las maysculas) y tecleando el nmero 126 rpidamente sin soltar la techa Shift 2. Pulsando las teclas Alt-Gr el nmero 4 y la barra de espacio Prubalo, es fcil!

Representacin de la lgica
lgebra de Boole Inventada para lgica filosfica (s.XIX). As trabajan los computadores actuales pues con transistores se implementa muy fcilmente. lgebra con slo dos elementos: 0 (FALSO) y 1 (VERDADERO) Y con un conjunto de operaciones definidas sobre tales elementos :
Operaciones UNARIAS:
Negacin lgica (NOT): ~A not(A) Operaciones BINARIAS: Y lgico (AND): A & B and(A,B) O lgico (OR): A | B or(A,B) O exclusivo (XOR): xor(A,B) A 0 1 ~A 1 0

35

lgebra de Boole
Leyes fundamentales
Ley conmutativa, asociativa, distributiva OR (suma) Ley de idempotencia Ley de absorcin Ley de De Morgan A|A=A A | (A & B) = A
~(A | B) = (~ A) & (~ B)

36

AND (producto) A&A=A A & (A | B) = A


~(A & B) = (~ A) | (~ B)

NOTA: La operacin OR tambin se llama suma lgica, pero no tiene nada que ver con la suma aritmtica de nmeros binarios: 1 + 1 = 10(2 (suma aritmtica) 1|1=1 (lgebra de Boole)

A B

A&B

A|B

xor(A,B)

0 0 0 1 1 0 1 1

0 0 0 1

0 1 1 1

0 1 1 0

El lgebra de Boole y estas leyes son tiles a la hora de operar y simplificar expresiones de condicin en nuestros programas y de pensar en las condiciones que deben cumplirse en los programas Hacer los siguientes ejercicios del enunciado de la prctica 1

Ejercicio 19

Ejercicio 20

Ejercicio 21

Y usar el test de autoevaluacin correspondiente en Enseanza Virtual para comprobar los resultados.

lgebra de Boole
Leyes fundamentales

37

lgebra de Boole
Leyes fundamentales

38

Demostracin de la Ley de Absorcin


A | (A & B) = A Esto quiere decir que nos da igual lo que valga B Si A==0 0 | (0 & B)
%el valor 0 en (0 & B) hace que este operando sea falso. Por tanto 0 | 0 vale 0, es decir no importa qu valor tiene B. Prima el valor de A.

Utilidad del lgebra de Boole en programacin: Ejemplos prcticos:


Comprobar si una variable num est en el intervalo [0,10] (num >=0) & (num<=10) Comprobar si una variable num est fuera del intervalo [0,10], es decir la condicin contraria a la anterior. ~((num >=0) & (num<=10)) y aplicando las Leyes de De Morgan queda (num<0) | (num >10)

Si A==1 1 | (1 & B)
%el valor 1 | (lo que sea) hace que el resultado sea directamente verdadero. Es decir no importa qu valor tiene B. Prima el valor de A.

Ejercicio para el alumno: De forma anloga a la mostrada en la demostracin anterior A | (A & B) = A, pruebe a demostrar que la siguiente ley de absorcin tambin es cierta: A & (A | B) = A

39

40

EXPRESIONES ARITMTICAS Y LGICAS (ORDEN DE PRIORIDAD)


Operador Prioridad
Alta

FUNCIONES DE DE MATLAB

Precedencia de los operadores:

-(operador ~ * + <

unario

de signo)

/ <= >= > ~= & |


Baja

IMPORTANTE: Los parntesis alteran el orden de evaluacin de la expresin


Ej: 3*2+1 no es igual que 3*(2+1)

==

MATLAB ofrece una serie de funciones que se pueden utilizar/llamar directamente en nuestro cdigo. Estas funciones se agrupan dentro de libreras. Las funciones reciben unos parmetros de entrada y devuelven uno o ms resultados. Ej: rem(), floor(), ceil(), round(), factorial(),
Ej: rem(15,3) %devuelve el resto de la divisin entera de 15/3

41

42

FUNCIONES DE MATLAB Para saber cmo usar una funcin concreta de las que tiene MATLAB poner en la ventana de comandos: help nombre_comando
Ej: help rem IMPORTANTE: En la ayuda de MATLAB las funciones aparecen con nombres en maysculas, pero en realidad se emplean en minsculas.

SALIDA DE DATOS POR PANTALLA

Para saber el nombre de todas las variables activas en un momento dado de la ejecucin de un programa, usar el comando who. Para eliminar las variables activas en un momento dado de la ejecucin de un programa, usar el comando clear. Para distinguirlas de otras palabras reservadas las nombraremos como nombre_funcion() es decir seguidas de dos parntesis ( ).

Un programa puede imprimir por pantalla el valor de una variable. En MATLAB se utiliza la funcin disp() usando como argumento un texto entre comillas simples .
Ej: disp(Hola mundo); Ej: disp (var1); % siendo var1 el nombre de una variable

Para saber ms sobre esta funcin ejecutar en la ventana de comandos de MATLAB help disp

43

44

ENTRADA DE DATOS POR TECLADO

PROGRAMACIN ESTRUCTURADA Un programa se escribe utilizando los siguientes tipos de estructuras de control:

El usuario puede dar un valor a una variable a travs del teclado mediante la funcin input(Texto a mostrar al usuario). Esta funcin de MATLAB muestra el mensaje que le ponemos entre comillas simples dentro de los parntesis ( ), y adems lee del teclado el valor que introduzca el usuario cuando ste presione la tecla INTRO.
Ej: var_edad = input(Introduce tu edad)

Secuencial: Selectiva:

Una accin se ejecuta una tras otra, es

decir, una instruccin sigue a otra en secuencia. Se evala la condicin y en funcin del

resultado se ejecuta un conjunto de instrucciones u otro. Hay tres tipos de selectivas (simple, doble o mltiple).

Repetitiva:

Contienen

un

bucle

(conjunto

de

Para saber ms sobre esta funcin ejecutar en la ventana de comandos de MATLAB help input

instrucciones que se repiten un nmero finito de veces). Cada repeticin del bucle se llama iteracin. Todo bucle tiene que llevar asociada una condicin, que determina si el bucle se repite o no.

45

46

ESTRUCTURA SECUENCIAL

EJEMPLO DE ESTRUCTURA SECUENCIAL (Problema 1: enunciado)

Sentencia 1 Sentencia 2 ... Sentencia N

Escriba un algoritmo en MATLAB tal que, dadas tres variables que contienen la longitud de los lados de un tringulo a, b y c, calcule su rea S aplicando las siguientes ecuaciones: p = (a + b + c)/2

Se caracteriza porque las acciones se ejecutan una tras otra, es decir una sentencia sigue a otra en secuencia.

S =

p ( p a )( p b )( p c )

El valor de las variables a, b y c debe leerse del teclado, y el resultado s debe mostrarse por pantalla. Usar la funcin sqrt() de MATLAB para calcular la raz cuadrada.

47

48

EJEMPLO DE ESTRUCTURA SECUENCIAL


(Problema 1: solucin)

CMO CREAR NUESTRA PROPIA FUNCIN


(Sintaxis)
Una funcin hay que definirla y luego llamarla (para usarla). Para definir una funcin se sigue la siguiente sintaxis: function [varsal1, varsal2,]= nombre_funcion (varent1, varent2,) <cdigo en MATLAB que resuelve esta funcin> end La funcin comienza con la palabra reservada de MATLAB function A continuacin, van los nombres de las variables de salida separadas por comas y entre corchetes [ ]. En una funcin que no devuelve nada no hay variables de salida. En una funcin que slo hay una nica variable de salida no es necesario poner los [ ]. Despus de las variables de entrada va un = , a no ser que la funcin no devuelva ninguna variable de salida, en cuyo caso no es necesario poner el = Despus va el nombre de la funcin que siempre debe estar presente y debe coincidir con el nombre del fichero de MATLAB que contiene la funcin (con extensin .m), es decir el fichero se llamar nombre_funcion.m Siguiendo el nombre de la funcin van los nombres de las variables de entrada separadas por comas y entre ( ). Podra ocurrir que una funcin no recibiera datos de entrada de esta manera, pero suele ser habitual que s las lleve.

Guardamos el cdigo que tenemos en el fichero de script problema1.m a= input('Introduzca el valor del primer lado del tringulo: '); b= input('Introduzca el valor del segundo lado del tringulo: '); c= input('Introduzca el valor del tercer lado del tringulo: '); p=(a+b+c)/2; s= sqrt (p * (p-a) * (p-b) * (p-c)); disp(La superficie del tringulo vale: ); disp(s);

EJEMPLO DE FUNCIN
(Problema 1F: Cmo convertir en funcin un script, en este caso la solucin del problema1)
1. 2. Guardamos el cdigo que tenemos en el fichero fproblema1.m (fichero con el mismo nombre que la funcin que tiene codificada dentro). Averiguamos cules son las variables de entrada y de salida En este ejemplo las variables de entrada son a, b, c y la variable de salida es s 3. Aadimos la cabecera de la funcin 4. Quitamos el cdigo que sobra, que suele tener que variables de entrada (en este caso: a,b,c, ya que estas

49

50

EJEMPLO DE FUNCIN
(Problema 1F: Qu se obtiene al llamar a la funcin?)
Por tanto, la definicin de la funcin completa quedara de la siguiente forma:

function s = fproblema1(a,b,c) p=(a+b+c)/2; s= sqrt (p * (p-a) * (p-b) * (p-c)); disp(La superficie del tringulo vale: ); disp(s); end
>> fproblema1(20,20,20) La superficie del tringulo vale: 173.205
Al llamar a la funcin desde lnea de comandos, se obtiene el resultado en la ventana de MATLAB. Ej: El resultado para un triangulo con lados de longitud 20,20 y 20 sera el devuelto por la llamada a la funcin, en este caso dara 173.205

function s = fproblema1(a,b,c)

a= input('Introduzca el valor del primer del tringulo: '); inciales a las verlado con las asignaciones de valores
tanto no es necesario pedirle su valor al usuario c= input('Introduzca el valor del tercer lado del tringulo: '); mediante el uso de la funcin input()

variables se crean en memoria justo b= input('Introduzca el valor del segundo lado del tringulo: '); cuando se llama a la funcin y reciben los valores de la llamada. Por

p=(a+b+c)/2; s= sqrt (p * (p-a) * (p-b) * (p-c)); disp(La superficie del tringulo vale: ); disp(s); end
5. Cerramos la funcin con un end

51

52

EJEMPLO DE FUNCIN
(Problema 1F: Qu ocurre en la memoria en tiempo de ejecucin?)
Al ejecutar en la lnea de comando la sentencia >> res = fproblema1(20,20,20) %ver paso1 %ver paso5 en la memoria del ordenador se reserva espacio para la variable global res

EJEMPLO DE ESTRUCTURA SECUENCIAL (Problema 1B: enunciado para el alumno)

function s = fproblema1(a,b,c) p=(a+b+c)/2; s= sqrt (p * (p-a) * (p-b) * (p-c)); disp(La superficie del tringulo vale: ); disp(s); end

%ver paso2 %ver paso3 %ver paso4

Escriba un algoritmo en MATLAB tal que, dado el radio de una esfera r (que debe leerse del teclado), calcule e imprima por pantalla la longitud de su ecuador l, su superficie S y su volumen V, aplicando las siguientes ecuaciones: l=2r S = 4 r2 = 2 r l V = 4/3 r3 = r S/3 Para calcular las potencias puede usar en MATLAB el operador ^ Ej: r^3

Al ejecutarse la funcin desde la lnea de comando lo primero que se reserva es espacio en memoria son las variables locales s, a, b, c y luego la variable auxiliar p. Se hacen los clculos de p y s, y luego se imprime La superficie del tringulo vale 173.205
res res s a b c p res s a b c p res s a b c p 173.205 20 20 20 30 res s a b c p 173.205 173.205 20 20 20 30

20 20 20

20 20 20 30

%paso1

%paso2

%paso3

%paso4

%paso5

Al terminar de ejecutarse la funcin, las variables locales desaparecen de memoria, y el valor de la variable s, (en este caso 173.205) es devuelta por la funcin y queda guardada en la variable global res.

53

54

ESTRUCTURA SELECTIVA (SIMPLE)

EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE (Problema 2: enunciado)

if condicion sentencias end

Construya un algoritmo en MATLAB tal que, dados los valores enteros P y Q, que deben leerse del teclado, determine si los mismos satisfacen la siguiente expresin:

Se evala la condicion, si es verdadera, se ejecutan las sentencias; en caso contrario, se salta dicho grupo de sentencias.

P 3 + Q 4 2 P 2 < 680
En caso afirmativo debe escribir por pantalla los valores de P y Q.

55

56

EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE (Problema 2: solucin)

EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE (Problema 2B: enunciado para el alumno)

P=input('Introduce el valor de P '); Q=input('Introduce el valor de Q '); if (P^3 + Q^4 - 2 * P^2) < 680 disp('La expresin aritmtica es menor que 680'); end

Construya un algoritmo en MATLAB tal que, dados los valores de una ecuacin de segundo grado a, b, c (que deben leerse del teclado), determine si el discriminante es negativo. En tal caso debe imprimir el valor del discriminante, y tambin debe informar al usuario que la ecuacin no tiene soluciones reales. Recordar que para la ecuacin: ax2+bx+c=0 El discriminante se define como: b2-4ac

57

58

ESTRUCTURA SELECTIVA (DOBLE)


if condicion sentencias 1 else sentencias 2 end Esta estructura permite elegir entre dos posibles bloques de acciones en funcin de una condicin. Se evala la condicion Si es verdadera: se ejecutan las sentencias 1. Si es falsa: se ejecutan las sentencias 2. donde condicin es: Cualquier expresin que toma el valor verdadero (valor distinto de 0) o falso (valor 0).
La expresin relacional (operadores <,<=,>,>=,= =,~=) es la ms utilizada. Uso de expresin lgica (operadores &,|,~) como combinacin de condiciones.

EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE (Problema 3: enunciado)

Calcular si ests aprobado o suspenso, a partir de la media aritmtica de la nota de tres exmenes parciales, que se leern del teclado.

59

60

EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE (Problema 3: solucin)

ESTRUCTURA SELECTIVA MULTIPLE


Existen dos posibles sintaxis: -En la mostrada en la izquierda la palabra else y el siguiente if van separados por un espacio en blanco. Y por cada if else hay un end al final.

ex1=input('Introduce la nota del primer examen: '); ex2=input('Introduce la nota del segundo examen: '); ex3=input('Introduce la nota del tercer examen: '); media=(ex1+ex2+ex3)/3; disp('La nota media es: '); disp (media);

-En la mostrada en la derecha los elseif van unidos y slo hay un end al final. -En cualquier de las dos sintaxis, no aparece nunca una condicin inmediatamente despus de un else. Para que aparezca una nueva condicin debe haber un else if o bien elseif. -El ltimo caso siempre va tras un else sin ninguna condicin detrs (en ambas sintaxis).

if condicion1 sentencias1 else if condicin2 sentencias2 else sentencias3 end end

if condicion1 sentencias1 elseif condicion2 sentencias2 elseif condicion3 sentencias3 else sentencias4 end

61

62

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4: enunciado)

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4: solucin)


cent= input('Introduce la temperatura en grados Farenheit: ');

Elabore un algoritmo en MATLAB que lea del teclado una temperatura en grados centgrados, calcule los grados Fahrenheit y escriba por pantalla el deporte que es apropiado practicar a esa temperatura, teniendo en cuenta la siguiente tabla:
TEMPERATURA en grados Fahrenheit TEMP> 85 70 < TEMP <= 85 35 < TEMP <= 70 32 < TEMP <= 35 TEMP<= 32 DEPORTE Natacin Tenis Golf Esqu Marcha

fah=(9 / 5) * cent + 32; disp('El deporte recomendado para esta temperatura es:') if fah >85 disp ('Natacin') elseif fah >70 disp ('Tenis') elseif fah >35 disp ('Golf') elseif fah >32 disp ('Esqu') else disp ('Marcha') end

Para convertir grados centgrados (variable c) a fahrenheit (variable f) se utiliza la siguiente ecuacin:

f = c

9 + 32 5

63

64

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4B: enunciado)

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4B: solucin)


hora=input('Introduce la hora: '); min=input ('Introduce los minutos: '); min_total=hora*60 + min; if min_total<0 disp ('Error: Hora no vlida') elseif min_total<(8*60) disp('El precio por minuto es de 6 cntimos de euro')

Elabore un programa en MATLAB que lea del teclado la hora del da y los minutos y escriba por pantalla el precio por minuto de una llamada telefnica, teniendo en cuenta la siguiente tabla:

Franja Horaria: Minutos De 0:00 a 7:59 De 8:00 a 14:59 De 15:00 a 19:29 De 19:30 a 23:59

Precio Por Minuto (en centimos de euro) 6 10 15 30

elseif min_total<(15*60) disp('El precio por minuto es de 10 cntimos de euro') elseif min_total<(19*60+30) disp('El precio por minuto es de 15 cntimos de euro') elseif min_total<=(23*60+59) disp('El precio por minuto es de 30 cntimos de euro') else disp ('Error: Hora no vlida') end

65

66

ESTRUCTURAS REPETITIVAS: VARIABLES ESPECIALES

EJEMPLO DE CONTADOR Y ACUMULADOR


Incrementa c cada vez que imprime una letra 'a' c=0; disp(a) c=c+1 disp(a) c=c+1 disp(a) c=c+1 En la variable ac acumula los valores ledos del teclado ac=0 v=input(Introduce valor:) ac = ac + v v=input(Introduce valor:) ac = ac + v

Contadores:
Son variables que se utilizan para contar. Normalmente su valor se incrementa o decrementa en 1.
Ejemplos: contador=0 contador = contador + 1 indice=10 indice = indice - 1

Acumuladores:
Se utilizan para almacenar el resultado de sumas sucesivas. Su valor se incrementa en cantidades variables.
Ejemplos: valor=input(Introduce un valor: ) total=0; %hay que inicializarlo al valor neutro de la suma, el 0 total = total + valor producto_multiple=1 %hay que inicializarlo al valor neutro del producto, el 1 producto_multiple = producto_multiple * valor

67

68

ESTRUCTURA REPETITIVA while (MIENTRAS)

PARTES DE UN BUCLE

while condicion sentencias end


La condicin del bucle se evala al principio, antes ejecutar las sentencias del bucle, Si es verdadera, se ejecutan las sentencias del bucle y despus se vuelve a evaluar la condicin. Es decir, mientras la condicin sea cierta se ejecutan las sentencias. En el momento en el que la condicin es falsa se sale del bucle. Como la condicin es evaluada, la primera vez, antes de entrar en el bucle, puede que el bucle se ejecute 0 veces. Cuando el bucle se acaba, la condicin seguro que es falsa Para finalizar un bucle, el valor de la condicin debe ser modificado en las sentencias que componen el bucle.

Cuando el bucle empieza a ser complejo, interesa seguir un mtodo para no equivocarse. Todo bucle debe tener:
I Inicializacin C Condicin de salida B cuerpo del Bucle A Actualizacin (si no existiera, la condicin siempre se cumplira y el bucle repetira infinitas veces)

Slo en casos excepcionales pueden faltar I, B El orden de ejecucin ser: I CBA CBA CBA...
Mientras el bucle itera: C es verdadero Cuando el bucle se acabe: C es falso

69

70

ESTRUCTURA REPETITIVA while : EJEMPLO


I c=1 C while c<3 disp(a) c<3 SI ESCRIBIR 'a' ESCRIBIR c cc+1 Ejercicios para el alumno: Identificar ICBA en los bucles de las soluciones de los prximos ejercicios. NO: fin del bucle c=c+1 end disp(c) B A

EJERCICIOS ESTR. REPETITIVA while Problema 5: enunciado

c1 comienzo bucle

Escriba un programa en MATLAB que lea del teclado un nmero y compruebe si es menor que 5. Si no lo es, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor correcto. Finalmente debe escribir por pantalla el valor ledo.

71

72

EJERCICIOS ESTR. REPETITIVA while Problema 5: solucin

EJERCICIOS ESTR. REPETITIVA while Problema 5B: enunciado

num=input('Teclee un nmero menor que 5: '); while (num>=5) num=input('Teclee un nmero menor que 5: '); end disp('El primer nmero ledo menor que 5 es: '); disp(num);

Escriba un algoritmo en MATLAB que lea del teclado un nmero y compruebe que el nmero introducido sea negativo. Es decir, mientras que sea mayor o igual que 0, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor negativo. Finalmente debe escribir por pantalla el valor ledo.

73

74

EJERCICIOS ESTR. REPETITIVA while Problema 5B: solucin

EJERCICIOS ESTR. REPETITIVA while Problema 6: enunciado

num=input('Teclee un nmero negativo: '); while num>=0 num=input('Teclee un nmero negativo: '); end disp('El primer nmero negativo ledo es: '); disp(num);

Escriba un programa en MATLAB que lea del teclado un nmero y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor correcto. Finalmente debe escribir por pantalla el valor ledo.

75

76

EJERCICIOS ESTR. REPETITIVA while Problema 6: solucin

EJERCICIOS ESTR. REPETITIVA while Problema 6B: enunciado

num=input('Teclee un nmero entre 5 y 15 (no incluidos): '); while (num<=5) | (num>=15) num=input('Teclee un nmero entre 5 y 15 (no incluidos): '); end disp('El primer nmero dentro del intervalo (5,15) ha sido: '); disp(num);

Escriba un algoritmo en MATLAB que lea del teclado un nmero y compruebe que el nmero introducido sea negativo e impar. Es decir, mientras que sea mayor o igual que 0 o sea par, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor negativo. Finalmente debe escribir por pantalla el valor ledo.

77

78

EJERCICIOS ESTR. REPETITIVA while Problema 6B: solucin

EJERCICIOS ESTR. REPETITIVA while Problema 7: enunciado

num=input('Teclee un nmero negativo e impar: '); while (num>=0) | (rem(num,2)==0) num=input('Teclee un nmero negativo e impar: '); end disp('El primer nmero negativo e impar ha sido: '); disp(num);

Escriba un programa en MATLAB que lea del teclado un nmero y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor correcto. Adems debe contar el nmero de veces que se introduce un nmero por teclado. Finalmente debe escribir por pantalla el contador del nmero de veces.

79

80

EJERCICIOS ESTR. REPETITIVA while Problema 7: solucin num=input('Teclee un nmero entre 5 y 15 (no incluidos): '); cont=1; while (num<=5) | (num>=15) num=input('Teclee un nmero entre 5 y 15 (no incluidos): '); cont=cont+1; end disp('El primer nmero dentro del intervalo (5,15) ha sido: '); disp(num); disp('y el nmero de veces que se ha ledo un nmero ha sido: '); disp(cont);

EJERCICIOS ESTR. REPETITIVA while Problema 7B: enunciado

Escriba un programa en MATLAB que lea del teclado un nmero y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor correcto. Adems debe contar el nmero de veces que se introduce un nmero por teclado. En cada iteracin del bucle debe escribir por pantalla el mensaje El nmero de equivocaciones cometidas hasta el momento es de: contador, donde contador mostrar el valor de la variable correspondiente.

81

82

EJERCICIOS ESTR. REPETITIVA while Problema 7B: solucin


num=input('Teclee un nmero entre 5 y 15 (no incluidos): '); cont=1; while (num<=5) | (num>=15) disp('El nmero de equivocaciones cometidas hasta el momento es de: '); disp(cont); num=input('Teclee un nmero entre 5 y 15 (no incluidos): '); cont=cont+1; end disp('El primer nmero dentro del intervalo (5,15) ha sido: '); disp(num); disp('y el nmero de veces que se ha ledo un nmero ha sido: '); disp(cont);

EJERCICIOS ESTR. REPETITIVA while Problema 7C: enunciado para el alumno

Escriba un programa en MATLAB que lea del teclado un nmero y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor correcto. Adems debe contar el nmero de veces que se introduce un nmero por teclado, mostrarlo por pantalla, y el bucle debe permitir realizar 10 lecturas del teclado como mximo. En cada iteracin del bucle debe escribir por pantalla el mensaje El nmero de equivocaciones cometidas hasta el momento es de: contador, donde contador mostrar el valor de la variable correspondiente.

83

EJERCICIOS ESTR. REPETITIVA while Problema 7D: enunciado para el alumno

Escriba un programa en MATLAB que lea del teclado un nmero, lo meta en la variable num, y que compruebe si est en el rango (5,15). Si no lo est, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario escriba un valor correcto. Adems debe contar el nmero de veces que se introduce un nmero por teclado, mostrarlo por pantalla, y el bucle debe permitir realizar 10 lecturas del teclado como mximo. Y si tras el bucle se descubre que se realizaron ya las 10 lecturas (y por eso se sali del mismo), escriba por pantalla: 'Has cometido el mximo de errores permitido. Si se sali porque el nmero estaba en el intervalo, imprimir la frase El primer valor del intervalo ha sido: y el valor de la variable num correspondiente.

También podría gustarte