CC10A-Computación I – Control Nº 1 – jueves 2 de mayo de 2002

 

1.Al dividir dos números enteros positivos se puede obtener un resultado con una cantidad determinada de decimales. Al respecto, escriba un programa que siga el diálogo siguiente:

 

Ingrese el dividendo : 22

Ingrese el divisor : 7

Ingrese la cantidad de decimales del resultado : 20

Resultado = 3,14285714285714285714

 

Nota. Los dígitos de la parte decimal se obtienen sucesivamente del resultado de la división entera entre el resto o residuo anterior (multiplicado por 10) y el divisor. Para el ejemplo:

 

dividendo

22

10

30

20

60

40

50

10

30

20

60

40

50

10

30

20

60

40

50

10

30

cuociente

3

1

4

2

8

5

7

1

4

2

8

5

7

1

4

2

8

5

7

1

4

resto

1

3

2

6

4

5

1

3

2

6

4

5

1

3

2

6

4

5

1

3

2

 

//obtener datos: 1.0

C.print("Ingrese el dividendo : "); //0.2

int a = C.readInt();               //0.2

C.print("Ingrese el divisor : ");  //0.2

int a = C.readInt();               //0.1

C.print("Ingrese la cantidad de decimales del resultado : ");    //0.2

int n = C.readInt();               //0.1

 

//mostrar parte entera del cuociente: 1.0

C.print(                //0.2

      "Resultado = " + //0.1

      a/b +             //0.5

      ",");             //0.2

 

//repetir cantidad de decimales veces: 1.5

for(int i=1; i<=n; ++i)

{

      //calculo del nuevo dividendo: 1.5

      a = a % b * 10;

 

      //calculo y escritura de un digito decimal: 1.0

      C.print( a/b );

}

 

 


CC10A-Computación I – Control Nº 1 – jueves 2 de mayo de 2002

 

2.A) Escribir la función (método) static public String eliminar(String X,String Y,String Z) que elimine del string X todos los substrings comprendidos entre los delimitadores Y y Z. Por ejemplo, eliminar("a]b[cd]e[f]g[h","[","]") entrega "a]beg[h". En caso que el segundo delimitador sea un string vacío, se deben eliminar todos los caracteres a partir del primer delimitador. Por ejemplo, eliminar("ab--cd","--","") entrega "ab".                                              

//solución recursiva

//buscar y procesar delimitador inicial: 1.0

int i = X.indexOf(Y);        //0.5

if( i < 0 )                  //0.25

    return X;                //0.25

//detectar existencia de delimitador final: 1.0

if( Z.equals("") )           //0.5

    return X.substring(0,i); //0.5

//buscar y procesar delimitador final: 1.0

int j = X.indexOf(Z,i+1);    //0.5

if( j < 0 )                  //0.25                      

    return X;                //0.25

//eliminar substring (y entregar resultado): 1.0

return  X.substring(0,i) +                     //0.25

    eliminar(X.substring(j+Z.length()),Y,Z);   //0.75

 

//solucion no recursiva

while(true){

      //buscar y procesar delimitador inicial: 1.0

      int i = X.indexOf(Y);        //0.5

      if( i < 0 )                  //0.25

          return X;                //0.25

      //detectar existencia de delimitador final: 1.0

      if( Z.equals("") )           //0.5

          return X.substring(0,i); //0.5

      //buscar y procesar delimitador final: 1.0

      int j = X.indexOf(Z,i+1);    //0.5

      if( j < 0 )                  //0.25                      

          return X;                //0.25

      //eliminar substring: 1.0 (incluye while(true) con 0.25)

      X = X.substring(0,i) +       //0.25

    X.substring(j+Z.length());//0.5

}

 

B) (Ponderación: 1/3) Utilice la función eliminar en un programa que lea líneas y las escriba eliminando los substrings de la forma <caracteres> y  %caracteres. Por ejemplo,

"ana <maria>rios%gonzalez" debe escribirse "ana rios". El fin de los datos se indica con una línea que contiene sólo </html>.

 

//leer hasta fin de datos: 1.0

while(true){                        //0.25

    String L = C.readLine();       //0.25

    if(L.equals("</html>")) break; //0.5

 

    //escribir lineas eliminando substrings: 1.0

    L = eliminar(L,"<",">"); //0.4

    L = eliminar(L,"%","");  //0.4

    C.println(L);            //0.2

}

 

 

CC10A-Computación I – Control Nº 1 – jueves 2 de mayo de 2002

3. La siguiente tabla muestra los métodos de una clase (Dia) que permite realizar operaciones con los días de una semana:

Encabezamiento

ejemplo

resultado

Dia(int x) // 1 £ x £ 7

Dia a = new Dia(1);

objeto que representa el día lunes

Dia mañana()

a.mañana()

objeto que representa el día de mañana

int comparar(Dia x)

a.comparar(b)

1 si los objetos son iguales (0 si distintos)

String nombre()

a.nombre()

“lunes” o “martes” o ... “domingo”

 

A)Utilice la clase anterior en un programa que muestre el calendario de un mes siguiendo el diálogo:

 

Ingrese cantidad de días del mes (1-31) : 31

Ingrese primer dia del mes (1-7) : 3

mi

ju

vi

sa

DO

lu

ma

mi

ju

vi

sa

DO

...

ju

vi

1

2

3

4

5

6

7

8

9

10

11

12

...

30

31

 

Nótese que:

-      los nombres de los días aparecen abreviados y separados por un espacio

-      los domingos se muestran en mayúsculas

-      los números de los días aparecen bajo la primera letra del nombre del día

 

//obtener datos: 0.5

C.print("ingrese cantidad de dias del mes (1-31) :");//0.1

int diasMes = C.readInt();                           //0.2

C.print("ingrese primer dia del mes (1-7) : ");            //0.1

int primerDia = C.readInt();                         //0.1

 

//escribir nombres de dias: 1.5

Dia dia = new Dia(primerDia);            //0.25

for(int i=1; i<=diasMes; ++i){           //0.25

    if( dia.comparar(mew Dia(7)) == 7 )  //0.25

        C.print("DO ");                  //0.25

    else

        C.print(dia.nombre().substring(0,2)+" ");//0.25

    dia = dia.manana();                  //0.25

}

//escribir numeros de dias: 1.0

C.println("");               //0.1

for(int i=1; i<=diasMes; ++i){//0.3

    C.print(i + " ");        //0.2

    if( i < 10 )             //0.2

        C.print(" ");        //0.2

}

 

B) Escriba la clase Dia, suponiendo la declaración: class Dia{ private int d; ...}

 

public Dia(int x){           //0.25

    d = x;                   //0.25

}

public Dia manana(){         //1.0

    if( d == 7 )             //0.2

        return new Dia(1);   //0.4

    else

        return new Dia(d+1); //0.4

}

public int comparar(Dia x){  //0.75

    if( d == x.d )           //0.25

        return 1;            //0.25     

    else               

        return 0;            //0.25

}

public String nombre(){      //1.0

    switch(d){               //0.3

    case 1: return "lunes";  //0.1  if(d==1) return "lunes";

    case 2: return "martes"; //0.1  ...

    case 3: return "miercoles";//0.1

    case 4: return "jueves"; //0.1

    case 5: return "viernes"; //0.1

    case 6: return "sabado"; //0.1

    case 7: return "domingo"; //0.1

    }

}