39
Clase 6 COMPUTACION 2009 Clase 8

Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

Embed Size (px)

Citation preview

Page 1: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

Clase 6 COMPUTACION

2009 Clase

8

Page 2: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

Tipos de Datos Tipos de Datos PASCALPASCAL Tipos de Datos Tipos de Datos PASCALPASCAL EstructuradosEstructurados

SimplesSimples

PrimitivosPrimitivos

No primitivosNo primitivos

IntegerIntegerRealReal CharCharBooleanBooleanStringString

ArchivosArchivos RegistrosRegistros

Arreglos

Vectores

Matrices

N-dimensionales

Page 3: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 3

´Tabla’ ‘Retiro’ ‘Lujan’ ‘Lanus’ ‘Const.’

’10.00 hs’ ‘disponible’‘no disponible’

‘disponible’ ‘disponible’

’15.30 hs’‘no disponible’

‘disponible’‘no disponible’

‘disponible’

Tabla de disponiblidad de colectivos a Tabla de disponiblidad de colectivos a distintas ciudades según horariodistintas ciudades según horario

Page 4: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 4

TRUE FALSE FALSE TRUE

TRUE TRUE FALSE TRUE

FALSE FALSE TRUE FALSE

Tabla de valores Tabla de valores lógicoslógicos

Page 5: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 5

123.4 -0.098 334.5 1

456.89 22.3 0.0009 34.7

-9.99 100 12.67 2.3333

Tabla de valores Tabla de valores numéricosnuméricos

Page 6: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 6

Arreglos bidimensionalesArreglos bidimensionales

Las tablas de los tres ejemplos anteriores pueden ser almacenadas en una estructura de datos denominada

arreglos bidimensionales o matrices

Recordar que todas las componentes tienen el mismo tipo

Page 7: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 7

PropiedadesPropiedades

1. Estos arreglos poseen dos dimensiones y se los llama arreglos bidimensionales o matrices.

2. Cada componente de un arreglo bidimensional se denota explícitamente, y es accedida directamente, mencionando su nombre seguido de dos subíndices encerrados entre corchetes.

.

Page 8: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 8

PropiedadesPropiedades

3. Cada una de las dimensiones tienen límites inferior y superior. Estos límites determinan la extensión de los valores que son usados como subíndices para la dimensión. Los límites de cada dimensión se definen en una especificación de arreglo.

Page 9: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 9

PropiedadesPropiedades

4. El tamaño de un arreglo (esto es, el número de componentes) se indica cuando se define el arreglo y queda invariable a partir de ese momento. El cálculo del número de componentes se logra multiplicando entre si la cantidad de elementos que el arreglo posee en cada una de las dos dimensiones.

5. Todas las componentes poseen el mismo tipo de dato.

Page 10: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 10

EjemploEjemplo

92.0115

1.3411209.34

9.97.762.1

9.9100212

Si deseamos manipular la siguiente matriz algebraica veamos diferentes formas de almacenamiento:

Page 11: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

1 2 3

12

1.2

34.09

15

1002

76.7

112

1

-9.9

9.9

34.1

-0.92

92.0115

1.3411209.34

9.97.762.1

9.9100212Puede almacenarse en un arreglo lineal donde cada elemento es otro vector. En este caso cada vector es una columna.

Puede almacenarse en un arreglo lineal donde cada elemento es otro vector. En este caso cada vector es una columna.

Page 12: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

1

2

3

4

12 1002 -9.9

122 76.7 9.9

34.09 112 34.1

15 1 - 0.92

92.0115

1.3411209.34

9.97.762.1

9.9100212Puede almacenarse en un arreglo lineal donde cada elemento es otro vector. En este caso cada vector es una fila.

Puede almacenarse en un arreglo lineal donde cada elemento es otro vector. En este caso cada vector es una fila.

Page 13: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

92.0115

1.3411209.34

9.97.762.1

9.9100212

En los dos casos anteriores usamos vectores y vimos que cada componentes es otro vector. Si se desea referenciar cada elemento simple de la matriz debemos indicar su posición usando dos subíndices (mediante la fila y columna donde se halla, en forma similar a las matrices algebraicas).

En los dos casos anteriores usamos vectores y vimos que cada componentes es otro vector. Si se desea referenciar cada elemento simple de la matriz debemos indicar su posición usando dos subíndices (mediante la fila y columna donde se halla, en forma similar a las matrices algebraicas).

Matriz A

Fila 1

Fila 2

Fila 3

Fila 4

Columna 1 Columna 2 Columna 3

A23

A42

Page 14: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 14

434241

333231

232221

131211

aaa

aaa

aaa

aaa

Arreglos bidimensionalesArreglos bidimensionales

componentesEstructura donde almacenamos los datos simples, indicando su posición con fila/columna

92.0115

1.3411209.34

9.97.762.1

9.9100212

Los componentes se asignan a cada lugar de memoria aij

Page 15: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 15

La matriz se estructura como un vector de vectores

TYPE MATRIZ = array[1..4] of array[1..3] of real;

arreglo lineal arreglo lineal de vectores de reales

