Está en la página 1de 7

INGENIERA TCNICA INDUSTRIAL (ELECTRNICA) Programacin de Comp !

adore"
Examen de Septiembre de 2002
El examen tiene una duracin de 2 horas, consta de varias preguntas con respuestas cortas y tres ejercicios para desarrollar, el valor de cada pregunta figura al principio de su enunciado. Se recomienda contestar primero a las preguntas de las que se sepa claramente la respuesta. Los problemas deber n entregarse de la siguiente forma! Las preguntas cortas se entregar n en las mismas hojas. El ejercicio " se entregar en hojas separadas. El ejercicio 2 se entregar en hojas separadas. El ejercicio # se entregar en hojas separadas. Las notas se publicar n el d$a "% de Septiembre, la revisin del examen se reali&ar el d$a "' de Septiembre a las "" horas en el despacho 2.2.(.)*

#$ E%ercicio& (' p n!o")


Un mtodo muy original para calcular el nmero PI es el siguiente: se baja uno al parque ms cercano de casa y se traza un cculo, de radio r igual a un metro, con centro en el origen de coordenadas y un cuadrado, de lado l igual a dos metros, tambien centrado en el origen; tal como se muestra en la igura !" a continuaci#n se dirige uno a una tienda de juguetes y se compra un saco de canicas" $e %uelta al parque se empiezan a tirar canicas sobre el dibujo que se acaba de &acer pero &acindolo de orma aleatoria, es decir sin apuntar" 'i no &emos &ec&o trampas, la distribuci#n de canicas ser uni orme a lo largo del dibujo, con lo que la realaci#n entre el nmero de canicas que est()an dentro del crculo y el nmero de canicas totales *que estarn dentro del cuadrado+ %endr dada por la relaci#n entre las reas de dic&as iguras" ,omo las reas del crculo y del cuadrado son:

-cir

PI r/ . PI !/ . PI

-cua . l/ . // . 0

1a relaci#n entre el nmero de canicas que estn dentro del crculo y las totales ser:

2cir 2total

-cir -cua

PI 0

'iempre y cuando el nmero de canicas sea su icientemente ele%ado" 3n el ejemplo de la igura ! la relaci#n entre las canicas que estn dentro del cculo ly las totales es de 456, con lo que la apro7imaci#n de PI ser de 45680 . 9"!!!"

+igura "! Ejemplo de c lculo de ,-. ,omo el procedimiento para calcular PI es un poco costoso tanto en dinero como en tiempo *para una buena apro7imaci#n &ay que tirar al menos !::"::: canicas+ se nos ocurre simular dic&o proceso para calcular PI mediante un programa de ordenador" Para ello sustituimos el lanzamiento de canicas por la generaci#n de puntos aleatorios en dos dimensiones, de orma que estn dentro del cuadrado, es decir, para cada una de las coordenadas 7 e y del punto se generar un nmero aleatorio comprendido entre ;! y !, lo cual se puede &acer en , de la orma: 7 . /": 8 rand*+5 <-2$=>-?@!;

Aanto rand*+ como <-2$=>-? estn de inidos en stdlib"&, por lo que ser necesario incluir dic&o arc&i%o en el programa" Una %ez generado el punto aleatori, que estar siempre dentro del cuadrado, se &a de %eri icar si est dentro del crculo" Para ello basta con calcular la distancia del punto al origen y %er si es menor o mayor que el radio del crculo *uno en este caso+" 1a distancia del punto al origen se calculo camo: d . sqrt *787 B y8y+; 3n donde sqrt*+ es una unci#n que calcula la raiz cuadrada de su argumento y est declarada en mat&"&" '3 PI$3: 'imular el lanzamiento de un nmero determinado de canicas, este nmero ser solicitado al usuario, tambin se solicitar al usuario un paso, de manera que se impriman resultados parciales de la apro7imaci#n de PI cada p lanzamientos" 'i el usuario introduce nmeros negati%os dar un mensaje de error y terminar" Ejemplo de ejecucin: Introduzca el nmero de puntos aleatorios : !::::: Introduzca el paso de impresi#n : !:::: Paso Paso Paso Paso Paso Paso Paso Paso Paso Paso Falor !:::: /:::: 9:::: 0:::: E:::: C:::: 4:::: D:::: 6:::: !::::: PI.9"!!6C:: PI.9"!94D:: PI.9"!0:::: PI.9"!00!:: PI.9"!0900: PI.9"!96999 PI.9"!0!/:: PI.9"!0E/E: PI.9"!00699 PI.9"!094C:

