semana 03 y 04 - TIPOS DE DATOS.pdf

19
Universidad San Pedro Semana 03 y 04 1 Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III TIPOS DE DATOS 1. Tipos de datos: En este manual se trabajara con tres tipos de datos: 1. Datos numéricos (numeric) 2. Las cadenas de caracteres (char) 3. Y las estructuras(struct) Haremos uso de dos comando que generan una lista de las variables contenidas en el espacio de trabajo actual: Who, whos; con el objetivo de verificar el tipo de dato. 2. Datos numéricos: 2.1. Números Enteros. Tipo de dato Rango de valores Función de conversión Entero con signo de 8 bits -2^7 a 2^7 - 1 Int8 Entero con signo de 16 bits -2^15 a 2^15 - 1 Int16 Entero con signo de 32 bits -2^31 a 2^31- 1 Int32 Entero con signo de 64 bits -2^63 a 2^31 - 1 Int64 Entero sin signo de 8 bits 0 a 2^8 - 1 Uint8 Entero sin signo de 16 bits 0 a 2^16 - 1 Uint16 Entero sin signo de 32 bits 0 a 2^32 - 1 Uint32 Entero sin signo de 64 bits 0 a 2^32 - 1 Uint64 Ejemplo: >> x=int16(32767) x = 32767 >> %luego podemos verificar el tipo de dato de x mediante: >> whos x Name Size Bytes Class Attributes x 1x1 2 int16 >> % o sino mediante: >> tipox=class(x)

Transcript of semana 03 y 04 - TIPOS DE DATOS.pdf

Page 1: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 1

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

TIPOS DE DATOS

1. Tipos de datos:

En este manual se trabajara con tres tipos de datos:

1. Datos numéricos (numeric)

2. Las cadenas de caracteres (char)

3. Y las estructuras(struct)

Haremos uso de dos comando que generan una lista de las variables contenidas en el espacio de

trabajo actual: Who, whos; con el objetivo de verificar el tipo de dato.

2. Datos numéricos:

2.1. Números Enteros.

Tipo de dato Rango de valores Función de conversión

Entero con signo de 8 bits -2^7 a 2^7 - 1 Int8

Entero con signo de 16 bits -2^15 a 2^15 - 1 Int16

Entero con signo de 32 bits -2^31 a 2^31- 1 Int32

Entero con signo de 64 bits -2^63 a 2^31 - 1 Int64

Entero sin signo de 8 bits 0 a 2^8 - 1 Uint8

Entero sin signo de 16 bits 0 a 2^16 - 1 Uint16

Entero sin signo de 32 bits 0 a 2^32 - 1 Uint32

Entero sin signo de 64 bits 0 a 2^32 - 1 Uint64

Ejemplo: >> x=int16(32767)

x =

32767

>> %luego podemos verificar el tipo de dato de x mediante:

>> whos x

Name Size Bytes Class Attributes

x 1x1 2 int16

>> % o sino mediante:

>> tipox=class(x)

Page 2: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 2

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

tipox =

int16

Si se desea verificar que x es un tipo de dato entero se utiliza la funcion isinteger

>> isinteger(x)

ans =

1

Para convertir otro tipo de dato, como una cedana, e entero pueden utilizarse las funciones de

conversion como por ejemplo:

>> str= 'computacion II';

Luego aplicamos la fucnion de conversion a entero de int8 que convierte cada uno de los

elementos de str a entero con signo de 8 bit, es decir, obtenemos su respectivo codigo ASCII.

>> int8(str)

ans =

Columns 1 through 13

99 111 109 112 117 116 97 99 105 111 110 32 73

Column 14

73

>> % ejemplo 2

>> str='alumno';

>> int8(str)

ans =

97 108 117 109 110 111

2.2. Números Decimales.

Page 3: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 3

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

Matlab representa números decimales en formato simple y doble precisión. Por defecto es

de doble precisión, pero se puede convertir cualquier número a simple precisión con una

función de conversión.

a. Doble Precisión.

Valores máximos y mínimos de doble precisión

Las funciones realmax y realmin retornan los valores máximos y mínimos que pueden

representarse con el tipo doublé.

Ejemplo:

>> realmax

ans =

1.7977e+308

>> -realmax

ans =

-1.7977e+308

>> realmin

ans =

2.2251e-308

