| |
Programación I
Ingeniería Técnica Informática
Ejercicios de los Temas 4, 5, 6 y 7
Estructuras selectivas
- Elabore un programa para determinar si una hora leída en la forma horas,
minutos y segundos está correctamente expresada.
- ¿Qué sucede, en la implantación de Pascal que se utilice, cuando se usa
una variable sin tener valor asignado?
- Si a una variable real se le asigna el valor 0.2 ¿cuál es el valor
exacto que contendrá la variable? ¿Cual es el valor de MAXINT? (en la
implantación de Pascal que se utilice).
- Dados tres valores a, b y c, escriba un programa para ordenarlos e
imprimirlos de forma ascendente.
- ¿Qué resultado se obtiene para (x div y) cuando:
- y<0 AND x>0
- y>0 AND x<0
- y<0 AND x<0
- Poner un ejemplo de tres números reales que prueben que la suma-máquina
no es asociativa.
- ¿Cuál es el valor de las expresiones: trunc(-1.6), round(-1.6), trunc(-1.4),
round(-1.4), trunc(-1.5) y round(-1.5)?
- Especificar la postcondición de las sentencias compuestas siguientes, si
la precondición, en ambos casos es:
.
Begin { secuencia 1}
a := b;
b := a
end
begin { secuencia 2}
a := a + b ;
b := a - b ;
a := a - b
end
- Obténganse expresiones en Pascal para calcular:
- el dígito de las unidades de un entero positivo n
- el dígito de las centenas de un entero positivo n
- la suma de un entero n y tantas decenas como indique el dígito de sus
centenas
- la parte entera de un número positivo x
- la parte fraccionaria de un número positivo x
- el valor del número positivo x redondeado
- el valor del número positivo x redondeado a tres decimales
- el valor en euros de una cantidad entera de pesetas n (con el redondeo
correspondiente)
- Dado un número entero positivo de tres cifras (entrada), escríbase un
programa Pascal que escriba en pantalla sus cifras en orden inverso.
- Escríbase un programa Pascal que, dada como entrada una cantidad entera
positiva de pesetas, muestre el número mínimo de billetes y monedas
posible en que podría descomponerse.
- Escríbase un programa Pascal que, dada como entrada una cantidad positiva
de euros, muestre el número mínimo de billetes y monedas posible en que
podría descomponerse.
- Escríbase un programa en Pascal que, tomando como entrada los valores de
dos ángulos, expresados en grados, minutos y segundos, obtenga el valor de
su suma de la misma forma. Se supone que las entradas son correctas, en el
sentido de que cada ángulo está expresado como tres números enteros, en
los rangos respectivos [0, 360), [0,60) y [0,60). La salida debe estar
expresada de la misma manera.
- Escríbase un programa Pascal que, tomando como entrada un número de 3
cifras (multiplicando) y otro de 2 (multiplicador) muestre el producto de la
forma en que se vería si se hiciera a mano. Por ejemplo, dados 739 y 12,
debe mostrar en pantalla:
739
x 12
------
1478
739
------
8868
¿Podría generalizarse para un multiplicando positivo cualquiera? ¿Y
para un multiplicador positivo cualquiera?
- Escriba un programa que lea tres números positivos y compruebe si son
iguales. Por ejemplo:
- Si la entrada fuese 5 5 5, la salida debería ser ``hay tres números
iguales a 5''.
- Si la entrada fuese 4 6 4, la salida debería ser ``hay dos números
iguales a 4''.
- Si la entrada fuese 0 1 2, la salida debería ser ``no hay números
iguales''.
- (Examen curso 87/88) Diga qué salidas produciría el siguiente fragmento
de programa si los valores leídos fuesen:
v1 = 3, v2 = 0
v1 = -1, v2 = -2
v1 = 0, v2 = 1
v1 = -3, v2 = 2
var v1,v2 : real;
begin
readln(input,v1,v2);
if (v1 < 0) and (v2 < 0) then
writeln(output,'CARENCIA');
if sqr(v1) >
sqr(v2) then
writeln(output,'CORREGIR
DESCOMPENSACION');
if
(v2 > 0) then
writeln(output,'AGUDOS
O.K.');
else if (v1 > 0)
then
writeln(output,'AUMENTAR
AGUDOS');
else writeln(output,'REHACER EL MONTAJE');
end.
- (Examen curso 86/87) Indique el resultado que aparecerá en pantalla
cuando se ejecute el segmento de programa siguiente para los casos
siguientes, siendo a y b variables reales y DeboDividir de tipo boolean:
a = 1, b = 0
a = 1, b = 1
a = 0, b = 0
DeboDividir := true;
if a<>0 then
if b=0 then
begin
if a>0 then
write(output,'+')
else
write(output,'-');
writeln(output,'infinito');
DeboDividir
:= false (* no se puede dividir *)
end
else
begin
writeln(output,'cero');
DeboDividir
:= false (* no hace falta dividir *)
end;
if DeboDividir then writeln(output,a/b)
- Consideremos los conjuntos de puntos que se definen:
A: puntos interiores a la circunferencia
.
B: puntos interiores a la elipse
.
C: puntos que verifican .
Escribir un programa que lea las coordenadas de un punto (x,y) y diga si
está en A, B, y/o C y en los siguientes conjuntos:
Nota:
denota el complementario del conjunto .
- Elabore un programa que a partir de un mes cualquiera de un año
cualquiera nos de como resultado los días que tiene dicho mes. Nota: Un año
se considera bisiesto cuando es divisible por 400 o bien es divisible por 4
pero no por 100.
- Elabore un programa pascal que lea un carácter y determine si es:
- una letra mayúscula
- una letra minúscula
- un carácter numérico
- un blanco
- un carácter de puntuación
- un carácter no incluido en las categorías anteriores
- Elabore un programa que lea un carácter y le convierta en mayúsculas si
es un carácter alfabético, en otro caso, que le deje igual.
- Si introducimos 'á' nos deberá de escribir 'A'
- Si introducimos '1' nos deberá de escribir '1'.
Estructuras iterativas
- Se definen los números triangulares como los obtenidos por la suma de los
números naturales sucesivos 1, 2, 3, .... Es decir, los primeros números
triangulares son 1, 3, 6, 10, etc. Elabore un programa para imprimir el n-ésimo
número triangular.
- Elabore un programa que lea un número entero y escriba el número
resultante de invertir sus cifras.
- Elabore un programa que imprima la figura de un triángulo rectángulo
ajustada a la izquierda, formada por asteriscos. El lado del triángulo se
lee como dato.
- Elabore un programa que imprima la figura de un triángulo rectángulo
ajustada a la derecha, formada por asteriscos. El lado del triángulo se lee
como dato.
- Elabore un programa que imprima el triángulo de Floyd hasta un valor
dado. El triángulo contiene los números naturales correlativos, uno en la
primera línea, dos en la segunda, etc.; es decir, en la fila n-esima
aparecen n valores. Ejemplo:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
- Elabore un programa para imprimir el triángulo de Floyd con un número
dado de filas completas.
- (Examen curso 87/88) Elabore un programa Pascal que lea por teclado un número
n entero positivo y presente por pantalla una pirámide de n filas que
responda al siguiente esquema:
1
2 3 2
3 4 5 4 3
4 5 6 7 6 5 4
5 6 7 8 9 8 7 6 5
6 7 8 9 0 1 0 9 8 7 6
7 8 9 0 1 2 3 2 1 0 9 8 7
8 9 0 1 2 3 4 5 4 3 2 1 0 9 8
9 0 1 2 3 4 5 6 7 6 5 4 3 2 1 0 9
0 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 0
- (Examen curso 87/88) ¿Son idénticos los siguientes fragmentos de
programa con respecto a los resultados que se obtienen?
repeat
read(input,a);
(* procesa a *)
........
until a=centinela;
|
|
read(input,a);
while a<>centinela do
begin
(* procesa a *)
........
read(input,a)
end;
|
|
- (Examen curso 88/89) Dadas las variables enteras contador, v1 y patron, y
el esquema algorítmico siguiente:
contador := 1
iterar
salir si (v1 = patron) o (contador = 40) o
(v1
parte entera de raíz cuadrada de maxint)
contador := contador + 1
v1 := v1 * v1
fin_iterar
Utilizar todas las sentencias repetitivas que sean adecuadas para
codificar el algoritmo anterior en lenguaje Pascal.
- (Examen curso 91/92) La multiplicación ``a la rusa'' permite realizar el
producto de dos números enteros utilizando solo sumas y divisiones o
productos por dos. El método consiste en realizar sucesivamente las
siguientes operaciones: multiplicar uno de los números por dos y obtener la
división entera del otro, también por dos. Se detiene el proceso al
obtener como cociente de la división un uno. Por ejemplo, para multiplicar
22 por 64 se obtienen las dos columnas siguientes:
22 |
64 |
11 |
128 |
5 |
256 |
2 |
512 |
1 |
1024 |
22 x 64 = |
1408 |
A continuación sumamos los números de la columna de la derecha que
corresponden a números impares en la columna de la izquierda, esto es en
nuestro caso: 128+256+1.024=1.408 y el resultado de la suma es el producto
de los números iniciales. Elaborar un programa en Pascal que multiplique
mediante este método dos números enteros introducidos por pantalla.
- (Examen curso 92/93) Diremos que un número n es raro cuando verifique que
para cualquier número m, menor que él y tal que ambos números sean primos
entre sí, resulte que m es un número primo. Se dice que dos números son
primos entre sí cuando el máximo común divisor de ambos números sea la
unidad. Elaborar un programa Pascal que liste todos los números raros
existentes entre 3 y un valor introducido por el usuario (ambos inclusive).
|