Unidad 2
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 4, 5, 6 y 7
 

Versión ps

Version pdf

 

Estructuras selectivas

 

  1. Elabore un programa para determinar si una hora leída en la forma horas, minutos y segundos está correctamente expresada.
  2. ¿Qué sucede, en la implantación de Pascal que se utilice, cuando se usa una variable sin tener valor asignado?
  3. 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).
  4. Dados tres valores a, b y c, escriba un programa para ordenarlos e imprimirlos de forma ascendente.
  5. ¿Qué resultado se obtiene para (x div y) cuando:

     

    • y<0 AND x>0
    • y>0 AND x<0
    • y<0 AND x<0

     

  6. Poner un ejemplo de tres números reales que prueben que la suma-máquina no es asociativa.
  7. ¿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)?
  8. Especificar la postcondición de las sentencias compuestas siguientes, si la precondición, en ambos casos es: $\{a = a_o, b = b_o \}$.
        Begin { secuencia 1}
           a := b;
           b := a
        end
        begin { secuencia 2}
           a := a + b ;
           b := a - b ;
           a := a - b
        end

     

  9. 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)

     

  10. Dado un número entero positivo de tres cifras (entrada), escríbase un programa Pascal que escriba en pantalla sus cifras en orden inverso.
  11. 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.
  12. 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.
  13. 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.

     

  14. 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?

  15. 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''.

     

  16. (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.

     

  17. (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)

     

  18. Consideremos los conjuntos de puntos que se definen:

    A: puntos interiores a la circunferencia $x^2 + y^2 = 25$.

    B: puntos interiores a la elipse $\frac{x^2}{16} + \frac{y^2}{36} = 1$.

    C: puntos que verifican $y \geq 1-x$.

    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:

    $U = A \cap B \cap C$

    $V = \overline{A} \cap B \cup A \cap C$

    $W= \overline{A} \cap (\overline{B} \cup C)$

    Nota: $\overline{A}$ denota el complementario del conjunto $A$.

     

  19. 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.
  20. 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

     

  21. 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

 

  1. 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.
  2. Elabore un programa que lea un número entero y escriba el número resultante de invertir sus cifras.
  3. 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.
  4. 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.
  5. 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
    

     

  6. Elabore un programa para imprimir el triángulo de Floyd con un número dado de filas completas.
  7. (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
    

     

  8. (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;

     

  9. (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.

     

  10. (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.

  11. (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).
 

Última modificación: viernes, 04 de octubre de 2002

Administrador: cesargf [at] infor.uva.es