>> -realmin

ans =

-2.2251e-308

Creación de datos de doble precisión

Como el tipo de dato numérico por defecto en Matlab es de doble precisión, solo se

requiere una simple sentencia de comandos.

Ejemplo:

>> x=18.04;

>> whos x

Name Size Bytes Class Attributes

Page 4: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 4

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

x 1x1 8 double

>> %para verificar que un dato es decimal(o punto flotante)...

>> %se hace usop de la funcion isfloat.

>> isfloat(x)

ans =

1

Conversión a doble precisión.

Se pueden convertir otros datos numéricos, caracteres o cadenas, y datos lógicos a

doble precisión usando la función Matlab doublé.

Ejemplo:

>> y=int64 (-961258);

>> % crea un entero de 64 bits

>> x=double(y) %convierte a doble

x =

-961258

>> whos x

Name Size Bytes Class Attributes

x 1x1 8 double

b. Simple precisión.

Valores máximos y mínimos de doble precisión

Las funciones realmin y realmax cuando se llaman con el argumento ‘single’ retornan los

valores máximos y mínimos que pueden representarse con el tipo single.

Ejemplo:

>> realmax('single')

ans =

3.4028e+038

>> -realmax ('single')

ans =

Page 5: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 5

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

-3.4028e+038

>> realmin('single')

ans =

1.1755e-038

>> -realmin ('single')

ans =

-1.1755e-038

Los números más grandes que realmax(‘single’) o menosres que realmin (‘single’) se les

asigna los valores del infinito positivo (inf) y negativo (-inf) respectivamente.

Creación de datos de doble precisión

Con el tipo de dato numérico por defecto de Matlab es doble precisión, entonces se

requiere una función de conversión single para crear un número de simple precisión.

Ejemplo:

>> x=single(13.04); %crea un tipo de dato decimal single

>> whos x

Name Size Bytes Class Attributes

x 1x1 4 single

>> isfloat(x)

ans =

1

Conversión a doble precisión.

Se pueden convertir otros datos numéricos, caracteres o cadenas, y datos lógicos a

doble precisión usando la función Matlab single.

Ejemplo:

>> y=int64(-270819080303); %crea un entero de 64 bits

>> x=single(y)

x = -2.7082e+011

Page 6: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 6

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

>> whos x

Name Size Bytes Class Attributes

x 1x1 4 single

2.3. Números complejos.

Consisten de 2 partes separadas: una parte real y otra imaginaria. La base imaginaria es la

raíz cuadrada de -1. Este es representado en Matlab por cualquiera de las dos letras: i ó j.

Creación de números complejos.

Existen 2 formas:

La primera es asignar a una variable un valor complejo de la forma a+bi.

Ejemplo:

>> x=24+5i

x = 24.0000 + 5.0000i

La segunda es utilizando la función complex. Se combina 2 entradas, la primera es real y la

segunda es imaginaria.

Ejemplo:

>> x=[10 20; 6 12]

x =

10 20

6 12

>> y=[13 7; 2 8]

y =

13 7

2 8

>> z=complex (x,y)

z =

10.0000 +13.0000i 20.0000 + 7.0000i

6.0000 + 2.0000i 12.0000 + 8.0000i

Page 7: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 7

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

>> % para encontrar la parte real e imaginaria utilizamos la funcion real e imag,

respectivamente:

>> zr=real(z)

zr =

10 20

6 12

>> zi=imag(z)

zi =

13 7

2 8

2.4. Valores Especiales.

Matlab usa los valores especiales inf, -inf y NaN para representar valores que son

infinitamente positivos, negativos y aquellos que no son un número respectivamente.

Casos en que se retorna el valor infinito.

>> x=1/0

x =

Inf

>> x=log(0)

x =

-Inf

>> x=1.e1000

x =

Inf

>> x=exp(1000)

x =

Inf

Page 8: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 8

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

Casos en que se retorna el valor NaN.

Matlab representa valores que no son números reales ni complejos con un valor especial

NaN (not a Number). Expresiones como0/0 y inf/inf dan como resultado NaN, por ejemplo:

Pi Numero pi=301415926

Exr(1) 0 a 2^16-1

Inf 0 a 2^32-1

NaN 0 a 2^32-1

2.5. Comandos que identifican el tipo de dato numérico.

