37
Clase 12 COMPUTACION 2009

Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

Embed Size (px)

Citation preview

Page 1: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

Clase 12

COMPUTACION2009

Page 2: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

Tipos de Datos PASCAL Tipos de Datos PASCAL EstructuradosEstructurados

SimplesSimples

PrimitivosPrimitivos

No primitivosNo primitivos

EstáticosEstáticos

IntegerIntegerRealReal CharCharBooleanBooleanStringString

ArchivosArchivos

RegistrosRegistrosArreglosArreglos

VectoresVectores

MatricesMatrices

N-dimensionalesN-dimensionales

Page 3: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 3

Apellido Ruiz Martinez

Nombre Pablo Mariana

Tipo de Doc. DNI DNI

Número de Doc. 22456987 23456789

Sexo Masculino Femenino

Fecha de nacimiento 22/10/99 15/09/74....................... ........... ..............

Apellido Ruiz Martinez

Nombre Pablo Mariana

Tipo de Doc. DNI DNI

Número de Doc. 22456987 23456789

Sexo Masculino Femenino

Fecha de nacimiento 22/10/99 15/09/74....................... ........... ..............

Información sobre personas:

Page 4: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 4

Apellido Ruiz Martinez

Nombre Pablo Mariana

Tipo de Doc. DNI DNI

Número de Doc. 22456987 23456789

Sexo Masculino Femenino

Fecha de nacimiento 22/10/99 15/09/74....................... ........... ..............

La tabla vista por filas nos presenta información del mismo tipo (= vectores paralelos)La tabla vista por filas nos presenta información del mismo tipo (= vectores paralelos)

Page 5: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 5

Apellido Ruiz Martinez

Nombre Pablo Mariana

Tipo de Doc. DNI DNI

Número de Doc. 22456987 23456789

Sexo Masculino Femenino

Fecha de nacimiento 22/10/99 15/09/74....................... ........... ..............

La tabla vista por columnas relaciona información de distinto tipodistinto tipo (= registros)

La tabla vista por columnas relaciona información de distinto tipodistinto tipo (= registros)

Page 6: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 6

Si agrupamos información de distinto tipo (como el que figura en las columnas vistas) construimos un REGISTRO o “RECORD”.

Un REGISTRO es una estructura de datos que consiste de un número fijo de componentes, llamados CAMPOS.

A diferencia del arreglo, no se exige que sean del mismo tipo, y no pueden ser accedidos mediante un índice.

Estructura de datos: registrosEstructura de datos: registros

Page 7: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 7

Type Identifica_Reg = RECORD

S1: T1; S2: T2; ........ ...... Sn : Tn;

END;

Sintaxis de la declaraciónSintaxis de la declaraciónPrimer Campo

Identificador de campo Identificador de tipo

Siendo: Siendo: SSii: identificadores de campos : identificadores de campos

y y TTii: los tipos correspondientes: los tipos correspondientes

Identificador del tipo registro

Page 8: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 8

Cada campo(o componente) de un registro tiene:

1) Un identificador que lo denota, es decir, el identificador de campo.

2) Una definición de tipo que especifica el tipo del campo

Campos de un registroCampos de un registro

Page 9: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 9

Type Vect= array[1..10] of string [10]; persona = Record

Nomb, apell: string[20];

Sexo: char; anionac: integer; hijos: vect;

end;Var p:persona;Begin p.nomb:=‘Juan’;

EjemploEjemplo

Acceso a un campo

Declaración de registro

Identificador de campo

Tipo del campo

Identificador de tipo registro

Page 10: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 10

Acceso a los campos de un registroAcceso a los campos de un registro

Las variables del tipo record son declaradas de la manera usual.

Un campo de un registro es seleccionado usando tanto el nombre de la variable de tipo record como el nombre de la componente, separados por un punto:

Selectores de registroVar

p: persona;Begin p.nomb:=‘Juan’;

El acceso a los campos se hace a traves de los selectores de registro

Page 11: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

Type TFecha = record Dia:1..31; Mes:1..12; Anio:1900..2100; End; Persona = RECORD

