Vous êtes sur la page 1sur 5

IWI-131 CERTAMEN 1 15-Abril-2009 Duración 90 minutos.

Paralelo: ________________
C – 10:00
Rol UTFSM: _____________________ Nombre: ________________________________________
PREGUNTA 1: [30 ptos] (Cada expresión son 2 pts)
Evalúa la comprensión de conceptos básicos en programación (tipos de datos simples, constantes, variables y operadores).
NOTA
Indique con “C” las expresiones correctas y con “I” las incorrectas. En las expresiones “I”, ud. debe
explicar porqué son incorrectas, y en las expresiones “C” debe escribir el valor resultante de la expresión.
NOTA: Para cada expresión considere los valores definidos en la cabecera, y no los que resultan de las
expresiones anteriores. Recuerde que FALSO = 0 y VERDADERO = 1.

#include <stdio.h>
#include <math.h>

int main(){
const int Z=10;
const float Y=12.0;

int A=14, B=2, X;


float C=7.0, D=1.0;
char E='M',F='N';

EXPRESIÓN C/I EXPLICACIÓN / RESULTADO

A = 7, ya que A es una variable tipo int, de


A = C; C modo que el valor 7.0 se trunca para asignárselo
a A.
A = 0, ya que:
A = (B>Z) || !(C/D>0);
A = (B>Z) || !(C/D>0); C A = (2>10)|| !(7.0>0);
A = 0 || !(1);
A = 0 || 0;
A = 0
El operador % espera operandos int.
X = (Z + 3.2213) % 5; I (Z + 3.2213) arroja un resultado
float.

B = (Z*Z)%9+ Z=<3; I No existe el operador =< (debería ser <=)

A = 0, ya que:
A = 0 && (B=8/4);
A = 0 && 1
A = 0 && (B=8/4); C A = 0
Nota1: 0 && (cualquier cosa) -> 0
Nota2: El valor de verdad de una
asignación es 1.
X = 1, ya que:
X = (1 >= 3.2) && 1 || (!(7 < 7))
X = (1 >= 3.2) && 1 || (!(7 < 7)) C X = (0 && 1) || (!(0))
X = (0 && 1) || 1
X = 0 || 1
X = 1
X = -11, ya que:
X = (int)C/B++ - A;
X = (int)7.0/2 - 14;
X = (int) 3.5 – 14;
X = (int)C/B++ - A; C X = 3 – 14;
X = -11

Luego, se hace el incremento de B,


quedando B = 3.

Z = A; I Z es una constante, por lo tanto, su valor no


puede cambiar.

p = Z; I p no está declarada, por lo tanto, no se puede


utilizar.

1
KRF / RSC / NVM / JCV
IWI-131 CERTAMEN 1 15-Abril-2009 Duración 90 minutos. Paralelo: ________________
Rol UTFSM: _____________________ Nombre: ________________________________________
D= 6.000000, ya que:
D = 4 + 50 DIV 10 – 3
D = 4+2*25/10–sqrt(9); C D=4+5–3
D=6
Pero como D es una variable flotante:
D= 6.000000
A = 14, ya que:
A = A + !(E-F);
A = 14 + !(‘M’-‘N’);
A = 14 + !(-1);
A = 14 + !(1);
A = 14 + 0
A = 14
A = A + !(E-F); C !(‘M’-‘N’) es la resta de los valores
ASCII de cada carácter. No necesita
saber el valor exacto, basta hacer:
x – (x + 1) = -1

Tenga en cuenta que cualquier número,


distinto de cero, tiene valor de
verdad 1.

B = 0 || (A=Z/0); I La división por cero no existe.

A = 11, ya que:
A = Z*Z%9+Z;
A = Z*Z%9+Z; C A = 100%9+10;
A = 1+10;
A = 11
B = 18, ya que:
B = (3243 % Z)*(C-D);
B = (3243 % 10)*(7.0-1.0);
B = (3243 % Z)*(C-D); C B = 3*6.0;
B = 18.0
Pero como B es una variable entera, el valor se
trunca y queda B = 18
B = 7, ya que:
B = 3*B++;
B = 3*2;
B = 3*B++; C B = 6;
Luego, se debe hacer el incremento de
la variable B, con lo que queda:
B = 7

2
KRF / RSC / NVM / JCV
IWI-131 CERTAMEN 1 15-Abril-2009 Duración 90 minutos. Paralelo: ________________
Rol UTFSM: _____________________ Nombre: ________________________________________ C – 10:00
PREGUNTA 2: [30 ptos] (Cada valor de las tablas es 1 pto).
Evalúa la capacidad de reconocer e interpretar las estructuras fundamentales de la prog. estructurada.
Realice el ruteo de los siguientes programas [19 ptos]:

Debe haber solo un valor por fila. Un error, implica todo malo de ahí en adelante (la única excepción se hizo en los dos
primeros valores de la tabla del programa A: fíjese que lo correcto es que b debe tener valor antes, para poder hacer
luego a = b. Si esos valores no estaban en orden, se siguió corrigiendo).

A) PROGRAMA A: i j a b
#include <stdio.h>
1
int main() { 1
int i, j, a, b;
3
a = b = 1; 0
j = 3; i = 0;
2
while (i<j){ 2
if (a%2 != 0) {
b += a; 1
a = b; 2
};
i++; 3
}
}

