Unidad 3
Principal Arriba Unidad 1 Unidad 2 Unidad 3 Unidad 4 Unidad 5

 

Programación I


Ingeniería Técnica Informática


Ejercicios de los Temas 8 y 9
versión ps versión pdf

Subprogramas

 

  1. Escribir una función en Pascal para calcular A elevado a B, siendo A un número real cualquiera y B un valor entero positivo o nulo.
  2. Elaborar una función en Pascal que dado un carácter nos devuelva su mayúscula correspondiente.
  3. Escribir una función booleana en Pascal que nos diga si un valor entero es o no cuadrado perfecto.
  4. Elaborar una función en Pascal que calcule el número de días de un mes de un año cualquiera.
  5. Dado el tipo type resultado = (menor, igual, mayor). Elaborar una función Pascal del tipo resultado que tome dos valores i, j y nos compare i con j.
  6. Escribir la función Resto que nos calcule el resto de dividir su primer parámetro por el segundo (es decir, lo mismo que hace el operador predefinido mod), suponiendo que no disponemos de los operadores div, mod y / (división real). Tanto los parámetros como el resultado de la función son números enteros.
  7. Elaborar una función booleana Pascal que dado un número entero nos diga si es o no primo.
  8. Dado un número entero positivo a se define la función de Euler relativa a a como el número de enteros positivos inferiores a a que son primos con a. Por ejemplo, la función de Euler de 2 es 1, la de 4 es 2, etc. Elabore una función en Pascal que implemente la función de Euler relativa a cualquier número entero positivo.
  9. Elaborar un programa que lea un número n por teclado y nos diga la distancia entre cada par de primos contiguos menores que n. Por ejemplo si el número introducido es 15 los pares de primos menores que él son: 1-2, 2-3, 3-5, 5-7, 7-11, 11-13 de modo que el programa debería responder: 1, 1, 2, 2, 4, 2 .
  10. Escribir un procedimiento CambioARectangulares que convierta sus dos parámetros reales de forma polar a forma rectangular.
  11. Escribir un procedimiento CambioAPolares que convierta sus dos parámetros de tipo real de forma rectangular a forma polar.
  12. Escribir un procedimiento que descomponga y escriba los factores primos de cualquier número entero.

     

  13. (Concurso de la ACM, 1.999) Dado un número entero, N, si la suma de sus divisores (sin contar a si mismo) es igual a N se dice que ese número es perfecto. Si la suma es inferior, se dice que es deficiente, y si es superior se dice que es abundante. Por ejemplo:
    • 6 tiene como divisores 1,2,3: Su suma es 6, por lo tanto es perfecto.
    • 8 tiene como divisores 1,2,4: Su suma es 7, por lo tanto es deficiente.
    • 24 tiene como divisores 1,2,3,4,6,8,12: Su suma es 36, por lo tanto es abundante.

    Escribir un subprograma que reciba un número entero como parámetro y devuelva un valor que lo clasifique como perfecto, deficiente o abundante.

  14. (Examen curso 86/87) Un fumador empedernido se encuentra una noche de estudio sin cigarrillos, pero con una buena cantidad de colillas. Descubre que es capaz de liarse un cigarrillo completo con cada siete colillas. Diseñar un procedimiento en Pascal que calcule, a partir de un número dado de colillas, el número de cigarrillos que podrá aún fumar a base de liarlas y el número de colillas restantes. Explíquese con qué parámetros actuales se llamaría al procedimiento. Ejemplo: Con 13 colillas fumará dos cigarrillos y sobrará una colilla.
  15. Escribir una función en Pascal para obtener la edad (en años) de una persona a partir de su fecha de nacimiento y del día de hoy.

     

  16. (Examen curso 86/87) ¿Cuál es la salida del siguiente programa? ¿Que errores o acciones no recomendables encuentras en él?

     

    Program mezcolanza(output);
    var
      a, b, c : integer;
      Procedure mezcla(var y: integer; z: integer);
      var x : integer;
      begin
        x := y; y := z; z := c; c := x
      end; (* mezcla *)
      Procedure lanza(a: integer; var b: integer);
      var x : integer;
      begin
        x := c; c := b; b := a; a := x
      end; (* lanza *)
    begin (* programa principal *)
      a := 1; b := 2; c := 3;   writeln(output, a, b, c);
      mezcla(a, b);             writeln(output, a, b, c);
      lanza(a, b);              writeln(output, a, b, c);
      a := 1; b := 2; c := 3;   writeln(output, a, b, c);
      mezcla(a, b+1);           writeln(output, a, b, c);
      lanza(a-b, b);            writeln(output, a, b, c);
    end. (* programa principal *)

     

  17. (Examen curso 87/88) ¿Cuales son los resultados que se obtienen al ejecutar el siguiente programa? ¿Que errores o acciones no recomendables encuentras en él?

     

    Program Examen(output);
    var  a, b, c : real;
      Procedure uno(var a: real; x: real; var y: real);
      var b, d : real;
      begin (* uno *)
        b := x+y-a;       d := a*y-a*b;    c := a*y-d;      x := a*c-b;
        a := b+d+x-y;    y := a+b+c+d+x+y
      end; (* uno *)
    begin (* principal *)
      a := 1; b := 2; c := 3;    uno(a,b,c);
      writeln(output,a,b,c);  uno(b,c,a);  writeln(output,a,b,c);
    end.

     

  18. (Examen curso 87/88) ¿Qué salidas se obtienen cuando se ejecuta el siguiente programa ? ¿Que errores o acciones no recomendables encuentras en él?
    program ejemplo (input, output);
    var a, b, c, d : integer;
      procedure cambia (var a, g : integer; y : integer);
      var b, c : integer;
      begin (* cambia *)
        b:= a+g-y;       g:= b+d;
        c:= 1;               a:= a+b-c+d;          y:= c+g-a;
      end; (* cambia *)

    begin (* ejemplo *)
      a:=1; b:= 2; c:=3; d:=4;
      cambia(b, c, d); writeln(output,a:4,b:4,c:4,d:4);
      cambia(b, a, c); writeln(output,a:4,b:4,c:4,d:4);
    end. (* ejemplo *)

     

  19. (Examen curso 92/93) El programa a contiene los procedimientos b y e, a su vez el procedimiento b contiene a los procedimientos c y d. Las siguientes variables se declaran en las secciones de declaración de variables:

     

    • Variables globales: k, l, m, n.
    • Variables locales de b: k, l, o, p, r.
    • Variables locales de c: k, p, s.
    • Variables locales de d: m, r, s, t.
    • Variables locales de e: n, r.

    Suponemos que los procedimientos no tienen parámetros. Contestar, justificando brevemente la respuesta, a las siguientes preguntas:

     

    • Si en a se asigna a k el valor 25 y a continuación se invoca a b ¿Qué valor contiene la variable k en b?

       

    • Si en b se asigna a l el valor 2 y a continuación se invoca a d.¿Está disponible el valor de l en d?
    • Se ejecuta la secuencia de pasos:
      • a invoca a b.
      • b invoca a c.
      • Se asigna a s el valor 5 en c.
      • Se termina c (el control se transfiere de nuevo a b).
      • b invoca a d.

      ¿Qué valor contiene la variable s en d?

    • Se asigna a r el valor 1 en e y se transfiere de nuevo el control a a ¿Está disponible el valor de r en a?
    • ¿Puede c llamar a d?

     

  20. (Primer Parcial curso 93/94) En nuestra instalación informática tenemos 3 discos:

     

    Nombre Capacidad Ocupación
    VSAM01 1770 Cil. 1593 Cil.
    VSAM02 2220 Cil. 1332 Cil.
    VSAM03 2340 Cil. 1100 Cil.

    Sabiendo que 15 pistas equivalen a un cilindro, elaborar un programa que vaya leyendo el número de referencia de cada fichero (un entero positivo) y el espacio que ocupa (en pistas), y nos determine el menos ocupado de los discos en que podemos almacenarlo, actualizando sus datos de ocupación. Cuando el número de referencia sea 0, el programa deberá darnos la cantidad de cilindros ocupados y el tanto por ciento de ocupación para cada uno de los tres discos, continuando con el proceso. Si el número de referencia es negativo, el programa terminará su ejecución.

 

Última modificación: jueves, 07 de noviembre de 2002

Administrador: cesargf [at] infor.uva.es