Para identificar el tipo de dato de una variable x se puede usar cualquiera de las

expresiones.

Comando Operación

Whos x Visualiza el tipo de dato x

Isnumeric(x) Determina si x es un tipo de dato numérico

Isa (x, ‘integer’) Determina si x es del tipo numérico especificado

Isa(x, ‘uint64’) Determina si x es del tipo numérico especificado

Isa(x, ‘float’) Determina si x es del tipo numérico especificado

Isa(x, ‘double’) Determina si x es del tipo numérico especificado

Isa(x, ‘single’) Determina si x es del tipo numérico especificado

Isreal(x) Determina si x es número real o complejo

Isnan(x) Determina si x no es numero (NaN)

Isinf(x) Determina si x es infinito

Isfinite(x) Determina si x es finito

2.6. Formato de valores numéricos.

A continuación se presenta los diferentes formatos que usa Matlab en la visualización de

sus variables.

Tipo Resultado

Short Escala el formato a 5 dígitos

Shorte Escala el formato a 5 dígitos. Añade la e.

Shortg El más conveniente de los short.

Long Escala el formato a 15 dígitos.

Long e Escala el formato a 15 dígitos. Añade la e.

Long g El más conveniente de los long.

Rat En forma de fracción.

hex Hexadecimal (representación en base a 16).

Bank Establece 2 cifras decimales

Compact Suprime el exceso de líneas.

loose Añade mas salidas para que la salida sea más legible.

Page 9: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 9

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

La función format cambia la visualización de los valores numéricos mostrados en la ventana de

comandos. Esta configuración solo afecta la forma en la que los números son visualizados, no

como Matlab los calcula.

Format, por si solo cambia al formato por defecto, que es short.

Format tipo, cambia el formato especificado por tipo.

La función get(0,’format’) verifica el formato actual.

>> x=[24/7 9.656896e-6];

>> format short

>> x

x = 3.4286 0.0000

>> format short e

>> x

x = 3.4286e+000 9.6569e-006

>> format short g

>> x

x =3.4286 9.6569e-006

>> format long

>> x

x =3.428571428571428 0.000009656896000

>> format long e

>> x

x =3.428571428571428e+000 9.656896000000000e-006

>> format long g

Page 10: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 10

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

>> x

x =3.42857142857143 9.656896e-006

>> format bank

>> x

x =3.43 0.00

>> format rat

>> x

x =24/7 1/103553

>> format compact

>> x

x = 24/7 1/103553

>> format loose

>> x

x =24/7 1/103553

3. CADENA DE CARACTERES.

En Matlab cadena se refiere a un arreglo de caracteres UNICODE. La cadena es un vector,

donde cada elemento de este vector es un carácter.

3.1. Creación de una cadena de caracteres (arreglo de caracteres de una dimensión)

Se especifica el dato carácter ubicando a los caracteres dentro de un par de comillas

simples.

Ejemplo:

>> curso='computacion II'

curso = computacion II

>> whos curso

Name Size Bytes Class Attributes

Page 11: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 11

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

curso 1x14 28 char

Las funciones class e ischar muestran la identidad del curso como un arreglo de caracteres.

>> class(curso)

ans =char

>> ischar(curso)

ans = 1

La función de concatenación strcat o el operando de concatenación MATLAB[], permite unir

2 o más caracteres generando un nuevo arreglo de caracteres.

>> Curso='computacion II de la escuela profesional de mecánica eléctrica';

>> Universidad='SAN PEDRO';

>> strcat(universidad, ',', curso)

ans = SAN PEDRO, computación II de la escuela profesional de mecánica eléctrica

Para concatenar cadenas verticalmente use strvcat

>> curso='computación II';

>> universidad='SAN PEDRO';

>> strvcat(universidad, ',', curso)

ans =

SAN PEDRO

,

Computación II

3.2. Creación de arreglos de caracteres de 2 dimensiones.

Cuando creamos arreglos de caracteres bidimensionales, debemos estar seguros que cada

fila tenga la misma longitud.

La siguiente matriz tiene 3 cadenas todas de 8 caracteres cada una.

Ejemplo:

>> ciudades=['chimbote'; 'trujillo'; 'chiclayo']

ciudades =

Page 12: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 12

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

chimbote

trujillo

Chiclayo

