UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Ejercicios y Ejemplos de Certámenes Guía de Ejercicios Nro. 1. En caso que en algún problema le falte información, supóngala razonablemente. (*) indica que el problema es más complicado. 1.- Demuestre que: a) La sentencia REPEAT puede ser escrita usando sólo IF y WHILE. b) La sentencia WHILE puede ser escrita usando sólo IF y REPEAT. 2.- Indique las declaraciones no válidas. Especifique cada error detectado. a) Const b) CONST A=chr(65); 1er=1; %interés=20; Verdadero=Boolean; Zetas='ZZZzzzz .. . . zz . '; VAR Texto:Text; c) Const d) Var ENTERO=0.000345; A1,A2:Real; IfThenElse=False; A11,A22:IntegeR; Repit=+36.78E+12; A1andA2:Boolean; 3.- Para las expresiones válidas indique su valor; en caso de ser no válida justifique. VAR x, y : real; a) Odd(3) and (ord('3') = ord('7') - 4) b) Pred(ch(60))=59 c) Round( trunc(28 Mod 8) / round(-1.7)+0.6) d) ord(chr(50)) * 7 div 6 Mod 3 + 4/3*6 f)ORD('h'- 'a')=Ord('h') - Ord('a') g) (ORD('e')-ORD('a')) MOD 3 h) ('Z' > 'A') and ('Z' = 'z') i) trunc(succ(8)/pred('4')) j) ((x:=1) > 0) and (chr(1) >chr(2)) k) Chr(ord('5')+2)=7 l) EOLN or EOF or true m) ord('A') > ord('a') n) succ('B') <> pred('D') o) round(1.53*10 E+4) p) '3' = chr(3) Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 335 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 4.- Se tiene el siguiente programa: Program Animo; Var d, c, p, n, k: Integer; Begin Write('Ingrese el primer entero : '); Readln(n); Write('Ingrese el segundo entero : '); Readln(k); d:=1; p:=1; c:=n-k; While k > 1 Do Begin d:=d*k; k:=k-1 end; Repeat c:=c+1; p:=p*c; Until c >= n; Writeln('El resultado es : ', p DIV d :10) End. a) Efectuar la traza para n=4 y k=2. b) Restricciones de la entrada, si las hay, para no tener lazos infinitos. c) Explicar que hace el programa. 5.- Hacer un programa que obtenga los divisores de un número entero, ingresado por la entrada estándar. La salida debe ser por pantalla. 6.- a) En tres líneas explique que entiende por: a1) Algoritmo a2) Lenguaje de programación. b) Indique si cada afirmación es verdadera o falsa. Justifique su respuesta en cada caso. ____ "Una vez obtenido el programa objeto, podemos ejecutarlo en cualquier computador". ____ "Es posible encontrar programas correctos sintácticamente que: - Contengan acciones de entrada y salida o, - No contengan acciones de entrada o, - No contengan acciones de salida o, - No contengan acciones de entrada ni salida; pero semánticamente, sólo tienen sentido los dos primeros casos". 7.- Determinar si los siguientes identificadores son válidos: a) abc1 b) 1arreglo c) ap.b d) x+4 e) pioX f) Then 8.- Qué resultados se obtienen de la ejecución de las siguientes sentencias? Var a,b,c,d,e: Boolean; a:=true; b:=true; c:=TRUE; d:=(Not a) AND (b OR c); e:= d OR b AND c; Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 336 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. write(d,e); 9.- Se tiene la siguiente información digitada en un teclado: 3___2_4__5<eolm> Donde <eolm> es el marcador de fin de línea, _1_5_67_8<eolm> <eofm> es el marcador de fin de archivo y 9__10_<eolm> el espacio se ha representado por: _ <eolm> 2_3<eolm> <eofm> Asumiendo: Var a,b,c:Integer; m,n:char; Determinar valores de las variables después de efectuar: a) read(a); readln(b); read(b); readln(c); b) readln(m); readln(b); readln(n); c) readln; read(a,b); read(b,a); read(m); d) read(m); read(n); read(a); 10.- Asumiendo var a,b,c:Integer; m,n:char; Con: a:=12; b:=13; c:=5; m:='*'; n:='5'; Determinar que escriben las siguientes líneas: a) write(c,n); writeln(a:4); write(c:5); b) write(m:3); writeln; writeln(b); write(a); c) write('*',m,n,c,n); writeln(a:4,b:3); d) write(a,a,b,a); writeln; write(3*a,2*a:5,b*c:4); 11.- Diseñe un programa que permita evaluar la serie: Donde N es el dato de entrada. n =N 1 ∑n n =1 12.-(*) Se tiene la serie: c = (4/1) - (4/3) + (4/5) - (4/7) + (4/9) - . ... Haga uso de las matemáticas que Ud. ha aprendido para determinar el término general de la serie, luego escriba un programa que evalúe c con 8 cifras, a partir de la serie anterior. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 337 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 13.-(*) Se tiene la siguiente serie: x3 x5 Si = x − + − + ... 3! 5! a) Determinar la relación de recurrencia. b) Escribir un programa para obtener la suma de los términos. La suma debe detenerse cuando el término general sea menor que el valor epsilon; que debe leerse desde el terminal. 14.- Dado el siguiente grafo sintáctico: S c a b d a) Escribir producción para S en BNF. b) Dar 5 ejemplos de sentencias que cumplan S. c) Escribir un programa que reconozca si una secuencia pertenece o no a S. 15.- Sea "n" una variable entera y sean "mayor" y "par" dos variables booleanas. Escriba las sentencias que permiten asignar "TRUE" a las variables "mayor" y "par", si el valor de "n" es mayor que cero, si es par respectivamente. 16.-(*) Escriba las sentencias necesarias para determinar el tipo de póliza que una compañía aseguradora ofrecerá a un cliente determinado, si el criterio está determinado por: Cliente >= 40 años Renta mensual >= $50000 Casado con más de 2 hijos Póliza tipo A Póliza tipo B No asegurar V - V F F V F F V V - V F F V x x x x x F F F x 17.-(*) Se tiene el siguiente circuito para controlar el encendido de una ampolleta en un pasillo. V V 220 V F F interruptor A Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit interruptor B 07-07-2003 338 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Encontrar una expresión booleana para la variable Luz. Es decir, Luz:=F(A,B), donde A y B son variables Booleanas que indican la posición de cada interruptor. 18.- Se tienen los siguientes programas: A) Program A; (*) B) Program B; Var Var s,t,x,y:Integer; s,t,x,y,v:Integer; Begin Begin read(x); read(y); read(x); read(y); s:=0; t:=x; s:=0; t:=x; v:=y; repeat while t <> 0 do s:=s+y; Begin t:=t-1 If odd(t) then s:=s+v; until t=0; t:=t div 2; v:=2*v write(s:10) End; End. write(s:10) End. C) Program C; Var x,y,t,s: Integer; Begin read(x); read(y); s:=0; while x<>0 do Begin t:=0; while t<>y do Begin s:=s+1; t:=t+1 End; x:=pred(x) End; write(s:10) End. Para cada uno de ellos: a) Efectuar la traza para x=3 e y=4. b) Restricciones de la entrada para no tener lazos infinitos. c) Explicar que hace el programa. d) Para que se emplean las variables s y t. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 339 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 19.- Escriba un programa que para un valor real, calcula el valor de la función dada por: 6 + 2*X^2 - 3*X ; X <= 0 f(X) = 6 + X^3 - X ; 0<X<=1 6*X^4 ; X>1 20.- Escribir un programa que lea un ángulo expresado en segundos, y escriba su medida en grados sexagesimales, minutos y segundos. 21.- Escribir un programa que lea un número entero menor que un millón; y escriba la cantidad de billetes y monedas que representan el valor. 22.- Se desea obtener el logaritmo en base dos de un entero i, que debe leerse desde el teclado. El programa debe detectar valores ilegales del entero i. 23.- A partir de un número entero dado, mayor que uno, generar una secuencia de enteros tal que el siguiente número se obtiene, si el número es par, dividiéndolo por dos; y si el anterior es impar, multiplicándolo por tres y sumándole uno. (*) Como segunda etapa, hacer un programa que determine cual es el menor número inicial que genera una secuencia mayor que un número dado. 24.- Hacer un programa para determinar los números mágicos menores que algún número dado. Un número es mágico si la suma de sus divisores, sin incluirse a si mismo, resulta igual al número. Ej. 6 = 1 + 2 + 3. 25.-(*) El método de Newton-Raphson permite encontrar soluciones reales para ecuaciones del tipo f(x) = 0. Se basa en la siguiente idea: f(x) x xi xi+1 Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 340 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Se tiene que: xi+1 está más cerca de la solución que xi; y de la definición de la derivada, se obtiene: xi +1 = xi − f ( xi ) f ′( xi ) a) Demuestre la expresión para xi+1. b) Desarrolle un programa para encontrar 2 raíces de la ecuación: X^1.84 - 5.2211*X + 2.0123 = 0 26.-(*) Una partícula sigue una trayectoria aleatoria de acuerdo a la siguiente regla : en t=0, la partícula está en el origen (x=0, y=0); en t=1,2,3,.. hay pasos aleatorios en una de las cuatro direcciones (x-1,y) o (x,y-1) o (x+1,y) o (x,y+1). la trayectoria termina cuando x^2 + y^2>=R^2. Diseñe un programa que permita determinar la relación entre el tiempo que demora en completar la trayectoria y el radio R. La información puede ser presentada a través de una tabla, R versus número de pasos. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 341 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Guía de Ejercicios Nro. 2. 1.- Indique y explique los errores sintácticos presentes en el siguiente programa: Program Arrepentido; Const Azul = 4; Enero = 1; Diciembre =12; Type Color =(Rojo,Amarillo,Verde,Cafe,Azul); Mes = Enero..Diciembre; AVC = Amarillo..Cafe; Figura =(Circulo;Cuadrado;Rombo); Poligono =(Pentagono,Triangulo,Cuadrado); Var Pintura : Color; InicioEstacion:Mes; Tintura:Rojo..Cafe; Begin Write('Estación .... -->'); Readln(InicioEstacion); Write('Color preferido ->'); Readln(Tintura); For Pintura:=Rojo To Succ(Tintura) Do Begin Write('Color ',Ord(Pintura),' --> '); Case Pintura Of Rojo : Writeln(' Rojo '); Cafe : Writeln(' Cafe '); Amarillo: Writeln(' Amarillo '); End End. 2.- Diseñe un programa que dibuje un tablero de ajedrez en el archivo de salida. Los casilleros negros están formados por matrices de 4*4 asteriscos y los blancos por blancos. Limite los bordes verticales por letras I. 3.- Un archivo de entrada contiene lo siguiente: 53 78 * 6 110 z 59 -8 Las declaraciones son: Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 342 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Var x,v:Integer; ch:Char; f:text; Qué valores se asignan a las variables de los siguientes procedimientos de lectura ?. a) Read(f,x); Read(f,y); Read(f,ch); b) Readln(f,x); readln(f,y); readln(f,ch); c) Readln(f,x); readln(f,y,ch); read(f,z); d) read(f,ch); readln(f); read(f,ch); 4.- Escriba un programa que lea un archivo de texto, y transforme las letras minúsculas en mayúsculas. 5.- Diseñe un programa que cuente el número de: letras (mayúsculas + minúsculas), blancos, comas, puntos y líneas; que tenga un archivo de entrada llamado "fuente.dat", los resultados deben escribirse en el archivo "result.dat". 6.- El archivo llamado "nombre.txt" contiene una lista de nombres y apellidos cuyo formato se muestra en el ejemplo siguiente: JUAN BRITO CAROLINA MELO ERNESTO ESCOBAR LUIS BARROS MARGARITA BRAVO Diseñar un programa que escriba en pantalla los apellidos seguido de la inicial del nombre, de la siguiente forma: BRITO J. MELO C. ESCOBAR E. BARROS L. BRAVO M. 7.- Dado el siguiente procedimiento: Procedure Tonto (x:integer; Var y:integer); Var z:integer; Begin x:=5; y:=6; z:=7 End; Indique la salida después de ejecutar el siguiente segmento: x:=1; y:=2; z:=3; Tonto(y,x); writeln(x,y,z); Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 343 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 8.- Qué escribe en pantalla el siguiente programa ?: Program MuchoOjo; Var a,b:Integer; c:Char; Procedure Parametros(x:Char; Var y:Integer; a:Integer); Begin Writeln('Al entrar en P: x,y,a,b,c',x,y,a,b,c); Case x of '+': y:=y+a; '-': y:=y-a; '*': y:=y*a End; a:=y Mod a; Writeln('Al salir de P: x,y,a,b,c',x,y,a,b,c) End; Begin c:='+'; a:=3; b:=7; Parametros(c,b,a); Writeln('En principal a,b,c',a,b,c); c:='*'; Parametros(c,a,b); Writeln('En principal a,b,c',a,b,c); c:='/'; Parametros(c,b,a); Writeln('En principal a,b,c',a,b,c) End. 9.- Efectuar traza del programa. Program denuevo; Var a,b,c:integer; Procedure P(Var x:integer; y,z:integer); Begin z:=x+y; y:=y+z; writeln(x) End; Begin a:=3; b:=4; c:=5; P(b,b,c); a:=b+c; P(a,a,a) End. 10.- Determinar lo que escribe el siguiente programa. Program segundo; Var a,b,c:Integer; procedure wrtglb; begin writeln('Globales a,b,c :',a:4,b:4,c:4) end; procedure p(x,y:integer; var z:integer); Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 344 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Begin writeln('al entrar en p, x,y,z:' x:4,y:4,z:4); z:=x+y; y:=z+y; x:=z+y; writeln('al salir de p, x,y,z :',x:4,y:4,z:4) End; Begin write('Valores de a,b,c :'); readln(a,b,c); wrtglb; p(a,b,c); wrtglb; p(b,c,a); wrtglb; p(c,a,b); wrtglb End. 11.- Determinar qué escribe el programa. Explicar que principio de la programación estructurada no cumple el programa test. Program Test(output); Var a,b:Integer; Function h(x:integer):Integer; Begin b:=b-x; h:=sqr(x) end; Begin b:=10; a:=h(b); writeln(a,b); b:=10; a:=h(10)*h(b); writeln(a,b); b:=10; a:=h(b)*h(10); writeln(a,b) End. 12.- Determinar lo que escribe el siguiente programa: Program Caallmmaa; Var a,b,c:Integer; Procedure R (x,y:Integer; Var z:Integer); Begin z:=x+y+z; x:=y; Writeln('En R :',a,b,c,x,y,z) End; Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 345 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Procedure T ( Var b:Integer; h:Integer); Var c:Integer; Begin a:=6; c:=b+h; b:=h-1; h:=h+1; Writeln('En T :',a,b,c,h) End; Begin a:=5; b:=8; c:=0; R(a,b,c); Writeln('En C1:',a,b,c); T(a,b); Writeln('En C2:',a,b,c) End. 13.- Cuál es la salida del programa? Program Nada; Var Cosa:Integer; Procedure Trampa(Var Tia,Tio:Integer); Begin Tia:=-1; Tio:=-Tia End; {Trampa} Begin Cosa:=1; Trampa(Cosa,Cosa); writeln(Cosa) End. {Nada} 14.-(*) Determinar lo que escribe el siguiente programa: Program OtroCaalmmaa; Var x,y,z:Integer; Procedure A ( Var x:Integer); Begin x:=x+1; writeln(x,y,z) End; { A } Procedure Ordenado ( Var y:Integer; h:Integer); Var x:Integer; Procedure B; Begin Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 346 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. x:=x+1 End; { B } Begin x:=y; If h=0 Then A(y) Else If h=1 Then A(x) Else B; Write(x,y,z) End; { Ordenado } Begin x:=0; y:=1; z:=2; Ordenado(z,0); Ordenado(y,2) End. 15.- Si var x,y:real; c:char; Escriba los siguientes procedimientos: a) swap(x,y) : intercambia los contenidos de x e y, b) toupper(c): si c es una letra minúscula, la transforma en mayúscula. En caso contrario, c permanece sin alteraciones. 16.- Implementar las siguientes funciones, con N de tipo entero: a) NumDig(N): el valor de esta función es el número de dígitos de N. Ej. NumDig(213)=3, NumDig(0)=1. b) Reves(N): el valor de esta función son los digitos invertidos de N. Ej. Reves(219)=912, Reves(0)=0. c) Simetrico(N): Esta función es verdadera si los dígitos del entero N tienen simetría respecto a su centro. Por ejemplo retorna verdadero: Simetrico(134431); simetrico(121); 17.- Escriba la función digito(n,k) la cual entrega el valor del dígito que está k posiciones desde la derecha del número n. Por ejemplo: Digito(254693,2)=9 , Digito(7622,6)=0. 18.- Escriba las siguientes funciones: sinh(x)=(exp(x) -exp(-x))/2 , cosh(x)=(exp(x) + exp(-x))/2 , sinh^-1(x)=ln(x+sqrt(x^2 + 1)). 19.- Si var x:real; c:char; Escriba las siguientes funciones: Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 347 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. a) ParteEntera(x): es el mayor entero que no supera a x. b) EsAlfa(c): es verdadera si c es una letra mayúscula o minúscula. 20.- Se tiene el siguiente programa: program p2; Function m(a,b:Integer):Integer; Begin If b=1 then m:=a else m:=m(a,b-1) + a End; { m } Begin { p2 } writeln; writeln(m(7,8)) End. a) Qué escribe el programa?. b) Restricciones de los parámetros actuales para no producir lazos infinitos. c)(*) Qué realiza la función m, en general?. 21.- Escribir una función recursiva que calcule m elevado a n; donde m y n son enteros positivos. 22.- (*) Se tiene el siguiente procedimiento: program p2; type bases=2..10; cardinal=0..maxint; procedure wrtnum(n:cardinal; b:bases); begin if n > 0 then wrtnum(n div b,b) ; write((n mod b):1) end end; begin { p2 } writeln; wrtnum(32,2); writeln; wrtnum(213,8) end. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 348 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Determinar: a) Qué escribe el programa?, b) Qué realiza, en general, el procedimiento?. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 349 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 23.- (*) Estudie y determine que operación calcula las siguientes funciones: a) Function C(n,k:Integer):Integer; Var num,den:Integer; Begin num:=1; den:=1; for j:=1 to k do Begin num:=num*(n+1-j); den:=den*j End; C:=num div den End; b) Function C(n,k:Integer):Integer; Begin if k=0 Then C:=1 Else If n<k Then C:=0 Else C:=C(n-1,k) +C(n-1,k-1) End; Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 350 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Guía de Ejercicios Nro. 3. 1.- Determinar la función que realiza Max. Explicar el ambiente (tipos de variables) en que se la puede usar y dar un ejemplo de invocación. Function Max (a:Vector; n:Integer):Real; Var x:Real; i:integer; Begin x:=a[1]; for i:=2 to n do if x<a[i] then x:=a[i] ; Max:=x End; 2.- Se tiene la matriz a dada por: 2 1 3 a= 3 3 1 1 2 1 Obtener una traza de la ejecución de: For i:=1 to 3 do For j:=1 to 3 do c[i,j]:=a[a[i,j],a[j,i]]; Escribir la matriz c resultante. 3.- Dado: Type tabla=array[1..1000] of integer; var x:tabla; Diseñar la función issort(x) que es verdadera si el arreglo está ordenado en forma ascendente o descendente. 4.- Dado el segmento: Const n=10; Type Matriz=Array[1..n,1..n] of Integer; Var a,b,c:Matriz; { En a[i,j] i: fila, j: columna. } . . . . . . . Begin Lea(a); Lea(b); { Lee por filas } Suma(a,b,c); {Suma matriz a con b y deja el resultado en c} Escriba(c) { Escribe por filas } End. Diseñar los procedimientos para manipular matrices: Lea, Suma y Escriba. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 351 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 5.- Dado: Type Digito = '0'..'9'; String= Packed Array[1..5] of Digito; Var s,Secreto,Intento:String; Desarrollar los siguientes subprogramas: a) Famas(Secreto,Intento) : retorna el número de dígitos del string Intentos que coinciden con el string Secreto. Ej. si Secreto='03270' e Intento='35475', entonces: Famas(Secreto,Intento)=1, sólo el 7, b) Aentero(s) : retorna el entero formado por los dígitos de s. 6.- Se tiene: Const n=20; Type SetCar= Set of Char; String= Packed Array[1..n] of Char; . . . . . . . . . Procedure Elimine(Conjunto:SetCar; Var S:String); Var { / / / bla, bla, bla / /} i,j:1..n; { / / / bla, bla, bla / /} Begin j:=1; For i:=1 to n Do { / / bla, bla / /} If Not (S[i] in Conjunto) Then Begin S[j]:=S[i]; j:=j+1 End; For i:=j to n Do { / / bla, bla / / } S[i]:=' ' End; Si x='Ahora si triunfare.-': a) Qué valor toma x después de invocar Elimine([],x); ?. b) Qué valor toma x después de invocar Elimine(['i','h'],x); ?. c) Si no existiera el 2do. for. Cuál sería su respuesta en b)?. d) Considerando el procedimiento en su totalidad. Qué acción realiza en general ?. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 352 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 7.-Dado: Type connum= SET of 1..20; Var x:connum; Diseñar el procedimiento complemento(x), que complementa el conjunto x. Ej. si x=[1..19], complemento(x) hace que x=[20]. 8.-Dado: Type Tira=packed array[1..12] of char; Var x:Tira; Diseñar la función espal(x) que es verdadera si x es un arreglo simétrico. Ej. si x='dabaleelabad', espal(x) es verdadera, la función espal('arrozalzorro') es falsa. 9.-Se tiene : Type CharSet = Set of char; ............ Procedure Salte(Var Ch:Char; Conjunto:CharSet); Begin While Ch in Conjunto Do Read(Ch) End; ............ a) Explicar acción realizada por el procedimiento en general, b) Explicar acción específica para el llamado: Salte(x,['a'..'z']);. 10.-Se dispone en memoria principal de un arreglo de registros. la estructura del registro es: clave nombre telefono a) Definir el tipo del registro? b) Se suministra un valor de clave, diseñar un procedimiento que escriba, en el terminal, el nombre y el número de teléfono, del registro cuya clave coincida con el valor dado. c) Procedimiento para escribir el arreglo en un archivo externo. 11.-Se tiene un arreglo de registros, con estructura: Record Letra:Char; Num:Integer End; Determinar un procedimiento que realice la suma de los campos enteros de los registros cuya letra pertenezca al conjunto de las (Mayúsculas y Minúsculas). El resultado debe ser escrito en pantalla. 12.-Procedure subs(s1:string; i,j:Integer; Var s2:string); var k,limite:integer; begin If i+j-1<=s1.largo then limite:=i+j-1 else limite:=s1.largo; Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 353 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. for k:=i to limite do s2.linea[k-i+1]:=s1.linea[k]; for k:=limite-i+2 to j do s2.linea[k]:=' '; s2.largo:=j End; a) Indique cual debería se la declaración del tipo string. b) Podría s1 haberse pasado como parámetro variable? c) Podría s2 haberse pasado como parámetro valor? d) Cuál es el uso del parámetro j? e) Cuál es el uso del parámetro i? f) Cuál es el uso de la variable limite? g) Qué se efectúa en el primer for? h) Qué se efectúa en el segundo for? i) Qué hace el procedimiento (máximo dos líneas)?. 13.-Determinar qué efectúa el programa f. program f; var x,y:File of integer; i:integer; begin Open(x,'f.dat',input); Open(y,'d.dat',output); While not eof(x) do Begin If (x^ > 0 ) Then Begin y^:=x^; put(y) end Else Begin y^:=-x^; put(y); put(y) end; get(x) End End. 14.-Se tiene un archivo de registros, con el nombre: datos.dat; con la siguiente estructura: Type Registro= Record logico:Boolean; Num : Array[3..6] of integer; SubReg: Record Valores: Array[1..3] of integer; Nombre : Array[1..10] of char End; Clave:Char End; Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 354 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Desarrollar un programa que permita agregar registros al final del archivo datos.dat. Los nuevos registros deben ingresarse por el terminal, debe proveerse un método para finalizar el ingreso de datos. 15.-Se tiene dos archivos de registros de igual estructura. En cada archivo, la secuencia de código está ordenada en forma ascendente. Los códigos presentes en un archivo no están presentes en el otro y viceversa. La estructura del archivo es: codigo : estero; nombre : string de hasta 16 caracteres; valores: arreglo de 10 esteros; Diseñar un programa que genere un archivo con todos los registros de los dos archivos anteriores, y cuya secuencia de códigos esté ordenada ascendentemente. Explicar el algoritmo, sobre todo en el tratamiento de las partes finales de ambos archivos. Dar ejemplos. 16.-Desarrollar un programa que permita llenar un archivo de registros. Los datos se ingresan por teclado. Estructura del registro: -arreglo de 10 enteros; -subregistro -arreglo de 3 reales; -un caracter; -valor de tipo enumerativo (nombre de dia de la semana). 17.-Dado: Type alfa=Packed array[1..10] of char; Lista= File of alfa; Var f,g,h:Lista; Diseñar un programa que genere un archivo h con la concatenación de f y g. 18.- Se tiene el archivo personas.dat. Este está compuesto por registros de la siguiente estructura: - arreglo empaquetado de 15 caracteres para el nombre, - un booleano para indicar si la persona fuma, - un subrango 1..100 para la edad de la persona. Se pide hacer un programa que liste, en un único archivo de caracteres, el nombre de las personas que fuman; y luego, el nombre de quienes fuman y tienen menos de 15 años. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 355 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 356 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Ejercicios. 19.- Se tiene el archivo Mixto.dat. Las componentes del archivo son registros de la siguiente estructura: - un entero para el rol, un arreglo empaquetado de 15 caracteres para el nombre, una variable de tipo enumerativo para el sexo (M o F) y un real para la estatura. El archivo Mixto.dat está ordenado ascendentemente por el rol de cada persona. A partir del archivo Mixto.dat se desea generar dos archivos: Hombres.sal y Mujeres.Sal. Las componentes de los archivos generados deben ser de igual tipo a la indicada para Mixto.dat, excepto que no contiene el campo sexo; y deben estar ordenadas ascendentemente por su rol. a) Definir, usando Pascal, la estructura de datos necesarias para generar los archivos solicitados. (se pide la parte declaración de tipos y variables del programa pedido en b). b) Desarrollar un programa Pascal que dé la solución al problema. Prof. Agustín González Valenzuela Prof. Leopoldo Silva Bijit 07-07-2003 357