Está en la página 1de 35

Computadores y Programacin

Enrique Hernndez y Joan Vila


DISCA / UPV
Departament d'Informtica de Sistemes i Computadors
Universitat Politcnica de Valncia

CYP

Computadores y Programacin

ndice

Introduccin

Tipos de datos
Creacin y asignacin de variuables

Tipos de datos simples





Reales
Enteros
Booleanos
Caracteres

Tipos de datos compuestos




Arrays
Strings
Registros (Estructuras)

Otros tipos
2

Programming in Matlab. M.E. Herniter


Ed. Brooks/Cole. Thomson Learning 2001.

Captulo 4

CYP

Computadores y Programacin

Libros

CYP

Computadores y Programacin

Programacin

Programas = Estructuras de datos + Algoritmos


Tipo (abstracto) de datos: es una forma de modelar un objeto real o una
magnitud matemtica. Su representacin consta de:

Datos: conjunto de valores bien definido que puede tomar.


Mtodos: conjunto de operadores y funciones definidos sobre
los datos.
Ejemplo: matrices

Algoritmos: procedimiento no ambiguo que resuelve un problema. Un


procedimiento es una secuencia de operaciones bien definidas, cada una de
las cuales requiere una cantidad finita de memoria y se realiza en un tiempo
finito.
Ejemplo: algoritmo para multiplicar dos matrices.

CYP

Computadores y Programacin

Enteros
Discretos

Booleano
Carcter
Enumerados

Simples
Reales

Tipos

Vectores (Arrays)
Compuestos

Cadenas (string)
Estructuras registros

CYP

Computadores y Programacin

Tipo de datos numrico por defecto en Matlab


En Matlab el tipo de datos por defecto es la matriz de reales (double).

a=127
a =127

class(a)
double

whos
a

1x1

double array

Se requiere hacer una conversin de tipo (casting) cuando se quieren tipos de datos
numricos que no sean el de defecto.
B = cast(A, newclass) : convertir A a la nueva clase newclass.


b= cast(a,'uint8'); % convertir a uint8


b= uint8(a);
class(b)

% otra forma (mas habitual) de convertir a uint8

uint8

A diferencia de otros lenguajes (fuertemente tipados), se pueden realizar


operaciones (sumar, restar, etc ) en las que intervengan operadores de distinto tipo,
pero hay que tener en cuenta los posibles efectos que esto puede provocar.
6

a=150

de asignaciones

Memoria

%un real en doble prec.

Se crea
dinmicamente
un objeto double
en una zona libre
de la memoria

2000

double
150

CYP

Computadores y Programacin

Semntica

a=150

de asignaciones

Memoria

%un real en doble prec.


Referencia
o puntero

2000

2000

double
150

a double

CYP

Computadores y Programacin

Semntica

de asignaciones

a=150

Memoria

b=int8(34) %un entero de 8 bits.

a double

b int8

a
b

double
150
int8
34

CYP

Computadores y Programacin

Semntica

CYP

Computadores y Programacin

Semntica

de asignaciones

a=150

Memoria

b=int8(34)

a
b
c

c=b

a double

b int8

c int8

double
150
int8
34
int8
34

10

CYP

Computadores y Programacin

Semntica

de asignaciones

a=150

Memoria

b=int8(34)

a
b
c

c=b
b=a

double
150

a double

b double

c int8

int8
34
double
150
11

CYP

Computadores y Programacin

Creacin de datos
Puede realizarse de 2 formas distintas:
a) Implcita: al realizar una asignacin de un valor

x = 5123

% crea una matriz 1x1 de doubles

y = true

% crea un logical

b) Explcita: mediante un conversor de tipo


a = double(25)
a = logical(true)

b = int8(127)

% crea un double
% crea un logical
% crea un int8

b = double(b)
% reconvierte el int8 a double
Realmente lo que ocurre es:
Se crea un nuevo objeto double a partir del valor del int8
Se cambia la referencia de b al nuevo objeto double
Se elimina el objeto int8 al no tener referencias

12

CYP

Computadores y Programacin

Ojo

al trabajar con varios tipos de datos a la vez!


a=int16(34)

% a se crea como un int16 con valor inicial 34

b=int8(20)

% b se crea como un int8 con valor inicial 20

