Práctico 2 - Entrada/Salida
Programación 1
InCo - Facultad de Ingenierı́a, Udelar
1. Considere la siguiente secuencia de instrucciones y que todas las variables se han declararado
como variables enteras:
read(x,y,z);
readln(a);
readln(b,c);
read(d);
Suponga que se ejecuta dicha secuencia con los siguientes datos ingresados por la entrada
estándar:
8 7 2 1 3
1 4 4 6 2
3 7
Indique con qué valores quedan las variables a, b, c, d, x, y, z.
2. Dada la siguiente declaración de variables:
var
a,b,c: integer;
x,y,z: real;
Suponga que se ingresan los siguientes datos por la entrada estándar:
3 2.3 -6.5
1 5 2.1
Para cada una de las siguientes secuencias de instrucciones, indique si se ejecutan correc-
tamente o si se produce error en tiempo de ejecución. En caso afirmativo, indique en qué
instrucción se produce el error.
i) read(x,y,z); read(a,b,x)
ii) read(a,x,y); read(b,z,c)
iii) readln(a,x); read(b,c,y,z)
3. ¿Qué se desplegará en la salida estándar cuando se ejecute el siguiente programa en Pascal?
Anticipe cuál va a ser la salida que se mostrará. Después, ejecútelo en máquina y compare
lo que esperaba con la salida que se muestra.
1
program Valores_suma;
begin
write ('Valor1 es: ');
writeln(3);
write ('Valor2 es: ');
writeln(5.5);
writeln ('La suma de ', 3, ' y ', 5.5, ' es ', 3 + 5.5)
end.
4. Suponga que a, b y c son variables enteras y se ingresan los siguientes datos por la entrada
estándar:
1 2
3 4
Indique cuál o cuáles de las siguientes secuencias de instrucciones no producirá los valores
a = 1, b = 2 y c = 3:
□ read(a); readln(b); read(c) □ read(a); read(b); readln; read(c)
□ readln (a,b,c)
□ read(a,b,c) □ readln(a); readln(b); readln(c)
5. Dado el siguiente programa:
program Char_Ord;
var a, b, c, d : char;
r1, r2 : integer;
resu : real;
begin
read (a, b, c, d);
r1 := ord(a) - ord('0');
r2 := (ord(c) - ord('0')) * 10 + (ord(d) - ord('0'));
resu := r1 + r2 / 100;
writeln ('Valor ingresado: ', resu:4:2)
end.
Suponga que se ejecuta dicho programa con los siguientes datos ingresados por la entrada
estándar:
3.14
¿Qué se desplegará en la salida estándar cuando se ejecute el programa? Anticipe cuál va
a ser la salida. Después, ejecútelo en máquina y compare lo que esperaba con la salida que
se muestra.
6. Escriba un programa en Pascal que, dados dos enteros de la forma hhmm (ingresados por la
entrada estándar), donde hh representa las horas (menos de 24) y mm los minutos (menos
de 60), determine la suma de estos dos tiempos, y exhiba el resultado en la salida estándar,
en la forma d hhmm, donde d es dı́as (ya sea cero o uno). Incluya mensajes de salida con
etiquetas descriptivas para el ingreso de datos.
Ejemplo:
pág. 2 de 4
Entrada Salida
1345 2153 1 1138
7. El error relativo en una medición m es la razón de la diferencia absoluta entre la medición
y el valor verdadero v al valor verdadero, la cual se calcula como |m − v|/v. Escriba un
programa en Pascal que lea por la entrada estándar dos números reales que representan
la medición m y el valor verdadero v. El programa debe calcular el error relativo de la
medición y exhibirlo en la salida estándar junto con la medición y el valor verdadero.
Incluya mensajes de salida con etiquetas descriptivas para el ingreso y el despliegue de
datos.
Ejemplo:
Entrada Salida
51.0 51.3 Medición = 5.1000000000e+01
Valor verdadero = 5.1300000000e+01
Error relativo = 5.8479532164e-0003
8. No es posible utilizar una computadora para generar números aleatorios genuinos ya que
es preciso utilizar un algoritmo para generar los números, lo que implica que es posible pre-
decir los números generados. Lo que sı́ pueden hacer las computadoras es generar números
seudoaleatorios (números que, estadı́sticamente, parecen ser aleatorios). Una técnica anti-
gua (que no produce buenos resultados) se llama método del cuadrado medio. Funciona
ası́: dado un número a, para generar el siguiente número de la secuencia se extraen los
dı́gitos que están en la posición de las decenas y las centenas de a2 . Por ejemplo, si a es
53, entonces a2 es 2809, y el siguiente número seudoaleatorio será 80. Se ve que el siguiente
número seudoaleatorio a 80 es 40. Si se continúa este proceso se obtiene 60, 60, 60, . . .
Escriba un programa en Pascal que lea por la entrada estándar un entero de dos dı́gitos
y determine el siguiente número seudoaleatorio que se generarı́a si se usara el método del
cuadrado medio. Como resultado, exhiba por la salida estándar el número de dos dı́gitos
original, el cuadrado de este entero, y el siguiente número seudoaleatorio. Incluya mensajes
de salida con etiquetas descriptivas para el ingreso y el despliegue de datos.
Ejemplo:
Entrada Salida
53 Numero introducido = 53
Cuadrado del numero = 2809
Siguiente numero seudoaleatorio = 80
9. La función exp de Pascal calcula un valor igual a la suma de la serie infinita 1 + [x/1!] +
[(x2 )/2!] + [(x3 )/3!] + [(x4 )/4!], siendo x un número real. Escriba un programa en Pascal
que lea por la entrada estándar un valor real para x entre 0,0 y 1,0. El programa debe
determinar, por un lado, la suma de los primeros cinco términos de la serie infinita y, por
pág. 3 de 4
otro lado, el valor de exp(x) mediante la función predefinida. Como resultado, exhiba por
la salida estándar ambos valores calculados junto con el valor de x. Incluya mensajes de
salida con etiquetas descriptivas para el ingreso y el despliegue de datos.
Ejemplo:
Entrada Salida
0.5 Valor introducido: x = 5.0000000000e-01
Suma de los cinco términos = 1.648437619e+00
Valor de Exp (x) = 1.6487212707e+00
10. Con el resultado del ejercicio 11 del Práctico 1, escriba un programa en Pascal para de-
terminar la raı́z cuadrada de un número real positivo a mediante el cálculo de a0,5 . El
programa deberá leer el valor para a por la entrada estándar. Como resultado, exhiba por
la salida estándar el valor de a, el valor de a0,5 , y el valor de sqrt(a) (el cual se calculará
con la función predefinida). Incluya mensajes de salida con etiquetas descriptivas para el
ingreso y el despliegue de datos.
Ejemplo:
Entrada Salida
12.7 Valor introducido: a = 1.2700000000e+01
Raiz cuadrada calculada = 3.5637059362e+00
Valor de Sqrt (a) = 3.5637059362e+00
11. Escriba un programa en Pascal que transforme un número octal (base ocho) de tres dı́gitos
en su correspondiente número equivalente en base 10. Por ejemplo, el número octal de tres
dı́gitos 415 equivale al valor decimal 4 × 82 + 1 × 81 + 5 × 80 , o sea, 269. El programa
deberá leer por la entrada estándar el número octal y realizar las operaciones aritméticas
necesarias para calcular el número equivalente en base 10. Como resultado, exhiba por la
salida estándar el valor octal ingresado junto con el número equivalente en base 10. Incluya
mensajes de salida con etiquetas descriptivas para el ingreso y el despliegue de datos.
Ejemplo:
Entrada Salida
217 Octal 217 = Decimal 143
pág. 4 de 4