Sunteți pe pagina 1din 8

Algortmos y programaci n. X. Ch.

P- FC/UNI o

0.1.

Registros

Supongamos la siguiente situaci n: Se necesita registrar los datos que se detallan a continuaci n y que correspono o den a 10 personas: Apellido, Nombre, DNI, Estado Civil, Fecha de Nacimiento, Tel fono Particular, Tel fono Laboral, e e Cantidad de Hijos. Un Registro es un conjunto de de variables en la cual cada una de ellas esa identicada por medio de su propio campo identicador Por ejemplo: Type Tpersona = Record DNI : LongInt; sApellido: String; sNombre: String; sEstadoCivil: String; sFechaNacimiento: String[10]; {DD/MM/AAA} sTelefonoParticular : String; sTelefonoLaboral : String; bCantHijos: Byte; End; Cada elemento del registro, como DNI, Apellido, etc., son loscampos. La sintaxis de un registro es la siguiente: Type IdentificadorRegistro = Record Lista de Campos End; Teniendo este tipo, se pueden instanciar numerosas variables. Por ejemplo: Var Persona1, Persona2: Tpersona; Las variables Persona1 y Persona2 est n compuestas por DNI, Apellido y todos los campos que contiene el registro. a Para referenciar cada campo del registro se utiliza la siguiente sintaxis: Variable.campo ,el punto separa el nombre de la variable del campo. Extracci n y Almacenamiento Para hacer un ingreso de datos desde el teclado en el campo DNI de la variable Persona1 o se procede de la siguiente forma: Persona1.DNI:=inputbox(Registros,Ingrese el DNI,) Con el mismo m todo que se declaran variables individuales del tipo registro, tambi n se lo puede hacer con arreglos: e e Var Personas : Array[1..10] of Tpersona; Para referenciar el campo de un elemento del arreglo, debemos indicar la posici n donde se encuentra. Arreglo[ndio ce].Campo Para extraer el campo Apellido del registro ubicado en la posici n 6 debemos escribir lo siguiente: o showmessage(Personas[6].sApellido);

