You are on page 1of 6

ARQUITECTURA DE COMPUTADORAS II Tercera Prctica calificada Ciclo 2012-1 Profesor : Mag.

Sergio Salas Arriarn Duracin : 90 minutos Indicaciones: Puede utilizar copias y apuntes. Prohibido el intercambio de materiales.
NOMBRE:

Pregunta 1.- Analice el siguiente cdigo:


unsigned char secuencia[] = "45678903210389127654"; unsigned char i,j; unsigned char mn,save,aux; void main() { PORTB = 0; TRISB = 0; for (i = 0; i<20;i++) { mn = '9'+ 1; for (j=i;j<20;j++) { if(secuencia[j]<mn) {mn = secuencia[j]; save=j;} } aux = secuencia[i]; secuencia[i]=mn; secuencia[save]=aux; PORTB = save; } while(1); } Responda las siguientes preguntas:

a) Qu funcin cumple el programa? (1 punto) b) Cul es la funcin de la variable sabe en el programa? (1 punto) c) Cul es el orden que obtiene el vector secuencia al final del programa? (1 punto)

Pregunta 2.- Disee una funcin de nombre num_unos que retorne el nmero de 1s lgicos que contiene el parmetro de entrada a la funcin que es un valor numrico de 16 bits. En el ejemplo mostrado en la funcin main(), la variable num debera recibir el valor de 11. (5 puntos) char num_unos(unsigned int valor); void main() { char num; num = num_unos(0b1011101110110101); while(1); } char num_unos(unsigned int valor) { //Complete su cdigo aqu

}
Pregunta 3.- Disee una funcin que retorne el valor de la raz cuadrada de un nmero de 16 bits. Si el parmetro de entrada a la funcin no tiene raz cuadrada exacta, la funcin deber retornar 0. En el ejemplo mostrado la funcin raz_cuadrada(900) debe retornar el valor de 30 a la variable num. (5 puntos)

#define NO_TIENE_RAIZ 0 unsigned int raiz_cuadrada(unsigned int num); unsigned int num; 2

void main() { num = raiz_cuadrada(900); while(1); } unsigned int raiz_cuadrada(unsigned int num) { //Complete su cdigo aqu

}
Pregunta 4: Analice el siguiente cdigo

char mensaje[] = "Hola EPIE FIA USMP"; typedef union{ struct{ char _byte_LSB; char _byte_MSB; }_bytes; int _dbyte; }tipo_byte; tipo_byte dato; char *p; void main() { p = &mensaje[0]; p+= 5; *p+=2; dato._bytes._byte_LSB = p[5]; dato._bytes._byte_MSB = *p; dato._dbyte++; while(1); }

Responda las siguientes preguntas: a) Al finalizar el programa Qu valor toma la variable dato._bytes._byte_LSB? (1 punto) b) Al finalizar el programa Qu valor toma la variable dato._bytes._byte_MSB? (1 punto) c) Al finalizar el programa Qu valor toma la variable p[10]? (1 punto)

d) Al finalizar el programa El contenido del vector mensaje ha cambiado? Justifique (1 punto)

Pregunta 5.- Analice el siguiente cdigo: #define ESTADO1 0 #define ESTADO2 1 #define ESTADO3 2 #define ESTADO4 3 char estado; char a,b; void main() { a = 3; b = 4; estado = ESTADO1; while(1) { switch(estado) { case ESTADO1: a++; estado = ESTADO2; break; case ESTADO2: b++; a--; estado = ESTADO4; break; case ESTADO3: b = a+2; a = b-1; if(a>5) estado = ESTADO4+ESTADO3; else estado = ESTADO4; break; case ESTADO4: b --; a = b; 4

estado = ESTADO3; break; default: a = b + 2; while(1); } } } Responda las siguientes preguntas: a) Al finalizar el programa Qu valor toma la variable b? b) Al finalizar el programa Qu valor toma la variable a? (1 punto) (1 punto)

c) Al finalizar el programa Qu valor toma la variable estado? (1 punto)

La molina, mayo del 2012.

You might also like