B) PROGRAMA B: i a b c
#include <stdio.h>
1
int main() { 1
int i, a, b, c;
10
i = 1; a = 1; b=10; 1

do { 11
a = a*i; 2
b++;
i=i*2; 2
} 12
while (a!=2);
c = a*3; 4
} 6

C) Haga un diagrama de flujo equivalente al programa A [11 ptos]

3
KRF / RSC / NVM / JCV
IWI-131 CERTAMEN 1 15-Abril-2009 Duración 90 minutos. Paralelo: ________________ C – 10:00
Rol UTFSM: _____________________ Nombre: ________________________________________
PREGUNTA 3 Evalúa la capacidad de identificar y resolver a través de un programa, un problema sencillo de procesamiento de datos.
[40 ptos]
En el proceso de lixiviación, las planchas de cobre van engruesando gradualmente según la corriente eléctrica y el nivel
de concentrado de cobre que hay en las piscinas. Cada día se mide el ancho de X planchas de cobre elegidas al azar
(X cambia día a día). El jefe de producción necesita conocer el porcentaje de planchas cuyos anchos están bajo, dentro
o sobre el rango de ancho aceptable, y sus respectivos anchos promedio. El ancho aceptable de las planchas, es entre
0.95 y 1.05 del ancho K que debieran tener las planchas al día de las mediciones. Escriba un programa que entregue la
información que requiere el jefe de producción. Los datos son ingresados por teclado, y los resultados deben
entregarse por pantalla. Además, responda lo siguiente:
a) ¿Qué datos son conocidos? (1ptos)
Que el rango de ancho esperado está entre 0.95 y 1.05 del valor esperado al día de la toma de las muestras.
b) ¿Qué datos son desconocidos (deben ser ingresados por el usuario)? (3ptos)
X, Ancho esperado, ancho de cada muestra.
c) ¿Qué información debe entregar el programa? (2ptos)
Porcentaje de muestras bajo, dentro y sobre el rango esperado, ancho promedio de las planchas bajo, dentro,
y sobre el rango de niveles esperados.

#include <stdio.h>
#include <stdlib.h>

int main() {
// Declaración de variables
int x, num_bajo, num_sobre, num_dentro, i;
float K, ancho_plancha, lim_inferior, lim_superior,
porc_dentro, porc_bajo, porc_sobre, sum_ancho_dentro, sum_ancho_bajo,
sum_ancho_sobre, prom_dentro, prom_bajo, prom_sobre;

// Ingreso por teclado


printf("Ingrese la cantidad de planchas y el ancho esperado: ");
scanf("%d %f", &x, &K);

// Límites del rango aceptable


lim_inferior = 0.95*K;
lim_superior = 1.05*K;

// Inicializaciones
num_dentro = num_sobre = num_bajo = 0;
sum_ancho_dentro = sum_ancho_bajo = sum_ancho_sobre = 0;
// Inicializar i
i=1;

while (i <= x) { // iteración para todas las planchas


// Pedir y guardar ancho de plancha
printf("Ingrese ancho de la plancha %d: ", i+1);
scanf("%f", &ancho_plancha);
// Está dentro del rango esperado
if ((ancho_plancha >= lim_inferior) && (ancho_plancha <= lim_superior) ){
num_dentro++;
sum_ancho_dentro += ancho_plancha;
}
// Está bajo el rango esperado
if (ancho_plancha < lim_inferior) {
num_bajo++;
sum_ancho_bajo += ancho_plancha;
}
// Está sobre el rango esperado
if (ancho_plancha > lim_superior) {
num_sobre++;
sum_ancho_sobre += ancho_plancha;
};
// Incrementar i
i++;
}
// Cálculo de porcentajes respectivos
porc_dentro = (float)num_dentro/x*100;
porc_sobre = (float)num_sobre/x*100;
porc_bajo = (float)num_bajo/x*100;

4
KRF / RSC / NVM / JCV
IWI-131 CERTAMEN 1 15-Abril-2009 Duración 90 minutos. Paralelo: ________________
Rol UTFSM: _____________________ Nombre: ________________________________________

// Cálculo de promedios + prevenir la división por cero


if (num_dentro != 0)
prom_dentro = sum_ancho_dentro/num_dentro;
else prom_dentro = 0;
if (num_bajo != 0)
prom_bajo = sum_ancho_bajo/num_bajo;
else prom_bajo = 0;
if (num_sobre != 0)
prom_sobre = sum_ancho_sobre/num_sobre;
else prom_sobre = 0;

// Mostrar resultados
printf("\nResultados: \n");
printf("- Planchas dentro del rango esperado: %.1f%%\n", porc_dentro);
printf("- Ancho promedio: %.1f\n\n", prom_dentro);
printf("- Planchas bajo el rango esperado: %.1f%%\n", porc_bajo);
printf("- Ancho promedio: %.1f\n\n", prom_bajo);
printf("- Planchas sobre el rango esperado: %.1f%%\n", porc_sobre);
printf("- Ancho promedio: %.1f\n\n", prom_sobre);
system("pause");
return 0;
}

5
KRF / RSC / NVM / JCV

Vous aimerez peut-être aussi