2 Pascal tiene una cl usula que permite ahorrar un poco de tiempo o de pulsaciones de teclas. Supongamos que tenemos a que realizar el ingreso por teclado de todos los campos de la variable Persona1, una opci n es la siguiente: o Persona1.DNI:=strtoint(inputbox(Registro,Ingrese DNI,); Persona1.sApellido:=inputbox(Registro,Ingrese Apellido,); En este ejemplo es posible observar que el identicador de la variable (Persona1) se repite en cada referencia a los campos del registro. Para evitar esto, tenemos la opci n de utilizar la cl usula with de la siguiente forma: o a With Persona1 do Begin DNI:=strtoint(inputbox(Registro,Ingrese DNI,); sApellido:=inputbox(Registro,Ingrese Apellido,); End; Cuando trabajamos con m ltiples vectores para representar los datos, efectuar un intercambio implica realizar un u arrastre. Este proceso resulta muy engorroso para el programador. o Al trabajar con registros, esta situaci n es menos compleja y se evita cometer errores. Supongamos que se necesita ejecutar un intercambio de dos elementos del vector Personas. El siguiente procedimiento hace esta tarea: Procedure Intecambiar(i,j : byte); Var PersonaAux : Tpersona; Begin PersonaAux := Personas[i]; Personas[i] := Personas[j]; Personas[j] := PersonaAux; End; Es posible inferir que al utilizar registros no es necesario intercambiar campo por campo, sino que se lleva a cabo como un conjunto o paquete de datos. Ejemplo de peque o programa que utiliza registros. n u o El programa solicita el ingreso del DNI y Nombre de 10 personas, los ordena por DNI o Apellido (seg n una opci n seleccionada por el operador) y lo lista por pantalla.
1 2 3 4 5 6 7 8 9 10 11 Program Ejemplo1; Uses sysutils, dialogs; Const NPer = 3; Type Tpersona = Record DNI : LongInt; sNombre : String; End; Var Personas : Array[1..NPer] of Tpersona; Opcion : String[1];

12 -------------------- Procedimientos y funciones ---------13 14 15 16 17 18 19 20 21 22 23 24 Procedure Cargar; Procedimiento que realiza la carga de los datos Var i :byte; Begin For i := 1 to NPer do Begin With Personas[i] do Begin DNI:=strtoint(inputbox(Registro,Persona+inttostr(i)+:Ingrese DNI,)); sNombre:=inputbox(Registro,Persona+inttostr(i)+:Ingrese Nombre,); End; End; End;

Algortmos y programaci n. X. Ch. P- FC/UNI o

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

Procedure Ordenar(por : Char); el parmetro por define por que a datos se realizar el ordenamiento D por DNI N por Nombre a Var PersonaAux: Tpersona; i,j : Byte; Begin For i := 1 to NPer-1 do Begin For j := i + 1 to Nper do Begin If ((por = D) and (Personas[i].DNI > Personas[j].DNI)) or ((por = N) and (Personas[i].sNombre >Personas[j].sNombre)) Then Begin PersonaAux := Personas[i]; Personas[i] := Personas[j]; Personas[j] := PersonaAux; End; End; End; End; Procedure Listar; Procedimiento que muestra todos los datos por pantalla Var i : byte; cad : string; Begin cad :=DNI NOMBRE+ 13; For i := 1 to NPer do Begin cad := cad +inttostr(Personas[i].DNI)+ 9+Personas[i].sNombre + 13; End; showmessage(cad) End; --------------- Programa Principal ---------Begin Cargar; Repeat Opcion:=inputbox(Padron, Ordenar por [D]NI o [N]ombre?,D); Until Opcion[1] in [D, N]; Ordenar(Opcion[1]); Listar; End.

Este peque o programa demuestra con que sencillez es posible manejar estructuras de datos que impliquen datos n dediferentes tipos. Cabe aclarar que dentro de un registro es posible declarar otro registro. El siguiente ejemplo claricar un poco esta armaci n: a o Type Tfecha = Record bDia : Byte; bMes : Byte; wAnio :Word; End; Tpersona = Record liDNI :LongInt; sApellido : String; sNombre : String; FechaNacimiento: Tfecha; End; FechaNacimiento es un campo de tipo Tfecha, y Tfecha es un registro que contiene el da, mes y a o en campos n individuales. problemas

4 1. Escribir un programa que lea dos n meros complejos, y un smbolo correspondiente a la suma, resta, multiplicaci n u o y divisi n y muestre por pantalla el resultado de la operaci n. Debe emplearse un registro para almacenar los o o n meros complejos, y un procedimiento diferente para realizar cada una de las operaciones. (6 Puntos) u 2. Dadas las siguientes declaraciones:
1 TYPE 2 NOMBRE = ARRAY [0..25] OF CHAR; 3 REGISTROLISTA = RECORD 4 Lista : ARRAY [1..5000] OF NOMBRE; 5 Sublista: ARRAY [1..20] OF NOMBRE 6 END; 7 REGISTROCATALOGO = RECORD 8 NombreElemento : NOMBRE; 9 TipoElemento :(Uno, Dos); 10 Subcatalogo : REGISTROLISTA 11 END; 12 VAR 13 Catalogo : ARRAY [1..20] OF REGISTROCATALOGO; 14 UnCatalogo : REGISTROCATALOGO; 15 UnaLista : REGISTROLISTA; 16 UnNombre : NOMBRE;

Cu les de las siguientes sentencias son v lidas ? a a a) IF (REGISTROCATALOGO.TipoElemento = Uno) THEN ... b) Catalogo[1].Subcatalogo.Lista[2] := UnCatalogo; c) Catalogo[5].RegistroLista := UnaLista; d) UnCatalogo.NombreElemento[2] := UnaLista.Lista[2]; e) Catalogo[1].Lista.Lista[1,2] := UnNombre[2]; f ) Catalogo[2].Lista[1] := UnNombre; g) IF Catalogo[20].TipoElemento = Dos THEN h) Catalogo[10].RegistroLista.Sublista[3,9] := A

Algortmos y programaci n. X. Ch. P- FC/UNI o Universidad Nacional de Ingeniera Facultad de Ciencias a Escuela Profesional de Matem tica COMPUTACION Y ALGORITMOS I - CM 182A

QUINTA PRACTICA CALIFICADA


1. Dadas las siguientes declaraciones:
1 TYPE 2 NOMBRE = ARRAY [0..25] OF CHAR; 3 REGISTROLISTA = RECORD 4 Lista : ARRAY [1..5000] OF NOMBRE; 5 Sublista: ARRAY [1..20] OF NOMBRE 6 END; 7 REGISTROCATALOGO = RECORD 8 NombreElemento : NOMBRE; 9 TipoElemento :(Uno, Dos); 10 Subcatalogo : REGISTROLISTA 11 END; 12 VAR 13 Catalogo : ARRAY [1..20] OF REGISTROCATALOGO; 14 UnCatalogo : REGISTROCATALOGO; 15 UnaLista : REGISTROLISTA; 16 UnNombre : NOMBRE;