c=a+b

% c se crea como un int16

b=1

% b se transforma en double

a=b

% a se convierte a int8 asignndole 20

a=a+1

% a sigue como int8 y pasa a valer 21

a=a+1000

% a sigue como int8 y satura a maxint('int8')=127

a=double(a)

% a se transforma en double con valor 127

d=int8(0)

% b se crea como un int8 con valor inicial 0

d=d+a

% d sigue como int8 y pasa a saturar a 127

d=d/7

% d sigue como int8 y pasa a valer 18 (divisin


% entera)

13

CYP

Computadores y Programacin

ndice
Introduccin

Tipos de datos
Creacin y asignacin de variuables

Tipos de datos simples





Reales
Enteros
Booleanos
Caracteres

Tipos de datos compuestos




Arrays
Strings
Registros (Estructuras)

Otros tipos

14

CYP

Computadores y Programacin

Reales

single, double
single: reales en formato IEEE 754 de simple precisin. Abarcan el rango
[1.1755e-038, , 3.4028e+038]
double: reales en formato IEEE 754 de doble precisin. Abarcan el rango
[2.2251e-308, , 1.7977e+308]
Operadores: +, -, *, /, %, ^, etc.
Operaciones:

a = 127

%Crear un double a cuyo valor es 127

b = single(X)
precisin

%Convertir una matriz a simple

c = double(X)
precisin

%Convertir una matriz a doble

15

CYP

Computadores y Programacin

Enteros

int8, uint8, int16, uint16, int32, uint32


int8, int 16, int32: enteros con signo con n bits y rango [-2n-1, , 2n-1-1],
siendo los posibles valores de n: 8, 16, 32
uint8, uint 16, uint32: enteros sin signo con n bits y rango [0, , 2n-1],
siendo los posibles valores de n: 8, 16, 32
Operadores: +, -, *, /, %, ^, etc.
Operaciones:

a = int8(X)

%Convertir una matriz X a enteros de 8 bits

b = uint8(X)

%Convertir una matriz X a enteros sin signo de


% 8 bits

16

CYP

Computadores y Programacin

Booleanos
logical
logical: representa una variable booleana cuyos posibles valores son {true,
false} que son sinnimos de {1, 0}.
Se puede generar un logical
a) Con una asignacin:

a=true; b=false

b) Con un conversor de tipo


a=logical(327)

a=logical(0)

% Cualquier nmero 0 genera true


% El 0 genera false

17

CYP

Computadores y Programacin

Booleanos
c) Como resultado de evaluar una expresin con operadores relacionales
entre valores de un tipo de datos en el que hay definida una relacin de
orden (==, =, >, >=, <, <=)
a=1; b=5;
x = (a == b)

%comparacion de igualdad.

xfalse

y = (a ~= b)
m = (a >= b)

%comparacion de desigualdad.
%comparacion >=.

ytrue
mfalse

n = (a > b)

%comparacion >

mfalse

Operadores: los propios de la variables boolenas. AND (&) , OR (|) , NOT


(~), XOR (xor)

l1 = (a>7) & (a ~= b)
0
l2 = (b<7) | (a<7) | (a ~= b)
1
l3 = ~(a<7)
0
18

CYP

Computadores y Programacin

Caracteres
Son variables cuyo valor son caracteres ASCII o UNICODE.
Matlab trabaja internamente con UNICODE ( 2 bytes).


x='A'
Y=char('a')
Z=char(0)

Para caracteres con cdigo < 127 UNICODE = ASCII


Operaciones:

abs('A')

% retorna el cdigo ascii (UNICODE) de un carcter

