clase 6 computacion 2009 c lase 8 tipos de datos pascal estructurados simples primitivos no...
TRANSCRIPT
Clase 6 COMPUTACION
2009 Clase
8
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
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
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
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
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
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.
.
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.
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.
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:
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.
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.
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
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
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
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
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.
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.
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
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}
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}
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}
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}
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 }
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}
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}
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!}
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;
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
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
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
04/21/23 Fac. Ingeniería 32
Arreglos unidimensionales: almacenamientoArreglos unidimensionales: almacenamiento
memoria
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.
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.
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}
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.
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);
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.
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