Nombres:string[25]; TipoDoc:string[3]; NroDoc:integer; Sexo:(femenino,masculino); FechaNac:TFecha; EstadoCiv: (soltero,casado,divorciado,viudo, separado); Domicilio:string[30]; Telefono:string[30]; END;Var XX:persona;Begin XX.FechaNac.dia:=4;....................................

Registros anidados

Acceso a campos de registros anidados

Page 12: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 12

TypeFamilia=(madre,padre,hijo1,hijo2,hijo3,hijo4);Registro_vacuna=array[familia] of TFecha;Var hepa:registro_vacuna; XX:persona;BEGIN

hepa[hijo1].dia:=5;hepa[hijo1].mes:=5;hepa[hijo1].anio:=2003;.......

Ejemplo: arreglo de registros Ejemplo: arreglo de registros

Page 13: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 13

Type MReal= array[1..30,1..30]of real; MatrizReal=Record CantFilasMR: byte; CantColsMR: byte; MatR:MReal; End;VAR A:MatrizReal; X:real; Fil:byte;BEGIN

Fil:=A.CantFilMR; X:=A.MatR[2,3];

Ejemplo: registros con arreglos Ejemplo: registros con arreglos

Acceso a un campo que es una matriz

Page 14: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 14

Tipos que faltan en el apunte (pag. 143)

TYPECadena = string[30];VReal= array[1..maxi] of real;VCadena=array[1..maxi] of Cadena;

VectorReal = record N:byte; V:VReal; End;

VectorCadena = record N:byte; V:Vcadena; End;

Page 15: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 15

El siguiente programa permite ingresar los datos de una persona y verifica si puede ser donantes de sangre (condición para el donante: ser del grupo A+ y pesar más de 50 Kg.)

El programa posee tres procedimientos: uno para ingreso de datos, otro para decidir si una persona específica puede donar sangre y el último para escribir los datos.

EjemploEjemplo

Page 16: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 16

program regist4;type vector=array[1..10] of string; cadena=string[10]; persona=record nombre:string[20]; anion:integer; gruposan:cadena; peso:real; nomhijos:vector; end;var a1:persona; n1:integer;

Este Campo es un Este Campo es un arregloarreglo

Page 17: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

procedure lectura(var a:persona;var n: integer); var i:integer; begin writeln('Ingrese los datos de una persona'); writeln('Ingrese el nombre'); readln (a.nombre); writeln('Ingrese el año de nacimiento'); readln(a.anion); writeln('ingrese su grupo sanguineo'); readln(a.gruposan); writeln('ingrese su peso'); readln(a.peso); writeln('Ingrese la cantidad de hijos:'); readln(n); for i:=1 to n do begin write('Ingrese el nombre de los hijos'); readln(a.nomhijos[i]); end; {Fin del procedure lectura} end;

Parámetro con estructura de registro

Page 18: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

procedure calculo(x:cadena;y:real); begin if (x='A+') and (y>50.00) then writeln('Usted puede donar sangre') else writeln('Usted no puede donar sangre'); end;

procedure escritura(a:persona;n:integer); var i:integer; begin writeln(' Los datos que Ud. ingreso son:' ); writeln (a.nombre,' '); writeln(a.anion,' '); writeln(a.gruposan,' '); writeln(a.peso:4:3,' '); for i:=1 to n do write(a.nomhijos[i],' '); end; {fin del procedimiento}

{Programa principal} begin lectura(a1,n1); calculo(a1.gruposan,a1.peso); escritura(a1,n1); end.

El programa principal recibe los datos de una persona a través de un registro

El proc. cálculo recibe grupo sanguineo y peso de una persona para decidir si puede donar sangre

Page 19: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 19

Sentencia WITHSentencia WITH

A menudo es necesario entrar a la misma componente de un registro, o a campos diferentes del mismo registro, varias veces en una pequeña sección del programa.

La sentencia with nos ahorra esfuerzo porque los campos de un registro pueden ser referenciados por el nombre del campo solamente. El compilador provee el nombre del registro.

Además de ahorrar alguna escritura de código, with puede ser útil al compilador porque el registro necesita ser localizado solamente una vez, en vez de varias ocasiones.

Page 20: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 20

