La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros."— Transcripción de la presentación:

1

2 Clase 12 COMPUTACION 2009

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

4 4/16/2015 Computación - Fac. Ingeniería - UNMDP3 Apellido Ruiz Martinez Nombre Pablo Mariana Tipo de Doc. DNI DNI Número de Doc. 22456987 23456789 Sexo Masculino Femenino Fecha de nacimiento22/10/9915/09/74................................................ Apellido Ruiz Martinez Nombre Pablo Mariana Tipo de Doc. DNI DNI Número de Doc. 22456987 23456789 Sexo Masculino Femenino Fecha de nacimiento22/10/9915/09/74................................................ Información sobre personas:

5 4/16/2015 Computación - Fac. Ingeniería - UNMDP4 Apellido Ruiz Martinez Nombre Pablo Mariana Tipo de Doc. DNI DNI Número de Doc. 22456987 23456789 Sexo Masculino Femenino Fecha de nacimiento22/10/9915/09/74................................................ La tabla vista por filas nos presenta información del mismo tipo (= vectores paralelos)

6 4/16/2015 Computación - Fac. Ingeniería - UNMDP5 Apellido Ruiz Martinez Nombre Pablo Mariana Tipo de Doc. DNI DNI Número de Doc. 22456987 23456789 Sexo Masculino Femenino Fecha de nacimiento22/10/9915/09/74................................................ distinto tipo La tabla vista por columnas relaciona información de distinto tipo (= registros)

7 4/16/2015 Computación - Fac. Ingeniería - UNMDP6  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: registros

8 4/16/2015 Computación - Fac. Ingeniería - UNMDP7 Type Identifica_Reg = RECORD S 1 : T 1 ; S 2 : T 2 ;.............. S n : T n ; END; Sintaxis de la declaración Primer Campo Identificador de campo Identificador de tipo Siendo: S i : identificadores de campos y S i : identificadores de campos y T i : los tipos correspondientes T i : los tipos correspondientes Identificador del tipo registro

9 4/16/2015 Computación - Fac. Ingeniería - UNMDP8  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 registro

10 4/16/2015 Computación - Fac. Ingeniería - UNMDP9 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’; Ejemplo Acceso a un campo Declaración de registro Identificador de campo Tipo del campo Identificador de tipo registro

11 4/16/2015 Computación - Fac. Ingeniería - UNMDP10 Acceso 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 registro Var p: persona; Begin p.nomb:=‘Juan’ ;  El acceso a los campos se hace a traves de los selectores de registro

12 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

13 4/16/2015 Computación - Fac. Ingeniería - UNMDP12 Type Familia=(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

14 4/16/2015 Computación - Fac. Ingeniería - UNMDP13 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 Acceso a un campo que es una matriz

15 4/16/2015 Computación - Fac. Ingeniería - UNMDP14 Tipos que faltan en el apunte (pag. 143) TYPE Cadena = 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;

16 4/16/2015 Computación - Fac. Ingeniería - UNMDP15  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. Ejemplo

17 4/16/2015 Computación - Fac. Ingeniería - UNMDP16 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 arreglo

18 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

19 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

20 4/16/2015 Computación - Fac. Ingeniería - UNMDP19 Sentencia 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.

21 4/16/2015 Computación - Fac. Ingeniería - UNMDP20 WITH variable de tipo registro DO Sentencia; Sintaxis de WITH - DO En la sentencia WITH los campos se referencian mencionando solo su nombre

22 4/16/2015 Computación - Fac. Ingeniería - UNMDP21 Ejemplo 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;

23 4/16/2015 Computación - Fac. Ingeniería - UNMDP22  Veamos el mismo problema ya presentado.  El programa es el mismo ya visto.  La modificación es solo el uso de sentencias with. Ejemplo

24 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

25 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

26 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

27 4/16/2015 Computación - Fac. Ingeniería - UNMDP26 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

28 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; El procedimiento devuelve al p.p. la lista de complejos y su cantidad El procedimiento devuelve al p.p. la lista de complejos y su cantidad. Arreglo de registros

29 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.

30 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; 4/16/2015 Computación - Fac. Ingeniería - UNMDP29

31 4/16/2015 Computación - Fac. Ingeniería - UNMDP30 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

32 4/16/2015 Computación - Fac. Ingeniería - UNMDP31 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

33 4/16/2015 Computación - Fac. Ingeniería - UNMDP32 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)

34 4/16/2015 Computación - Fac. Ingeniería - UNMDP33 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 construye una fecha en base al anio mes,dia,hora,minuto,segundos y milisegundos ingresados por el usurio Se construye una fecha en base al anio mes,dia,hora,minuto,segundos y milisegundos ingresados por el usurio

35 4/16/2015 Computación - Fac. Ingeniería - UNMDP34 {====================================================} 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

36 4/16/2015 Computación - Fac. Ingeniería - UNMDP35 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; cantduos:=j; End; Parejas que se forman

37 4/16/2015 Computación - Fac. Ingeniería - UNMDP36 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

38 4/16/2015 Computación - Fac. Ingeniería - UNMDP37 {===================================================} 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


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

Presentaciones similares


Anuncios Google