Você está na página 1de 3

Examen de pr

acticas de Introducci
on a la Programaci
on (IPR) y
Algoritmos y Estructuras de Datos I (AD1)
Grupo 1-B. Enero 2001

1. Dado el siguiente programa en Java, que calcula el seno de un angulo x a partir de


su valor en radianes y con un error residual de 0.0000001, se pide su modificaci
on
para que tabule dicho resultado para valores del angulo comprendidos entre 0 y
20 radianes, considerando incrementos de 1 radi
an. (Puntuaci
on: 3 puntos)
class Seno { //Calculo de la funcion seno
public static void main (String args[]) {
final double epsilon=0.0000001;
double s, t, x; int k;
x=Double.valueOf(args[0]).doubleValue();
System.out.println(
Angulo+\t+Seno);
t=x; s=x; k=1;
while (Math.abs(t)>epsilon) {
k++;
t=-t*((x*x)/(k*(k-1)));
s=s+t;
}
System.out.println(x + \t+s);
}
}

SOLUCION:
class Seno { //Calculo de la funcion seno
public static void main (String args[]) {
final double epsilon=0.0000001;
double s, t, x; int k;
System.out.println(
Angulo+\t+Seno);
for (x=0; x<21; x++) {
t=x; s=x; k=1;
while (Math.abs(t)>epsilon) {
k++;
t=-t*((x*x)/(k*(k-1)));
s=s+t;
}
System.out.println(x + \t+s);
}
}
}
1

2. Escribir en Java las instrucciones necesarias para declarar y crear un vector de 100
enteros. (Puntuaci
on: 1 punto).

SOLUCION:
int v[]= new int[100];
3. Dada la siguiente funci
on en Java:
// Suponemos v creado con 10 componentes
static int f (int v[], int s) {
for (int i=0;i<10;i++) {
s+=v[i];
v[i]+=2;
}
return (s);
}
Supongamos que se realiza la siguiente llamada:
(Puntuaci
on: 3 puntos).

int x=0; int y=f(v,x);

(a) Que hace esta funci


on?
(b) Si el vector v contiene los valores (0,1,2,3,4,5,6,7,8,9), Cual es el valor de x
despues de la llamada a f?.
(c) Si el vector v contiene los valores (0,1,2,3,4,5,6,7,8,9), Cual es su contenido
despues de la llamada a f?
(d) Justifica las dos respuestas anteriores.

SOLUCION:
(a) La funci
on devuelve como resultado el valor original del segundo argumento m
as la suma de los valores originales del vector v (primer argumento).
Adem
as, modifica los valores del vector incrementandolos en dos unidades.
(b) El valor de x contin
ua siendo 0.
(c) Despues de la llamada el vector v contiene los valores (2,3,4,5,6,7,8,9,10,11).
(d) El segundo par
ametro (x) se pasa por valor y el primero (v) por referencia;
es por esto que cuando termina la llamada, el valor del segundo par
ametro
no se ha modificado y sin embargo, el contenido del vector s.
4. Dado el siguiente procedimiento para calcular la matriz de una generaci
on en el
juego de la vida:
1.
2.
3.
4.
5.

static void calcMat(boolean m[][], boolean mnueva[][], int nfil, int ncol) {
int nvec;
for (int i=1; i<=nfil; i++)
for (int j=1; j<=ncol; j++) {
nvec=0;
2

6.
7.
8.
9.
10.
11.
12.
13.
14. }

for (int ii=i-1; ii<=i+1; ii++)


for (int jj=j-1; jj<=j+1; jj++)
if (m[ii][jj]) nvec++;
if (m[i][j]) nvec--;
if ((m[i][j]) && (nvec>=2) && (nvec<=3)) mnueva[i][j]=true;
else if (nvec==3) mnueva[i][j]=true;
else mnueva[i][j]=false;
}

Dise
nar una funci
on para calcular el n
umero de vecinos vivos de una celda dada
de una determinada matriz. La definicion de la funcion debe permitir sustituir las
lneas 5 a 9 por la siguiente instruccion: nvec=vecinos(m,i,j); (Puntuaci
on: 3
puntos)

SOLUCION:
static int vecinos(boolean m[][], int i, int j) {
int cont=0;
for (int ii=i-1; ii<=i+1; ii++)
for (int jj=j-1; jj<=j+1; jj++)
if (m[ii][jj]) cont++;
if (m[i][j]) cont--;
return cont;
}