La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Clase 6 COMPUTACION 2009 C lase 8 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros."— Transcripción de la presentación:

1

2 Clase 6 COMPUTACION 2009 C lase 8

3 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Integer Real Char Boolean String Archivos Registros Arreglos Vectores Matrices N-dimensionales

4 6/27/2015Fac. Ingeniería3 ´Tabla’ ‘Retiro’‘Lujan’‘Lanus’‘Const.’ ’10.00 hs’‘disponible’‘no disponible’‘disponible’ ’15.30 hs’‘no disponible’‘disponible’‘no disponible’‘disponible’ Tabla de disponiblidad de colectivos a distintas ciudades según horario

5 6/27/2015Fac. Ingeniería4 TRUEFALSE TRUE FALSETRUE FALSE TRUEFALSE Tabla de valores lógicos

6 6/27/2015Fac. Ingeniería5 123.4-0.098334.51 456.8922.30.000934.7 -9.9910012.672.3333 Tabla de valores numéricos

7 6/27/2015Fac. Ingeniería6 Arreglos 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

8 6/27/2015Fac. Ingeniería7 Propiedades 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..

9 6/27/2015Fac. Ingeniería8 Propiedades 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.

10 6/27/2015Fac. Ingeniería9 Propiedades 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.

11 6/27/2015Fac. Ingeniería10 Ejemplo Si deseamos manipular la siguiente matriz algebraica veamos diferentes formas de almacenamiento:

12 1 2 3 12 1.2 34.09 15 1002 76.7 112 1 -9.9 9.9 34.1 -0.92 Puede almacenarse en un arreglo lineal donde cada elemento es otro vector. En este caso cada vector es una columna.

13 12341234 12 1002 -9.9 122 76.7 9.9 34.09 112 34.1 15 1 - 0.92 Puede almacenarse en un arreglo lineal donde cada elemento es otro vector. En este caso cada vector es una fila.

14 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 A 23 A 42

15 6/27/2015Fac. Ingeniería14 Arreglos bidimensionales componentes Estructura donde almacenamos los datos simples, indicando su posición con fila/columna Los componentes se asignan a cada lugar de memoria a ij

16 6/27/2015Fac. Ingeniería15  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 matriz: ejemplo Extensión de la primera dimensión: cantidad de filas Extensión de la segunda dimensión: cantidad de columnas

17 6/27/2015Fac. Ingeniería16 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 matriz: ejemplo  Resulta conveniente usar esta notación, mas compacta. Extensión de la primera ddimension Extensión de la segunda dimensión

18 6/27/2015Fac. Ingeniería17 TYPE MAT = array[1..7,1..5] of real; VAR A,B:MAT; BEGIN …………. Declaración de variables con estructura 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.

19 6/27/2015Fac. Ingeniería18 TYPE MATRIX = array[-8..8,0..3] of integer; VAR W:MATRIX; BEGIN …………. Declaración de variables con estructura 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.

20 6/27/2015Fac. Ingeniería19  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: acceso

21 6/27/2015Fac. Ingeniería20 Arreglos 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}

22 6/27/2015Fac. Ingeniería21 Arreglos unidimensionales: almacenamiento  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}

23 6/27/2015Fac. Ingeniería22 Arreglos unidimensionales: almacenamiento  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}

24 6/27/2015Fac. Ingeniería23 Manipulación de subíndices de una matriz: 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}

25 6/27/2015Fac. Ingeniería24 Manipulación de subíndices de una matriz: 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 }

26 6/27/2015Fac. Ingeniería25 Manipulación de subíndices de una matriz: 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}

27 6/27/2015Fac. Ingeniería26 Manipulación de subíndices de una matriz: 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}

28 6/27/2015Fac. Ingeniería27 Manipulación de subíndices de una matriz: 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!}

29 6/27/2015Fac. Ingeniería28 Subí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;

30 6/27/2015Fac. Ingeniería29 Cantidad de componentes a partir de los limites de las extensiones Cantidad de filas: cota superior - cota inferior + 1 Cantidad 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=35 2) 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

31 6/27/2015Fac. Ingeniería30 Cantidad de componentes a partir de los limites de las extensiones Cantidad de filas: cota superior - cota inferior + 1 Cantidad 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=36 4)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

32 6/27/2015Fac. Ingeniería31 Arreglos 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

33 6/27/2015Fac. Ingeniería32 Arreglos unidimensionales: almacenamiento memoria

34 6/27/2015Fac. Ingeniería33 Lectura de una matriz por filas  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.

35 Program lect_mat; Type Matriz=array[1..10,1..10] of real; Var M,N,i,j:integer; A:matriz; Begin WRITE('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.

36 6/27/2015Fac. Ingeniería35 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}

37 6/27/2015Fac. Ingeniería36 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.

38 6/27/2015Fac. Ingeniería37 Programa para Intercambiar las filas 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);

39 6/27/2015Fac. Ingeniería38 Programa para intercambiar las filas k y l en la matriz A. IF (k>=1) and (k =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.

40 6/27/2015Fac. Ingeniería39 Ejercicio  1) Dada una matriz y un vector, calcular su producto  2) Hacer el producto de dos matrices


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

Presentaciones similares


Anuncios Google