Cuando creamos arreglos de caracteres desde cadenas de diferentes tamaños, se debe

rellenar las cadenas más cortas con espacio en blanco para forzar a que las filas sean de la

misma longitud.

Ejemplo:

>> escuelas=['informatica';'mecanica '; 'industrial ';'agronomia ']

escuelas =

Informática

Mecánica

Industrial

Agronomía

Una función simple de crear cadenas de arrglo usando la función char. Char

automáticamente rellena todas las cadenas a la longitud de la cadena de entrada más

larga.

Distritos=char(‘Chimbote’, ‘nuevo Chimbote’)

Distritos =

Chimbote

Nuevo Chimbote

La función deblank permite extraer una o más cadenas de un arreglo.

>> Distritos=char('Chimbote', 'nuevo Chimbote', 'lince', 'los olivos')

Distritos =

Page 13: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 13

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

Chimbote

Nuevo Chimbote

Lince

Los olivos

>> Distritos=deblank(distritos(1,:))

Distritos =

Chimbote

La función deblank también permite remover los espacios en blanco.

>> A{1,1}= 'MATLAB ';

>> A{1,2}= 'SIMULINK ';

>> A=deblank (A)

A = 'MATLAB' 'SIMULINK'

3.3. Comparación de cadenas.

Se pueden comparar cadenas utilizando funciones u operaciones.

a. Comparación con funciones.

Función Descripción

Strcmp Determina si 2 cadenas son idénticas. Reconoce mayúsculas y minúsculas.

Strncmp Determina si los primeros n caracteres de 2 cadenas son idénticos. Reconoce

mayúsculas y minúsculas.

Strcmpi Determina si 2 cadenas son idénticas. No diferencia entre mayúsculas y

minúsculas.

strncmpi Determina si los primeros n caracteres de 2 cadenas son idénticos. No

diferencia entre mayúsculas y minúsculas.

b. Comparación utilizando operadores.

Se pueden utilizar los operadores relacionales de MATLAB en arreglos de caracteres,

siempre que los arreglos que están comparando tengan iguales dimensiones o uno sea

escalar.

Page 14: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 14

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

Todos los operadores relacionales (>,>=,<,<=, ==, ~ =) comparan los valores de sus

respectivos caracteres.

>> a='Gavidia';

>> b='Gambini';

>> a==b

ans = 1 1 0 0 0 0 0

3.4. Comandos que identifican a un carácter.

Isletter determina si un carácter es una letra. Ejemplo:

>> ciclo='3 ciclo';

>> x=isletter(ciclo)

x = 0 0 1 1 1 1 1

Isspace determina si un carácter es un espacio en blanco (blanco, tab o línea en

blanco). Ejemplo:

>> ciclo='3 ciclo';

>> y=isspace(ciclo)

y = 0 1 0 0 0 0 0

3.5. Comandos que buscan y reemplazan caracteres.

Strrep permite cambiar los caracteres de una cadena. Ejemplo:

>> fecha='domingo 20/04/11';

>> correccionfecha=strrep(fecha,'20/04/11', '24/04/11')

correccionfecha = domingo 24/04/11

Findstr devuelve la posición inicial de una subcadena contenida a lo largo de la

cadena. Ejemplo:

>> fecha='domingo 20/04/11';

>> posicion=findstr('24', correccionfecha)

posicion =9

Page 15: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 15

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

Strmatch busca a través de las filas de un arreglo de cadenas para encontrar las

cadenas que empiecen con la serie de caracteres dada. Esta función retorna los índices

de las filas que empiezan con estos caracteres.

Nota: Antes de ejecutar el siguiente ejercicio, activar en file/preferences/command

Windows la opción wrap lines.

Ejemplo:

nombres=char('salome(pacifico)', 'sanson(hijo del sol)', 'saviondo(venerable)', 'sofia(la

reina)', 'salia (princesa)');

>> silaba=strmatch('sa',nombres)

Silaba =

1

2

3

5

3.6. Evaluación de cadenas: función EVAL.

Eval: evalua una cadena que contiene una expresión MATLAB, sentencia o llamada a

función, su sintaxis es:eval(‘string’).

>> x=[1:8];

>> y=eval('(x+2)./x')

y =

Columns 1 through 6

3.0000 2.0000 1.6667 1.5000 1.4000 1.3333

Columns 7 through 8

