Teoría Basica de Programación
Teoría Basica de Programación
2
Estructuras de Datos
Los datos pueden clasificarse en:
3
Estructuras de Datos
Los datos pueden clasificarse en:
LA VARIABLE
Variable entera a
¿Qué ocurre en la memoria?
a
5
Estructuras de Datos
Los datos pueden clasificarse en:
LA VARIABLE
Variable entera a
a 23
a=23 ¿Qué ocurre en la memoria?
6
Estructuras de Datos
Los datos pueden clasificarse en:
• Datos estructurados
• Pueden no ser un único elemento = Almacenan múltiples valores.
• Tipos:
• Homogéneos Almacenan un mismo tipo de datos.
• Heterogéneos Pueden almacenar varios tipos de datos. 7
Estructuras de Datos
Los datos pueden clasificarse en:
8
Estructuras de Datos Homogéneas
• Vector
9
Estructuras de Datos Homogéneas
• Vector
10
posición 1 2 3 4 5 6
Estructuras de Datos Homogéneas
• Vector
v
11
posición 1 2 3 4 5 6
Estructuras de Datos Homogéneas
• Vector
V(3)=42
v 42
12
posición 1 2 3 4 5 6
Estructuras de Datos Homogéneas
• Vector
13
Estructuras de Datos Homogéneas
• Vector
%% Prueba_Vector
V = zeros(1,3);
v(1) = 45;
v(2) = v(1) + 8;
v 0 0 0
1 2 3
% Leer v(3)
v(3) = input('V(3): ');
% Imprimir valores
fprintf('V en la posicion 1 es: %d\n', v(1))
fprintf('V en la posicion 2 es: %d\n', v(2)) 14
fprintf('V en la posicion 3 es: %d\n', v(3))
Estructuras de Datos Homogéneas
• Vector
% Imprimir valores
fprintf('V en la posicion 1 es: %d\n', v(1))
15
fprintf('V en la posicion 2 es: %d\n', v(2))
fprintf('V en la posicion 3 es: %d\n', v(3))
Estructuras de Datos Homogéneas
• Vector
% Imprimir valores
fprintf('V en la posicion 1 es: %d\n', v(1))
16
fprintf('V en la posicion 2 es: %d\n', v(2))
fprintf('V en la posicion 3 es: %d\n', v(3))
Estructuras de Datos Homogéneas
• Vector
% Imprimir valores
fprintf('V en la posicion 1 es: %d\n', v(1))
17
fprintf('V en la posicion 2 es: %d\n', v(2))
fprintf('V en la posicion 3 es: %d\n', v(3))
Estructuras de Datos Homogéneas
• Vector
% Imprimir valores
fprintf('V en la posicion 1 es: %d\n', v(1))
18
fprintf('V en la posicion 2 es: %d\n', v(2))
fprintf('V en la posicion 3 es: %d\n', v(3))
Estructuras de Datos Homogéneas
• Vector
% Imprimir valores
fprintf('V en la posicion 1 es: %d\n', v(1))
19
fprintf('V en la posicion 2 es: %d\n', v(2))
fprintf('V en la posicion 3 es: %d\n', v(3))
Estructuras de Datos Homogéneas
• Vector
¿?
20
Estructuras de Datos Homogéneas
• Vector
21
Estructuras de Datos Homogéneas
• Vector
¿?
22
Estructuras de Datos Homogéneas
• Vector
%% Media_mil_elementos
Forma eficiente de prealojar
datos = zeros(1, 1000); un vector grande en Matlab
for i=1:1000
datos(i) = input('Introduzca número: ');
end
sumatoria = 0;
for i=1:1000
sumatoria = sumatoria + datos(i);
end
media = sumatoria / 1000; 24
datos 0 0 0 0 0
1 2 3 999 1000
25
Estructuras de Datos Homogéneas
• Vector
datos 0 0 0 0 0
1 2 3 999 1000
26
i 1
Estructuras de Datos Homogéneas
• Vector
datos 0 0 0 0 0
1 2 3 999 1000
27
i 1
Estructuras de Datos Homogéneas
• Vector
datos 6 0 0 0 0
1 2 3 999 1000
i
28
i 1
Estructuras de Datos Homogéneas
• Vector
datos 6 0 0 0 0
1 2 3 999 1000
i
29
i 2
Estructuras de Datos Homogéneas
• Vector
datos 6 34 0 0 0
1 2 3 999 1000
i
30
i 2
Estructuras de Datos Homogéneas
• Vector
datos 6 34 0 0 0
1 2 3 999 1000
i
31
i 3
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21
1 2 3 999 1000
i
32
i 3
Estructuras de Datos Homogéneas
• Vector
33
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 0
1 2 3 999 1000
i
34
i 1000
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
35
i 1000
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
36
i 1000 sumatoria ¿?
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
37
i 1000 sumatoria 0
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
38
i 1 sumatoria 0
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
39
i 1 sumatoria ¿?
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
40
i 1 sumatoria 6
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
41
i 2 sumatoria 6
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
42
i 2 sumatoria ¿?
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
43
i 2 sumatoria 40
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
44
i 3 sumatoria 40
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
45
i 3 sumatoria ¿?
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
46
i 3 sumatoria 61
Estructuras de Datos Homogéneas
• Vector
47
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
48
i 1000 sumatoria 3000
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
49
i 1000 sumatoria ¿?
Estructuras de Datos Homogéneas
• Vector
datos 6 34 21 7 86
1 2 3 999 1000
i
50
i 1000 sumatoria 3086
Estructuras de Datos Homogéneas
• Vector
media = sumatoria/1000
datos 6 34 21 7 86
1 2 3 999 1000
51
media ¿?
Estructuras de Datos Homogéneas
• Vector
media = sumatoria/1000
datos 6 34 21 7 86
1 2 3 999 1000
52
media 3.086
Estructuras de Datos Homogéneas
• Vector
%% Media_mil_elementos
datos = zeros(1, 1000);
for i=1:1000
datos(i) = input('Introduzca número: ');
end
sumatoria = 0;
for i=1:1000
sumatoria = sumatoria + datos(i);
end
media = sumatoria / 1000; 53
for i = 1 : n
s = sprintf('Elemento u(%d): ', i);
u(i) = input(s);
end
for i = 1 : n
s = sprintf('Elemento v(%d): ', i);
v(i) = input(s);
end
dotprod = 0;
for i = 1 : n 55
dotprod = dotprod + u(i) * v(i);
end
fprintf('Producto escalar: %f\n',dotprod)
Estructuras de Datos Homogéneas
• Vector: Invertir un vector sobre otro vector
for i = 1 : n % Lo invertimos
v(n+1-i) = u(i);
end
ceros = 0;
for i = 1 : n % Contamos ceros
if ~u(i)
ceros = ceros + 1;
end
end
63
Estructuras de Datos Homogéneas
• Matriz
42
m
m(1,3)=42
Estructuras de Datos Homogéneas
• Matriz
66
Estructuras de Datos Homogéneas
• Matriz
¿?
67
Estructuras de Datos Homogéneas
• Matriz
68
(*) En MATLAB hay formas más simples de hacer esto
Estructuras de Datos Homogéneas
• Matriz
69
Estructuras de Datos Homogéneas
• Matriz
70
Estructuras de Datos Homogéneas
• Matriz
71
Estructuras de Datos Homogéneas
• Matriz
72
Estructuras de Datos Homogéneas
• Matriz
73
Estructuras de Datos Homogéneas
• Matriz
74
Estructuras de Datos Homogéneas
• Matriz
• Solución 2
m = zeros(2,3);
75
Evidentemente, con MATLAB todo el mundo usa la segunda forma
Estructuras de Datos Homogéneas
• Matriz: Suma un entero a cada elemento de la matriz
if fA ~= fB || cA ~= cB % Comprobar dimensiones
disp('Las dimensiones de las matrices no coinciden')
return
end
if fA ~= fB || cA ~= cB % Comprobar dimensiones
disp('Las dimensiones de las matrices no coinciden')
return
end
suma = A + B;
disp('Suma = ') % Presentamos el resultado
79
disp(suma)
Estructuras de Datos Homogéneas
Algunas particularidades de MATLAB :
m= m=
0 0 0 0 23 23
0 0 0 0 23 23
0 0 0 0 23 23
0 0 0 0 23 23
m= m=
1 1 1 -1 -1 -1
0 23 23 -1 -1 -1
0 23 23 -1 -1 -1
0 23 23 -1 -1 -1 80
Ejercicios
24. Realizar un algoritmo que lea una matriz de n filas y m columnas, y escriba
81
Ejercicios
31. Realizar un algoritmo que escriba el recorrido en diagonal de una matriz
82
Estructuras de Datos Homogéneas
• Cadena
v
1 2 3 4 5 6 83
Estructuras de Datos Homogéneas
v
1 2 3 4 5 6 84
Estructuras de Datos Homogéneas
• Cadena
V='David'
v D a v i d
85
1 2 3 4 5 6
Estructuras de Datos Homogéneas
• Cadena
86
Estructuras de Datos Homogéneas
• Cadena
87
Estructuras de Datos Homogéneas
• Cadena
% prueba_cadena.m
k = 'Hola Belén';
fprintf('La cadena es: %s\n', k)
fprintf('La inicial del nombre es: %c\n', k(6))
k
1 2 3 4 5 6 7 8 9 10 88
Estructuras de Datos Homogéneas
• Cadena
% prueba_cadena.m
k = 'Hola Belén';
fprintf('La cadena es: %s\n', k)
fprintf('La inicial del nombre es: %c\n', k(6))
k H o l a B e l é n
1 2 3 4 5 6 7 8 9 10 89
Estructuras de Datos Homogéneas
• Cadena
% prueba_cadena.m
k = 'Hola Belén';
fprintf('La cadena es: %s\n', k) ¿Qué muestra?
fprintf('La inicial del nombre es: %c\n', k(6))
k H o l a B e l é n
1 2 3 4 5 6 7 8 9 10 90
Estructuras de Datos Homogéneas
• Cadena
% prueba_cadena.m
k = 'Hola Belén';
fprintf('La cadena es: %s\n', k)
fprintf('La inicial del nombre es: %c\n', k(6)) ¿Qué muestra?
k H o l a B e l é n
1 2 3 4 5 6 7 8 9 10 91
Estructuras de Datos Homogéneas
• Cadena
• length(cadena):
• Devuelve un entero con la longitud de la cadena pasada como
argumento.
• Ejemplo: length('Juan')
93
• En este ejemplo el valor devuelto es 4.
Estructuras de Datos Homogéneas
• Cadena
• str2num(cadena):
• Devuelve un entero resultante de la conversión de la cadena pasada
como parámetro (cero en caso de que no sea posible la conversión).
• Ejemplo: val = str2num('37.294e-1') 94
• strfind(cadena, patrón):
• Devuelve el índice donde comienza patrón en la cadena. Si hay
varias coincidencias, se devuelve un vector de posiciones.
• Ejemplo: strfind('casa','a')
95
• En este ejemplo el valor devuelto es [2 4].
Estructuras de Datos Homogéneas
• Cadena
• double2str(real):
• Convierte un valor real a cadena.
• Ejemplo: double2str(3.1416)
96
• En este ejemplo el valor devuelto es la cadena '3.1416'.
Estructuras de Datos Homogéneas
• Cadena
• Ejemplo: double('A')
• char(entero):
• Devuelve el carácter correspondiente al código ASCII indicado.
• Ejemplo: char(66) 97
98
Estructuras de Datos Heterogéneas
• Se componen de una agregación de elementos más simples de
Campo_1
V Campo_2
…………..
Campo_N
99
Estructuras de Datos Heterogéneas
• Se componen de una agregación de elementos más simples de
Campo_1 4
V Campo_2 hola
…………..
Campo_N 5.7 100
Estructuras de Datos Heterogéneas
• Nomenclatura:
101
Estructuras de Datos Heterogéneas
• Ejemplo: Una estructura que recoge datos de los presidentes
102
Estructuras de Datos Heterogéneas
• Ejemplo: Una estructura que recoge datos de los presidentes
>> USPres
USPres =
name: 'Franklin D. Roosevelt'
vp: {'John Garner' 'Henry Wallace' 'Harry S. Truman'}
term: [1933 1945]
party: 'Democratic'
103
Estructuras de Datos Heterogéneas
• Ejemplo: Una estructura que recoge datos de los presidentes
presFields =
'name'
'vp'
104
'term'
'party'
Estructuras de Datos Heterogéneas
isfield(USPres, 'party')
ans =
1
Otro ejemplo (nótese cómo se define/inicializa la estructura):
% demo_estructuras.m edad
estudiante.nombre = 'Pepe';
str = sprintf('¿Cuántos años tiene %s? ', estudiante.nombre);
estudiante.edad = input(str)
edad: 12
Ejercicios
35. Escribir un algoritmo que lea una cadena o ristra de caracteres, y la escriba al revés.
36. Escribir un algoritmo que cuente el número de espacios en blanco de una cadena.
*******
*******
**
****
****
****
**
*******
*******
44. El diccionario de la Real Academia Española define palíndromo como “Palabra o frase
que se lee igual de izquierda a derecha, que de derecha a izquierda”. Por ejemplo:
anilina o dábale arroz a la zorra el abad. Realizar un algoritmo que tras leer una cadena
determine si la misma es un palíndromo.
108
Nota: Por simplicidad, asumir que la cadena no contiene tildes y las palabras están separadas
por espacios.
Ejercicios
Realizar un algoritmo que tras leer una palabra, sin importar el idioma, escriba su correspondiente
palabra en pig latin.
46. Escribir un algoritmo que permita obtener la numerología de una palabra. Para realizar este proceso,
en un primer paso se suman, observando la tabla adjunta, los valores numéricos asociados a cada
letra o carácter de la palabra introducida. Posteriormente, si este resultado tuviera más de una cifra,
se sumarían estas, de forma repetitiva, hasta obtener un valor numérico de una sola cifra.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Por ejemplo, para alguien de nombre ANTONIO, tomamos para la A el valor 1, para N 14, para T 20,
etc.: 109
1+14+20+15+14+9+15 = 88
debiendo quedarnos con solo una cifra final
8+8 = 16 1+6 = 7
Ejercicios
47. Realizar un algoritmo que produzca el siguiente resultado:
NOTA. Considere que la siguiente instrucción: Escribir (“fin de línea”), escribe un carácter final de
línea.
110
Bibliografía