Declaración de tipo de una Declaración de tipo de una matriz: ejemplomatriz: ejemplo

Extensión de la primera dimensión: cantidad de filas

Extensión de la segunda dimensión: cantidad de columnas

Page 16: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 16

En la declaración de tipo de un arreglo bidimensional se pone de manifiesto la existencia de los dos subíndices mediante dos subrangos indicando los límites de la extensión de cada una de las dimensiones.

TYPE MATRIZ = array[1..4,1..3] of real;

Identificador de tipo

Tipo indice

Tipo base

Declaración de tipo de una Declaración de tipo de una matriz: ejemplomatriz: ejemplo

Resulta conveniente usar esta notación, mas compacta.

Extensión de la primera ddimension

Extensión de la segunda dimensión

Page 17: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 17

TYPE MAT = array[1..7,1..5] of real; VAR

A,B:MAT;

BEGIN ………….

Declaración de variables con Declaración de variables con estructura de matriz: ejemploestructura de matriz: ejemplo

Cuando se declara variables de un tipo estructurado, se le indica al sistema que reserve espacio en memoria, para cada una de ellas.

Para A se reserva 35 posiciones reales. Lo mismo para B.

Page 18: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 18

TYPE MATRIX = array[-8..8,0..3] of integer; VAR

W:MATRIX;

BEGIN ………….

Declaración de variables con Declaración de variables con estructura de matriz: ejemploestructura de matriz: ejemplo

Cuando se declara variables de un tipo estructurado, se le indica al sistema que reserve espacio en memoria, para cada una de ellas.

Para W se reserva 68 posiciones enteras.

Page 19: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 19

Para acceder (o extraer) los elementos de esta estructura lo hacemos a través del nombre del vector seguido por los subíndices entre corchetes.

En nuestro ejemplo, los accedemos así:

A[1,1], A[1,2], ........, A[4,3]

Y usamos a cada componente como variables de tipo real:

X:= A[1,1]+A[4,1] * 3.4;

A[2,3]:= SIN(A[3,3]);

Arreglos bidimensionales: accesoArreglos bidimensionales: acceso

Page 20: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 20

Arreglos unidimensionales: accesoArreglos unidimensionales: acceso

Los subíndices son computables, i.e., pueden ser expresiones (de un tipo escalar u ordinal) mas complejas que una constante o variable.

X:= A[I+1,3*J]-A[2,J-2];

S:=0;FOR I:=1 TO 3 DO S:=S+A[I,I]; {calculo de la traza}

Page 21: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 21

Arreglos unidimensionales: Arreglos unidimensionales: almacenamientoalmacenamiento

A través de la lectura de una matriz (o secciones) podemos almacenar valores en las componentes:

FOR J:= 1 TO 3 DO READLN(A[1,J]); {lectura de la primera fila}

Page 22: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 22

Arreglos unidimensionales: Arreglos unidimensionales: almacenamientoalmacenamiento

Igualmente mediante la asignación directa :

A[4,1]:= 18; FOR I:=1 TO 3 DO A[I,I]:=0.10; {todas las componentes de la diagonal principal toman el valor 0.10}

Page 23: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 23

Manipulación de subíndices de una Manipulación de subíndices de una matriz: ejemplosmatriz: ejemplos

Ejemplo 1: manipulación de filas; cada fila puede ser vista como un vector con componentes del tipo base.

1) Una fila fija. Por ejemplo la fila 3:el indice de la fila permanece fijo y el indice de la columna varía.

FOR col:=1 to 3 DO

A[3,col]:=1;{su manipulacion es

similar a un vector.Toda la fila 3 toma 1}

Page 24: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 24

Manipulación de subíndices de una Manipulación de subíndices de una matriz: ejemplosmatriz: ejemplos

2) Una fila cualquiera. Similar a 1) pero elegimos la fila mediante una variable

fila:=cualq;

FOR col:=1 to 3 DO

A[fila,col]:=1;{es similar a un vector cuando fila toma un valor }

Page 25: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 25

Manipulación de subíndices de una Manipulación de subíndices de una matriz: ejemplosmatriz: ejemplos

Ejemplo 2: manipulación de columnas; cada columna puede ser vista como un vector con componentes del tipo base.

1) Una columna fija. Por ejemplo la 2:el indice de la columna permanece fijo y el indice de la fila varía.

FOR fila:=1 to 3 DO

A[fila,2]:=1;{su manipulacion es

similar a un vector.Toda la col. 2

toma 1}

Page 26: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 26

Manipulación de subíndices de una Manipulación de subíndices de una matriz: ejemplosmatriz: ejemplos

2) Una columna cualquiera. Similar a 1) pero elegimos la columna mediante una variable

col:=cualq;

FOR fila:=1 to 3 DO

A[fila,col]:=1;{su manipulacion es

similar a un vector}

Page 27: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 27

Manipulación de subíndices de una Manipulación de subíndices de una matriz: ejemplosmatriz: ejemplos

Ejemplo 3: manipulación de diagonal principal; puede ser vista como un vector con componentes del tipo base y con índice coincidentes.

