You are on page 1of 20

1

Informtica I
Fundamentos de Computadores
Ainara Pradera
Hector Solar
ndice
Grficos 2D y 3D
Algoritmos recursivos
Factorial
Primo
Los nmeros de Fibonacci
Algoritmo de Euclides
Cuadrado de Sierpinski
Algoritmos de prueba y error
Iterativos
Recursivos
Tratamiento de imgenes
2
Ejercicio 1.3 -> Plot y subplot
% Grafica de dos funciones Sin y Cos
amp1=10;
amp2=5;
num=100;
ciclos=2;
f1=100; % Frecuencia de 100 Hz
f2=2*f1; % El doble de frecuencia
t=0:ciclos/(f1*num):ciclos/f1;
% Calculo de funciones
y1=amp1*sin(2*pi*f1*t);
y2=amp2*sin(2*pi*f2*t);
% Calculo de la funcion multiplicacion seno*coseno
y3=y1.*y2;
% Dibujar funciones
subplot (3,1,1); % divide en 3 filas y 1 columna la pantalla y selecciona la primera de las dos figuras
plot(t,y1,'Color','r');
grid;
title('Funcion Seno de 100 Hz', 'Color', 'b');
subplot(3,1,2); % Selecciona la segunda de las tres filas
plot(t,y2,'r'); %En la funcin plot no hace falta indicar 'Color
grid;
title('Funcion Coseno de 2*100 Hz', 'Color', 'b');
subplot(3,1,3); % Selecciona la tercera de las tres filas
plot(t,y3,'Color','r');
grid;
title('Funcion Seno*Coseno', 'Color', 'b');
xlabel('Tiempo en Segs.', 'Color','r');
Ejercicio 1.3 -> Plot y subplot
3
Ejercicio 1.4 -> Cuadriltero inscrito en una
circunferencia
x1=cos(fi);
x2=cos(fi+paso);
y1=sin(fi);
y2=sin(fi+paso);
0 fi 2
paso= 2/100
X2,Y2
fi
paso
X1,Y1
Ejercicio 1.4 -> Cuadriltero inscrito en una
circunferencia
% Dibujamos la circunferencia
paso=2*pi/100;
for fi=0:paso:2*pi-paso
x1=cos(fi);
x2=cos(fi+paso);
y1=sin(fi);
y2=sin(fi+paso);
line([x1 x2],[y1 y2])
end
axis equal
axis([-1 1 -1 1])
% Dibujamos el cuadrado inscrito en la circunferencia
%Coordenadas en x de los cuatro vertices del cuadrado
xc1=cos(pi/4);
xc2=cos(3*pi/4);
xc3=xc2;
xc4=xc1;
%Coordenadas en y de los cuatro vertices del cuadrado
yc1=sin(pi/4);
yc2=yc1;
yc3=sin(5*pi/4);
yc4=yc3;
x=[xc1 xc2 xc3 xc4 xc1];
y=[yc1 yc2 yc3 yc4 yc1];
line(x,y)
4
Ejercicio 2.1 -> Dibujar una pirmide de base
cuadrada
x
y
z
1
2
3
4
5
Vrtices
1
2
3
4
Caras
base
Ejercicio 2.1 -> Dibujar una pirmide de base
cuadrada
function Piramide(L,h)
% Dibujamos las cuatro caras lateraLes de la piramide
%Cara 1
x1=[L/2 -L/2 0];
y1=[L/2 L/2 0];
z=[0 0 h];
patch(x1,y1,z,'r')
%Cara 2
x2=[-L/2 -L/2 0];
y2=[L/2 -L/2 0];
z=[0 0 h];
patch(x2,y2,z,'g')
%Cara 3
x3=[-L/2 L/2 0];
y3=[-L/2 -L/2 0];
z=[0 0 h];
patch(x3,y3,z,'m')
%Cara 4
x4=[L/2 L/2 0];
y4=[-L/2 L/2 0];
z=[0 0 h];
patch(x4,y4,z,'c')
% Dibujamos la base de la piramide
x=[L/2 -L/2 -L/2 L/2];
y= [L/2 L/2 -L/2 -L/2];
patch(x,y,'b')
5
Ejercicio 2.1 -> Dibujar una pirmide de base
cuadrada(II)
function PiramideII(L,h)
% Dibujamos las cuatro caras laterales de la piramide
vert_matrix=[L/2 L/2 0; -L/2 L/2 0; -L/2 -L/2 0; L/2 -L/2 0; 0 0 h]
fac_matrix=[5 4 1; 5 1 2;5 2 3; 5 3 4]
% Cara cada de un color, sin interpolar, para eso en hsv se pone el numero de caras
figure(1)
patch('Vertices',vert_matrix,'Faces',fac_matrix,'FaceVertexCData',hsv(4),'FaceColor','flat')
axis([-L/2,L/2,-L/2,L/2,0,h]);
% Dibujamos la base de la piramide
x=[L/2 -L/2 -L/2 L/2];
y= [L/2 L/2 -L/2 -L/2]
patch(x,y,'b')
% Interpolando el color de cada cara, para eso en hsv se pone el numero de vertices
figure(2)
patch('Vertices',vert_matrix,'Faces',fac_matrix,'FaceVertexCData',hsv(5),'FaceColor','interp')
% Dibujamos la base de la piramide
x=[L/2 -L/2 -L/2 L/2];
y= [L/2 L/2 -L/2 -L/2]
patch(x,y,'b')
axis([-L/2,L/2,-L/2,L/2,0,h]);
Ejercicio 2.1 -> Dibujar una pirmide de base
cuadrada(II)
Sin Interpolar (flat) Interpolando (interp)
6
Ejercicio 2.2 -> Z=sin(x)*cos(x)
Z
X
Y
Z
Ejercicio 2.2 -> Z=sin(x)*cos(x)
clear;
close all;
x=[-3:0.1:3];
y=[-3:0.1:3];
for f=1:length(x)
for c=1:length(y)
Z(f,c)=sin(x(f))*cos(y(c));
end
end
% Figura 1 en 3D sin interpolar colores
surf(x,y,Z)
% Figura 2 en 3D sin interpolar colores
surf(x,y,Z)
shading flat
% Figura 3 en 2D sin interpolar colores
figure
surf(x,y,Z)
shading flat
view(2) %para que salga en 2D
axis([-pi pi -pi pi])
% Figura 4 en 3D interpolando colores
figure
surf(x,y,Z)
shading interp
7
Ejercicio 2.2 -> Z=sin(x)*cos(x)
Figura 1: 3D normal Figura 2: 3D shading flat
Figura 3: 2D shading flat Figura 4: 3D shading interp
Algoritmos recursivos -> Cap. 5 Aprenda a
programar como si estuviera en primero
Un objeto es recursivo cuando el propio objeto est
compuesto parcialmente por s mismo
Poder definir una serie INFINITA de objetos mediante
una inicializacin de un nmero FINITO de objetos
8
Ejemplo 10 -> Factorial de n
Si
n==0?
f=1
f=factorial(n)
f=n*factorial(n-1)
No
FIN
Iterativa -> n!=n*(n-1)*(n-2)**2*1 -> 5!=5*4*3*2*1
Recursiva -> n!=n*(n-1)! -> 5!=5*4!
function f=factorial(n)
if n==0
f=1;
else
f=n*factorial(n-1);
end
Ejemplo 11 -> Es primo n?
k>sqrt(n)?
Si
No
Mirar_si_es_divisible(n,k)
n/k==fix(n/k)?
FIN
Mirar_si_es_divisible (n,k+1)
No
n es primo
n no es primo
Si
FIN
primo(n)
Mirar_si_es_divisible(n,2)
Inicializacin
9
Ejemplo 11 -> Es primo n?
function Primo(n)
global r;
r=sqrt(n);
Mirar_si_es_divisible(n,2)
function Mirar_si_es_divisible(n,k)
global r;
if k>r
disp([num2str(n) ' es primo'])
elseif n/k==fix(n/k)
disp([num2str(n) ' no es primo'])
else
Mirar_si_es_divisible(n,k+1)
end
Ejercicio 4.1 -> Los nmeros de Fibonacci
casos otros los en
n si
n si
n fibonacci n fibonacci
n fibonacci 1
0
) 2 ( ) 1 (
1
0
) ( =
=

+
=
function Serie=Fibonacci(n)
for i=1:n
Serie(i)=NFibonacci(i-1);
end
function n=NFibonacci(i)
if i==0
n=0;
elseif i==1
n=1;
else
n=NFibonacci(i-1)+NFibonacci(i-2);
end
10
Ejercicio 4.2 -> Algoritmo de Euclides

|
.
|

\
|
=
b
a
de resto a MCD
resto a a divide b si b
es b y a de MCD el b a Para
,
sin
, 0
function d=MCD(a,b)
clear all;
close all;
a=input('Introduzca un numero a>0: ')
b=input('Introduzca un numero b siendo 0<b<=a: ')
R=a-fix(a/b)*b;
if R==0
d=b;
else
d=MCD(a,R);
end
Ejercicio 4.3 -> Cuadrado de Sierpinski
function Cuadrado_Sierpinski(n)
x=0;
y=0;
h=1;
figure;axis equal
cuadrado(n,x,y,h)
function cuadrado(i,x,y,h)
Dibujar_cuadrado(x,y,h)
if i>0
x=x-2*h/3;y=y+2*h/3;
h=h/3;
cuadrado(i-1,x,y,h)
y=y-3*h;
cuadrado(i-1,x,y,h)
y=y-3*h;
cuadrado(i-1,x,y,h)
x=x+3*h;
cuadrado(i-1,x,y,h)
x=x+3*h;
cuadrado(i-1,x,y,h)
y=y+3*h;
cuadrado(i-1,x,y,h)
y=y+3*h;
cuadrado(i-1,x,y,h)
x=x-3*h;
cuadrado(i-1,x,y,h)
x=x-3*h;
end
function Dibujar_cuadrado(x,y,h)
line([x x],[y y-h])
line([x x+h],[y-h y-h])
line([x+h x+h],[y-h y])
line([x x+h],[y y])
11
h
h
h
h/3
Ejercicio 4.3 -> Cuadrado de Sierpinski
Tratamiento de imgenes
+
+
=
12
Tratamiento de imgenes
M
Matriz de MxN
Matriz de MxN
Matriz de
MxN
Hipermatriz de MxNx3
N
Ejercicio 3.1 -> Obtencin del negativo de una
imagen
function negativo(archivo)
archivo='ejemplo0301.jpg'
n=length(archivo); % n=numero de letras de la cadena 'archivo'
formato=archivo(n-2:n); %formato guarda las tres ultimas letras
matriz_de_colores=imread(archivo,formato) ; %Lectura del archivo
matriz_de_colores=double(matriz_de_colores); %Paso a double
matriz_de_colores=matriz_de_colores/255; %Escalado
subplot(1,2,1)
image(matriz_de_colores) %Dibujo del JPG
axis equal %Escalado horizontal y vertical
x=size(matriz_de_colores,2); % x=numero de pixeles horizontales
y=size(matriz_de_colores,1); % y=numero de pixeles verticales
axis([1 x 1 y]) %Encuadre de la imagen
drawnow %Se obliga al programa a dibujar lo que se ha pedido
for c=1:x %Bucle para recorrer las columnas de la imagen
for f=1:y %Bucle para recorrer las filas de la imagen
for k=1:3 %Bucle para recorrer los colores RGB de cada pixel
matriz_de_colores(f,c,k)=1-matriz_de_colores(f,c,k); %Operacion
end
end
end
subplot(1,2,2)
image(matriz_de_colores) %Dibujo de la nueva imagen obtenida
axis equal %Escalado horizontal y vertical
axis([1 x 1 y]) %Encuadre de la imagen
13
Ejercicio 3.1 -> Obtencin del negativo de una
imagen
Ejercicio 3.2 -> Modificacin del brillo de una
imagen
function brillo(archivo,porcentaje)
% porcentaje: es el tanto por ciento de la intesificacion
n=length(archivo);
formato=archivo(n-2:n);
matriz_de_colores=imread(archivo,formato) ;
matriz_de_colores=double(matriz_de_colores);
matriz_de_colores=matriz_de_colores/255;
subplot(1,2,1)
image(matriz_de_colores)
axis equal
x=size(matriz_de_colores,2);
y=size(matriz_de_colores,1);
axis([1 x 1 y])
drawnow
escala=(100+porcentaje)/100;
for f=1:y
for c=1:x
for k=1:3
matriz_de_colores(f,c,k)=matriz_de_colores(f,c,k)*escala;
if matriz_de_colores(f,c,k)>1
matriz_de_colores(f,c,k)=1;
end
end
end
end
subplot(1,2,2)
image(matriz_de_colores)
axis equal
axis([1 x 1 y])
14
Ejercicio 3.2 -> Modificacin del brillo de una
imagen
Ejercicio 3.3 -> Imagen en blanco y negro
function grises(archivo,archivo_destino)
archivo='ejemplo0303.jpg'
archivo_destino='ejercicio0303.jpg'
n=length(archivo);
formato=archivo(n-2:n);
matriz_de_colores=imread(archivo,formato);
imwrite(matriz_de_colores,archivo,formato)
matriz_de_colores=double(matriz_de_colores);
matriz_de_colores=matriz_de_colores/255;
subplot(1,2,1)
image(matriz_de_colores)
x=size(matriz_de_colores,2);
y=size(matriz_de_colores,1);
axis equal
axis([1 x 1 y])
drawnow
for f=1:y
for c=1:x
suma=0;
for k=1:3
suma=suma+matriz_de_colores(f,c,k);
end
media=suma/3;
for k=1:3
matriz_de_colores(f,c,k)=media;
end
end
end
subplot(1,2,2)
image(matriz_de_colores)
axis equal
axis([1 x 1 y])
matriz_de_colores=matriz_de_colores*255;
imwrite(matriz_de_colores,archivo_destino,formato) %Para guardar la imagen en el fichero de destino
15
Ejercicio 3.3 -> Imagen en blanco y negro
Algoritmos de prueba y error -> Cap. 5 Aprenda a
programar como si estuviera en primero
Para encontrar soluciones mediante Prueba y Error,
sin seguir una regla fija
9Recursivos:
Descomponer el proceso de prueba y error en subtareas
Estas tareas se expresan de manera natural en forma recursiva
probando un nmero finito de veces las propias subtareas hasta dar
con la solucin del problema
9Iterativos:
Mientras se cumpla una condicin el programa sigue actuando hasta
dar con la solucin mediante repeticin sistemtica de una serie de
pasos
16
Algoritmos iterativos de prueba y error -> Ejemplo 14 ->
Clculo de las dimensiones ptimas de un cilindro
Obtencin de las dimensiones (r,h) de un cilindro que den el rea
mnima para un volumen determinado
r
h
Vc=Ab*h
Ab=r^2
A=2*Ab+Al
Ab=*r^2
Al=2**r*h
Algoritmos iterativos de prueba y error -> Ej. 14
Vc
A1
Vc
A2
A1>A2
A3>A2
Dimensiones
ptimas
r
Vc
A3
17
Algoritmos iterativos de prueba y error -> Ej. 14
Inicializacin del Area
con un radio muy pequeo
y del paso
While(1) Se incrementa r Clculo de h
Clculo de
AreaNueva
AreaNueva<Area?
Area= AreaNueva
Si
No
Si
FIN
Algoritmos iterativos de prueba y error
1
2
3
4 5
6
7
8
18
Algoritmos recursivos de prueba y error ->
Ejemplo 16 -> El viaje del caballo
Tablero de 8x8 comenzando en la fila 1 y columna 1
1 60 39 34 31 18 9 64
38 35 32 61 10 63 30 17
59 2 37 40 33 28 19 8
36 49 42 27 62 11 16 29
43 58 3 50 41 24 7 20
48 51 46 55 26 21 12 15
57 44 53 4 23 14 25 6
52 47 56 45 54 5 22 13
Algoritmos recursivos de prueba y error -> Ej.16
NO
COMIENZO
INICIALIZACIN
NUEVO PASO
NO
GUARDAR EL
MOVIMIENTO
ES UN
MOVIMIENTO
CORRECTO? SI
NUEVO PASO
Hemos
encontrado
una solucin?
MOSTRARLA
MOVIMIENTO=1
MOVIMIENTO<=8? FIN
SI
MOVIMIENTO=MOVIMIENTO +1
BORRAR EL
MOVIMIENTO
NUEVO PASO
SI
NO
19
Algoritmos recursivos de prueba y error -> Ej.16
1
1
2
2
1
-1
-2
-2
-1
2
1
-1
-2
-2
-1
1
2
F C
2
3
5
6 19 10 15
20 11 16 18
7 14 9
21 12 17
8 13
18
19
Algoritmos iterativos de prueba y error -> Ej.16
1
2
2
1
-1
-2
-2
-1
2
1
-1
-2
-2
-1
1
2
F C
1 6 15 10 21
14 9 20 5 16
19 2 7 22 11
8 13 24 17 4
25 18 3 12 23
20
Informtica I
Fundamentos de Computadores
Ainara Pradera
Hector Solar

You might also like