WITH variable de tipo registro DO Sentencia;

Sintaxis de WITH - DOSintaxis de WITH - DO

En la sentencia WITH los campos se referencian mencionando solo su nombre

En la sentencia WITH los campos se referencian mencionando solo su nombre

Page 21: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 21

Ejemplo WITH - DOEjemplo WITH - DO

Type

TFecha = record Dia:1..31; Mes:1..12; Anio:1900..2100; End;Var f:Tfecha;

With f do {lectura de una fecha}

begin

readln(dia);

readln(mes);

readln(anio)

end;

With f do {lectura de una fecha}

begin

readln(dia);

readln(mes);

readln(anio)

end;

Page 22: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 22

Veamos el mismo problema ya presentado.

El programa es el mismo ya visto.

La modificación es solo el uso de sentencias with.

EjemploEjemplo

Page 23: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

program regist5;type vector=array[1..10] of string; cadena=string[10]; persona=record nombre:string[20]; anion:integer; gruposan:cadena; peso:real; nomhijos:vector; end;var a1:persona; n1:integer;

Es la misma definición de

registro

Page 24: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

procedure lectura( var a:persona;var n:integer); var i:integer; begin with a do begin {Begin del with} writeln('Ingrese los datos de una persona'); writeln('Ingrese el nombre'); readln (nombre); writeln('Ingrese el año de nacimiento'); ................ for i:=1 to n do begin writeln('Ingrese el nombre del hijo Nº',i); readln(nomhijos[i]); end; end;{Fin del with} end;{Fin del procedure}

Uso de with

Page 25: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

procedure calculo(x:cadena;y:real); begin if (x='A+') and (y>50.00) then writeln('Usted puede donar sangre') else writeln('Usted no puede donar sangre'); end;procedure escritura(a:persona;n:integer); var i:integer; begin with a do begin writeln(' Los datos que Ud. ingreso son:' ); writeln (nombre,' '); writeln(anion,' '); writeln(gruposan,' '); writeln(peso:4:3,' '); for i:=1 to n do write(nomhijos[i],' '); end; end; {fin del procedimiento}

{Programa principal}begin lectura(a1,n1); calculo(a1.gruposan,a1.peso); escritura(a1,n1); end.

Uso de with

Page 26: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 26

1. Leer un grupo de complejos. Luego calcular e imprimir el módulo para cada uno de ellos. La estructura de datos a usar es un arreglo de registros.

2. Se tiene una lista de personas con los siguientes datos:Número de documento, fecha de nacimiento (día, mes y año), género (f, m)

Se quiere buscar la pareja (de distinto género) cuyas edades sean las más cercanas. Considerar posible repetición, así como la posibilidad de que no haya parejas posibles.

Ejemplos

Page 27: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

program ejempl;uses crt; type Complex=record Re:real; Im:real; end; numer=array [1..20] of complex; var com:numer; n:complex; cant,i:integer;procedure lect(var cant:integer; var A:numer);var i:integer;begin writeln(‘Ingrese cantidad de complejos); Readln(cant); for i:=1 to cant do with A[i] do begin writeln('Ingrese part. real:');readln(Re); writeln('Ingrese part. imaginaria:');readln(Im); end; end;

El procedimiento El procedimiento devuelve al p.p. la devuelve al p.p. la lista de complejos y lista de complejos y su cantidadsu cantidad.

Arreglo de Arreglo de registrosregistros

Page 28: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

Function Modulo(c:complex):real; begin with c do modulo:=sqrt(sqr(Re)+sqr(Im)) end; begin {p.p.} clrscr; Lect(cant,com); writeln(‘******** Modulo de los complejos ingresados *******’); for i:=1 to cant do with com[i] do writeln(‘Complejo:’,real,’ i ‘,imag, ‘ Modulo:’,Modulo(com[i]))end.

Page 29: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

Funciones de la unidad dateutils

Ingreso de una fecha:

function EncodeDateTime(const AYear: Word;const AMonth: Word;const ADay: Word;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word) : TDateTime;

Cantidad de días entre dos fechas

function DaysBetween(const ANow: TDateTime;const AThen: TDateTime): Integer;

