Está en la página 1de 11

Ctedra de Informtica Electrnica

Escuela de Ingeniera Electrnica


Dpto. de Sistemas e Informtica Practica 1: Programacin en C
Parte A 1) Realizar un programa para intercambiar los contenidos de dos variables enteras. 2) Realizar un programa que declare las variables x, y, z, les asigne los valores 10, 20 y 30 e intercambie entre si sus valores de forma que el valor de x pasa a y, el de y pasa a z y el valor de z pasa a x (se pueden declarar variables auxiliares aunque se pide que se use el menor n mero posible!. 3) "scriba un programa en # que emule el comportamiento de las puertas l$gicas %&%, 'R, %'( y )'R. *os datos de entrada son tres variables enteras, que solo pueden valer ser 0 o 1. Realice un programa por puerta. 4) "scriba un programa que pida al usuario 10 n meros enteros y multiplique el primero por uno, el segundo por dos y as+ sucesivamente. ,ebe entregar como salida la suma de las multiplicaciones. 5) "scriba un programa en # que tenga una funci$n que reciba como argumento de que puerta l$gica quiere emular su comportamiento y se comporte de acuerdo a ese argumento. (raba-e con lo logrado en el e-ercicio 1. 6) "scriba un programa que lea por teclado diez n meros enteros distintos de cero y a continuaci$n lea una secuencia de valores enteros indicando si est.n entre los diez valores le+dos. #uando se lea el valor cero, el programa finalizar.. 7) /e ingresa por teclado la cantidad de agua ca+da, en mil+metros d+a a d+a durante un mes. /e pide determinar el d+a de mayor lluvia, el de menor y el promedio 8) Realizar un programa que le presente al usuario un men de opciones con las cuatro operaciones b.sicas (suma, resta, multiplicaci$n, divisi$n!. /eg n la operaci$n elegida ingresar. 2 n meros enteros, se realizar. la misma y se mostrar. por pantalla el resultado. "l usuario podr. traba-ar en el programa 0asta que indique lo contrario. Recordar que la divisi$n por cero es indeterminada. 9) *eer 20 n meros enteros positivos. 1ostrar el vector tal como fue ingresado y luego mostrar el vector ordenado en forma decreciente. 10) Realizar un programa que pida una temperatura en grados #elsius y la convierta a grados 2a0ren0eit mostrando en pantalla un mensa-e del tipo xxx grados #elsius son yyy grados 2a0ren0eit. Recuerde que3 (2 32! 4 5 = # 4 6 11) /e define (ipo#iudad como un struct para almacenar la posici$n de una ciudad en una representaci$n de dos dimensiones, es decir, en un plano. struct (ipo7unto8 double abscisa9

