Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1101
I Semestre 1996
[<=] [home] [<>] [\/] [=>]
CI-1101 Programación I

Examen #1 [solución]
Versión #1

     Duración: dos horas.  Lea bien el examen antes de hacerlo.  El examen es 
a  libro  abierto.   Cuenta  la  documentación.   Cuenta  la  redacción y  la 
ortografía.  Cuentan las convenciones.  Puede hacer el examen con lápiz.  ¡No 
haga más de lo que se le pide! ¡ESCOGA 3 DE LAS 4 PREGUNTAS!

1) [25 pts] Palabras( s : STRING  ) :  WORD; es  una función  que retorna  el 
número de palabras que contiene la hilera "s". Una palabra  es una  secuencia 
de  uno  o  más  caracteres  consecutivos  pero todos  diferentes de  blanco. 
Especifique y programe la función Palabras().

     Palabras(' el bananazo es ;muy; largo ')      ==> 5;
     Palabras(' ; ; ; ; ; ; siete; ocho; 9 ')      ==> 9;
     Palabras('')                                  ==> 0;
     Palabras('                            ')      ==> 0;

2) [25 pts] Palindromo( S: STRING ) : BOOLEAN; es la función que retorna TRUE 
si la hilera "s" se lee igual a la derecha que a la izquierda, pero omitiendo 
blancos. Especifique y programe la función Palindromo().

     Palindromo('radar')                           ==> TRUE;
     Palindromo('Dabale arroz a la Zorra el Abad') ==> TRUE;
     Palindromo('rabanote')                        ==> FALSE;
     Palindromo('1 23 45 43 2 1')                  ==> TRUE;
     Palindromo('como moco')                       ==> FALSE;
     Palindromo('como omoc')                       ==> TRUE;


3) [25 pts] Al ser contratado por RemaTEX para ayudar en  la construcción  de 
un Sistema Integral de Construcción de Vivienda popular,  usted se  ve en  la 
obligación  de  usar  el  objeto  TTecho,  parte  de  cuya  definición  es la 
siguiente:

CONST
  Tsize = 200;

TYPE
  TTecho = OBJECT
    PRIVATE
      _m: ARRAY[1..Tsize,1..Tsize] OF INTEGER; { matriz del techo }
      _n : WORD;                               { tamaño de _m[]   }
    PUBLIC
      PROCEDURE Init; { Constructor }
      PROCEDURE Clear;
      PROCEDURE Done; { Destructor  }

      ... etc ...

      FUNCTION  EsTecho : BOOLEAN;
  END; { TTecho }

Su misión es implementar la operación  TTecho.EsTecho() que  retorna TRUE  si 
los valores almacenados en _m[] son tales que los de  la diagonal  transversa 
son estrictamente mayores a los que no están en la diagonal transversa.

                                ../                    \..
       diagonal transversa ==>  ./.      diagonal ==>  .\.
                                /..                    ..\

             1 2 3             1 2 3 4             0 1
             0 3 0             2 3 4 1             2 0
             4 0 0             3 4 1 2
                               4 1 2 3               1
          EsTecho()=TRUE     EsTecho()=TRUE    EsTecho()=TRUE

          -> 3 2 3          -> 5 2 3 4             0 1
             0 3 0             2 3 4 1             2 3 <-
             4 0 0             3 4 1 2
                               4 1 2 3               
          EsTecho()=FALSE    EsTecho()=FALSE   EsTecho()=FALSE

4) [25 pts] Al  ser  contratado  por  Sega para  programar un  VideoJuego muy 
violento usted se ve en la obligación de  usar el  objeto TBazooka,  parte de 
cuya definición es la siguiente:

CONST
  BKsize = 200;

TYPE
  TBazooka = OBJECT
    PRIVATE
      _l : ARRAY[1..BKsize] OF INTEGER; { adonde dispara }
      _n : WORD;                        { tamaño de _l[] }
    PUBLIC
      PROCEDURE Init; { Constructor }
      PROCEDURE Clear;
      PROCEDURE Done; { Destructor  }

      ... etc ...

      FUNCTION  Explota : BOOLEAN;
  END; { TBazooka }

Su misión es implementar la operación TBazooka.Explota() que retorna TRUE  si 
los valores almacenados en  _l[] forman  una secuencia  primero ascendente  y 
luego descendente, como se muestra en la siguiente tabla:

     b1 = (1,2,3,2,1)   ==> b1.Explota = TRUE;
     b2 = (1,3,5,6,7,6) ==> b2.Explota = TRUE;
     b3 = (1,7,7,7,7,6) ==> b3.Explota = TRUE;

     b4 = (1,2,3)       ==> b4.Explota = FALSE;
     b5 = (1,3,5,6,7,7) ==> b5.Explota = FALSE;
     b6 = (1,3,5,6,5,6) ==> b6.Explota = FALSE;

 

