Documente Academic
Documente Profesional
Documente Cultură
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;
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
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)
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
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)