inal de PI . 9"!094C:

SOLUCION: #include <stdlib.h> #include <stdio.h> #include <stdlib.h> #include <math.h>

int main() { float d,x,y, PI; int canicas, paso, canicas_dent o, i; do { p intf(!"nInt odu#ca el n$me o de puntos aleato ios!); scanf(!%d!,&canicas); if (canicas <'() p intf(!"n)ebe int oduci un n$me o positi*o!); +,hile (canicas <'(); do { p intf(!Int odu#ca el paso de imp esi-n!); scanf(!%d!,&paso); if (paso <' ( .. paso < canicas) p intf(!"n)ebe int oduci un n$me o positi*o e infe io al n$me o de puntos aleato ios!); +,hile (paso <' ( .. paso < canicas); fo (i'/; i<'canicas; i00) { x'1.(2 and()"345)_647 8/; y'1.(2 and()"345)_647 8/; d's9 t(x2x0y2y) if (d<'/) canicas_dent o00; if (i%paso''() { PI' canicas_dent o"i 2 :, p intf(!Paso %d PI ' %f !, i, PI); + + PI' canicas_dent o"i 2 :, p intf(!;alo final de PI ' %f !, PI); etu n((); +

($ E%ercicio& (( p n!o")
<ealizar un programa que lea los $2I, nombres y sueldos de !:: empleados y escriba los $2I y nombres de aquellos que tienen un sueldo superior a la media" $espus escribir el nombre y $2I de la persona que menos gana aumentndole el sueldo en un EG" SOLUCION: Hde ine >-?P3<' !:: typede struct I int $2I; c&ar nombreJ/:K; loat sueldo;L indi%iduo; loat leerdatosymedia*indi%iduo personalJK+I int i; loat media.:":; or *i.:; iM>-?P3<' ;iBB+I

print *N$ar scan *NGdN, print *N$ar scan *NGsN, print *N$ar scan *NG N, media.mediaB L

$2I de persona GdOnN, iB!+; PpersonalJiK"$2I+; nombre de persona GdOnN, iB!+; personalJiK"nombre+; sueldo de persona GdOnN, iB!+; PpersonalJiK"sueldo+; personalJiK"sueldo;

L media.media5>-?P3<'; %oid masquemedia * indi%iduo personalJK, int i; loat media+I

print *NQanan mas que la media OnN+; or *i.:; iM>-?P3<' ;iBB+ i *personalJiK"sueldo Rmedia+ print *NGd:GsOnN, personalJiK"$2I, personalJiK"nombre+; L %oid sueldominimo * indi%iduo personalJK+I int i; loat minimo.6"6e66; int posminimo; or *i.:; iM>-?P3<' ;iBB+ i *personalJiK"sueldo Mminimo+ I minimo.personalJiK"sueldo; posminimo.i; L print *N3l que menos ganaba era: Gd:GsOnN, personalJposminimoK"$2I, personalJposminimoK"nombre+; personalJiK"sueldo. personalJiK"sueldo 8!":E; 58 si se considera que &ay %arias personas que ganan el minimo: or *i.:; iM>-?P3<' ;iBB+ i *personalJiK"sueldo Mminimo+ I minimo.personalJiK"sueldo; L or *i.:; iM>-?P3<' ;iBB+ i *personalJiK"sueldo ..minimo+ I print *N3l que menos ganaba era: Gd:GsOnN, personalJposminimoK"$2I, personalJposminimoK"nombre+; personalJiK"sueldo. personalJiK"sueldo 8!":E; L 85 L main *+I indi%iduo personalJ>-?P3<'K; loat media; media.leerdatosymedia*personal+; masquemedia*personal,media+; sueldominimo*personal+; L

'$ E%ercicio& (' p n!o")

'e llama punto de silla de una matriz >, a un elemento mij mnimo en su ila y m7imo en su columna" 'i los elementos de la matriz son distintos, e7iste un solo punto de silla" 3scribir un programa en , que: 1ea una matriz > de 4 7 D; ,alcule si > tiene o no un punto de silla" 'i lo tiene escribir sus coordenadas y su %alor, sino escribir 2S AI323 PU2AS $3 'I11-" 3l clculo de este apartado se realizar en un subprograma, la escritura de resultados se e ectuar en el programa principal" 3jemplo: en la matriz / 7 9 siguiente: 0 9 ! / 4 E

Tay un punto de silla de %alor / en las coordenadas /,/ SOLUCION: Hde ine A<U3 ! Hde ine U-1'3 : Hde ine UI1-' / Hde ine ,S1U>2-' 9 %oid darmatriz *int mJKJ,S1U>2-'K+I int i,j; or *i.:; iMUI1-'; iBB+ or *j.:; jM,S1U>2-'; jBB+I print *Nelemento Gd,GdOnN,i,j+; scan *NGdN, PmJiKJjK+; L L int puntosilla *int mJKJ,S1U>2-'K, int int i,j, ma7; int esptosilla.A<U3;

, int c+I

ma7 .@!; or *i.:; iMUI1-'; iBB+ i * mJiKJcK Rma7+ I 55 print *N antes ma7 Gd GdOnN, i,c+; ma7.mJiKJcK; L or *j.:; jM,S1U>2-' PP esptosilla; jBB + i *mJ KJjK M. ma7 PP j V. c+ esptosilla.U-1'3; return *esptosilla+; L int recorrer*int mJKJ,S1U>2-'K+ I int i,j; int &ay.U-1'3; or *i.:; iMUI1-'; iBB+ or *j.:; jM,S1U>2-'; jBB+ i *puntosilla*m,i,j++ I print *NPuntos silla, %alor Gd, posicion Gd,GdOnN, mJiKJjK,i,j+; &ay.A<U3; L return*&ay+; L %oid rellenarmatriz *int mJKJ,S1U>2-'K+I int i,j; or *i.:; iMUI1-'; iBB+

L main *+ I int mJUI1-'KJ,S1U>2-'K,i,j,W; srandom*getpid*++; or *W.:; WM6;WBB+ I rellenarmatriz*m+; 55 darmatriz*m+; i *recorrer*m++I or *i.:; iMUI1-'; iBB+ I or *j.:; jM,S1U>2-'; jBB+ print *NGd N, mJiKJjK+; print *NOnN+; L L L

or *j.:; jM,S1U>2-'; jBB+ mJiKJjK.random*+G!:;

TEST (2 puntos)
1 Pregunta: (0,5 puntos) 3n las siguientes intrucciones int n . !!5!:5/"::/; print *XGdY,n+; a+ b+ c+ d+ >uestra en 2o compila 2o compila 2inguno de pantalla el %alor E porque n debe declarase como loat porque la ec&a ser un string los anteriores

SOLUCION: la opcion d 2 Pregunta: (0,5 puntos) 3scribir una SOLUCION: int alterar *int y+ I i *yM:+ return * @ y +; else return */8y+; L Pregunta: (0,5 puntos) Hinclude Mstdio"&R int modi icar *int a, int 8b+; %oid main *+ I unci#n Zalterar[ equi%alente a 7 . * y M :+ \ ;y : /8y;

int int int a . b .

a,b; 8pa . Pa; 8pb . Pb; E; 8pa;

print *Na. Gd b. Gd OnN, a, b+; a . modi icar *a, pa+; print *Na. Gd b. Gd OnN, a, b+; b . modi icar *a, pb+; print *Na. Gd b. Gd OnN, a, b+; L int modi icar *int a, int 8b+ I 8b . @a; return *aBa+; L SOLUCION: a.E a.!: a.!: b.E b.E b./:

! Pregunta: (0,5 puntos) ,ual es el resultado,en pantalla, de ejecutar la siguiente parametro que se le pasa es C uncion *int n+I static a.:; i *nR:+ I aBB; n.n@a; uncion*n+; print *Nn.GdOnN, n+; *NUI2OnN+; uncion cuando el

L else print L

SOLUCION: UI2 n.: n.9 n.E