Cu les de las siguientes sentencias son v lidas ? Justique a a a) b) c) d) e) f) g) h) IF (REGISTROCATALOGO.TipoElemento = Uno) THEN ... Catalogo[1].Subcatalogo.Lista[2] := UnCatalogo; Catalogo[5].RegistroLista := UnaLista; UnCatalogo.NombreElemento[2] := UnaLista.Lista[2]; Catalogo[1].Lista.Lista[1,2] := UnNombre[2]; Catalogo[2].Lista[1] := UnNombre; IF Catalogo[20].TipoElemento = Dos THEN Catalogo[10].RegistroLista.Sublista[3,9] := A (4 Puntos) 2. La posici n de un objeto lanzado con velocidad inicial v y con angulo con respecto a la horizontal, transcurrido o un cierto tiempo t, puede expresarse (despreciando el rozamiento) con las siguientes ecuaciones: x = v tcos y = 1 v tsen 2 gt2 donde g es la aceleraci n de la gravedad (9, 8m/seg2 ). o a) Dena un registro que almacene la velocidad inicial y el angulo b) Dena un registro que almacene las coordenadas x; y y el tiempo t transcurrido desde el lanzamiento. c) Escriba un subprograma que utilice un registro de cada uno de los tipos anteriores y calcule la posici n del o objeto a partir de v; y t. d) Escriba un subprograma que calcule la altura m xima (f) Redena los registros de los apartados anteriores a para utilizar angulos en forma de grados (sexagesimales), minutos y segundos, realizando las conversiones necesarias. (8 Puntos) 3. Sea A una matrix de n n (con 1 n n). Sea b un arreglo de n elementos que se genera a partir de A mediante la siguiente regla: n k=i Ak,i si el residuo de i entre 3 es 1 bi = ik=1 Ai,k si el residuo de i entre 3 es 3 0 si el residuo de i entre 3 es 0 Haga un programa para:

6 a) Haga un procedimiento que lea el contenido de la matriz A. b) Haga un procedimiento que genere el arreglo b (de acuerdo a la condiciones anteriores). c) Haga una procedimiento que imprima el arreglo b. d) hacer una unidad usando estas funciones. (0.5 puntos) (3 puntos) (0.5 puntos) (4 puntos)

UNI, 30 noviembre del 2006 Xyoby Ch` vez Pacheco. a

Algortmos y programaci n. X. Ch. P- FC/UNI o Universidad Nacional de Ingeniera Facultad de Ciencias a Escuela Profesional de Matem tica COMPUTACION Y ALGORITMOS I - CM 182A

QUINTA PRACTICA CALIFICADA

1. La posici n de un punto sobre la supercie de la tierra se expresa en funci n de su longitud y latitud. La primera o o mide el angulo que forma el meridiano que pasa por el punto con el meridiano que pasa por el observatorio de Greenwich, y toma valores angulares comprendidos entre 0 y 180o , consider ndose longitud Este (E) cuando a el angulo se mide hacia el Este y longitud Oeste(W) en caso contrario. La segunda mide el angulo que forma la lnea que pasa por el punto y por el centro de la tierra con el plano que contiene al ecuador, y toma valores angulares comprendidos entre 0 y 90o , consider ndose latitud Norte (N) cuando el punto este situado al Norte del a ecuador y latitud Sur (S) en caso contrario. En ambos casos los valores angulares se miden en grados, minutos y segundos. Dena un tipo registro que permita almacenar los datos anteriores. Escriba subprogramas para leer y escribir correctamente variables del tipo anterior, en grados, minutos y segundos. (6puntos) 2. Desarrolle un programa que: a) Lea un n mero entero 0 < n 20; u b) Verique si una matriz de orden n es antisim trica A = AT e function verifica (...): boolean; c) Muestre en la pantalla la matriz [ai j ]nn 1 = 1 0 si i y j son pares si i y j son inpares caso contrario

procedure GeneraMatriz (...) a Deber usar unidades para modular su programa. (8 Puntos)

3. Complete el siguiente programa que tiene las siguientes deniciones y la rutina nd. Caso tenga errores deber corregirlo. Luego explique que realiza el programa. a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 const ValInf = ...; ValSup = ...; type Base = ValInf..ValSup; TipoSet = set of Base; . . . function find(x:Base;s:TipoSet):Base; var i: Base; Encontrado: Boolean; begin if s = [ ] then showmessage( El conjunto esta vacio) else begin Encontrado:= false; Completado:= false; i := ValInf; while (not completado) and (not Encontrado) do if (i in s) and (i >x)then begin find:=i; Encontrado:= true; end else if i < ValSup then i:=succ(i)

8
27 28 29 30 31 32 33 34 35 36 37 38 39 40 else completado:= true; if not Encontrado then showmessage(No existe ese elemento) end fin del begin if end; fin de function arb . . . begin x := 4; conj := [3,1, 2, 12 , 5, 13 find(x,conj) end.

(6 Puntos)

UNI, 01 diciembre del 2006 Xyoby Ch` vez Pacheco. a

S-ar putea să vă placă și