Examen #1 [solución]
Versión #2

     Duración: dos horas.  Lea bien el examen antes de hacerlo.  El examen es 
a  libro  abierto.   Cuenta  la  documentación.   Cuenta  la  redacción y  la 
ortografía.  Cuentan las convenciones.  Puede hacer el examen con lápiz.  ¡No 
haga más de lo que se le pide! ¡ESCOGA 3 DE LAS 4 PREGUNTAS!

1) [25 pts] QuitaBlancos( s : STRING ) : STRING; es una  función que  retorna 
la hilera que se obtiene al eliminar los blancos que aparecen consecutivos en 
la hilera "s". Especifique y programe la función QuitaBlancos().

     QuitaBlancos(' bombino limponio ') ==> ' bombino limponio '
     QuitaBlancos('                  ') ==> ' '
     QuitaBlancos('  a   b    c   d  ') ==> ' a b c d '


2) [25 pts] Kletras( s :  STRING; k  : WORD)  : BOOLEAN;  es una  función que 
retorna  TRUE  si  la  hilera  "s"  tiene  "k"  o  menos  letras  diferentes.  
Especifique y programe la función Kletras(). [Sugerencia: use System.Pos()].

     Kletras('banana', 3) ==> TRUE;
     Kletras('piloto', 2) ==> FALSE;
     Kletras('aaaaaa', 0) ==> FALSE;
     Kletras('jupazo', 6) ==> TRUE;

3) [25 pts] Al ser contratado por RemaTEX para ayudar en  la construcción  de 
un Sistema Integral de Construcción de Vivienda popular,  usted se  ve en  la 
obligación  de  usar  el  objeto  TTecho,  parte  de  cuya  definición  es la 
siguiente:

CONST
  Tsize = 200;

TYPE
  TTecho = OBJECT
    PRIVATE
      _m: ARRAY[1..Tsize,1..Tsize] OF INTEGER; { matriz del techo }
      _n : WORD;                               { tamaño de _m[]   }
    PUBLIC
      PROCEDURE Init; { Constructor }
      PROCEDURE Clear;
      PROCEDURE Done; { Destructor  }

      ... etc ...

      FUNCTION  EsTecho : BOOLEAN;
  END; { TTecho }

Su misión es implementar la operación  TTecho.EsTecho() que  retorna TRUE  si 
los valores almacenados en _m[] son tales que los de  la diagonal  transversa 
son estrictamente mayores a los que no están en la diagonal transversa.

                                ../                    \..
       diagonal transversa ==>  ./.      diagonal ==>  .\.
                                /..                    ..\

             1 2 3             1 2 3 4             0 1
             0 3 0             2 3 4 1             2 0
             4 0 0             3 4 1 2
                               4 1 2 3               1
          EsTecho()=TRUE     EsTecho()=TRUE    EsTecho()=TRUE

          -> 3 2 3          -> 5 2 3 4             0 1
             0 3 0             2 3 4 1             2 3 <-
             4 0 0             3 4 1 2
                               4 1 2 3               1
          EsTecho()=FALSE    EsTecho()=FALSE   EsTecho()=FALSE


4) [25 pts] Al ser contratado por SeaQuest para ayudar en la destrucción de  un 
habitat de tiburones asesinos usted se ve en  la obligación  de usar  el objeto 
TOceano, parte de cuya definición es la siguiente:

CONST
  TOc = 200;

TYPE
  TOceano = OBJECT
    PRIVATE
      _m: ARRAY[1..TOc,1..TOc] OF INTEGER; { matriz del océano }
      _n : WORD;                           { tamaño de _m[]    }
    PUBLIC
      PROCEDURE Init; { Constructor }
      PROCEDURE Clear;
      PROCEDURE Done; { Destructor  }

      ... etc ...

      FUNCTION  Gordura(i,j: INTEGER): INTEGER;
  END; { TOceano }

Su misión  es implementar  la operación  TOceano.Gordura(i,j) que  retorna el 
número de celdas con comida aledañas a la celda que está en  el océano  en la 
posición [i,j].  La cantida de comida de cada celda es  el número  almacenado 
en ella.

                     0  1  0  0  1      Gordura(1,5) = 1
                     1  2  0  0  1      Gordura(5,1) = 0
                     0  0  1  3  0      Gordura(4,4) = 8
                     0  0  0  1  3      Gordura(3,4) = 6
                     0  0  1  0  0      Gordura(2,5) = 4

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 1996
Derechos de autor reservados © 1996
[home] <> [/\]