FOR i:=1 DO 3 DO

A[i,i]:=A[i,i]/2; {es un vector!}

Page 28: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 28

Subíndices de una matrizSubíndices de una matriz

Los límites de la extensión de cada dimensión pueden tomar cualquier valor de tipo escalar. Por ejemplo:

TYPE meses=(enero,febrero,marzo,abril,mayo,junio,julio,agosto,setiembre,octubre,noviembre,diciembre);

items=(seguro,cable,telefono,edea);

gastos=array[meses,items] of real;

VAR a:gastos;

BEGIN

a[abril,seguro]:=120.08;

Page 29: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 29

Cantidad de componentes a partir Cantidad de componentes a partir de los limites de las extensionesde los limites de las extensiones

Cantidad de filas: cota superior - cota inferior + 1Cantidad de columnas: cota superior - cota inferior + 1

1) MAT = array[1..7,1..5] of real; Cantidad de filas:7-1+ 1=7 Cantidad de columnas: 5-1 +1=5 Cantidad de componentes: 7*5=352) CUALQ = array[-3..1,-5..0] of integer; Cantidad de filas:1-(-3)+1= 5 Cantidad de columnas: 0-(-5)+1=6 Cantidad de componentes: 5*6=30

Page 30: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 30

Cantidad de componentes a partir Cantidad de componentes a partir de los limites de las extensionesde los limites de las extensiones

Cantidad de filas: cota superior - cota inferior + 1Cantidad de columnas: cota superior - cota inferior + 1

3) gastos=array[meses,items] of real; Cantidad de filas:11-0+1=12 (Recordar que enero tiene ordinalidad 0) Cantidad de columnas: 3-0+1=4 Cantidad de componentes: 12*4=364) MATRIX = array[-8..8,0..3 ] of integer, Cantidad de filas:8-(-8)+1= 17 Cantidad de columnas: 3-(0)+1=4 Cantidad de componentes: 17 * 4= 68

Page 31: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 31

Arreglos n-dimensionalesArreglos n-dimensionales

Se puede especificar n subíndices. En este caso se dice que el arreglo es n-dimensional, y cada componente se denota mediante n índices.

Por ejemplo Z[i,j,k] menciona un elemento de un arreglo tri-dimensional (pueden pensarse como grupos de matrices).

Array[0..4]

Array[0..3;0..4]

Array[0..2,0..3,0..4]

n=1

n=2

n=3

Page 32: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 32

Arreglos unidimensionales: almacenamientoArreglos unidimensionales: almacenamiento

memoria

Page 33: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 33

Lectura de una matriz por Lectura de una matriz por filasfilas

Un arreglo bi-dimensional es una estructura lógica y teniendo en cuenta que la memoria almacena los datos como hileras de caracteres (una dimensión), se necesita decidir cómo guardar un estructura lógica de más de una dimensión.

Veremos el caso de una matriz almacenada por filas.

Page 34: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

Program lect_mat;Type Matriz=array[1..10,1..10] of real;Var M,N,i,j:integer; A:matriz;BeginWRITE('Ingrese cantidad de filas <=10'); READLN(M); WRITE('Ingrese cantidad de columnas <=10'); READLN(N); FOR i:=1 TO M DO {fila i-esima} FOR j:=1 TO N DO {Col. J-esima} Begin WRITE('A(',i,',',j,')=');

READLN(a[i,j]) End; End.

Page 35: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 35

Programa para calcular y escribir el elemento máximo de una matriz (1)

program matmax;

type

mat=array[1..10,1..10] of real;

var

a:mat;

maximo:real;

i,j,n,m:integer;

begin

{Codigo del ingreso de la matriz}

Page 36: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 36

Programa para calcular y escribir el elemento máximo de una matriz (2)

{Calculo del maximo} maximo:=a[1,1]; FOR i:=1 TO m DO FOR j:=1 TO n DO IF a[i,j]>maximo THEN maximo:=a[i,j]; {Fin del calculo} WRITELN('El valor del maximo',maximo:3:2);end.

Page 37: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 37

Programa para Intercambiar las filas Programa para Intercambiar las filas k y l en la matriz A.k y l en la matriz A.

Program intercam;Type Matriz=array[1..10,1..10] of real;Var M,N,i,j,k,l:integer; A:matriz; Aux:real;Begin {Ingreso de matriz A de M filas y N columnas}

WRITE('Ingrese valor de k y l '); READLN(k,l);

Page 38: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 38

Programa para intercambiar las filas Programa para intercambiar las filas k y l en la matriz A.k y l en la matriz A.

IF (k>=1) and (k<=M) and (l>=1) and (l<=M) THEN FOR i:=1 TO N DO {son N cols} Begin Aux:=a[k,i];

a[k,i]:=a[l,i]; a[l,i]:=aux

End ELSE WRITE('Ingreso datos incorrectos')

End.

Page 39: Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros

04/21/23 Fac. Ingeniería 39

EjercicioEjercicio

1) Dada una matriz y un vector, calcular su producto

2) Hacer el producto de dos matrices