Download Introducción a la programación Corrección Corrección : Factorial

Document related concepts
no text concepts found
Transcript
Corrección
•
Introducción a la programación
Evaluar el siguiente programa para
cada uno de los 3 casos que se
indican (indica cual será el valor de
x, y, z en cada uno de los 3 casos )
IF (x<5 OR y>2) AND z>3 THEN
xß1
IF (z-y ) > 0 THEN
zß0
ENDIF
y ßy + z
ELSE
xß2
z ß y +z
ENDIF
Sergi Jordà
Curso de postgrado “Programación
Orientada al Multimedia”
Institut Universitari de l’Audiovisual
Universitat Pompeu Fabra
a) x=4 y=1 z=4
b) x=4 y=5 z=4
c) x=1 y=3 z=1
Corrección : Factorial
a)
b)
c)
x
y
z
ini
4
1
4
fin
1
1
0
ini
4
5
4
fin
1
5
0
ini
1
3
1
fin
2
3
4
Corrección : Factorial
funcion factorial (n tipo entero) tipo entero
var resultado tipo entero
resultado ß 1
while n>= 1 do
resultado ß resultado * n --que valor inicial debe tener resul?
n ß n-1
end while
devolver resultado
end funcion
funcion factorial (n tipo entero) tipo entero
var resultado tipo entero
resultado ß 1
while n>= 1 do
resultado ß resultado * n – debe valer 1
n ß n-1
end while
devolver resultado
end funcion
•
•
•
•
•
Que sucede cuando n vale 1? El resultado es correcto (1)
Que sucede cuando n vale 0? El resultado también es correcto
(porque por definición, el factorial de 0 vale 1)
Que sucede cuando n<0? El factorial de un número negativo no
está definido, pero nuestra función devuelve 1
•
Que sucede cuando n vale 1? El resultado es correcto (1)
Que sucede cuando n vale 0? El resultado también es correcto
(porque por definición, el factorial de 0 vale 1)
Que sucede cuando n<0? El factorial de un número negativo no
está definido, pero nuestra función devuelve 1
Corrección potencia
Corrección : Factorial
funcion factorial (n tipo entero) tipo entero
var resultado tipo entero
resultado ß 1
while n>= 1 do
resultado ß resultado * n – debe valer 1
n ß n-1
end while
devolver resultado
end funcion
funcion potencia (base tipo entero, expo tipo entero) tipo entero
var resultado tipo entero
resultado ß1
while expo>=1 do
resultado ßresultado * base
expo ß expo-1
end for
devolver resultado
end funcion
•
•
•
•
Que sucede cuando n vale 1? El resultado es correcto (1)
Que sucede cuando n vale 0? El resultado también es correcto
(porque por definición, el factorial de 0 vale 1)
Que sucede cuando n<0? El factorial de un número negativo no
está definido, pero nuestra función devuelve 1
Escrito de esta forma, el resultado también es correcto cuando el
exponente vale 1 ó 0 (por definición, cualquier número elevado a 0 vale
1). No lo es sin embargo cuando el exponente es negativo. En este último
caso habría que hacer modificaciones
1
Introducción a las Matrices
O vectores, tablas, arrays, arreglos …
• Si una variable fuese un cajón, una matriz sería un armario de cajones
• Este armario nos permitirá acceder a cada uno de sus cajones , indicando
sencillamente el nombre del armario y el número del cajón
• La utilidad principal de este tipo de datos es que permite ser utilizado con
Tema 5 : Matrices
facilidad en una estructura iterativa(e.g. for o while)
• Supongamos que queremos un programa que pida al usuario 100 nombres
por teclado
• Si no existiesealgo como las matrices, el programa debería
§ Declarar 100 variables (e.g. nombre1, nombre2, …., nombre100)
§ Escribir 100 líneas del tipo: nombreX ß input_num
• Con las matrices, podemos hacerlo de la forma:
for i=1 to 100 do
nombre[i] ß input_num
end for
Declaración de matrices
•
•
La forma de declarar matrices varía mucho de un
lenguaje a otro. En el siguiente ejemplo se muestra la
que utilizaremos nosotros:
var dias_mes[12] tipo entero
La novedad es el 12 entre corchetes que indica que
dias_mes es una matriz de 12 elementos
Matrices : peculiaridades de los lenguajes
•
En algunos lenguajes (e.g. C, C++, Java, Javascript…), el primer
elemento de una matriz es el 0 y no el 1. En estos casos, si la matriz
tuviera 12 elementos, el último sería el 11 y no el 12, ya que en
cualquier caso, al declarar una matriz, estamos indicando su tamaño,
no el valor de su último índice…
•
Los símbolos [ ] pueden variar según el lenguaje (e.g. ( ))
•
Algunos lenguajes, permiten que al declarar una matriz se puedan
escribir los valores de todos sus elementos, como por ejemplo:
var dias_mes [12] tipo entero ß {31,28,31,30,31,30,31,31,30,31,30,31}
Términos
§ dias_mes representa pues una matriz
§ dias_mes[i] (con i comprendido entre 1 y 12) representa un
elemento de esta matriz
§ i (es decir la constante o variable que indica el elemento elegido)
se denomina índice
§ 12 es (en este caso) el tamaño de la matriz
La forma de escribir esto (que puede ser muy útil si la matriz no es muy
grande) varía mucho de un lenguaje a otro
•
Algunos lenguajes no permiten utilizar operadores entre matrices , otros
sí (por ejemplo sumar, restar, comparar… matrices). Nosotros no los
utilizaremos. Es decir no trabajaremos con las matrices como una
entidad propia, sinó con sus elementos…
Matrices y funciones
•
También varía mucho de un lenguaje a otro, la forma en que las matrices se pasan
como parámetros de las funciones
§ En algunos lenguajes (C, C++…), al pasar una matriz a una función, hay que
pasarle también su tamaño, ya que de lo contrario la función no sabría como
manejarla (no reconocería su “final”) funcion(dias_mes,12)
§ En otros lenguajes (Lingo, JavaScript , Java…) las matrices poseen una
propiedad intrínseca que indica el número de elementos que la constituyen. Esta
propiedad (lenght, elements…) se escribe tras el nombre de la matriz seguido de
un punto (e.g. dias_mes.longitud que en nuestro caso valdría 12)
•
Aunque menos genérica, utilizaremos esta segunda opción ya que simplifica los
algoritmos
•
Para indicar que un parámetro de una función es una matriz (y no una variable
única), al declarar la función, añadiremos corchetes después del nombre del
parámetro, como en el siguiente ejemplo:
funcion nom_func(nom_matr[ ] tipo entero) tipo entero
Ejemplos
• Escribir una función que reciba una matriz de números reales y devuelva el
máximo de todos ellos
funcion maximo(numeros [] tipo real) tipo real
var max tipo real
var i tipo entero
max ß 0 -- sería mejor max ß numeros[1] y podriamos comenzar en i=2
for i=1 to numeros.longitud do
if max<numeros[i] then
max ßnumeros[i]
endif
end for
devolver max
end funcion
• Que habría que modificar para que en lugar del máximo, devolviera su
índice o posición?
NB. Obviamente, ésto es sólo un ejemplo. Las funciones pueden seguir recibiendo
varios parámetros , de varios tipos , algunos de ellos matrices y otros no, y su retorno
puede ser también de varios tipos …
2
Ejemplos
Ejemplos
• Escribir una función que reciba una matriz de números reales y devuelva el
• Escribir una función que reciba una matriz de números reales y devuelva el
funcion maximo(numeros [] tipo real) tipo real
var max tipo real
var i tipo entero
max ß 0 -- sería mejor max ß numeros[1] y podriamos comenzar en i=2
for i=1 to numeros.longitud do
if max<numeros[i] then
max ßnumeros[i]
endif
end for
devolver max
end funcion
funcion maximo(numeros [] tipo real) tipo entero
var max tipo real , var pos_max tipo entero
var i tipo entero
max ß 0
for i=1 to numeros.longitud do
if max<numeros[i] then
max ßnumeros[i] , pos_max ß i
endif
end for
devolver pos_max
end funcion
• Que habría que modificar para que en lugar del máximo, devolviera su
• NB. Que hayamos puesto comas (,) para separar instrucciones en una
máximo de todos ellos
•
índice o posición?
Ejemplo: si la matriz fuese ventas[12], que representa las ventas en 12
meses, el segundo problema nos daría el número del mes, mientras que el
primer problema nos daría el volumen de ventas de este mes en cuestión…
Más ejercicios
•
•
•
Función que devuelve el promedio de una
matriz de números reales
Función que busca el número de apariciones de
un determinado valor en una matriz (i.e. la
función recibirá 2 parámetros: la matriz y el
elemento a buscar y devolverá el número de
apariciones) (si los valores fuesen
2,34,23,15,3,4,3,21 y buscasemos el número de
“3”, devolvería un 2)
Función (parecida a la anterior) que devuelve la
posición de la primera aparición de este valor
(en este caso devolvería 5 que es la posición
del primer “3”). Si no aparece haremos que
devuelva -1
máximo de todos ellos
misma línea no significa que se pueda hacer en todos los lenguajes…
Matrices de más de una dimensión
•
Si las matrices que hemos visto hasta ahora eran como
armarios con cajones, una matriz de 2 dimensiones es
como una hilera de armarios (con cajones en cada uno
de ellos)
•
Por ejemplo, var notas[30][8] tipo real
podría almacenar las notas que han obtenido 30
alumnos en 8 exámenes (sería como una hilera de 30
armarios, con 8 cajones c/u)
notas[3][5] es la nota del 3er. alumno en el 5o. examen
•
Este concepto puede en realidad ampliarse a cualquier
dimensión, aunque el uso de matrices de más
dimensiones es menos frecuente
Matrices de 2 ó 3 dimensiones : Ejemplo
•
•
•
•
•
Una imagen puede considerarse como una matriz de
pixels de 2D
Si cada pixel tiene 3 componentes (R,G,B), tenemos que
en realidad una imagen puede considerarse como una
matriz de 3D
var imagen[800][600][3] tipo entero representaría una
imagen en color (R,G,B) de 800x600 píxeles ([4] si
tuviese canal alpha)
Nosotros nunca programaremos algo así, pero esto se
acerca a como maneja las imágenes un programa de
tipo Photoshop
Además el uso de matrices de varias dimensiones varía
también mucho de un lenguaje a otro è No haremos
ejercicios con este tipo de datos.
Fin de la
Introducción
a la programación!
3