Ejercicios Propuestos. - Departamento de Electrónica

Anuncio
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
Descargar