clase 6 computacion 2009 c lase 6 tipos de datos pascal estructurados simples primitivos no...
Post on 02-Feb-2016
217 Views
Preview:
TRANSCRIPT
Clase 6 COMPUTACION
2009 Clase
6
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/22/23Computación - Facultad de
Ingeniería 3
Marca Cilindrada Precio Stock
HONDA 100 5000 $ 7
HONDA 220 7800.50 $ 2
SUZUKI 450 14000 $ 3
HARLEY_D 800 50000 $ 0
KAWASAKI 650 30000 $ 3
Marca Cilindrada Precio Stock
HONDA 100 5000 $ 7
HONDA 220 7800.50 $ 2
SUZUKI 450 14000 $ 3
HARLEY_D 800 50000 $ 0
KAWASAKI 650 30000 $ 3
04/22/23Computación - Facultad de
Ingeniería 4
ProblemaProblema
Almacenar toda la información anterior en memoria.
Si bien se puede almacenar en variables simples, no es una solución de carácter general.
Una buena solución es almacenar la información en una variable variable estructuradaestructurada
04/22/23Computación - Facultad de
Ingeniería 5
Estructura para guardar Estructura para guardar datosdatos
KAWASAKIHONDA SUZUKI HARLEY_D
04/22/23Computación - Facultad de
Ingeniería 6
Estructura para guardar Estructura para guardar datosdatos
Marca_motos
1 2 3 4
KAWASAKIHONDA SUZUKI HARLEY_D
04/22/23Computación - Facultad de
Ingeniería 7
DATOS ESTRUCTURADOSDATOS ESTRUCTURADOS
El usuario puede combinar lógicamente datos simples para formar estructuras compuestas que representen apropiadamente la información a procesar.
Un tipo estructurado difiere de un tipo simple en que las variables de un tipo estructurado tienen masmas de una componente.
04/22/23Computación - Facultad de
Ingeniería 8
DATOS ESTRUCTURADOSDATOS ESTRUCTURADOS
Cada componente de un tipo estructurado es una variable que puede tener una estructura simple o estructurada.
En el nivel mas bajo, las componentes de una variable estructurada tienen tipos simples (y cada una de ellas pueden ser usadas como variables simples: asignadas, leidas, etc.)
04/22/23Computación - Facultad de
Ingeniería 9
Un
DATOS ESTRUCTURADOSDATOS ESTRUCTURADOS
Un tipo de dato estructurado se caracteriza por el(los) tipo(s) de sus componentes y, sobre todo, por el método de estructuración.
Cada uno de estos métodos es una opción que puede manejar el programador a traves de la sección TYPE.
04/22/23Computación - Facultad de
Ingeniería 10
DATOS ESTRUCTURADOSDATOS ESTRUCTURADOS
Por lo tanto, todos los datos estructurados deben, en última instancia, ser construidos a partir de datos primitivos.
Ejemplo: el número complejo toma la forma de un par ordenado de números reales.
04/22/23Computación - Facultad de
Ingeniería 11
Un
DATOS ESTRUCTURADOSDATOS ESTRUCTURADOS
Una estructura de datos es un conjunto de datos reunidos bajo un único nombre colectivo (su identificador).
Los tipos estructurados de PASCAL que veremos son: Arreglos (ARRAY) Registros (RECORDS) Archivos (FILES)
04/22/23Computación - Facultad de
Ingeniería 12
Estructura de arregloEstructura de arreglo
HONDA SUZUKI HARLEY_D KAWASAKI
Marca_motos
1 2 3 4
Todas las componentes son del mismo tipo (string[8])
Son 4 componentes
04/22/23Computación - Facultad de
Ingeniería 13
Método de estructuración de Método de estructuración de los ARREGLOSlos ARREGLOS
Un arreglo es una colección ordenada de variables todas las cuales tienen el mismo mismo tipo tipo (esto es, tienen un tipo homogéneo).
Cada uno de los elementos de la colección se llaman componentes del arreglo.
Los arreglos poseen un número fijonúmero fijo de componentes.
04/22/23Computación - Facultad de
Ingeniería 14
ARREGLOS: propiedadesARREGLOS: propiedades
1. Todas las componentes poseen el mismo tipo de dato.
1. Todas las componentes poseen el mismo tipo de dato.
El tipo de componentes de Marca_motos es string[8]
El tipo de componentes de Marca_motos es string[8]
04/22/23Computación - Facultad de
Ingeniería 15
ARREGLOS: propiedadesARREGLOS: propiedades
2. Los arreglos poseen dimensión y se reconoce por la cantidad de índices que posee el arreglo. Un índice indica dimensión 1 y representa una columna de datos, un arreglo de dimensión 2 representa una tabla de datos dispuesta en filas y columnas, un arreglo de dimensión 3 representa una tabla de
datos el múltiples páginas, etc. .
2. Los arreglos poseen dimensión y se reconoce por la cantidad de índices que posee el arreglo. Un índice indica dimensión 1 y representa una columna de datos, un arreglo de dimensión 2 representa una tabla de datos dispuesta en filas y columnas, un arreglo de dimensión 3 representa una tabla de
datos el múltiples páginas, etc. .
La variable Marca_motos tiene una estructura con una dimension (un índice)
La variable Marca_motos tiene una estructura con una dimension (un índice)
04/22/23Computación - Facultad de
Ingeniería 16
ARREGLOS: propiedadesARREGLOS: propiedades
2. Los arreglos poseen dimensión:
n=1: dimensión 1 (arreglo unidimensional)
n=2: dimensión 2 (arreglo bidimensional)
n=3: dimensión 3 (arreglo tridimensional)
Array[0..4]
Array[0..3;0..4]
Array[0..2,0..3,0..4]
n=1
n=2
n=3
04/22/23Computación - Facultad de
Ingeniería 17
ARREGLOS: propiedadesARREGLOS: propiedades
3. Los arreglos tienen límites inferior y superior para cada dimensión. Estos límites determinan la extensión de los valores que son usados como subíndices para la dimensión. El valor de cada límite puede ser positiva, negativa o cero. Los límites de una dimensión se definen en una especificación de arreglo.
3. Los arreglos tienen límites inferior y superior para cada dimensión. Estos límites determinan la extensión de los valores que son usados como subíndices para la dimensión. El valor de cada límite puede ser positiva, negativa o cero. Los límites de una dimensión se definen en una especificación de arreglo.
El limite inferior de Marca_motos es 1 y el límite superior es 4
El limite inferior de Marca_motos es 1 y el límite superior es 4
04/22/23Computación - Facultad de
Ingeniería 18
ARREGLOS: propiedadesARREGLOS: 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 dimensión.
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 dimensión.
El tamaño de Marca_motos es 4El tamaño de Marca_motos es 4
04/22/23Computación - Facultad de
Ingeniería 19
ARREGLOS: propiedadesARREGLOS: propiedades
5. Cada componente de un arreglo se denota explícitamente, y es accedida, directamente, mencionando el nombre del arreglo seguido de una expresión encerrada entre corchetes , a la que llamaremos índice del arreglo ( o simplemente subíndice). Ejemplo para denotar la segunda componente (suzuki):
5. Cada componente de un arreglo se denota explícitamente, y es accedida, directamente, mencionando el nombre del arreglo seguido de una expresión encerrada entre corchetes , a la que llamaremos índice del arreglo ( o simplemente subíndice). Ejemplo para denotar la segunda componente (suzuki):
Marca_motos[2]Marca_motos[2]
04/22/23Computación - Facultad de
Ingeniería 20
Arreglos unidimensionales (o Arreglos unidimensionales (o vectores)vectores)
-0.3 123.5 0.009 13 -9.08 555.6
Componentes
1 2 3 4 5 6
Identificador del vector
Subíndices
Inicialmente usaremos arreglos unidimensionales de datos simples: se almacenó 6 datos reales (con variables simples deberíamos usar 6 identificadores de variable simple para tenerlos todos en forma simultanea en memoria). Posteriormente veremos vectores mas complejos.
Inicialmente usaremos arreglos unidimensionales de datos simples: se almacenó 6 datos reales (con variables simples deberíamos usar 6 identificadores de variable simple para tenerlos todos en forma simultanea en memoria). Posteriormente veremos vectores mas complejos.
VEC
04/22/23Computación - Facultad de
Ingeniería 21
Arreglos unidimensionales (o Arreglos unidimensionales (o vectores)vectores)
-0.3 123.5 0.009 13 -9.08 555.6
1 2 3 4 5 6 VEC
1.- Todas las componentes son reales
2.- La variable Vec tiene una estructura unidimensional
3.- La extensión es 1,2,3,4,5,6
4.- El tamaño de Vec es 6
5.- Acceso mediante nombre de la estructura e índice entre corchetes.
1.- Todas las componentes son reales
2.- La variable Vec tiene una estructura unidimensional
3.- La extensión es 1,2,3,4,5,6
4.- El tamaño de Vec es 6
5.- Acceso mediante nombre de la estructura e índice entre corchetes.
04/22/23Computación - Facultad de
Ingeniería 22
Claramente notamos que un vector tiene asociado DOS tipos de datos:
1)TIPO BASE ( o TIPO COMPONENTE): es el tipo de los elementos o componentes (visto como propiedad 5).
2)TIPO INDICE: es el tipo de los valores usados para acceder individualmente a los elementos del vector (subíndices).
Tipos de datos asociados a un Tipos de datos asociados a un vectorvector
04/22/23Computación - Facultad de
Ingeniería 23
En la sección TYPE declaramos el identificador de tipo, la palabra reservada array, un subrango para indicar los límites de la extensión de los valores que seran usados como subíndices para la única dimensión y el tipo base (el tipo de las componentes).
TYPE VECTOR = array[1..20] of real;
Identificador de tipo
Tipo indice
Tipo base
Declaración de tipo de un vectorDeclaración de tipo de un vector
El tipo índice debe ser escalar
04/22/23Computación - Facultad de
Ingeniería 24
TYPE VECTOR = array[1..20] of real;
Vector: una dimensión = un Vector: una dimensión = un índice índice
Limite inferior del índice
Limite inferior del índice
Limite superior del índice
Limite superior del índice
Todas las variables del tipo VECTOR podrán tener una extensiónextensión máxima de 1,2,3,4,5,6,7,.......,18,19,20
Todas las variables del tipo VECTOR podrán tener un tamañotamaño de hasta 20 componentes
Todas las variables del tipo VECTOR podrán tener una extensiónextensión máxima de 1,2,3,4,5,6,7,.......,18,19,20
Todas las variables del tipo VECTOR podrán tener un tamañotamaño de hasta 20 componentes
Extensión con un subrango
04/22/23Computación - Facultad de
Ingeniería 25
TYPE NOMBRE = array[-5..5] of string[8];
Vector: una dimensión = un índice Vector: una dimensión = un índice
Limite inferior del índice
Limite inferior del índice
Limite superior del índice
Limite superior del índice
Todas las variables del tipo NOMBRE podrán tener una extensiónextensión máxima de -5,-4,-3,-2,-1,0,1,2,3,4,5
Todas las variables del tipo NOMBRE podrán tener un tamañotamaño de hasta 11 componentes
Todas las variables del tipo NOMBRE podrán tener una extensiónextensión máxima de -5,-4,-3,-2,-1,0,1,2,3,4,5
Todas las variables del tipo NOMBRE podrán tener un tamañotamaño de hasta 11 componentes
04/22/23Computación - Facultad de
Ingeniería 26
TYPE VECTOR = array[1..20] of real; VAR VEC1,VEC2:VECTOR;
BEGIN ………….
Declaración de variables con Declaración de variables con estructura de vector: ejemploestructura de vector: 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 VEC1 se reserva 20 posiciones reales. Lo mismo para VEC2.
04/22/23Computación - Facultad de
Ingeniería 27
TYPEVECTOR= array[1..20] of REAL;Index= -5..5; NOMBRE= array [Index] of STRING[8];Fruta=(manzana,naranja,pera,uvas,kiwi);Estacion=(otonio,invierno,primavera,verano);COSECHA=array[estacion] of fruta; {La extensión es otonio,invierno, primavera,verano}VAR Vec:VECTOR; Nombre_motos:NOMBRE; A:COSECHA; I:integer; C:array[0..100] of real;
Subíndices de un vector: Subíndices de un vector: ejemplosejemplos
Si bien puede usarse el tipo array sin identificador de tipo, en general no se aconseja esta práctica. Solo se justifica si se lo usa para una única variable.
04/22/23Computación - Facultad de
Ingeniería 28
BEGIN Nombre_motos[1]:=‘HONDA’; Nombre_motos[-5]:= ‘GILERA’; A[invierno]:=naranja; {En invierno tenemos naranjas frescas !} A[verano]:=uvas VEC[3]:=3+VEC[10]-VEC[5]*2; I:=15; C[I*3]:=VEC[3]/VEC[1]; READLN(Nombre_motos[0]); WRITELN(‘El resultado es =‘,C[45]);
…………
Subíndices de un vector: Subíndices de un vector: ejemplos (sigue)ejemplos (sigue)
04/22/23Computación - Facultad de
Ingeniería 29
Arreglos unidimensionales: Arreglos unidimensionales: almacenamientoalmacenamiento
A través de la lectura de un vector podemos almacenar valores en las componentes: FOR J:= 1 TO 6 DO READLN(VEC[J]);
Igualmente mediante la asignación directa :
VEC[4]:= -101.2;{se modificó el contenido de la 4ta componente}FOR I:=1 TO 6 DO VEC[I]:=0; {todas las componentes toman el valor 0}
04/22/23Computación - Facultad de
Ingeniería 30
Arreglos unidimensionales: Arreglos unidimensionales: accesoacceso
Los subíndices son computables, i.e., pueden ser expresiones (de un tipo ordinal) mas complejas que una constante o variable.
X:= VEC[I+1]-VEC[J-2];
El tiempo que se requiere para extraer una componente no depende del valor del selector(índice); por lo que el arreglo se denomina estructura de acceso aleatorio.
04/22/23Computación - Facultad de
Ingeniería 31
Para acceder (o extraer) los elementos de esta estructura lo hacemos a través del nombre del vector seguido por el subíndice entre corchetes.
En nuestro ejemplo, los accedemos así:
VEC[1], VEC[2], ........, VEC[6]
Y usamos a cada componente como variables de tipo real:
A:= VEC[1]+VEC[4] * 3.4;
FOR I:=1 TO 6 DO
WRITELN(VEC[I]);
Arreglos unidimensionales: Arreglos unidimensionales: accesoacceso
04/22/23Computación - Facultad de
Ingeniería 32
Lectura de un vector de N Lectura de un vector de N componentescomponentes
PROGRAM lect_vect;TYPE
Vector=array[1..50] of real;VAR
N,i:integer;A:vector;
BEGIN Write('Cant.elem. del vector( <=50 )'); Readln(N); For i:=1 to N do
Begin Write('Ingrese el elemento ',i); Readln(A[i]) End
END.
Se ingresa componente a componente
04/22/23Computación - Facultad de
Ingeniería 33
El tamaño de los arreglos PASCAL no pueden cambiar durante la ejecución del programa (i.e. poseen asignación estática de memoria). A fin de agilizar la modificación del tamaño de un vector se puede usar una constante: CONST Numero_maximo=100; TYPE Vector_tres=array[1..numero_maximo] of integer;
ObservaciónObservación
04/22/23Computación - Facultad de
Ingeniería 34
Ejemplos:Ejemplos:
Escriba y ejecute programas PASCAL para:Luego de ingresar un vector de enteros de N componentes:
1) Sumar todos los componentes y almacenar el resultado a continuación del último componente.
2)Colocar en otro vector una P si la componente correspondiente es par, y colocar una I si es impar.
3) Agregar un elemento en la posición k-ésima.
Sumar todos los componentes y almacenar el resultado a continuación del último componente.
Sumar todos los componentes y almacenar el resultado a continuación del último componente.
program primero;uses crt;TYPE vector=array [1..30] of longint; VAR vec:vector; i,n:integer; suma:longint;BEGIN CLRSCR; WRITE( 'Ingrese cantidad de elementos <=29 '); READLN(n); FOR i:=1 to n do begin WRITE('Ingrese un elemento entero[',i,'] '); READLN(vec[i]) end; suma:=0; FOR i:=1 to n do suma:=suma+vec[i]; vec[n+1]:=suma; FOR i:=1 TO n+1 DO WRITELN(vec[i],' ');READLNEND.
program segundo;TYPE vector=array [1..30] of longint; pi=array [1..30] of char;VAR vec:vector; control:pi; i,n:integer;BEGIN WRITE( 'Ingrese cantidad de elementos <=29 '); READLN(n); FOR i:=1 to n do begin WRITE('Ingrese un elemento entero[',i,'] '); READLN(vec[i]) end; FOR i:=1 TO n DO IF odd(vec[i]) THEN control[i]:=‘I' ELSE control[i]:=‘P'; FOR i:=1 TO n DO WRITE(vec[i],' '); WRITELN; FOR i:=1 TO n DO WRITE(control[i],' '); WRITELN; READLNEND.
Colocar en otro vector una P si la componente correspondiente es par, y colocar una I si es impar.
Colocar en otro vector una P si la componente correspondiente es par, y colocar una I si es impar.
program tercero;TYPE vector=array [1..30] of longint;VAR vec:vector; i,n,k:integer; nuevo:longint;BEGIN WRITE( 'Ingrese cantidad de elementos <=29 '); READLN(n); FOR i:=1 to n do begin WRITE('Ingrese un elemento entero[',i,'] '); READLN(vec[i]) end; WRITE('Ingrese el elemento que desea intercalar '); READLN(nuevo); REPEAT WRITE('Ingrese posicion donde desea intercalarlo '); READLN(k); UNTIL (k>=1) and (k<=n); FOR i:=n DOWNTO k DO vec[i+1]:=vec[i]; vec[k]:=nuevo; FOR i:=1 to n+1 DO write(vec[i]); WRITELNEND.
Agregar un elemento en la posición k-ésima.
Agregar un elemento en la posición k-ésima.
Funciones low y highTYPE vector=array [1..30] of longint;VAR vec:vector;
Begin vec[32]:=23456;
04/22/23Computación - Facultad de
Ingeniería 38
Range check error !!!
La extensión es de 1 a 30 La extensión es de 1 a 30
Para verificar el rango puede usar las funciones low y high que devuelven los extremos de la extensión (o rango).
Writeln(low(vec)); {devuelve 1}Writeln(high(vec)); {devuelve 30}
Arrays y strings
Los strings son vectores de caracteres. Es posible acceder a los caracteres de un stringmediante una sintaxis de array. Los string están indexados desde 0, pero el primer
carácter se encuentra en la posición 1.
Cadena:=‘Este es un ejemplo de string’;
C:=cadena[4]; {e}
D:=cadena[10]; {n}
Writeln(cadena[0]); 04/22/23
Computación - Facultad de Ingeniería 39
Error:element zero can’t be accessed
VECTORES PARALELOS: ejemploSean los siguientes datos:
Apellido y n. Depto. Expensas Pagó?MARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No
ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si
Se desea tener un listado de los propietarios que no han pagado las expensas. Imprimir apellido y nombre, departamento y deuda.
VECTORES PARALELOS:VECTORES PARALELOS:
Apellido y n. Depto. Expensas Pagó?MARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No
ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si
AyN Depto Expen Pago
Colección de
datos del mismo
tipo: string
Colección de
datos del mismo
tipo: string
Colección de
datos del mismo
tipo: real
Colección de
datos del mismo
tipo: booleano
VECTORES PARALELOS:VECTORES PARALELOS:
Apellido y n. Depto. Expensas Pagó?MARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No
ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si
AyN Depto Expen Pago (vector de (vector de (vector de (Vector String) string) reales) booleano)
04/22/23Computación - Facultad de
Ingeniería 43
Vectores paralelosVectores paralelosLos vectores paralelos pueden ser usados para almacenar grupos degrupos de datos de diferentes tipos datos de diferentes tipos.
Las características asociadas a cada grupo pueden ser representadas apropiadamente con esta estructura de datos.
Por ejemplo, un grupo puede estar constituido por los datos de un propietario, o datos sobre un libro o datos sobre un alumno, etc.
MARTINEZ,Juan 4A 50 $ Si MARTINEZ,Juan 4A 50 $ Si Grupo de datos de un propietario
04/22/23Computación - Facultad de
Ingeniería 44
Vectores paralelosVectores paralelos
Cada una de las características de un grupo (por ejemplo Nombre, Dirección, Autor, etc.) deben almacenarse y recuperarse de manera tal de mantener la integridadintegridad de los datos.
MARTINEZ,Juan 4A 50 $ Si MARTINEZ,Juan 4A 50 $ Si
Estos datos están asociados entre si (son todos del mismo propietario) y NO deben mezclarse con los datos de otro propietario.
04/22/23Computación - Facultad de
Ingeniería 45
Vectores paralelosVectores paralelos
Como se tiene variosvarios grupos de datos (p.e. varios propietarios), se puede almacenar en un vector la misma característica correspondiente a cada grupo. Esto se puede hacer con cada una de las características. De ahí la noción de vector paralelovector paralelo.
Para almacenar y recuperar los ítems de cada unidad, se usan componentes del mismo índicecomponentes del mismo índice en cada uno de los vectores paralelos.
VECTORES PARALELOS: ejemplo
Apellido y n. Depto. Expensas Pagó? IndiceMARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No
ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si
11
22
33 44
Si el índice es igual a 1, el primer grupo de datos está representada en las primeras componentes de cada uno de los cuatro vectores.
Program vect_paralelo; Type Vec1=array[1..100] of string[25]; Vec2=array[1..100] of real; Vec3=array[1..100] of boolean;Var Depto,AyN:vec1; Expen:vec2; Pago:vec3; N,I,J,k:integer; Aux:char; Begin Write(‘Cant. de deptos’);Readln(N);
For i:=1 to N do Begin Writeln(‘Departamento ‘,i); Write(‘Apellido y nom.’);readln(AyN[i]); Write(‘Nro. De departamento’); readln(depto[i]); Write( ‘Expensas ‘); readln(expen[i]); Write(‘Ingrese S si pago, N sino pago’); REPEAT
Readln(aux) UNTIL aux=‘S’ or aux=‘N’; pago[i]:=aux=‘S’; end;for i:=1 to N do if not(pago[i]) then writeln(AyN[i],depto[i],expen[i]);end.
top related