04/21/23Computación - Fac. Ingeniería

- UNMDP 29

Page 30: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 30

program ejemreg1;

Uses SysUtils, DateUtils,crt ;

type

persona= record nrodoc:longint; fechanac:TDateTime;{Tipo propio de la unidad DateUtils} genero:1..2; end;

pareja=record m:persona; h:persona; difEdadDias:integer; end;

listapersonas=array[1..30] of persona;

listaparejas=array[1..30] of pareja;

Definición de tipos

Page 31: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 31

Const

Fmt = ' dddd dd mmmm yyyy ' ;

var

AYear:word; AMonth:word; Aday:word; AHour: Word; AMinute: Word; ASecond: Word; AMilliSecond: Word; todas:listapersonas; cantpers,cantduos:integer; duos:listaparejas; estaes:pareja;

Declaración de constantes y variables

Page 32: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 32

procedure ingreso(var todas:listapersonas;var cantpers:integer); var sigue:char; i:integer; total:integer;

begin i:=1; repeat with todas[i] do begin write('Ingrese numero de documento de la persona ',i,' : '); readln(nrodoc); writeln('Ingrese fecha de nacimiento de la persona ', i,': ======'); write('Ingrese el anio : '); readln(AYear); write('Ingrese el mes :'); readln(AMonth); write('Ingrese el dia : '); readln(ADay); write('Ingrese la hora : '); readln(AHour); write('Ingrese los minutos : '); readln(Aminute);

Procedimiento de entrada de datos (1)

Page 33: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 33

write('Ingrese los segundos : '); readln(Asecond); write('Ingrese los milisegundos : '); readln(AMilliSecond); fechanac:=EncodeDateTime(AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond); writeln('Ingrese el genero de la persona ',i, ' : '); writeln(' 1: femenino; 2:masculino : '); readln(genero); writeln('Sigue ingresando datos? s/n '); readln(sigue); end; if sigue='s' then i:=i+1; until sigue<>'s'; cantpers:=i; end;

Procedimiento de entrada de datos (2)

Se construyeuna fecha en base al aniomes,dia,hora,minuto,segundos y milisegundos ingresados por el usurio

Page 34: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 34

{====================================================}

procedure mostrarpersona(p:persona);

begin writeln('Nro. de documento : ',p.nrodoc); write('Su fecha de nacimiento es : '); Writeln( FormatDateTime (Fmt ,p.fechanac) ) ; IF p.genero=1 then writeln('Es una mujer') else writeln('Es un hombre')end;

Escribe el registro de una persona

Page 35: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 35

procedure parejas(todas:listapersonas; cantpers:integer; var duos:listaparejas; var cantduos:integer);var i,k,j:integer;

Begin j:=0; for i:=1 to cantpers-1 do for k:=i+1 to cantpers do begin if ((todas[i].genero=1) and (todas[k].genero=2)) or ((todas[k].genero=2) and (todas[i].genero=1)) then begin j:=j+1; with duos[j] do begin m:=todas[i]; h:=todas[k]; difEdadDias:=DaysBetween(m.fechanac,h.fechanac); end; end; end; cantduos:=j; End;

Parejas que se forman

Page 36: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 36

Procedure encontrarparej(duos:listaparejas; cantduos:integer; var estaes:pareja);

var

i:integer; menor:integer;

begin

menor:=duos[1].difEdadDias; estaes:=duos[1]; for i:=2 to cantduos do if duos[i].difEdadDias < menor then begin menor:=duos[i].difEdadDias; estaes:=duos[i]; end

end;

Buscar la pareja con edades mas cercanas

Page 37: Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros

04/21/23Computación - Fac. Ingeniería

- UNMDP 37

{===================================================}

procedure mostrarpareja(estaes:pareja);

begin writeln('===== Esta es la pareja elegida ================'); mostrarpersona(estaes.m); mostrarpersona(estaes.h);

end;

{====================================================}

BEGIN clrscr; ingreso(todas,cantpers); parejas(todas,cantpers,duos,cantduos); encontrarparej(duos,cantduos,estaes); mostrarpareja(estaes); readln END.

Muestra una pareja

Programa principal