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
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
}
}