double ordenada9 : struct (ipo#iudad8 (ipo7unto situacion9 c0ar nombre;60<9 :9 7ara almacenar varias ciudades, se construir. un vector de (ipo#iudad. /e pide construir una funci$n que, a partir de un vector de (ipo#iudad y dado el nombre de una ciudad, reordene ascendentemente el vector atendiendo a la distancia eucl+dea del resto de las ciudades con respecto a la elegida. 7or e-emplo, si elegimos =>ranada=, la ciudad con dic0o nombre deber. ponerse como la primera componente del vector9 la segunda ser. la ciudad m.s cercana a =>ranada= y as+ sucesivamente. "l prototipo de la funci$n ser.3
void Reordenar (TipoCiudad ciudades[ ! int num"ciudades! const c#ar nom$re"ciudad"referencia[ %&

Recordemos que la distancia eucl+dea entre dos puntos se define como la ra+z cuadrada de la suma de los cuadrados de las diferencias de las abscisas y las ordenadas. %o pueden usarse vectores auxiliares. 12) Una red de sensores inal.mbrica intercambia mensa-es entre sus nodos y esta comunicaci$n tiene diferentes caracter+sticas. *a comunicaci$n puede ser broadcast o unicast , multi0op o single 0op, el mensa-e se puede enviar o puede fallar su env+o, y el mismo puede ser recibido o no. "scriba una funci$n en #, que utilice un campo de bits, para representar que tipo de caracter+sticas tiene la comunicaci$n y si se pudo establecer o no. Realice un programa que genere ? valores al azar de un byte, y analice que tipo de comunicaci$n se estableci$. 1uestre por pantalla como result$ cada comunicaci$n. /ignificado de cada bit3 ' $roadcast! ( unicast! ) multi#op! * single #op! + enviado! , no enviado! reci$ido . / no reci$ido.

13) "scribir la funci$n paridad"par que recibe un byte y retorna un byte. "l byte devuelto debe ser igual al byte recibido o igual al byte recibido con el bit mas significativo modificado de forma tal que la configuraci$n del byte entregado contenga un n mero par de unos. 14) >enerar una funci$n unsigned get0its(unsigned 1!int p! int n% que retorne ad-ustado a derec0a los n bits de x, m.s a la izquierda que la posici$n indicada por p. &sumir que el bit menos significativo de x, ocupa la posici$n cero 0 y que n y p siempre asumen valores positivos, por e-emplo3 get@its(x,A,3! deber. retornar los 3 bits que ocupen las posiciones A, 6 y ? dentro de x 15) >enerar una funci$n unsigned rig#tRot(unsigned 1!int n% que rote a derec0a los ultimos n bits de x. &sumir que el bit menos significativo de x, ocupa la posici$n cero y que n siempre asume valores positivos. 16) >enerar una funci$n unsigned set0its(unsigned 1! int p% que setee ad-ustado a izquierda los p bits menos significativos de x. "l resto de los bits deben ser cero &sumir que el bit menos significativo de x, ocupa la posici$n cero y que p siempre asume un valor positivo que debe ser menor o igual a B.

Informtica Electrnica Prctica 1 v. 2009

Pg 2 de 11

Parte B "n los siguientes e-ercicios debe asumirse3 que los C bits de una variable PORT_OUT representan sendas salidas digitales de un microcontrolador (1#D!. "l menos significativos es el bit0 y el mas significativo es el bitB. "stas salidas se consideran en los enunciados finalmente conectadas a sendos leds. an.logamente, que los C bits de una variable PORT_IN representan sendas entradas digitales. "stas entradas se consideran en los enunciados finalmente conectadas a sendos pulsadores. que tanto 7'R(EF% como 7'R(E'D( operan con l$gica positiva. "s decir, un G1H en un bit de la variable 7'R(E'D( ocasionar. un valor elIctrico GaltoH (activo, prender. el led! en la salida del microcontrolador9 un valor GaltoH (activo, pulsador accionado! en una entrada producir. un G1H en el correspondiente bit de la variable 7'R(EF%. >enerar entonces3 Dna funci$n unsigned c#ar 2eerEntradas(% de forma tal que devuelva el valor decimal correspondiente al numero binario representado por el estado de los bits de 7'R(EF%. Dna funci$n void SetearSalidas(unsigned c#ar 3or4% de forma tal que se establezca 7'R(E'D( en correspondencia con los bits de 3or4. Dna funci$n void Iniciali5ar(% que setee par.metros que fuesen necesarios para el programa. Im !rtante" *uego de probar los e-ercicios en forma simulada en un compilador, adaptarlos convenientemente teniendo en cuenta las #aria$les de%initi#as a &tili'ar y el ti ! de l(gi)a conforme el microcontrolador destino. "n la elecci$n de salidas y entradas tener en cuenta tambiIn la disponibilidad f+sica de las salidas y entradas y los componentes asociados (leds y sJitc0s! acorde al Kit de desarrollo a utilizar en la prueba del programa. 17) Realizar un programa que active (produzca valores GaltosH! en los bits de posici$n par de 7'R(E'D( y desactive los de posiciones impares. 18) Realizar un programa que s$lo active un bit de 7'R(E'D( y vaya rotando dic0o bit encendido indefinidamente. #ada rotaci$n debe producirse cada ( mseg, siendo ( el tiempo necesario para e-ecutar aproximadamente 300.000 instrucciones. "-ecutarlo variando en mas y menos el valor de 300.000. 19) Reelaborar el e-ercicio 12 mostrando la codificaci$n all+ definida mediante leds. 20) Reelaborar y simular el problema 3 utilizando leds y pulsadores. 21) 1odificar el programa 18 de forma tal que, si ning n bit de 7'R(EF% est. activo, funcione de la manera descripta, pero si cualquiera de ellos se encuentra en estado activo (e-.3 mientras un pulsador este accionado! el sentido de rotaci$n sea inverso. 22) 1odificar el problema anterior para que la rotaci$n se alterne con cada pulsada (sin necesidad de mantener accionado el pulsador!. #ontrolar si el programa responde adecuadamente a cada pulsada.

Informtica Electrnica Prctica 1 v. 2009

Pg 3 de 11

23) Realizar un programa que muestre inicialmente todos los leds asociados a 7'R(E'D( encendidos y a medida que se vayan pulsando y soltando cualquiera de los sJitc0 asociados a 7'R(EF% se vayan apagando leds de forma tal que los leds apagados vayan codificando en binario el n mero de pulsaciones realizadas con limite en 16. &l final de la cuenta, una nueva pulsada enciende todos los leds y as+ siguiendo. #ontrolar si el programa responde adecuadamente siempre. 24) "l uso de pulsadores genera un problema conocido como GR"@'("H, que se seguramente se manifest$ en la e-ecuci$n de los programas anteriores. /olucionarlo considerando que solo se considerar. como que un pulsador 0a sido pulsado si su valor asociado asume el valor cero en dos lecturas consecutivas distanciadas en un tiempo ((mseg!. &sumir ( como el tiempo necesario para e-ecutar aproximadamente 50.000 instrucciones. 25) Realizar un programa que mediante distintas configuraciones de leds activados indique cual 0a sido el ltimo sJitc0 pulsado. 26) Realizar un programa que genere un contador circular que muestre los distintos valores espaciados un tiempo ( (necesario para e-ecutar 300.000 instrucciones!. "l incremento del contador ( de a 1, de a 2 , de a 3 .....! se establece seg n cual 0aya sido el ultimo pulsador accionado conforme su posici$n en 7'R(EF%. Soluciones propuestas *!l&)i(n e+er)i)i! 2"
int main() { int x = 10; int y = 20; int z = 30; int w; w=y; y=x; x=z; z=w; return 0; }

*!l&)i(n e+er)i)i! 6"


#include <stdio.h int main() { int !leidos"10#$ !alor; %or (int i=0; i<10; i&&){ scan%(' (n )d'$*!alor); !leidos"i#=!alor; +rint% (',l !alor leido es- )d (n'$!alor); . while (!alor /= 0){ +rint% ('0n1rese un !alor (n'); scan%(' (n )d'$*!alor); %or (int 2=0; 2<10; 2&&){ i% (!alor==!leidos"2#) +rint% (' 3alor ocu+a el lu1ar - )d del !ector (n'$ 2 ); else continue; .

Informtica Electrnica Prctica 1 v. 2009

Pg 4 de 11

. . return 0;

*!l&)i(n e+er)i)i! 14"


unsi1ned 1et4its(unsi1ned x$ int +$ int n){ return (x (+)) * 5 (50 << n); . int main() { unsi1ned char xx; unsi1ned char x=0x46; xx = 1et4its(x$2$7); return 0; .

*!l&)i(n e+er)i)i! 15"


unsi1ned ri1ht8ot(unsi1ned x$int n){ %or(int i =0; i<n; i&&){ i% ((x * 1) == 0 ) 99el ultimo :it es cero x = x 1; else { 99el ultimo :it es 1 x = x 1; x = x ; 0x<0; . . return x;

. int main() { x = 0x46; xx= ri1ht8ot(x$7); return 0; }

*!l&)i(n e+er)i)i! 17"


9= >?@AB0?C D,C,8E@ =9 unsi1ned char F?8GH?AG; 99 esta !aria:le re+resenta las salidas 99+rototi+os !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); !oid main(!oid) { unsi1ned char >E@0JE=0:01010101; 99lo1ica +ositi!aK +osiciones +ares en 1 0nicializar(); >etear>alidas(>E@0JE); 99 y su+on1o Lue el +ro1rama +uede terminar . !oid 0nicializar(){ return; 99 no hace %alta inicializar nada . !oid >etear>alidas (unsi1ned char worI){

Informtica Electrnica Prctica 1 v. 2009

Pg 5 de 11

F?8GH?AG=worI; 99 asumo Lue todos los :its de worI tienen corres+ondencia con F?8GH?AG .

9= >?@AB0?C B?C>0J,8ECJ? AC M0B8?F8?B,>EJ?8 J,G,8M0CEJ? N L lo1ica ne1ati!a (un +ulsador accionado +roduce un O0P; un O0P en una salida +rende el led) L solo hay Q +ulsadores dis+oni:les L solo hay Q leds dis+oni:les =9 #include 'deri!ati!e.h' 9= esto incluye la declaraciRn de re1istros y +eri%Sricos corres+ondientes al MBA=9 9= +rototi+os =9 !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); !oid main(!oid) { unsi1ned char >E@0JE; inicializar(); >E@0JE=0:10101010; 99ahora es al re!Ss +or la lo1ica ne1ati!a >etear>alidas(>E@0JE); %or(;;) { HH8,>,GHTEGBUJ?D(); 99 +or si el watchdo1 estV acti!ado . 9= el +ro1rama no de:e terminar nunca =9 . !oid inicializar (){ FGWJJ=0xWW; 99el +uerto W estV conectado a los leds$ asX Lue lo de%ino de salida. . !oid >etear>alidas (unsi1ned char worI){ 9= >Rlo los :its 0$1$Q y 7 tienen leds conectados =9 FGWJHFGWJ0=worI * 0:00000001 ; 99 interesa +rimer :it de worI worI=worI 1; 99 des+lazo ... FGWJHFGWJ1=worI * 0:00000001; 99... y com+aro con lo mismo worI=worI 1; FGWJHFGWJQ=worI * 0:00000001; worI=worI 1; FGWJHFGWJ7=worI * 0:00000001; .

*!l&)i(n e+er)i)i! 21"

9= >?@AB0?C D,C,8E@ =9 unsi1ned char F?8GH0C; unsi1ned char F?8GH?AG; 9= +rototi+os =9 !oid inicializar(!oid); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas (!oid); !oid es+era(lon1 Giem+oJe,s+era); !oid main(!oid) { unsi1ned char ,CG8EJE; unsi1ned char >E@0JE; inicializar(); >E@0JE=0:00000001; >etear>alidas(>E@0JE); %or(;;) {

Informtica Electrnica Prctica 1 v. 2009

Pg 6 de 11

,CG8EJE=@eer,ntradas(); i%(,CG8EJE == 0){ >E@0JE= >E@0JE << 1 ; i%(>E@0JE==0)>E@0JE=1; . else { >E@0JE= >E@0JE 1 ; i%(>E@0JE==0)>E@0JE=12<; . >etear>alidas(>E@0JE); es+era(300000); . .

!oid inicializar (){ return; 99 nada Lue inicializar . !oid >etear>alidas (unsi1ned char worI){ F?8GH?AG= worI; . unsi1ned char @eer,ntradas (){ return F?8GH0C; . !oid es+era(lon1 Giem+oJe,s+era){ lon1 contador= Giem+oJe,s+era; while(KKcontador){ . . 9= >?@AB0?C B?C>0J,8ECJ? AC M0B8?F8?B,>EJ?8 J,G,8M0CEJ? N L lo1ica ne1ati!a (un +ulsador accionado +roduce un O0P; un O0P en una salida +rende el led) L solo hay Q +ulsadores dis+oni:les L solo hay Q leds dis+oni:les =9 #include <hide%.h 9= %or ,na:le0nterru+ts macro =9 #include 'deri!ati!e.h' 9= include +eri+heral declarations =9 9= +rototi+os =9 !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas (); !oid es+era(int Giem+oJe,s+era); !oid main(!oid) { unsi1ned char ,CG8EJE; unsi1ned char >E@0JE; inicializar(); >E@0JE=0:11111011; >etear>alidas(>E@0JE); %or(;;) { ,CG8EJE=@eer,ntradas(); i%(,CG8EJE == 17){ 99solo hay Q +ulsadores$ con lo1ica ne1ati!a es+era(300000); >E@0JE= >E@0JE << 1 ; >E@0JE=>E@0JE ; 1; i%(>E@0JE==23Y)>E@0JE=27Q; >etear>alidas(>E@0JE);

Informtica Electrnica Prctica 1 v. 2009

Pg 7 de 11

HH8,>,GHTEGBUJ?D(); . else { es+era(300000); >E@0JE= >E@0JE 1 ; >E@0JE=>E@0JE ; 12<; i%(>E@0JE==277)>E@0JE=2Q6; >etear>alidas(>E@0JE); HH8,>,GHTEGBUJ?D(); . HH8,>,GHTEGBUJ?D(); . 9= loo+ %ore!er =9 9= +lease maIe sure that you ne!er lea!e main =9 . !oid inicializar (){ FGWJJ=0xWW; 99+uerto W como salida 9= +uerto D como entrada =9 FGDJ = (FGDJ * (unsi1ned char)50x2E) ; (unsi1ned char)0x77; 99 FGDF, FA@@ ,CE4@, 8,D0>G,8 9= FGDF,- FGDF,Z=1$FGDF,7=1$FGDF,Q=1$FGDF,3=1$FGDF,2=1$FGDF,1=1$FGDF,0=1 =9 FGDF, ;= (unsi1ned char)0x6W; 9= FGDJJ- FGDJJZ=0$FGDJJ7=0$FGDJJQ=0$FGDJJ3=0$FGDJJ2=0$FGDJJ1=0$FGDJJ0=0 =9 FGDJJ *= (unsi1ned char)50x6W; . !oid >etear>alidas (unsi1ned char worI){ FGWJHFGWJ0=worI * 0:00000001 ; worI=worI 1; FGWJHFGWJ1=worI * 0:00000001; worI=worI 1; FGWJHFGWJQ=worI * 0:00000001; worI=worI 1; FGWJHFGWJ7=worI * 0:00000001; . unsi1ned char @eer,ntradas (){ unsi1ned char worI; worI=FGDJHFGDJ0=1; worI= worI & FGDJHFGDJ1=2; worI= worI & FGDJHFGDJ2=Q; worI= worI & FGDJHFGDJ3=<; return worI; . !oid es+era(int Giem+oJe,s+era){ int contador= Giem+oJe,s+era; while(KKcontador){ HH8,>,GHTEGBUJ?D(); 99+or si el watchdo1 estV acti!o . .

*!l&)i(n e+er)i)i! 23"

9= >?@AB0?C B?C>0J,8ECJ? AC M0B8?F8?B,>EJ?8 J,G,8M0CEJ? N L lo1ica ne1ati!a (un +ulsador accionado +roduce un O0P; un O0P en una salida +rende el led) L solo hay Q +ulsadores dis+oni:les L solo hay Q leds dis+oni:les =9 #include 'deri!ati!e.h' 9= include +eri+heral declarations =9 !oid inicializar(); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas ();

Informtica Electrnica Prctica 1 v. 2009

Pg

de 11

!oid main(!oid) { unsi1ned char ,CG8EJE; unsi1ned char >E@0JE; unsi1ned char BantFulsos=0; unsi1ned char >enal; inicializar(); >E@0JE=0:00000000; >etear>alidas(>E@0JE); %or(;;) { ,CG8EJE=@eer,ntradas(); i%(,CG8EJE == 17){ >enal=0; . else { i%(>enal==0){ BantFulsos&&; i%(BantFulsos 17)BantFulsos=0; >E@0JE=BantFulsos; >etear>alidas(>E@0JE); >enal=1; . . HH8,>,GHTEGBUJ?D(); . 9= loo+ %ore!er =9 9= +lease maIe sure that you ne!er lea!e main =9 . !oid inicializar (){ FGWJJ=0xWW; [40F,=0x00; FGDJ = (FGDJ * (unsi1ned char)50x2E) ; (unsi1ned char)0x77; 99 FGDF, FA@@ ,CE4@, 8,D0>G,8 Fareceria ser Lue si no le +ones un 1 no toma :ien la lectura 9= FGDF,- FGDF,Z=1$FGDF,7=1$FGDF,Q=1$FGDF,3=1$FGDF,2=1$FGDF,1=1$FGDF,0=1 =9 FGDF, ;= (unsi1ned char)0x6W; 9= FGDJJ- FGDJJZ=0$FGDJJ7=0$FGDJJQ=0$FGDJJ3=0$FGDJJ2=0$FGDJJ1=0$FGDJJ0=0 =9 FGDJJ *= (unsi1ned char)50x6W; . !oid >etear>alidas (unsi1ned char worI){ FGWJHFGWJ0=worI * 0:00000001 ; worI=worI 1; FGWJHFGWJ1=worI * 0:00000001; worI=worI 1; FGWJHFGWJQ=worI * 0:00000001; worI=worI 1; FGWJHFGWJ7=worI * 0:00000001; . unsi1ned char @eer,ntradas (){ unsi1ned char worI; worI=FGDJHFGDJ0=1; worI= worI & FGDJHFGDJ1=2; worI= worI & FGDJHFGDJ2=Q; worI= worI & FGDJHFGDJ3=<; return worI; .

*!l&)i(n e+er)i)i! 24"

9= >?@AB0?C D,C,8E@ a+licada al ,2ercicio 22=9 unsi1ned char F?8GH0C; unsi1ned char F?8GH?AG; 9= +rototi+os =9

Informtica Electrnica Prctica 1 v. 2009

Pg 9 de 11

!oid inicializar(!oid); !oid >etear>alidas(unsi1ned char worI); unsi1ned char @eer,ntradas (!oid); unsi1ned char @eerEntire:ote(!oid); !oid es+era(lon1 Giem+oJe,s+era); !oid main(!oid) { unsi1ned char >E@0JE; int direccion=0; int cam:io=0; inicializar(); >E@0JE=0:00000001; >etear>alidas(>E@0JE); %or(;;) { i%(@eerEntire:ote()/=0){ i%( cam:io==0){ cam:io=1; direccion=5direccion; . . else cam:io=0; 99rotacion i% (direccion==0) { >E@0JE= >E@0JE << 1 ; i%(>E@0JE==0)>E@0JE=1; . else { >E@0JE= >E@0JE 1 ; i%(>E@0JE==0)>E@0JE=12<; . >etear>alidas(>E@0JE); es+era(300000); . .

!oid inicializar (){ return; 99 nada Lue inicializar . !oid >etear>alidas (unsi1ned char worI){ F?8GH?AG= worI; . unsi1ned char @eer,ntradas (){ return F?8GH0C; . unsi1ned char @eerEntire:ote(){ unsi1ned char aux1$aux2; aux1=@eer,ntradas(); es+era(Y0000); aux2=@eer,ntradas(); i% (aux1==aux2) return aux2; else return aux1; . !oid es+era(lon1 Giem+oJe,s+era){ lon1 contador= Giem+oJe,s+era; while(KKcontador){ .

Informtica Electrnica Prctica 1 v. 2009

Pg 10 de 11

Informtica Electrnica Prctica 1 v. 2009

Pg 11 de 11

También podría gustarte