1.2857 1.2500

>> cadena1='sin(x*(pi/2))';

Page 16: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 16

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

>> z=eval(cadena1)

z =

Columns 1 through 6

1.0000 0.0000 -1.0000 -0.0000 1.0000 0.0000

Columns 7 through 8

-1.0000 -0.0000

>> whos x y cadena1

Name Size Bytes Class Attributes

cadena1 1x13 26 char

x 1x8 64 double

y 1x8 64 double

4. CONVERSION DE VALORES NUMERICOS A CADNAS Y VICIVERSA, Y ENTRE DIFERENTES BASES.

4.1. Conversión de valores numéricos a cadenas.

Comando Operación

Chard Convierte un entero positivo a su equivalente carácter (código

UNICODE). Trunca cualquier parte fraccional.

Int2str Convierte un entero positivo o negativo a un tipo carácter.

Num2str Convierte un tipo numérico a un tipo carácter de precisión y

formato especifico.

Mat2str Convierte un tipo numérico a un tipo carácter de determinada

precisión, retornando una cadena MATLAB que puede ser

evaluada.

Dec2hex Convierte un tipo numérico a un tipo carácter de base

Page 17: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 17

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

hexadecimal.

Dec2bin Convierte un tipo numérico a un tipo carácter de base binaria.

Dec2base Convierte un tipo numérico a un tipo carácter de cualquier base

de 2 a 36.

Ejemplo:

1. Convertir cada valor numérico de esta matriz [85 78 73 86 69 82 83 73 68 65 68], a sus

correspondientes equivalentes caracteres ASCII. Ejemplo:

>> char([85 78 73 86 69 82 83 73 68 65 68])

ans =UNIVERSIDAD

>> char([69 83 67 85 69 76 65])

ans = ESCUELA

>>char([65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

90])

ans = ABCDEFGHIJKLMNOPQRSTUVWXYZ

2. Convertir la siguiente matriz: [-85 78 -73 77 -65 83 -84 69 82] a una variable cadena de

carácter. Utilice los comandos int2str y num2str, es decir:

>> int2str([-85 78 -73 77 -65 83 -84 69 82])

ans =-85 78 -73 77 -65 83 -84 69 82

>> num2str([-85 78 -73 77 -65 83 -84 69 82])

ans =-85 78 -73 77 -65 83 -84 69 82

3. Convertir esta matriz [85 69 73] de base 10 a base 2.

>> dec2hex([85 69 73])

Page 18: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 18

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

ans =

55

45

49

4. Convertir esta matriz [85 69 73] de base 10 a base 2.

>> dec2bin([85 69 73])

ans =

1010101

1000101

1001001

5. Transformar el siguiente valor numérico x=4.756 a un tipo de cadena de caracteres.

>> x=4.756;

>> y=num2str(x)

y =

4.756

>> whos x y cadena1

Name Size Bytes Class Attributes

cadena1 1x13 26 char

x 1x1 8 double

y 1x5 10 char

Nota:las funciones int2str y num2str suelen ser usadas para etiquetar graficos.

x=[85 78 65 83];

str1=num2str(min(x));

str2=num2str(max(x));

salida=['valor de x desde' ',' str1 ' hasta' ',' str2]

Page 19: semana 03 y 04 - TIPOS DE DATOS.pdf

Universidad San Pedro Semana 03 y 04 19

Doc. Ing. Suxe Ramírez Alicia Curso: Computación II Ciclo: III

Salida = valor de x desde 65hasta 85

Si no se utilizara la función num2str el resultado sería valor x desde a hasta u.

4.2. Conversión de cadenas a valores numéricos.

Comando Operación

uintN Convierte un carácter a un código entero que representa el carácter.

Str2num Convierte un tipo carácter a un tipo numérico.

Str2double Similar a strnum, pero ofrece una mayor calidad o trabajo con arreglos

de cadenas.

Hex2num Convierte un tipo numérico a un tipo carácter de precisión especifica,

retornando una cadena que MATLAB puede evaluar.

Hex2dec Convierte un tipo carácter de base hexadecimal aun entero positivo.

Bin2dec Convierte un tipo positivo a un tipo carácter de base binaria.

Bese2dec Convierte un entero positivo a un tipo carácter de cualquier base desde

2 hasta 36.

5. ESTRUCTURAS.