65
char(65) % retorna el carcter de un cdigo ascii (UNICODE)
A
abs('B')
66
abs('9')
57
ascii = char(reshape(32:127, 32, 3)')

19

No existen en Matlab
Son variables cuyos posibles valores se define explcitamente dando un
conjunto de valores

TYPE dia = (lunes, martes, miercoles, jueves, viernes)

TYPE color = (rojo, azul, negro)

CYP

Computadores y Programacin

Enumerados

20

CYP

Computadores y Programacin

ndice

Introduccin

Tipos de datos
Creacin y asignacin de variuables

Tipos de datos simples





Reales
Enteros
Booleanos
Caracteres

Tipos de datos compuestos




Arrays
Strings
Registros (Estructuras)

Otros tipos
21

CYP

Computadores y Programacin

Arrays

Array: coleccin de datos semejantes que se indexa como un vector o una


matriz.
Constructor:

Array unidimensional: A=[1,2,3]


Array bidimensional: B=[1,2,3 ; 4,5,6]

Indexacin:

for i=1:length(A) fprintf('%g, ',A(i)); end


[i,j]=size(B)
for n=1:i for m=1:j fprintf('%g, ',B(n,m)); end; end
B(1,:)
B(1,2:3)

Operadores: +, -, .*, ./, .^


Operaciones: cast, horzcat, vertcat, cross, dot, max, min, sum, prod, sort,
etc...

Consultar ayuda.

22

CYP

Computadores y Programacin

Arrays

dinmicos

En Matlab los arrays son esencialmente dinmicos


Arrays dinmicos: arrays cuya dimensin no es fija; pueden crecer a medida
que se necesita (esto en otros lenguajes precisa punteros).
Un array puede declararse de tamao fijo (aunque pueda crecer) y es ms
eficiente de manejar:

vector=rand(1,3);
vector(5)=1
0.4057

% Se declara con un tamao inicial


% Pero puede crecer
0.9355
0.9169
0
1.0000

Pero puede declararse sin un tamao inicial y crecer dinmicamente por


concatenacin:


matriz=[];
matriz=[matriz, 1, 2];
matriz=[matriz; [3,4]];
1
2
3

4
23

CYP

Computadores y Programacin

Cadenas

de caracteres

String: array unidimensional cuyos componentes son caracteres ASCII.


Constructor y conversor de tipos:

S = 'Una cadena'

U = native2unicode(S)
S = char(100)

% conversion a Unicode.
% conversion double char

d = double(S)

% conversion char double

Indexacion:

S(2)
n
for i=0:9 nums(i+1)=setstr(abs('0')+i); end
nums 0123456789

Operadores: los mismos que para matrices (aunque no tengan mucha utilidad
con cadenas)
Operaciones: ischar, strcat, strcmp, strrep, length, str2num, etc..
24

CYP

Computadores y Programacin

Arrays de cadenas

Son arrays cuyos componentes son cadenas. Existen varias maneras de organizarlos:

a) Array horizontal: equivale a la concatenacin de todas las cadenas de sus


componentes (no es generalmente deseable).

dias=['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes',


'Sabado', 'Domingo']
dias =
LunesMartesMiercolesJuevesViernesSabadoDomingo

b) Array vertical: solo es posible si todas las cadenas tienen la misma longitud.

dias=['Lunes
'Viernes

dias =
Lunes
Martes
Miercoles
Jueves
Viernes
Sabado
Domingo

; 'Martes

; 'Miercoles; 'Jueves

; 'Sabado

: 'Domingo

']

25

CYP

Computadores y Programacin

Arrays de cadenas
c) Cell Array: array de celdas heterogneas

dias={'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes',


'Sabado', 'Domingo'}

dias =
Lunes
Martes
Miercoles
Jueves
Viernes
Sabado
Domingo

dias{2}

Martes
dias{3:4}
Miercoles
Jueves

26

Arrays

Cell arrays: arrays de celdas heterogneas: cada celda puede corresponder


a un tipo de datos distinto

estudiante1{1,1}='Jordi Benavent'; %Nombre: cadena

estudiante1{1,2}=int16(0338290);

%DNI: entero

estudiante1{1,3}='Primero';

%Curso: cadena

estudiante1{2,1}=[8 8.5];

estudiante1{2,2}=[5 7 7 6] %Notas prac: array 1x4 de double

estudiante1{2,3}=rand(2,2) %Array 2x2 aleatorio

%Notas: array 1x2 de double

CYP

Computadores y Programacin

Cell

27

Arrays

Visualizacin de cell arrays


cellplot(estudiante1)

estudiante1{1,1}='Jordi Benavent';
estudiante1{1,2}=int16(0338290);
estudiante1{1,3}='Primero';
estudiante1{2,1}=[8 8.5];
estudiante1{2,2}=[5 7 7 6]
estudiante1{2,3}=rand(2,2)

CYP

Computadores y Programacin

Cell

