Relacin de problemas.
Informtica
Relacin de Problemas (Tema 1)
1. 2. 3. Escribe un programa que lea desde el teclado dos valores de tipo INTEGER y escriba en pantalla su suma, su diferencia, su producto, su cociente y su resto. Escribe un programa que pida una letra desde el teclado, la pase a mayscula e imprima el resultado por pantalla. Escribe un programa que lea el radio y la altura de un cilindro desde el teclado y escriba por pantalla el rea y volumen correspondiente. NOTA: El rea y volumen del cilindro de altura h y radio R es: Area = 2R2+2Rh Volumen = R2h 4. 5. 6. Escribe un programa que lea desde el teclado una cantidad de segundos y muestre por pantalla el nmero de horas, minutos y segundos equivalentes. Escribe un programa que lea un carcter del teclado y escriba por pantalla su cdigo dentro de la tabla ASCII. a) Qu ocurre al ejecutar el siguiente programa?
PROGRAM Prueba; VAR Num : INTEGER; BEGIN Num := HIGH(INTEGER); Num := Num + 10 100; Writeln (Num) END.
b) Cmo puede solucionarse el problema?
7. 8. 9.
Escribe un programa que lea del teclado la longitud de los dos catetos de un tringulo rectngulo, calcule la longitud de la hipotenusa y la escriba por pantalla. Escribe un programa que lea la longitud del lado de un cuadrado y escriba en pantalla su rea y su permetro. Escribe un programa que lea un carcter del teclado y escriba en pantalla el carcter que le sigue en el cdigo ASCII.
Relacin de problemas. Informtica
Relacin de Problemas (Tema 2)
1. 2. Si la variable valor es de tipo BOOLEAN, cmo se puede escribir de otro modo la condicin o pregunta valor = TRUE?, y valor = FALSE?. Si la variable cierto es de tipo BOOLEAN, y a, b son de tipo INTEGER, a qu son equivalentes las siguientes expresiones ? i) cierto := (a<b) AND (b<a) ii) cierto := (a<=b) OR (b<=a) 3. Si x e y son variables de tipo BOOLEAN, cul es la relacin entre las siguientes dos expresiones?: i) x <> y ii) (x OR y) AND NOT (x AND Y) 4. Si p, q y r son variables booleanas, comprueba las siguientes igualdades: i) (p OR r) AND (q OR r) (p AND q) OR r ii) (p AND r) OR (q AND r) (p OR q) AND r 5. 6. 7. 8. Escribe un programa que determine el mayor de tres nmeros enteros. Escribe un programa que sin utilizar sentencias de asignacin escriba ordenados de menor a mayor tres nmeros almacenados en variables de tipo entero. Escribe un programa que dado un nmero entero introducido por teclado compruebe si es par o no. Escribe un programa que lea tres nmeros d, m y a que representan una fecha (da, mes y ao) y calcule el da de la semana correspondiente usando la congruencia de Zeller: da = (700 + (26x - 2) DIV 10 + d + y + y DIV 4 + z DIV 4 - 2z) MOD 7 donde los valores de x, y, z son: si m 2 x y z m + 10 (a - 1) MOD 100 (a - 1) DIV 100 si m 3 m-2 a MOD 100 a DIV 100
El valor de da estar entre 0 y 6, (0 significa Domingo, 1 Lunes, etc. ) NOTA: Este algoritmo es solo vlido para el calendario gregoriano, que fue introducido en distintos pases en distintas fechas (el 14 de Septiembre de 1942 en Inglaterra, por ejemplo). 9. Escribe un programa que determine el menor nmero de monedas y billetes de curso legal equivalentes a cierta cantidad de pesetas ledas del teclado. NOTA: Considera que existen billetes de 10.000, 5.000, 2.000, 1.000 y monedas de 500, 100, 25, 5 y 1 pesetas. 10. Escribe un programa que lea dos letras minsculas y determine:
Relacin de problemas. Informtica
el nmero de letras que las separan la letra o dos letras centrales del intervalo que determinan, pero en maysculas
11. Escribe un programa que determine si un ao es bisiesto. Un ao es bisiesto si es mltiplo de 4 (por ejemplo 1984). Sin embargo, los aos mltiplos de 100 slo son bisiestos cuando a su vez son mltiplos de 400 (por ejemplo 1800 no es bisiesto, mientras que 2000 lo ser). 12. Escribe un programa que calcule el nmero de das de un mes, dados los valores numricos del mes y ao. NOTA: considera los aos bisiestos para Febrero. 13. El domingo de Pascua es el primer domingo despus de la primera luna llena posterior al equinoccio de primavera, y se determina mediante el siguiente clculo sencillo: A = ao MOD 19 B = ao MOD 4 C = ao MOD 7 D = (19 * A + 24) MOD 30 E = (2 * B + 4 * C + 6 * D + 5) MOD 7 N = (22 + D + E) Donde N indica el da del mes de Marzo si N es menor o igual que 31 o Abril si es mayor que 31 (el 32 indicara el 1 de Abril). Construye un programa que determine fechas de domingos de Pascua. 14. Escribe un programa que dados los conjuntos de puntos pertenecientes a la circunferencia cuya ecuacin es x2 + y2 = 16, a la elipse x2/36 + y2 /16 = 1 y a la recta y = 2x + 1, indique para una pareja de coordenadas x e y , ledas desde el teclado, el conjunto o conjuntos a los que pertenece. 15. Un sistema de ecuaciones lineales: ax + by = c dx + ey = f se puede resolver con las siguientes frmulas: x = (ce - bf) / (ae - bd) y = (af - cd) / (ae - bd) Disea el programa que lea los coeficientes a, b, c, d, e, f y muestre los valores de x e y. NOTA: Estudia el caso en que (ae - bd) = 0. 16. Desarrolla un programa que calcule las races correspondientes a una ecuacin de segundo grado ax2 + bx + c = 0. NOTA: Estudia el caso de races complejas (valor del discriminante < 0) y el caso a = 0. 17. Escribe un programa que lea un nmero de tipo CARDINAL, y si tiene exactamente cuatro cifras, escriba si es capica o no. 18. Escribe un programa que lea un nmero de tipo CARDINAL, y si tiene exactamente cuatro cifras, escriba si el nmero es igual a la suma de los cuadrados de sus cifras.
Relacin de problemas. Informtica
Relacin de problemas (Tema 3)
1. Escribe un programa que lea del teclado una lista de valores reales positivos terminada por un nmero negativo y calcule la media de esta lista. 2. Escribe un programa que lea un nmero entero positivo por teclado y determine si es primo o compuesto. 3. Disea un programa que escriba en pantalla la tabla de multiplicar de un numero del 1 al 9 introducido desde el teclado. 4. Escribe un programa que lea del teclado una lista de valores enteros positivos terminada por 0 y determine los valores mximo y mnimo. 5. Escribe un programa que calcule e imprima en pantalla los N primeros nmeros primos, siendo N un nmero que se introduce por teclado. 6. Escribe un programa que calcule el valor de seno x dado por:
x3 x5 x 7 Seno x = x + +L 3! 5! 7 !
Este programa debe leer dos variables x y precisin donde x es un ngulo en radianes y
precisin debe ser positiva y menor que 1. La serie debe sumarse hasta que el valor
absoluto del ltimo sumando sea menor que precisin, incluyendo este ltimo sumando en la suma. NOTA: El trmino con numerador xn de la serie se puede calcular multiplicando el previo por 7.
x2 n ( n 1)
Si x0 es una aproximacin a
a entonces una aproximacin mejor es:
x1 = 1 a x0 + 2 x0
Podemos repetir esto con x1 y obtener una nueva aproximacin. Este proceso, que es una aplicacin del mtodo de Newton-Raphson, se puede generalizar a:
x n+1 =
1 a xn + , n = 1,2,L 2 xn
Relacin de problemas. Informtica
Escribe un programa que lea los valores de a y precisin. El programa debe calcular la raz de a utilizando el mtodo descrito. El valor inicial para la iteracin ser a/2. El programa debe mostrar en pantalla todas las aproximaciones obtenidas. 8. Escribe tres programas para calcular el factorial de un nmero entero ledo desde el teclado utilizando las sentencias FOR, WHILE y REPEAT. 9. Escribe un programa que visualice en pantalla una figura similar a la siguiente:
* ** *** ****
Siendo el nmero de lneas un dato que se lee al principio del programa. 10. Un nmero es perfecto si coincide con la suma de todos sus divisores excepto el mismo. Por ejemplo 28 es perfecto ya que sus divisores son 1, 2, 4, 7, 14 y 1+2+4+7+14 = 28. Escribe un programa que determine si un nmero ledo del teclado es perfecto. 11. Para encontrar el mximo comn divisor (mcd) de dos nmeros enteros se puede emplear el algoritmo de Euclides: dados los nmeros a y b (siendo a > b) se divide a por b obteniendo el cociente q 1 y el resto r1. Si r1 0, se divide b por r1, obteniendo el cociente q 2, y el resto r2. Si r2 0 se divide r1 por r2 obteniendo cocientes y restos sucesivos. El proceso contina hasta obtener un resto igual a 0. El resto anterior a ste es el mximo comn divisor de los nmeros iniciales (a y b). Escribe un programa que lea dos nmeros enteros positivos del teclado y calcule su mximo comn divisor y su mnimo comn mltiplo (mcm). NOTA: obtener el mnimo comn mltiplo a partir de la siguiente igualdad: mcd (a,b) * mcm (a,b) = a * b 12. Disea un programa que calcule el cociente entero y el resto correspondiente para dos nmeros naturales dados por teclado, sin utilizar los operadores DIV y MOD. 13. Escribe un programa que lea un nmero N y calcule el trmino N-simo de la sucesin de Fibonacci:
Fibonacci (1)
= 0
Fibonacci ( 2) = 1 Fibonacci ( n) = Fibonacci ( n 1) + Fibonacci ( n 2) , si n > 2
Relacin de problemas. Informtica
14. Escribe un programa que calcule y visualice el ms grande, el ms pequeo y la media de N nmeros. El valor N se solicitar al principio del programa y los nmeros sern introducidos por teclado. 15. EEscribe un programa para encontrar el nmero natural N ms pequeo tal que la suma de los N primeros nmeros enteros exceda una cantidad introducida por teclado. 16. El valor exp(x) se puede calcular mediante la siguiente serie:
exp( x ) = 1 +
x x2 x3 + + +L 1! 2 ! 3!
Escribe un programa que lea un valor x de teclado y calcule el valor de exp(x) deteniendo el clculo cuando el valor del ltimo trmino sumado sea inferior a una diezmilsima. 17. Escribe un programa que calcule una aproximacin al nmero sabiendo que
1 1 1 1 = 1 + + L 4 3 5 7 9
para ello sumar trminos de la serie anterior mientras que sus valores absolutos sean mayores a una diezmilsima y del valor obtenido despejar . 18. Disea un programa que multiplique dos nmeros enteros mediante el algoritmo de la multiplicacin rusa. Este algoritmo multiplica por 2 el multiplicando y divide por dos el multiplicador hasta que el multiplicador toma el valor 1. Despus suma todos los multiplicandos correspondientes a multiplicadores impares. Dicha suma es el producto de los nmeros originales. Ejemplo: 37 * 12 = 444 (multiplicador: 37, multiplicando:12)
37 18 9 4 2 1 12 24 48 96 192 384
12 + 48 + 384 = 444
19. Escribe un algoritmo que lea un nmero natural N y un carcter. La salida debe ser un rombo compuesto del carcter y de la anchura que especifica el nmero N. Por ejemplo, si
Relacin de problemas. Informtica
N es 5 y el carcter es *, el rombo sera:
* * * * * * * * * * * * * * * * * * * * * * * * *
20. Escribe un algoritmo que imprima una pirmide de dgitos como la de la figura, tomando como entrada el nmero de filas de la misma siendo este nmero menor o igual que 9.
1 12 123 1234 1 21 321 4321 54321
Relacin de problemas. Informtica
Relacin de problemas (Tema 4)
1. Supongamos que tenemos un programa principal con las siguientes variables:
VAR x, y : REAL; m c n : INTEGER; : CHAR; : CARDINAL;
y la siguiente declaracin de subprograma:
PROCEDURE Prueba (a, b : INTEGER; VAR c, d : REAL; VAR e : CHAR);
Averigua cules de las siguientes llamadas son vlidas:
1) Prueba (m+3,10,x,y,c);
2) Prueba (n+3,10,x,y,c); 3) Prueba (m, 19, x, y);
4) Prueba (m, m*m, y, x, c); 5) Prueba (m, 10, 35.0, y, E);
6) Prueba (30, 10, x, x+y, c); 2. Escribe una funcin que calcule las combinaciones de m elementos tomados de n en n. Para ello escribe primero otra funcin que calcule el factorial de un nmero. NOTA: Recurdese que
m! m = n n !( m n)!
Escribe otra funcin ms eficiente que no necesite calcular el factorial. 3. Escribe una funcin que tome tres parmetros, dos de tipo REAL y uno de tipo CHAR. La funcin debe sumar, restar, multiplicar o dividir los valores de los dos primeros parmetros dependiendo del cdigo indicado en el tercero (+,-,*,/) y devolver el resultado. Al disear esta funcin, supn que el tercer argumento es necesariamente uno de los cuatro (+,-,*,/). Escribe un programa que ofrezca al usuario la posibilidad de realizar una de esas cuatro operaciones o salir del programa hasta que el usuario decida abandonar el programa, lea los operandos necesarios para realizar la operacin, utilice la funcin anterior para hacer los clculos y muestre el resultado en pantalla. Asegrate de que el programa utiliza la funcin anterior de forma correcta. 4. Dos nmeros a y b se dice que son amigos si la suma de los divisores de a (salvo el mismo) coincide con b y viceversa. Disea un programa que tenga como entrada dos nmero naturales n y m, y muestre por pantalla todas las parejas de nmeros amigos que existan en el intervalo determinado por n y m.
Relacin de problemas. Informtica
5.
Considera el siguiente procedimiento:
PROCEDURE Escr (C : CHAR; Long : INTEGER); BEGIN WHILE Long > 0 DO BEGIN Write (C); Long := Long 1 END END;
a) Si Ch tiene el valor X y Numero el valor 5, cul sera el efecto de ejecutar cada una de las siguientes llamadas al procedimiento?:
Escr(Ch,4*Numero-12) Escr(/,Numero) Escr(Ch,6) Escr(.,6) Escr(5,Numero) Escr(p,-10)
b) Escribe llamadas al procedimiento Escr para que cuando se ejecuten produzcan las siguientes salidas:
35 guiones sucesivos 6 veces tantos espacios en blanco como el valor de Numero el valor actual de Ch 14 veces
6.
Dadas las siguientes declaraciones en un determinado algoritmo:
VAR a,b,c si ... FUNCTION Uno(x, y : CARDINAL) : BOOLEAN; ... PROCEDURE Dos(VAR x : CARDINAL; y : CARDINAL); ... FUNCTION Tres(x : CARDINAL) : CARDINAL; : CARDINAL; : BOOLEAN;
Cules de las siguientes llamadas a subprograma son vlidas?
a) IF Uno(a,b) THEN... b) Dos(a,b+3) c) si := Uno(c,5) d) si := Dos(c,5) e) Dos(a,Tres(a))
Relacin de problemas. Informtica
10
f) Dos(Tres(b),c) g) IF Tres(a) THEN ... h) b := Tres(Dos(a,5)) i) Dos(4,c)
7.
Escribe un algoritmo que tome como entrada desde teclado dos nmeros naturales N e i, e imprima en pantalla el dgito que ocupa la posicin i-sima del nmero N. Si i es mayor que el nmero de dgitos de N, se escribir en pantalla el valor -1. Por ejemplo, para N = 25064 e i = 2, el resultado es el dgito 6, y para i = 7, el resultado es -1. Qu salida produce por pantalla la ejecucin del siguiente algoritmo?
PROGRAM Anidado; VAR a, b, c, x, y : CARDINAL;
8.
PROCEDURE Primero; BEGIN a := 3 * a; c := c + 4; Write (Primero); Writeln (a,b,c) END; PROCEDURE Segundo; VAR b : CARDINAL; BEGIN b := 8; c := a + c + b DIV 3; Write (Segundo); Writeln (a, b, c) END; PROCEDURE Tercero (VAR x : CARDINAL; y : CARDINAL); BEGIN x := x + 4; y := y + 1; Write (Tercero);
Relacin de problemas. Informtica
11
Writeln (a, b, c, x) END; BEGIN a := 3; b := 2; c := 1; x := 11; y := 22; Primero; Segundo;
Tercero (a,b); Write (Anidado); Write (a, b, c, x, y) END.
9.
Realiza un procedimiento que intercambie el valor de dos variables de tipo CHAR.
10. Escribe un procedimiento que, dadas las coordenadas polares de un nmero complejo (r, ), obtenga las correspondientes cartesianas (x, y). NOTA: Recuerda que
x = r cos y = r sen
11. Escribe un programa que lea un nmero positivo del teclado y escriba por pantalla los nmeros perfectos menores a l. Para ello define primero una funcin EsPerfecto que tome como parmetro un nmero y devuelva TRUE o FALSE dependiendo de que sea perfecto o no. 12. Escribe un algoritmo que acepte como entrada desde teclado un nmero entero positivo. El algoritmo debe producir como salida el resultado de sumar dos a dos los dgitos que aparecen en posiciones simtricas respecto al dgito central dentro del nmero dado como entrada. Por ejemplo, para el nmero 23548 la salida es: 2+8 = 10, 3 + 4 = 7, 5 para el nmero 6582 la salida es: 6 + 2 = 8, 5 + 8 = 13 13. Escribe un subprograma para calcular el mximo comn divisor de cuatro nmeros utilizando para ello otro subprograma que calcule el mximo comn divisor de dos nmeros (algoritmo de Euclides). 14. Escribe un programa que lea dos enteros positivos correspondientes a un ao y un mes, y escriba el correspondiente calendario de la siguiente forma:
D L M X J V S 1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17 18 19 20 21 22
Relacin de problemas. Informtica
12
23 24 25 26 27 28 29
Este problema puede dividirse en las siguientes partes: 1) Leer los valores del mes y ao 2) Encontrar el da de la semana en que empieza el mes (ver ejercicio sobre congruencia de Zeller). 3) Averiguar cuntos das tiene el mes. 4) Escribir el correspondiente calendario. Usa un subprograma separado para cada parte. 15. Escribe un programa que lea un nmero positivo del teclado y escriba por pantalla los nmeros primos menores a l. Para ello define primero una funcin EsPrimo que tome como parmetro un nmero y devuelva TRUE o FALSE dependiendo de que sea primo o no. 16. Escribe un programa que calcule el mximo de tres nmeros enteros, definiendo previamente una funcin que calcule el mximo de dos.
Relacin de problemas. Informtica
13
Relacin de Problemas (Tema 5)
1. Escribe un programa que solucione el sistema de ecuaciones:
ax + by = dx + ey =
c f
Para ello disea un subprograma que tome como parmetros por valor a, b, c, d, e y f , como parmetros de salida por referencia x, y y Estado, donde Estado es del tipo enumerado:
TYPE Estado = (Determinado, Indeterminado, Incompatible);
Si el sistema est determinado x e y contendrn la solucin al sistema y Estado valdr Determinado. En otro caso Estado valdr Indeterminado o Incompatible y se enviar un mensaje al usuario indicando el estado del sistema. El programa principal deber leer los coeficientes, llamar al subprograma y escribir el resultado por pantalla. NOTA: Si ae - bd = 0 y bf - ec = 0 el sistema es indeterminado. Si ae-bd = 0 pero bf-ec 0 el sistema es incompatible. 2. Escribe una funcin que tome como parmetros dos funciones f y g ambas de rango y dominio REAL, un valor x de tipo REAL y devuelva f compuesta de g evaluada en el punto x. Prueba la funcin con casos concretos de f y g. NOTA: ( f o g )( x ) = f ( g ( x )) 3. Escribe un subprograma que tome como parmetro una funcin f de rango y dominio REAL y un valor x de tipo REAL, y devuelva un valor aproximado de la derivada de f en dicho punto utilizando para ello la siguiente frmula con igual a una millonsima.
f '( x ) =
f ( x + ) f (x )
Escribe un programa que utilice la funcin anterior para calcular el valor de la derivada de las funciones seno y coseno en los puntos y /2. 4. Escribe una funcin que encuentre un cero de una funcin utilizando el algoritmo de biparticin. Este algoritmo toma como parmetros, entre otros, una funcin f (de dominio y rango REAL que suponemos continua), y tres valores a, b y Epsilon de tipo REAL, y devuelve el cero calculado. El algoritmo debe comprobar que el valor de b sea mayor que a y que el signo de f(a) es distinto que el signo de f(b) (condiciones del Teorema de Bolzano). A partir de aqu se repite el siguiente proceso: calcular el punto medio del intervalo [a,b] y llamarlo c. Si f(c) = 0, entonces hemos encontrado un cero de f en c y acabamos. En otro caso determinamos en qu mitad del intervalo [ ,b] se produce el a cambio de signo ([a,c] o [c,b]) y repetimos el proceso con dicha mitad. Todo este proceso se repite hasta que se da la condicin anterior (f(c) = 0) o hasta que el ancho del intervalo considerado sea menor que Epsilon. Utiliza la funcin anterior para encontrar un cero de la funcin coseno en [0, ]. Escribe una funcin Pliega que tiene cuatro parmetros: f, a, b, Inicial. El primer parmetro es una funcin que toma dos enteros y devuelve un entero. Los otros tres parmetros son valores enteros. El resultado de la funcin Pliega es de tipo entero y debe ser el resultado de calcular la expresin:
5.
Relacin de problemas. Informtica
14
f ( f ( ...f ( f ( f ( Inicial, a), a+1), a+2), ... b-1), b).
Es decir , calculamos primero f con parmetros Inicial y a y obtenemos un resultado. Con este resultado y a+1 volvemos a calcular f. Seguimos as hasta que llegamos a que el segundo parmetro es b. Escribe un programa que utilice la funcin Pliega para calcular el factorial de un nmero N ledo de teclado y el sumatorio de los primeros N naturales, donde N es un nmero ledo del teclado 6. Realiza un procedimiento Filtra que toma tres parmetros: f, a y b. f es una funcin que toma un entero y devuelve un booleano. a y b son dos valores enteros. Filtra deber escribir por pantalla todos los valores enteros x en el intervalo [a..b] para los cuales f(x) sea cierto. Utiliza el procedimiento Filtra en un programa que escriba los nmeros perfectos y los nmeros primos menores a un valor Maximo dado por teclado. 7. Escribir una funcin que calcule el valor de la integral definida
f ( x )dx .
a
Esta funcin tomar como parmetros: una funcin f de dominio y rango REAL, los valores a y b de tipo REAL, y un parmetro Epsilon tambin REAL. Para ello dividiremos el intervalo [a,b] en intervalos de amplitud menor o igual a Epsilon y aproximaremos la integral de cada subintervalo con la frmula del trapecio:
x1
x0 b
f ( x )dx
x1 x 0 [ f (x 0) + f ( x1)] 2
El valor de
f ( x )dx ser
a
el sumatorio de las aproximaciones anteriores. Utilizar la
funcin anterior para calcular la integral definida de la funcin seno entre 0 y /2.
Relacin de problemas. Informtica
15
Relacin de problemas (Tema 6)
1. 2. 3. Escribe un programa que permita leer dos matrices de tamao 10x10 de nmeros reales del teclado, calcular la matriz producto y escribirla por pantalla. Escribe un programa que permita leer una matriz de tamao 5x6 de nmeros reales del teclado, calcular la matriz traspuesta y escribirla por pantalla. Escribe un programa que convierta un nmero entero positivo expresado en cualquier base natural entre 2 y 10 a una base natural entre 2 y 10. Para ello se leer del teclado la base inicial, el nmero y la base destino. Dadas las siguientes declaraciones:
TYPE NOMBRE REGISTROLISTA = ARRAY [0..25] OF CHAR; = RECORD Lista Sublista END; REGISTROCATALOGO = RECORD NombreElemento TipoElemento Subcatalogo END; VAR Catalogo UnCatalogo UnaLista UnNombre : ARRAY [1..20] OF REGISTROCATALOGO; : REGISTROCATALOGO; : REGISTROLISTA; : NOMBRE; : NOMBRE; : (Uno, Dos); : REGISTROLISTA : ARRAY [1..5000] OF NOMBRE; : ARRAY [1..20] OF NOMBRE
4.
Cules de las siguientes sentencias son vlidas ?
1) IF ([Link] = Uno) THEN ... 2) Catalogo[1].[Link][2] := UnCatalogo; 3) Catalogo[5].RegistroLista := UnaLista; 4) [Link][2] := [Link][2]; 5) Catalogo[1].[Link][1,2] := UnNombre[2]; 6) Catalogo[2].Lista[1] := UnNombre; 7) IF Catalogo[20].TipoElemento = Dos THEN Catalogo[10].[Link][3,9] := A
Relacin de problemas. Informtica
16
8) UnCatalogo := Catalogo[5];
9) [Link] := UnaLista; 5. Escribe un programa que sume dos vectores de tipo base INTEGER e imprima el resultado en pantalla. Se consideran datos de entrada la dimensin de los vectores y las componentes de cada uno. Representa cada vector como un registro de dos componentes (el vector propiamente dicho y la dimensin utilizada). Declara en el programa tres subprogramas: lectura de un vector desde teclado, suma de dos vectores y escritura de un vector por pantalla. El programa debe funcionar para vectores de como mximo 10 componentes.
6.
Escribe un programa que permita leer dos matrices de nmeros reales del teclado, calcular la matriz producto y escribirla por pantalla. El programa debe ser capaz de operar con matrices de tamao menor o igual a 3 0x30. El tipo que represente la matriz debe ser un registro con tres componentes: la matriz, el nmero de filas y el nmero de columnas tiles. Escribe subprogramas para cada una de las tareas. Nota: Detecta posibles errores en las dimensiones de las matrices.
7.
Escribir un subprograma que tome como parmetro una matriz cuadrada y devuelva TRUE si es simtrica o FALSE en otro caso. Una matriz A es simtrica si i , j Aij = A ji Nota: Detecta posibles errores en la dimensin de las matriz.
8. 9.
Escribe un programa que lea un texto del teclado y escriba la frecuencia de aparicin de cada vocal en l (cuidado con las vocales acentuadas). Escribe un programa que lea una palabra del teclado y determine si dicha palabra es un identificador vlido en Pascal.
10. Se desea efectuar operaciones de suma de cantidades enteras que se caracterizan por tener una gran cantidad de dgitos, de manera que queda excluido el uso del tipo REAL. Para ello cada nmero se representar como una cadena de caracteres. Escribe un subprograma que realice la operacin anterior. Nota: Se considera que no se va a trabajar con nmeros de ms de 100 dgitos. 11. Escribe un programa que simule el comportamiento de una calculadora simple para aritmtica fraccional expresando el resultado en forma fraccional y simplificado al mximo el resultado. Para ello se definir el tipo RACIONAL como un registro de dos componentes enteras (Numerador y Denominador), y subprogramas para leer del teclado, escribir por pantalla, simplificar, sumar, restar, multiplicar, dividir y comparar nmeros racionales. Nota: El subprograma que simplifica un nmero racional debe dividir el numerador y el denominador por el mximo comn divisor de ambos, y en caso de que el nmero racional sea negativo dejar este signo en el numerador. 12. Escribe un programa que lea dos puntos bidimensionales representados como registros y calcule la longitud del segmento que los une y la pendiente de la recta que pasa por ellos. Nota: recuerda que una recta viene determinada por dos puntos (x1, y1), (x2, y2) siempre que sean distintos. Su pendiente en funcin de estos dos puntos es (y2 - y1) / (x2 - x1). 13. Supongamos que deseamos evaluar a un determinado nmero de alumnos siguiendo el criterio de que aprobar aquel que supere la nota media de la clase. Escribeun programa que lea un nmero indeterminado de alumnos (como mximo 20), y las notas de tres evaluaciones, y como resultado emita un informe indicando para cada alumno
Relacin de problemas. Informtica
17
las evaluaciones que tiene aprobadas y suspensas. Ejemplo de la salida que se debe obtener. Alumno Juan Lpez Luis Garca Pedro Ruiz Nota-1 Aprobado Suspenso Aprobado Nota-2 Suspenso Aprobado Aprobado Nota-3 Aprobado Aprobado Aprobado
14. Definir un tipo registro variante (FIGURA) de modo que una variable de dicho tipo pueda almacenar un crculo, o un tringulo rectngulo o un rectngulo o bien un cuadrado. Segn sea la figura se desean almacenar los siguientes datos:
Si es un crculo, el radio. Si es un tringulo, la base y la altura. Si es un rectngulo, la base y la altura. Si es un cuadrado, el lado.
Escribir funciones que tomen como parmetro una FIGURA y calculen el rea y permetro de stas. 15. El algoritmo de La Criba de Eratstenes puede ser usado para calcular los nmeros primos menores o iguales a un N dado: 1) Crear un conjunto llamado Criba que contenga todos los nmeros naturales en el intervalo [2,N]. 2) Crear un conjunto vaco y llamarlo Primos. 3) Repetir los siguientes pasos 4) Tomar el primer nmero que quede en Criba. 5) Este nmero ser primo, por lo que se aade al conjunto Primos. 6) Quitar este nmero y todos sus mltiplos del conjunto Criba. 7) Hasta que Criba quede vaca. 8) El conjunto Primos contiene todos los primos en el intervalo [2,N]. Utilizar el algoritmo anterior para escribir un programa que calcule y muestre los primos menores o iguales a 100. 16. Escribe un programa que se comporte como una calculadora que pida repetidamente un operador de conjuntos y dos operandos que sean conjuntos de letras minsculas y que escriba el resultado de la operacin. Las operaciones se expresan como caracteres, siendo vlidas las siguientes: + * Unin de conjuntos Diferencia de conjuntos Interseccin de conjuntos
El proceso se repetir hasta que se introduzca como cdigo de operacin el carcter &. Los operadores y el resultado se expresan como cadenas de caracteres. Ejemplo: Operacin = *
Relacin de problemas. Informtica
18
Operando1 = azufre Operando2 = zafio Resultado = afz Operacin = Operando1 = abracadabra Operando2 = abaco Resultado = rd Operacin = & FIN 17. Disponemos de un vector de 20 nmeros enteros. Disea un programa que mantenga en dicho vector los nmeros pares separados de los impares, de forma que cada uno de los subconjuntos estn ordenados entre s de forma ascendente. Disea otro subprograma que ordene un vector como el anterior mediante intercalacin de los dos subconjuntos. 18. Se leen dos listas de nmeros enteros A y B de 100 y 60 elementos respectivamente. Se desea resolver mediante subprogramas las siguientes tareas: 1) Ordenar cada una de las listas A y B. 2) Crear una lista C que contenga la mezcla de las listas ordenadas A y B y visualizarla. 3) Localizar si el nmero 255 est en la lista C. 19. Se desea almacenar polinomios de coeficientes enteros y una variable real con grado mximo 25 utilizando arrays. Define el tipo adecuado y escribe subprogramas que: 1) Dado un punto y un polinomio lo evale en dicho punto. 2) Dados dos polinomios obtenga el polinomio suma. 3) Dado un polinomio obtenga el polinomio derivada. 4) Escriba un polinomio por pantalla. 20. La tabla: x f(x) 3.0 14.9 3.3 18.2 3.6 22.3 4.0 27.2 4.5 33.3
muestra los valores de una funcin f para ciertos valores de x. Se desea usar estos valores para estimar los valores de f para otros valores de x distintos, dentro del intervalo dado por la tabla. Escribe un programa que almacene la tabla anterior y que para cada valor de x escriba la correspondiente aproximacin de f(x). Nota: Esta aproximacin puede ser obtenida mediante el mtodo de interpolacin lineal. Con este mtodo, se traza una lnea entre los dos puntos de la tabla que rodean al valor de x a evaluar. Es decir si los puntos de la tabla posterior y anterior son xa y xb, el valor de f(x) viene dado por:
f ( x) = f ( xb ) +
f ( x a ) f ( xb ) ( x xb ) xa xb
Supn que quieres evaluar f(3.5), en ese caso los valores de xa y xb son xa=3.6 y xb=3.3.
Relacin de problemas. Informtica
19
21. Dados N valores de x y f(x) la lnea recta que ms se acerca a estos valores (segn el mtodo de los mnimos cuadrados) es: y = a + b x, donde
b=
N x i f ( xi ) x i f ( x i )
i =1 i =1
N xi2 xi i=1 i =1
N N
i =1 2
a=
i =1
f (x i ) b x i
i =1
Escribe un programa que lea el nmero total de puntos (N) y los N pares de (x, f(xi)) y calcule los valores de a y b para dichos datos. El programa debe ser vlido para 50 o menos datos. 22. Escribir un programa que lea 20 nmeros naturales, encuentre el valor mximo y lo imprima, junto con el nmero de veces que aparece, y las posiciones en que esto ocurre. Este proceso se debe repetir con el resto de los nmeros hasta que no quede ningn nmero por tratar. 23. Escribir un programa que lea 42 nmeros enteros en un array de dimensin 7 x 6 y realice las siguientes operaciones: 1) Imprimir el array 2) Encontrar el elemento mayor del array 3) Indicar la posicin (fila y columna) del elemento mayor 4) Si el elemento mayor est repetido, indicar cuantas veces y la posicin de cada elemento repetido. 24. Escribir un programa que calcule la traspuesta de una matriz cuadrada. Utilizar la representacin de los ejercicios 6 y 7. La matriz traspuesta se obtiene cambiando filas por columnas. Nota: Detecta posibles errores en la dimensin de la matriz. 25. Escribe un programa que lea un texto del teclado y determine si es palndromo o no. Nota: un texto es palndromo si se lee igual en ambos sentidos (cuidado con los espacios en blanco, maysculas y minsculas y vocales acentuadas). Ejemplos: Salta Lenin el atlas Isaac no ronca as somos o no somos 26. Escribe n programa que lea un texto del teclado, sustituya todas las secuencias de dos o ms espacios en blanco por un nico espacio en blanco y escriba el texto resultante por pantalla. 27. Escribe un programa que lea un texto de teclado e imprima en pantalla un mensaje indicando cuantas veces aparecen dos letras contiguas e iguales en el mismo. 28. Se desea efectuar operaciones de resta, multiplicacin y divisin entera y resto de cantidades enteras que se caracterizan por tener una gran cantidad de dgitos, de manera
Relacin de problemas. Informtica
20
que queda excluido el uso del tipo REAL. Para ello cada nmero se representar como una cadena de caracteres. Escriba un subprograma que realice cada una de las operaciones anteriores. Nota: Se considera que no se va a trabajar con nmeros de ms de 100 dgitos. Como aplicacin, escribe un programa que calcule el factorial de 50. 29. Escribe un programa similar al del problema 11, pero que opere con nmeros complejos. Define el tipo complejo como un registro formado por dos nmeros reales que representen la parte real e imaginaria del nmero. Escribe subprogramas para sumar, restar, multiplicar, dividir, calcular conjugados y comparar nmeros complejos. 30. Escribe una funcin que tome como parmetro un registro que representa una fecha y devuelva TRUE si esta fecha es vlida o FALSE en otro caso. 31. Un vector de registros contiene la descripcin de una serie de no ms de 100 personas. Cada registro contiene los campos: nombre, edad, sexo y altura. Escribir un programa que lea y almacene datos en un vector de este tipo, ordene el vector por la altura y lo muestre por pantalla. 32. Dada la siguiente definicin de tipo:
TYPE CONJUNTONUMEROS = SET OF MINIMO..MAXIMO;
donde MINIMO y MAXIMO son dos constantes naturales, escribe un programa que incluya un procedimiento para imprimir una variable del tipo NUMEROCONJ. Ejemplo: El conjunto cuyos miembros son 3, 7, 11, 19 deber imprimirse de la siguiente forma: {3, 7, 11, 19} 33. Dada la siguiente definicin de tipo conjunto:
CIFRAS = 0..9;
CONJUNTO = SET OF CIFRAS;
escribe funciones que calculen: 1) La cardinalidad de un CONJUNTO. 2) Distancia entre dos conjuntos (menor diferencia entre sus elementos):
Distancia ( A, B) = min{ a b | a A, b B}
34. Escribe un programa que lea un prrafo de no ms de 80 letras y que tenga como salida: 1) El nmero de vocales que contiene. 2) El nmero de minsculas, maysculas y dgitos. 3) Frecuencia de cada una de las letras del alfabeto. 35. Los alumnos de una clase desean celebrar una cena de confraternizacin un da del presente mes en el que puedan asistir todos. Se pide realizar un programa que recoja para cada alumno los das que le vendran bien para ir a la cena e imprima las fechas concordantes para todos los alumnos. Los datos se introducirn por teclado
Relacin de problemas. Informtica
21
Relacin de problemas (Tema 7)
1. 2. Escribe un programa que lea del teclado el nombre de tres ficheros de texto y escriba en el tercero el contenido del primero seguido del contenido del segundo. Escribe un programa q codifique y decodifique ficheros de texto usando el mtodo de ue cifrado Csar. Para codificar un fichero de texto (cuyo nombre y extensin se leer de teclado) se generar otro fichero de texto con el mismo nombre y con extensin .COD. La codificacin consistir en reemplazar cada carcter del fichero original por el tercero siguiente segn la tabla ASCII (Por ejemplo, el carcter a ser sustituido por el carcter d). Si el carcter a codificar es CHR(10) o CHR(13) no se cambiar al codificarlo. La opcin de decodificacin deber leer de teclado el nombre de un fichero codificado y recuperar en otro fichero con mismo nombre y con extensin .DEC la informacin original. NOTA: El desplazamiento en tres caracteres debe ser circular tanto en un sentido como en otro. Por ejemplo, el ltimo carcter de la tabla ASCII (CHR(255)) es codificado como CHR(2), ya que el ltimo carcter de la tabla ASCII tiene cdigo 255 y el primero 0. 3. Codifica un programa que cree un fichero que contenga los datos relativos a los artculos de un almacn. Para cada artculo habr que guardar la siguiente informacin: Cdigo del artculo Nombre del artculo Existencias actuales Precio (Numrico) (Cadena de caracteres) (Numrico) (Numrico).
Los datos de los distintos artculos se pedirn del teclado y se almacenarn previamente en un array. Supondremos que el nmero mximo de artculos que se pueden introducir es treinta. Una vez ledos, los datos se ordenarn en el array (el orden ser ascendente segn el cdigo del artculo) y se grabarn en el fichero. 4. Escribe un programa que a partir de dos ficheros generados por el programa anterior (recordar que los artculos estn ordenados por cdigo) genere un tercer fichero que sea el resultado de mezclar de formar o rdenada los dos primeros. Escribe otro programa que haga lo mismo pero con n ficheros (n ser un nmero positivo ledo de teclado). Escribe un programa que tome como entrada el nombre de un fichero generado por el programa del ejercicio 3 y una condicin sobre el campo referente a las existencias actuales. La condicin podr ser: [<,<=,>,>=, <>, =] <nmero> Es decir, que las referencias actuales sean menores a un nmero dado, o menores o iguales, o mayores, etc. El programa debe generar como salida un fichero llamado "[Link]" que contenga todos aquellos artculos para los que se cumple la condicin de entrada. 6. Escribe un programa que tenga como entrada el nombre de un fichero que contenga un texto y muestre en pantalla una estadstica de la longitud de las distintas palabras que contiene (nmero de palabras de cada longitud), as como cuntas veces aparecen los caracteres separadores (",", ".", ":", ";", "b"). Escribe un programa que a partir de un fichero de texto de entrada que contiene nmeros
5.
7.
Relacin de problemas. Informtica
22
enteros positivos expresados en cualquier base entre 2 y 10, genere un listado por pantalla y un fichero de salida que contenga las mismas cantidades del fichero de entrada, pero expresadas en base 10. El fichero de entrada contendr dos lneas para cada nmero; la primera tendr el nmero propiamente dicho y la segunda la base en que est expresado. Ejemplo: Fichero de Entrada:
101 2 412 5 111 9 923 10
Salida por pantalla: Se deber generar un listado por pantalla con las siguientes lneas:
Nmero de entrada Nmero de entrada Nmero de entrada Nmero de entrada 2/101 5/412 9/111 10/923 Resultado Resultado Resultado Resultado 5 107 91 923
El contenido del fichero de salida ser:
5 107 91 923
8. 9.
Escribe un programa que busque en un archivo binario que contiene nmeros enteros, los valores mximo y mnimo y los muestre por pantalla. Escribe un programa que calcule el nmero de lneas que han de leerse de un archivo de texto hasta que se hayan ledo del fichero todas la s letras minsculas del alfabeto al menos una vez. El programa debe mostrar tambin el nmero total de caracteres ledos hasta ese momento. Si se alcanza el final del fichero y no se consigue el objetivo, el programa mostrar un mensaje por pantalla que lo indique.
10. Escribe un programa que a partir de un fichero de texto, cree otro que slo contenga aquellas lneas del primero en las que figuren una palabra introducida previamente por el usuario desde el teclado. NOTA: Suponer que la longitud mxima de una lnea del fichero es 128 caracteres y que las palabras estn separadas por espacios en blanco o saltos de lnea y que los nicos caracteres que aparecen en el texto son letras y espacios en blanco.
Relacin de problemas. Informtica
23
11. Escribe un programa que mezcle dos archivos binarios que contengan nmeros enteros separados por espacios, y que estn ordenados ascendentemente. El fichero resultante deber estar tambin ordenado en orden ascendente. 12. Escribe un programa que a partir de los nombres de dos ficheros binarios que contienen valores cardinales en el rango [1..1000], genere dos nuevos ficheros con la unin e interseccin de los dos ficheros anteriores. 13. Se desea escribir un programa que resuelva el juego Sopa de Letras. Para ello, se considerarn las siguiente especificaciones:
La tabla de caracteres que forma la sopa de letras tendr como dimensiones 15 filas por 15 columnas. En fichero de entrada "[Link]" contendr las distintas lneas que forman la tabla. En fichero "[Link]" contendr las palabras a buscar dentro de la SOPA. Slo ser necesario buscar los patrones dentro de la SOPA por filas y por columnas en ambos sentidos (No ser necesario buscar en las diagonales).
La salida del programa ser un listado por pantalla mostrando cada palabra encontrada junto con las coordenadas donde fue hallada. 14. Mejorar el programa anterior para que busque tambin en diagonales 15. Se desea ordenar un fichero de nmeros enteros que no cabe en la memoria central del ordenador. Se opta por ordenarlo considerndolo como un array en disco. Para ello ser necesario escribir los siguientes subprogramas: 1) PROCEDURE Longitud (NombreFich : NOMBREFICH) : CARDINAL; Devuelve la cantidad de nmeros enteros almacenada en el fichero que toma como argumento. 2) PROCEDURE LeerFich (NombreFich : NOMBREFICH; Posicion : CARDINAL) : INTEGER; Devuelve el valor del nmero que est situado en la posicin indicada dentro del fichero. 3) PROCEDURE EscribirFich (NombreFich : NOMBREFICH; Posicion : CARDINAL; Valor : INTEGER); Modifica el contenido del fichero, de modo que el valor del nmero que ocupa la posicin indicada pasa a ser Valor. El resto de los nmeros en el fichero permanecen iguales. Para ello debe crearse un fichero auxiliar a partir del original y el nuevo valor y copiar ste sobre el original. Utilizando estos subprogramas, disea el programa que ordene el fichero y muestre el resultado por pantalla. 16. Otra alternativa al procedimiento anterior es dividir el fichero inicial en subficheros de como mximo 50 nmeros. Cada uno de estos fic heros se carga en memoria en un vector de tamao 50, se ordena en el vector y se vuelca en el correspondiente subfichero. Posteriormente se mezclan los subficheros obtenindose el fichero original ordenado. Escribe un programa para esto.
Nota: Los problemas 14, 15 y 16 presentan un alto nivel de dificultad.
Relacin de problemas. Informtica
24