28

CYP

Computadores y Programacin

Cell

Arrays

Tambin pueden definirse mediante indexacin de celdas:


estudiante1(1,1)={'Jordi Benavent'};
estudiante1(1,2)={int16(0338290)};

estudiante1(1,3)={'Primero'};

% etc...

O haciendo crecer el array dinmicamente (concatenacin):


estudiante1={'Jordi Benavent'};
estudiante1=[estudiante1, {int16(0338290)}, {'Primero'}]

estudiante2=['Joan Blas', {int16(0111280)}, {'Primero'}]

Y tambin pueden anidarse los cell arrays


datos={estudiante1; estudiante2}
datos{1}{1,1}

'Jordi Benavent'
datos{2}

'Joan Blas'

[32767]

'Primero'
29

CYP

Computadores y Programacin

Registros (estructuras)
Structure: son estructuras de datos que permiten almacenar datos de diferente tipo
(como los cell array).
Se diferencian de los cell array porque se direccionan por el nombre del campo y no
por su ndice:





estudiante.Nombre='Jordi Benavent';
estudiante.DNI=int16(0338290);
estudiante.Curso='Primero';
estudiante.Notas=[8 8.5];
estudiante.NotasPrac=[5 7 7 6];
estudiante.Otros=rand(2,2);

Se pueden formar estructuras por asigancin o con la funcin struct:


estudiante=struct('Nombre','Jordi Benavent',
'DNI', int16(0338290),
'Curso','Primero',
'Notas',[8 8.5],
'NotasPrac',[5 7 7 6],
'Otros',rand(2,2))

30

CYP

Computadores y Programacin

Registros

(estructuras)

Los campos se aaden por asignacin y se pueden borrar con rmfield


rmfield(estudiante,'Otros')

Se pueden formar arrays de registros:


estudiante(2).Nombre='Joan Blas';

estudiante(2).DNI=int16(0111280);

estudiante(2).Curso='Primero';

estudiante(3).Nombre='Jose Garca';

Acceso a los campos


estudiante(1).Notas=[Estudiante.Notas, 7.5]

Se pueden formar subarrays de registros


mis_estudiantes=estudiante(1:2)

31

CYP

Computadores y Programacin

ndice

Introduccin

Tipos de datos
Creacin y asignacin de variuables

Tipos de datos simples





Reales
Enteros
Booleanos
Caracteres

Tipos de datos compuestos




Arrays
Strings
Registros (Estructuras)

Otros tipos
32

CYP

Computadores y Programacin

Dias

y fechas

Matlab puede manejar fechas en tres formatos:


Date String:

'24-Oct-2003 12:45:07'

Date Vector:

[2003

Serial Date Number:

7.3188e+005

10

24

12

45

07]

seg. acumulados desde 1/1/1970

Funciones

clock: retorna dia y fecha en formato date vector.

date: retorna dia y fecha en formato date string.

now: retorna dia y fecha en formato serial date number.

Funciones de conversin

datenum, datestr, datevec


Ver ayuda

33

CYP

Computadores y Programacin

Objetos simblicos
Los objetos simblicos permiten almacenar expresiones matemticas en forma
simblica, es decir, manejando varaibles (en vez de su valor) y utilizando los smbolos
*, /, ^.


sym x
syms yz
(x-y)*(x-y)^2
(x-y)^3
expand(z)
x^3-3*x^2*y+3*x*y^2-y^3
simplify((x^3-y^3)/(x-y))
x^2+x*y+y^2

Matlab permite realizar con los objetos simblicos



Calculus: Differentiation, integration, limits, summation, and Taylor series


Linear Algebra: Inverses, determinants, eigenvalues, singular value decomposition, and
canonical forms of symbolic matrices
Simplification: Methods of simplifying algebraic expressions
Solution of Equations: Symbolic and numerical solutions to algebraic and differential
equations
Etc...

34

complejos

Se puede formar un nmero complejo c = a + bi a partir de dos reales o una


asignacin:

c = complex(a,b)

d=sqrt(-1)

Funciones

real(c)

% parte real

imag(c)

% parte imaginaria

abs(a)

angle(a)

% mdulo o valor absoluto


% angulo en radianes

CYP

Computadores y Programacin

Nmeros

35

También podría gustarte