Vous êtes sur la page 1sur 81

Universidad Tecnolgica Nacional Facultad Regional Buenos Aires

Departamento de Electrnica Ctedra: Informtica I - Plan 95A

GUIA DE TRABAJOS PRACTICOS

Ciclo Lectivo 2010

Universidad Tecnolgica Nacional Facultad Regional Bs. As. Indice

Departamento de Electrnica Tcnicas Digitales III

TRABAJOS PRCTICOS DE INFORMTICA I............................................................................................3 T.P. N 1. SISTEMAS DE NUMERACIN.........................................................................................................5 T.P. N 2. PROGRAMACIN .............................................................................................................................9 T.P. N 3. FUNCIONES.......................................................................................................................................20 T.P. N 4. PUNTEROS .........................................................................................................................................22 T.P. N 5. RECURSIVIDAD................................................................................................................................29 T.P. N 6. ARREGLOS.........................................................................................................................................32 T.P. N 7. ESTRUCTURAS UNIONES CAMPOS DE BITS............................................................................46 T.P. N 8. OPERADORES A NIVEL DE BITS Y PORTS...............................................................................54 T.P. N 9. STREAMS...........................................................................................................................................59 T.P. N 10. EJERCICIOS INTEGRADORES...................................................................................................76

Pgina 2 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Trabajos Prcticos de Informtica I


Introduccin y Rgimen de aprobacin La presente gua de Trabajos Prcticos tiene por objeto llevar a la prctica los contenidos vistos en las clases tericas. De este modo se espera una realimentacin entre la aplicacin y la lectura de los diferentes conceptos tericos que permita desarrollar en el alumno un enfoque metodolgico para resolver problemas sencillos de Ingeniera utilizando las diferentes herramientas de software indicadas por la ctedra, y resolviendo los algoritmos planteados en Lenguaje C. El grado de complejidad ir creciendo a travs de los diferentes ejercicios planteados para cada Unidad Temtica. Cada alumno deber presentar aquellos ejercicios que lleven la indicacin Entrega Obligatoria. La entrega de cada ejercicio se efectuar sin excepciones en las fechas estipuladas en el cronograma de clase que se entregar en la primera clase del ciclo lectivo. Los calendarios de entrega de los prcticos obligatorios estarn diseados para que todos los Trabajos Prcticos correspondientes a los contenidos que se incluyen en cada parcial sean revisados por los docentes auxiliares antes del examen. De este modo los alumnos tendrn una devolucin con las correcciones de los errores detectados, como forma de realimentacin necesaria para el examen parcial. La no entrega de un ejercicio en la fecha establecida equivale a considerar al alumno o al grupo Ausente en ese prctico. En consecuencia se considerar No Aprobado dicho prctico. De acuerdo con el reglamento vigente, la aprobacin de los Trabajos Prcticos requiere el 80% de los mismos Aprobados. En el caso de esta gua de Trabajos Prcticos se requiere la aprobacin del 80% de los estipulados de Entrega Obligatoria. Formato de presentacin

Los archivos fuentes deben tener en todos los casos los comentarios necesarios para clarificar su lectura. Deben llevar por cada subrutina / funcin, un encabezado con la descripcin de la operacin que realiza, los parmetros que espera como entrada, y en que forma y donde entrega sus resultados. Como encabezado del programa, debe haber un comentario que explique claramente que hace dicho programa, y las instrucciones detalladas (comandos) para su compilacin y linkeo.

IMPORTANTE: FORMA DE ENTREGA DE LOS TRABAJOS PRACTICOS


La entrega se realizar por e-mail a los ayudantes del curso. Pgina 3 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

La no entrega de la versin final completa del TP en la fecha estipulada por parte del alumno se considerar ausente.

Pgina 4 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 1.Sistemas de Numeracin


Ejercicio 1.1.
Entrega Obligatoria
Completar la grilla siguiente completando los nmeros equivalentes en las bases numricas que estn vacantes. Binario 1010000 120 3D 1101 96 565 10100100101 BF305A 766 -11100111 -152.71 5634.22809 Octal Decimal hexadecimal

Ejercicio 1.2.
Pasar los siguientes nmeros decimales a la base indicada con un error menor o igual al indicado Nmero Base 0,267 52,38 129,64 163,97 954,62 2 2 2 8 16 Error10< 0,0010 0,0001 0,1000 0,0001 0,0001

Ejercicio 1.3.
Realizar las siguientes sumas (los binarios estn en Ca2):

Pgina 5 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

10102 01012

10012 + 01102 110112 001102 F1E516 ABC116

11102 10102 100102 101102 323116 212316

101102 + 101012 73548 11238

Ejercicio 1.4.
Realizar las siguientes restas: 101102 11012 F91F16 010116 01378 100112 03348 17768 101012 101112 10608 110102

Ejercicio 1.5.
Entrega Obligatoria
Escribir en 8 bits, en complemento a 2. 57 241 13 163 154 38 214 121 243 157 194 123

10102 F116

30748 11002 5138 3716

Ejercicio 1.6.
Expresar en punto flotante simple precisin los nmeros siguientes expresados en base 10 165,625 -165,625 7564618909631 11659,84375

Pgina 6 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. 93,16794382512396283 -6257.234375 93,16794382512396284 0.005859375

Departamento de Electrnica Tcnicas Digitales III -9756.609375 0.0625

-0.005859375

-675.125

Ejercicio 1.7.
Expresar en base 10 los siguientes nmeros dados en formato de Punto Flotante Simple Precisin 35C1F 7A72C 93700D C2E45 ECF 39591 3ED 4B9DE19F

Ejercicio 1.8.
Expresar en Punto Flotante Doble Precisin los siguientes nmeros expresados en base 10 165,625 -165,625 7564618909631 11659,84375 0.0625 -675.125

93,16794382512396283 93,16794382512396284 -6257.234375 0.005859375

-9756.609375

-0.005859375

Ejercicio 1.9.
Expresar en base 10 los siguientes nmeros que estn en formato de punto flotante doble precisin 351CF 7A79C 937D12 C2ED5 ECFE2 39591 3ED95 4B94E19F

Ejercicio 1.10.
Indicar qu nmero decimal, representa los siguientes nmeros expresados como punto flotante (simple o doble precisin) 9EC1935F16 3EAC100016 CD94010316 A E8 F500016

Ejercicio 1.11.
Utilizando una palabra de 3 bits de ancho, listar todos los nmeros binarios signados y sus equivalentes decimales posibles representables en:

Pgina 7 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. a) Signo y magnitud b) Complemento a 1 c) Complemento a 2

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 1.12.
Utilizando una palabra de 4 bits de ancho, listar todos los nmeros binarios signados y sus equivalentes decimales posibles representables en: a) Signo y magnitud b) Complemento a 1 c) Complemento a 2

Ejercicio 1.13.
Entrega Obligatoria
A partir de los resultados de los dos ejercicios previos generalice el rango de valores (en decimal) que puede representarse en cualquier nmero x de bits dado, utilizando: a) Signo y magnitud b) Complemento a 1 c) Complemento a 2

Ejercicio 1.14.
Asuma un computador con un ancho de palabra de 32 bits. En esos 32 bits, deseamos representar el valor 2795. a) Como se representar el valor decimal del valor 2795? b) Si el computador soporta ASCII de 8 bits, cual ser la representacin de la cadena de caracteres 2795? c) Si el computador soporta BCD empaquetado, cual ser la representacin del nmero 2795?

Pgina 8 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 2. Programacin
Ejercicio 2.1.
Escribir un programa que imprima la leyenda Lenguaje C en la pantalla

Ejercicio 2.2.
Escribir un programa que calcule la superficie de un crculo cuyo radio se ingresa por teclado.

Ejercicio 2.3.
Modificar el programa anterior para verificar que el radio ingresado no sea nulo o negativo.

Ejercicio 2.4.
Escribir un programa que calcule la diferencia de dos nmeros enteros e informe si la misma es positiva o negativa.

Ejercicio 2.5.
Escribir un programa que calcule la diferencia de dos nmeros enteros e informe si la misma es positiva, negativa o cero.

Ejercicio 2.6.
Escribir un programa que reciba tres valores reales, correspondientes a las longitudes de los lados de un tringulo, y luego informe si el tringulo ingresado es equiltero, issceles o escaleno.

Ejercicio 2.7.
Modificar el programa anterior para rechazar lados de valor nulo o negativo

Ejercicio 2.8.
Modificar el programa anterior para comprobar que los nmeros ingresados conformen realmente un tringulo.

Pgina 9 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.9.
Escribir un programa que imprima la tabla de multiplicacin de cualquier nmero de 0 a 10 ingresado por teclado.

Ejercicio 2.10.
Escribir un programa que realice la sumatoria de los nmeros del 1 al 100.

Ejercicio 2.11.
Escribir un programa que, dado un nmero N, calcule e informe los siguientes valores: 1; 1+N; 1+2N;... ; 1+10N.

Ejercicio 2.12.
Entrega Obligatoria
Escribir un programa que realice la sumatoria de los nmeros consecutivos entre dos valores enteros ingresados por teclado.

Ejercicio 2.13.
Suponga que debe escribir un programa para calcular la resistencia total de un circuito en serie. En tal circuito la resistencia total es la suma de todos los valores individuales de las resistencias. Suponer que el circuito consiste en una cantidad de 2 resistores de 56 ohmios, 4 de 33 ohmios y 1 de 15 ohmios. Responda las siguientes preguntas: a) Cuntas salidas requiere este problema de programacin? b) Cuntos datos de entrada tiene el problema? c) Escriba un programa que lea de teclado el conjunto de valores de las resistencias (para cualquier circuito serie), y calcule la resistencia total del circuito, mostrando el resultado con 2 decimales por pantalla. d) Pruebe el algoritmo escrito para la parte c), usando la siguiente muestra de datos: 47K, 12K, 680R y , 2M2.
Nota: En los cuerpos de los resistores es comn expresar la unidad Ohm, , con la letra R, por una cuestin de tipografa. Por lo tanto, 680R es equivalente a 680.

Ejercicio 2.14.
Escribir un programa que calcule el promedio de 10 valores numricos ingresados por teclado.

Pgina 10 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.15.
Escriba un programa que reciba por teclado una serie de nmeros enteros y positivos e informe cual es par y cual es impar. El fin del ingreso se da al recibir un 0.

Ejercicio 2.16.
Modifique el programa anterior para comprobar que se ingresen nicamente nmeros. Si se ingresa un carcter, el programa debe presentar un mensaje de error informando la situacin, descartar el valor ingresado y continuar con su operacin normalmente.

Ejercicio 2.17.
Escribir un programa que calcule el promedio de una cantidad indeterminada de valores numricos positivos ingresados por teclado. El ingreso finaliza al ingresar el valor cero.

Ejercicio 2.18.
Escribir un programa que pida el ingreso por teclado de una serie de valores enteros y luego informe la cantidad de valores pares e impares ingresados. El programa finaliza cuando se ingresa 0.

Ejercicio 2.19.
Leer 250 nmeros desde el teclado, y determinar e informar: a) el promedio de cada 50 nmeros consecutivos b) el promedio total.

Ejercicio 2.20.
Se ingresan pares de valores numricos tales que el primero de ellos es un cdigo, que puede ser 1, 2, 3 4 y el segundo es un nmero real. Se pide determinar e informar: a) La sumatoria de los nmeros con cdigo 1. b) La productoria de los que llevan cdigo 2. El programa finaliza cuando se ingresa el par correspondiente al cdigo 4.

Pgina 11 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.21.
Ingresar pares de valores no nulos X e Y, que representan las coordenadas rectangulares de distintos puntos en el plano, y determinar e informar: a) Cantidad de puntos que pertenecen a cada cuadrante. b) Sumatoria de las distancias al origen de los puntos pertenecientes al primer cuadrante. El fin de datos se indica con X e Y iguales a cero.

Ejercicio 2.22.
Entrega Obligatoria
Ingresar dos valores que correspondan a los extremos izquierdo y derecho de un intervalo. Luego, dividir dicho intervalo en 4 subintervalos iguales, que se numerarn de 1 a 4. A continuacin, leer nmeros reales desde el teclado, y determinar la cantidad de valores pertenecientes a cada subintervalo. El fin de ingreso termina ingresando un valor igual al extremo derecho del intervalo.

Ejercicio 2.23.
Un tirador realiza 20 disparos a un blanco cuyo centro coincide con el origen de coordenadas. Leyendo la abscisa y la ordenada de cada impacto, deber calcularse el puntaje obtenido. El blanco tiene cuatro zonas que, de acuerdo a la distancia del impacto al origen (R ), son: ZONA 0 <=R <=1 1 < R <= 5 5 < R <= 10 R > 10 DENOMINACIN PUNTAJE centro medio externo falla 10 5 1 0

Ejercicio 2.24.
Escribir un programa que pida el nmero de legajo (entero de 8 cifras) y la nota de un examen de los alumnos de un curso. El fin de ingreso se indica con legajo igual a cero. El programa debe informar la cantidad de alumnos con cada calificacin conceptual, segn la siguiente tabla: Calificacin Conceptual Nota numrica Sobresaliente Muy bueno Bueno 10 89 67

Pgina 12 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. Regular Insuficiente

Departamento de Electrnica Tcnicas Digitales III 45 1a3

Ejercicio 2.25.
Escribir un programa que obtenga el factorial de un nmero ingresado por teclado.

Ejercicio 2.26.
Ingresar un nmero entero por teclado y determinar si es primo.

Ejercicio 2.27.
Ingresar un nmero entero por teclado y determinar si es perfecto. Un nmero es perfecto cuando la suma de todos sus factores, a excepcin de s mismo, da como resultado el nmero original.

Ejercicio 2.28.
Escribir un programa que pida el ingreso de un nmero entero positivo por teclado, y luego busque todos los nmeros perfectos que se encuentren entre 1 y el nmero ingresado.

Ejercicio 2.29.
Se dice que dos nmeros enteros a y b son amigos cuando la suma de los mltiplos de a (a excepcin de s mismo) da b y la suma de los divisores de b (tambin a excepcin de s mismo) da a. Escribir un programa que investigue las parejas de nmeros amigos existentes entre 1 y un nmero entero positivo ingresado por teclado.

Ejercicio 2.30.
Proponga optimizaciones para los programas anteriores.

Ejercicio 2.31.
Entrega Obligatoria
El valor aproximado del nmero de Euler, e , se puede obtener con la siguiente frmula: e = 1 + 1/1! + 1/2! + 1/3! + ! + 1/5! + ... Pgina 13 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir un programa que calcule el valor aproximado de e mediante un ciclo repetitivo que termine cuando la diferencia entre dos aproximaciones sucesivas difiera en menos de 10-9. Parametrizar adecuadamente el software desarrollado.

Ejercicio 2.32.
Escribir un programa que permita determinar el mximo y el mnimo de un conjunto de valores ingresados por teclado (sin almacenar la totalidad de los valores ledos). A tal efecto debe ingresarse primero la cantidad esperada de elementos a procesar, y luego el lote de datos de a uno por vez. Finalizado el ingreso de datos, mostrar el resultado por stdout con 3 decimales. Realizar todas las validaciones que considere necesarias.

Ejercicio 2.33.
Entrega Obligatoria
Escribir un programa que pruebe la efectividad de la funcin de biblioteca rand(). Comience por inicializar 10 contadores, como cuentacero, cuentauno, cuentados, ..., hasta cuentanueve a cero. Luego genere una gran cantidad de nmeros pseudoaleatorios entre 0 y 9. cada vez que ocurra un 0 se aumenta cuentacero, y as con todos los dgitos decimales. Por ltimo imprima el nmero de ceros, unos, etc. que ocurrieron y el porcentaje de cada ocurrencia.

Ejercicio 2.34.
Escribir un programa tal que ingresados los coeficientes A, B y C de una ecuacin cuadrtica,informe sus races, en caso de que las mismas sean imaginarias presentar una leyenda indicativa en la pantalla.

Ejercicio 2.35.
Realizar el ejercicio anterior para el caso de que se ingresen N ecuaciones. Proponga la condicin de finalizacin del programa que considere mas adecuada.

Ejercicio 2.36.
Modificar el ejercicio anterior para que el ingreso de ecuaciones finalice cuando 2 de ellas poseen races imaginarias.

Ejercicio 2.37.
Entrega Obligatoria
Modificar el ejercicio anterior para que el ingreso de ecuaciones finalice cuando 2 de ellas poseen races imaginarias consecutivas. Pgina 14 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.38.
Escribir un programa que invierta los dgitos de un nmero positivo entero. (Sugerencia: usar operadores mdulo, %, y divisin, /, para ir obteniendo los dgitos uno a uno).

Ejercicio 2.39.
Escribir un programa que lea por teclado la fecha de nacimiento de una persona y calcular su edad.

Ejercicio 2.40.
Escribir un algoritmo que convierta nmeros decimales a numeracin romana

Ejercicio 2.41.
Escribir un algoritmo que tome nmeros decimales y los muestre en pantalla en binario utilizando.

Ejercicio 2.42.
Escribir un algoritmo que tome nmeros decimales y los muestre en pantalla en octal.

Ejercicio 2.43.
Escribir un algoritmo que tome nmeros decimales y los muestre en pantalla en hexadecimal.

Ejercicio 2.44.
Escribir un programa que convierta nmeros decimales a una base n ingresada por teclado.

Ejercicio 2.45.
Escribir un programa que ingrese 40 valores numricos por teclado y luego informe: a) Sumatoria de los 40 valores ingresados. b) Sumatoria de los valores ingresados en orden par.

Pgina 15 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. c) Promedio de los valores positivos.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.46.
Escribir un programa que pida el nmero de legajo (entero de 8 cifras) y las calificaciones de los alumnos de un curso. El fin de ingreso se indica con legajo igual a cero. El programa debe informar: a) Cantidad de alumnos del curso b) Promedio de cada alumno c) Cantidad de alumnos aprobados (aprueban con promedio igual o mayor que 6) d) Legajo y calificaciones del alumno con mayor promedio.

Ejercicio 2.47.
Se tienen 20 sensores de temperatura, que registran 20 temperaturas distintas cada uno. Esas temperaturas se ingresan de a una por vez, primero las 20 del 1er sensor, luego las 20 del segundo, y as sucesivamente. a) Se pide determinar e informar: b) Temperatura promedio detectada por cada sensor. c) Mxima temperatura registrada por cada sensor. d) Nmero de sensor que registr la temperatura mxima.

Ejercicio 2.48.
Realizar un programa que permita el ingreso por teclado de los siguientes datos: Legajo Apellido y nombre Direccin Localidad Sueldo mensual Una vez ingresados estos juegos de datos, se desea informar el incremento del sueldo bsico de acuerdo con la siguiente tabla: Sueldo entre $500 y $800 $801 y $1000 Incremento 15% 8%

Pgina 16 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. $1001 y $2500 Ms de $2500 5% 2%

Departamento de Electrnica Tcnicas Digitales III

Se pide informar por pantalla el sueldo actual, legajo, apellido y nombre.

Ejercicio 2.49.
Ingresar un texto por teclado, y determinar: a) El porcentaje de vocales utilizadas. b) Cual es la vocal ms utilizada. c) Cual es la letra ms utilizada. El texto finaliza con un punto.

Ejercicio 2.50.
Ingresar por teclado un texto y determinar la cantidad de palabras y de letras que lo forman. Modificarlo para que pueda determinar adems la cantidad de oraciones y de prrafos.

Ejercicio 2.51.
Para una empresa de seguros que posee, no mas de 50 vendedores, se ingresara a la computadora por el teclado tres datos de los vendedores, que corresponden a:

Numero de vendedor (entero de 3 digitos) NV Sueldo bsico (con 2 decimales) SB Porcentaje de descuentos legales (2 dgitos enteros). PDL

Se desea realizar el diagrama y la codificacin de un programa que realice lo siguiente: a) Ingrese los tres datos de cada vendedor por el teclado. Y que al ingresar un Nro. igual a cero, finalice el ingreso de datos, para el cual no deber ingresarse dato de sueldo, ni porcentaje (podrn ser menos de 50 vendedores en total). b) Imprima en la pantalla un titulo que se diga SUELDOS DEL MES y a continuacin una lista de sueldos a pagar en dos columnas ordenadas en forma creciente por numero de vendedor, donde figuren: su numero y su sueldo a cobrar (bsico menos descuentos). SN c) Imprima a continuacin los nmeros de los vendedores, tales que su sueldo a cobrar supere los $ 850., d) Si el promedio de sueldos bsicos (PR)es menor que $ 750, imprima la cantidad de vendedores con sueldo menor que $ 600. (CONT)

Pgina 17 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.52.
Se realizan sucesivas mediciones en un circuito elctrico, registrndose los diferentes valores de tensin y corriente. Se desea realizar un programa que permita obtener la siguiente informacin: a) El valor de resistencia para cada par de valores de tensin y corriente. (R=V/I; donde V es la tensin e I la corriente elctrica medidas) b) El valor promedio de la resistencia obtenida. c) El mximo y mnimo valor de resistencia calculado. d) Obtener la mxima diferencia porcentual entre el valor promedio calculado y el mximo valor de resistencia. e) La diferencia entre el valor mximo y el mnimo. El ingreso de los valores de tensin y corriente concluye cuando ambos valores son iguales a cero, no debindose procesar esta informacin.

Ejercicio 2.53.
En una experiencia de laboratorio se dispone de 15 Voltmetros. En cada uno de ellos se efectu una cantidad variable de mediciones. Por cada medicin se ingresan la hora, tensin y nmero de voltmetro (estn codificados del 1 al 15). Se realizaron en total 500 mediciones Las mediciones de cada voltmetro ingresan mezcladas. Realizar, la codificacin para determinar e informar al final del proceso: a) La Tensin promedio registrada por cada voltmetro entre las 15Hs y las 20Hs inclusive. b) la tensin mnima registrada por cada voltmetro.c) indicar en cuantos voltmetros se registraron mas de 50 mediciones. ,

Ejercicio 2.54.
Para una encuesta, se solicitan los siguientes datos: Fecha de nacimiento (en tres variables, para da, mes y ao) Altura (en cm.) El programa debe comenzar pidiendo la fecha actual (da, mes y ao) y a continuacin los datos de cada encuestado. Luego de cada ingreso, el programa debe preguntar si se ingresan ms datos. a) Una vez terminado el ingreso de datos, informar: b) Cantidad de personas con altura entre 1,60 y 1,80 m

Pgina 18 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. c) Edad promedio d) Altura promedio de los mayores de 20 aos.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 2.55.
Entrega Obligatoria
a) Defina un tipo de dato "tipodato" a partir del tipo nativo "float" (usando typedef). b) Defina un tipo enumerativo "tescala" que contenga los smbolos CELSIUS y FAHRENHEIT. c) Escriba un fragmento de cdigo que lea del teclado un nmero representando un valor de temperatura en una de las dos escalas, y la convierta paramtricamente a la otra, mostrando el resultado por stdout.

Ejercicio 2.56.
Escribir un programa que permita al usuario adivinar un nmero generado aleatoriamente por la PC. Proponga modificaciones creativas a esta propuesta.

Ejercicio 2.57.
El cdigo secreto. La PC debe generar un cdigo de cuatro cifras (de 0 a 9) que se generan en forma aleatoria. Las cuatro cifras deben ser distintas. El usuario debe adivinar dicho nmero, proponiendo un cdigo de cuatro cifras por vez. Por cada intento, la PC debe informar cuantas cifras estn bien (cifra correcta en la posicin correcta) y cuantas regular (cifra correcta pero en posicin incorrecta). Con esta informacin, el usuario debe adivinar el cdigo elegido por la mquina en un mximo de 10 intentos.

Ejercicio 2.58.
Intente elaborar una estrategia que permita a la PC adivinar un cdigo propuesto por Ud. Ahora es la PC quien propone el nmero, y Ud. quien informa la cantidad de cifras con bien y regular que arriesga la mquina.

Ejercicio 2.59.
Entrega Obligatoria
Con los dos programas anteriores, cree un juego completo, donde se puedan jugar varios partidos contra la mquina.

Pgina 19 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 3. Funciones
Condiciones Generales para resolver el Trabajo Prctico N 3. Todos los ejercicios deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo para ser utilizadas en los futuros Trabajos Prcticos

Ejercicio 3.1.
Escribir una funcin que reciba dos nmeros reales como argumento y devuelva su MCD claculado mediante el algoritmo de Euclides.
Nota: En lenguaje moderno, el algoritmo se describe como sigue:

1. Dados dos segmentos AB y CD (con AB>CD), restamos CD de AB tantas veces como sea posible. Si no
hay residuo, entonces CD es la mxima medida comn.

2. Si se

obtiene un residuo EF, ste es menor que CD y podemos repetir el proceso: restamos EF tantas veces como sea posible de CD. Si al final no queda un residuo, EF es la medida comn. En caso contrario obtenemos un nuevo residuo GH menor a EF.

3. El proceso se repite hasta que en algn momento no se obtiene residuo. Entonces el ltimo residuo obtenido es la mayor medida comn.

Ejercicio 3.2.
Entrega Obligatoria
Escriba una funcin que reciba dos argumentos enteros x e y, y devuelva xy.

Ejercicio 3.3.
Escribir una funcin que simule el tiro de un dado.

Ejercicio 3.4.
Escribir una funcin que simule una mano de truco para la cantidad de jugadores indicada en su argumento (2, 3, 4 6 jugadores). Slo se pide repartir las cartas.

Ejercicio 3.5.

Pgina 20 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Realizar funciones que puedan hacer las cuatro operaciones bsicas en binario, hexadecimal y octal.

Ejercicio 3.6.
Intente integrar todas las funciones del tem anterior para lograr una calculadora.

Ejercicio 3.7.
Entrega Obligatoria
Escribir una funcin que calcule el factorial de un nmero natural pasado como parmetro, en forma iterativa. Realizar todas las validaciones que considere necesarias.

Ejercicio 3.8.
Entrega Obligatoria
a) Defina un tipo de dato "tipodato" a partir del tipo nativo "float" (usando typedef) b) Defina un tipo enumerativo "tescala" que contenga los smbolos CELSIUS y FAHRENHEIT. c) Escriba una funcin que reciba un valor de temperatura en precisin doble, y la escala de temperaturas de destino, y realice la conversin del valor.

Ejercicio 3.9.
Es necesario incluir el nombre de los parmetros formales en el prototipo de una funcin? Qu ventajas puede tener el hacerlo?

Pgina 21 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 4.Punteros y strings


Condiciones Generales para resolver el Trabajo Prctico N 4. Para el caso de los ejercicios que pidan nicamente escribir la funcin, stos deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo sumndose a las de los Trabajos Prcticos anteriores, y sern utilizadas en los prximos Trabajos Prcticos

Ejercicio 4.1.
Escriba una funcin que imprima, byte a byte, los bytes que constituyen una variable long cuya direccin recibe como argumento.
NOTA: Para apreciar mejor el resultado de este programa, se recomienda trabajar con formato hexadecimal

Ejercicio 4.2.
Escribir una funcin que determine si una a una secuencia de bytes recibida como parmetro est vaca o no. A tal fin, la asumir como una secuencia en ASCII terminada en 0 (a los fines de la evaluacin, este carcter en C es '\0'). El tipo de retorno debe ser bool, conforme al siguiente prototipo: bool emptyString (const char *) ;

Ejercicio 4.3.
Escribir una funcin que reciba como argumento puntero a char, la asuma como una secuencia en ASCII terminada en 0 (a los fines de la evaluacin, este carcter en C es '\0') y devuelva la secuencia invertida. void string_reverse (char *) ;

Ejercicio 4.4.
Entrega Obligatoria
Escribir una funcin que reciba como argumento puntero a una secuencia de bytes, la asuma como una secuencia en ASCII terminada en 0 (a los fines de la evaluacin, este carcter en C es '\0'), calcule su longitud y la retorne de acuerdo al siguiente prototipo:

Pgina 22 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. int my_strlen (const char *) ;

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 4.5.
Entrega Obligatoria
Escribir una funcin que reciba un puntero a caracter "s" y un puntero a caracter "t", y copie la s en t, terminando la cadena con el caracter '\0' (Funcin strcpy () de la biblioteca <string.h>). El prototipo de la funcin pedida es: void my_strcpy (char *t, const char *s);
Nota: Donde deben tomarse los recaudos para que el puntero destino posea la memoria necesaria?. Si no es en su funcin especifique donde y como se debe salvar esta situacin, mediante un comentario en el encabezado de su programa fuente.

Ejercicio 4.6.
Entrega Obligatoria
Escribir una funcin que reciba como argumentos dos punteros a char t y s, que apunta cada uno a una secuencia de bytes terminados en '/0', y realice la concatenacin de la secuencia s a continuacin de la secuencia t, terminando la secuencia de bytes resultante con el caracter '\0' (Funcin strcat() de la biblioteca <string.h>). El prototipo de la funcin pedida es: void my_strcat (char *t, const char *s) ;
Nota: Donde deben tomarse los recaudos para que el puntero destino posea la memoria necesaria?. Si no es en su funcin especifique donde y como se debe salvar esta situacin, mediante un comentario en el encabezado de su programa fuente.

Ejercicio 4.7.
Entrega Obligatoria
Escribir una funcin que reciba dos punteros a char como argumentos, realice una comparacin lexicogrfica de las secuencias de bytes finalizadas en '/0' apuntadas por cada uno, y retorne valores positivos, cero y negativos, segn corresponda. (Funcin strcmp () de la biblioteca <string.h>). El prototipo de la funcin pedida es: int my_strcmp (const char *t, const char *s) ;

Ejercicio 4.8.

Pgina 23 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Entrega Obligatoria
Escribir una funcin que dados dos punteros a caracteres y un nmero "n" entero recibidos como parmetros, compare lexicogrficamente los primeros "n" caracteres a partir de cada puntero, devolviendo un valor positivo, cero o negativo, segn corresponda. (Funcin strncmp() de la biblioteca <string.h>). El prototipo de la funcin pedida es: int my_strncmp (const char *s1, const char *s2, int n) ;

Ejercicio 4.9.
Entrega Obligatoria
Escribir una funcin que reciba como argumento dos punteros a caracter t y s, y una variable entera "n", y copie los primeros "n" caracteres de la cadena s sobre la cadena t, sin terminar la secuencia resultante con el caracter nulo. (Funcin strncpy () de la biblioteca <string.h>). El prototipo de la funcin pedida es: int my_strncpy (char *t, const char *s, int n) ;
Nota: Donde deben tomarse los recaudos para que el puntero destino posea la memoria necesaria?. Si no es en su funcin especifique donde y como se debe salvar esta situacin, mediante un comentario en el encabezado de su programa fuente.

Ejercicio 4.10.
Escribir una funcin que convierta a minsculas una cadena de caracteres recibida como argumento. Prototipo: void strlwr (char *);

Ejercicio 4.11.
Escribir una funcin que convierta a maysculas una cadena de caracteres recibida como argumento. Prototipo: void strupr(char *);

Ejercicio 4.12.
Entrega Obligatoria
Escribir una funcin que reciba una cadena de caracteres como argumento, y la convierta a minsculas o maysculas, de acuerdo a una opcin ingresada por el

Pgina 24 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

usuario a travs del parmetro "format", cuyo tipo es case, un tipo enumerativo compuesto por los tokens UPPERCASE y LOWERCASE: typedef enum { UPPERCASE, LOWERCASE } case ; Prototipo de la funcin pedida: void change_case (char * , case ) ;

Nota: Implemente esta funcin invocando a las dos funciones de los ejercicios previos.

Ejercicio 4.13.
Escribir una funcin que responda al siguiente prototipo: void replace (char *s, char nuevo, char viejo) ; y reemplace en la cadena "s" todas las apariciones del caracter "viejo" por el carcter "nuevo".

Ejercicio 4.14.
Entrega Obligatoria
Escribir una funcin que reciba como parmetro una cadena de caracteres que comienza con espacios en blanco, y los elimine desplazando los caracteres tiles hacia la izquierda. (operacin "left-trim"). Prototipo: void left_trim (char *) ;

Ejercicio 4.15.
Entrega Obligatoria
Escribir una funcin que reciba como parmetro una cadena de caracteres que finaliza con espacios en blanco, y los elimine desplazando los caracteres tiles hacia la izquierda. (operacin "right-trim"). Prototipo: void right_trim (char *) ;

Ejercicio 4.16.
Entrega Obligatoria
Escribir una funcin que reciba dos cadenas de caracteres denominadas "s1" y "s2" respectivamente, y verifique la existencia de la cadena s2 como subcadena integrante de la s1, retornando un token del tipo enumerativo bool por el nombre de la funcin (ver funcin strstr() de la biblioteca <string.h>). Prototipo: bool my_strstr (char *big, char *sub) ;

Pgina 25 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 4.17.
Escribir una funcin que reciba una cadena de caracteres y determine si es un palndromo (capica) o no, retornando el resultado por el nombre. Considerar el caso de longitudes de cadena par e impar. Prototipo: bool es_palindromo (const char *) ;

Ejercicio 4.18.
Escribir una funcin que calcule la partes entera y decimal de cualquier nmero real recibido como argumento, y las retorne al programa invocante. Como se resuelve devolver mas de un resultado?

Ejercicio 4.19.
a) Escribir una funcin que reciba como parmetros un puntero a una secuencia de doubles y la cantidad de elementos que componen la secuencia, y devuelva al mximo (o el mnimo) valor contenido en la misma. b) Cmo modificara la interfaz de la funcin, para pasarle al mdulo un token de tipo enumerativo, que indique cul de los dos extremos se desea calcular? Sugerencia: typedef enum { MAXIMO, MINIMO } t_extremo;

Ejercicio 4.20.
Entrega Obligatoria
Escribir una funcin que reciba un puntero a una secuencia de doubles y su longitud como parmetros, y retorne el promedio aritmtico de los valores contenidos en l.

Ejercicio 4.21.
Entrega Obligatoria
Idem para el desvo estndar.
Nota: reutilice el cdigo desarrollado en el ejercicio anterior.

Ejercicio 4.22.

Pgina 26 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir una funcin que convierta un nmero que representa una cantidad de segundos, a su equivalente en horas, minutos y segundos, retornando las partes por la interfaz.

Ejercicio 4.23.
Escribir una funcin que permita validar fechas recibidas como parmetro desde el programa invocante, mediante un puntero a caracter. Se consideran fechas aquellas comprendidas entre 01/01/1900 y 31/12/2100.

Ejercicio 4.24.
Escribir una funcin que recibe las coordenadas rectangulares de dos puntos del plano y calcule la distancia entre ellos.

Ejercicio 4.25.
Si un puntero a funcin es declarado como: double (*pf) (double); e inicializado como: pf = sin; /* apunta a sin() de la biblioteca math.h */

Por qu no puede ser declarado simplemente como: void * pf; ?

Ejercicio 4.26.
a)Escribir 3 funciones que, recibiendo una cadena de caracteres como argumento, permitan determinar si la cadena es vlida como direccin IP, como direccin de correo electrnico, y como nmero de tarjeta de crdito. b) Escribir una funcin denominada validate_string() que recibiendo una cadena de caracteres y una funcin de validacin (pasada por puntero), determine si la cadena es vlida conforme al criterio de validacin indicado, retornando en consecuencia true o false por su nombre.

Ejercicio 4.27.
Entrega Obligatoria
Escriba un juego de funciones que realice operaciones aritmticas sencillas (por ejemplo, suma, resta, etc) y a continuacin escriba un programa que las utilice, pero realizando la llamada a las funciones a travs de punteros a las mismas.

Pgina 27 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 4.28.
Analice las diferencias de pasar por referencia o por valor parmetros a una funcin mediante la observacin del stack de memoria. Qu se aloja en el stack cuando se pasan los valores por referencia? Qu se aloja en el stack cuando se pasan los valores por valor? Qu se aloja en el stack cuando se pasa una estructura de 10 datos por referencia? Qu se aloja en el stack cuando se pasa una estructura de 10 datos por referencia? Qu se aloja en el stack cuando se pasa un puntero a funcin? Qu se aloja en el stack cuando se pasa un string?

Ejercicio 4.29.
Cmo se almacenan los distintos datos en memoria? Explique como se alocan los distintos bytes que conforman las siguientes declaraciones de variables en la memoria de la PC char val1; int val2; float val3; double val4; int * p_val2 = &val2;

Pgina 28 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 5.Recursividad
Condiciones Generales para resolver el Trabajo Prctico N 5. Para el caso de los ejercicios que pidan nicamente escribir la funcin, stos deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo sumndose a las de los Trabajos Prcticos anteriores, y sern utilizadas en los prximos Trabajos Prcticos

Ejercicio 5.1.
Escribir una funcin recursiva que devuelva la cantidad de dgitos de un nmero entero.

Ejercicio 5.2.
Escriba una funcin recursiva que genere a serie de Fibonaci.

Ejercicio 5.3.
Entrega Obligatoria
Escribir una funcin recursiva que permita calcular el factorial de un nmero entero. Conviene realmente la utilizacin de la versin recursiva, por sobre la iterativa? Justificar debidamente la respuesta.

Ejercicio 5.4.
Escribir una funcin recursiva que sucesivas, siendo k un nmero natural. calcule wk mediante multiplicaciones

Ejercicio 5.5.
Entrega Obligatoria
Escribir una funcin recursiva que calcule z*v, mediante sumas sucesivas, con z, y v enteros.

Ejercicio 5.6.
Pgina 29 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir una funcin recursiva tal que dado un arreglo de nmeros reales permita calcular el mnimo elemento del vector y su posicin.

Ejercicio 5.7.
Escribir una funcin recursiva tal que dado un puntero a una cadena de nmeros reales permita calcular el promedio de sus elementos.

Ejercicio 5.8.
Escribir una funcin recursiva que dado un nmero entero positivo calcule su imagen especular. Por ejemplo: f(345)=543.

Ejercicio 5.9.
Escribir una funcin recursiva que imprima el contenido de las posiciones pares de una secuencia de nmeros enteros, recibida mediante un puntero al inicio de la misma.

Ejercicio 5.10.
Proponer una funcin recursiva que recibiendo como parmetros una cadena de dgitos hexadecimales y su longitud, devuelva el valor decimal que representa dicha cadena.

Ejercicio 5.11.
Entrega Obligatoria
Desarrolle una funcin recursiva que convierta nmeros de una base a otra. Las bases disponibles sern:

Binaria Octal Decimal Hexadecimal

Las mismas debern ser listadas en una enum. La funcin deber ser llamada por el main el cual tomara los datos de entrada de la linea de comandos, el formato sera el siguiente: $ baseConv baseDestino NumeroAConvertir

Pgina 30 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. La base destino se indicara con una letra B: Binario O: Octal D: Decimal H: Hexadecimal

Departamento de Electrnica Tcnicas Digitales III

La base del numero a convertir se indica con la misma letra al final del mismo. Por ejemplo: $ baseConv H 15D Convierte el numero decimal 15 a hexadecimal.

Pgina 31 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 6.Arreglos
Condiciones Generales para resolver el Trabajo Prctico N 6. Para el caso de los ejercicios que pidan nicamente escribir la funcin, stos deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo sumndose a las de los Trabajos Prcticos anteriores, y sern utilizadas en los prximos Trabajos Prcticos.

Ejercicio 6.1.
Entrega Obligatoria
Escriba una funcin que reciba un vector y la cantidad de elementos del mismo y lo ordene en forma ascendente

Ejercicio 6.2.
Escribir un programa que solicite valores enteros por teclado. Finalizar el ingreso con 0 y considerar 50 elementos como mximo. Una vez finalizado el ingreso debe invocar a una funcin que est en un archivo fuente separado, para que imprima un listado de aquellos valores que superen al promedio de todos los valores ingresados. Prototipo: void show_greater_average (char vector []);

Ejercicio 6.3.
Escribir una funcin que recibe un arreglo de 10 punteros a float, y un puntero a float (en ese orden), realice las siguientes acciones: a) sume los diez nmeros a los que hacen referencia los punteros del primer argumento y almacene el resultado en la direccin a la que hace referencia el segundo argumento. b) presente en pantalla en dos columnas la direccin y el contenido de todas las variables, de entrada y resultado.

Ejercicio 6.4.

Pgina 32 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir un programa que realice la carga de un vector de enteros. Los datos ingresan por teclado y se cargan en posiciones consecutivas del vector. A continuacin se debe realizar dos listados: desde el 1er elemento al ltimo, y desde el ltimo al 1ro. Finalizar el ingreso con un valor negativo y considerar 100 elementos como mximo.

Ejercicio 6.5.
Escribir un programa que ingrese valores valores pares, otro con los impares, el negativos. A continuacin imprimirlos elementos tiene. Considerar un mximo (cero). por teclado, y cree 4 vectores: uno con 3ro con los positivos y el ltimo con todos, comenzando por el que ms de 100 ingresos. Se sale ingresando 0

Ejercicio 6.6.
Repita el ejercicio anterior ordenando los vectores de positivos y pares en forma ascendente, y los dos restantes en forma descendente.

Ejercicio 6.7.
Entrega Obligatoria
Se desea ordenar un vector por los mtodos conocidos y para cada mtodo informar: Cantidad de comparaciones Cantidad de intercambios Se sugiere generar el vector en forma aleatoria y poder elegir la cantidad de elementos del mismo. Considerar los siguientes mtodos de ordenamiento: pivote, burbuja, burbuja mejorada (con deteccin de orden prematuro) y seleccin. Se pide escribir un archivo fuente en el que solo existan las cuatro funciones solicitadas, de modo que estas puedan invocarse desde cualquier otro programa que las requiera.

Ejercicio 6.8.
Escribir una funcin que reciba un arreglo de doubles y su longitud como parmetros, y retorne el promedio aritmtico de los valores contenidos en l.

Ejercicio 6.9.
Idem para el desvo estndar.

Pgina 33 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.


Nota: reutilice el cdigo desarrollado en el ejercicio anterior.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 6.10.
a) Defina un tipo enumerativo "tmes" con 12 smbolos que representen a cada uno de los meses del ao. b) Declare un arreglo de cadenas de caracteres con los nombres de los 12 meses del ao. c) Escriba una funcin que realice la traduccin de tokens del tipo enumerativo "tmes" a strings, retornando la cadena de caracteres correspondiente por la interfaz al mdulo invocante. d) El diccionario de datos, debera ser local a la funcin o una variable global?

Ejercicio 6.11.
Escribir una funcin que reciba un arreglo de N elementos de tipo entero, y su longitud, y que lo retorne cargado con N nmeros aleatorios .

Ejercicio 6.12.
Entrega Obligatoria
Muestrear una forma de onda es tomar valores instantneos de la misma para determinados valores de la variable independiente. Cuando se trata de digitalizar una forma de onda es necesario tomar al menos dos muestras por cada ciclo de la misma. (Este concepto es algo mas complejo y general y se tratar mas adelante en nuestra carrera). Es decir que debemos muestrear la forma de onda por lo menos al doble de su mxima frecuencia. Escribir una funcin que muestree una forma de onda determinada y almacene las N muestras en un vector de doubles recibido como parmetro, de acuerdo al siguiente prototipo: void sinu_samples ( double values [], int length ); En donde length es la longitud del arreglo. A efectos de no complicar nuestro anlisis ya que la forma de onda debe responder a la expresin: v(t) = Amp *seno (2 * PI * Frec * t + Fase) en donde: t: variable independiente (tiempo) Frec: frecuencia de la onda senoidal, en Hz. Pgina 34 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. Fase: Fase inicial en radianes. Amp: Amplitud pico de la onda senoidal.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 6.13.
Escribir una funcin que permita evaluar una funcin polinmica en un punto, a partir de un vector de coeficientes y su grado recibidos como parmetros. El prototipo de la funcin pedida es: double PolinomioX (double Coef[], int Grado, double Variable) ;

Ejercicio 6.14.
Escribir una funcin que, reutilizando el cdigo desarrollado en el ejercicio anterior, genere N muestras de una funcin polinmica de grado G, cuyos coeficientes y grado recibe como parmetros, y retorne por la interfaz las N muestras obtenidas sobre un vector de doubles. El prototipo de la funcin pedida es el siguiente: void SamplePoli ( double Muestras[], int Cantidad,

double Inicio, double Fin, double Coeficientes[], int Grado) ;

Ejercicio 6.15.
Para la funcin cuyo prototipo es: int print_pupil ( char Legajo [], char Apellido [], char 1erNombre [], char 2doNombre [], int Nota);

Pgina 35 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Se pide compilarla por separado e invocarla desde un programa que a partir de los datos que se obtienen desde teclado, se ocupe de emitir un listado ordenado por Nota. En caso de repetirse la nota, se tendr en cuenta el Apellido, y si este tambin se repite, considerar sucesivamente el 1er y 2do nombre. Se considera una divisin con 70 alumnos inscriptos mximo. El fin de ingreso se indica con legajo = 9999999.

Ejercicio 6.16.
Proponga una funcin para ordenar por abecedario teniendo en cuenta las particularidades del idioma espaol: tildes, diresis y la vieja y querida letra .

Ejercicio 6.17.
Suponga que el gerente de una PyME le pide que escriba un programa que calcule el salario semanal de un trabajador, de acuerdo con las siguientes condiciones: un empleado ingresar el nombre del trabajador, el nmero de horas que ha trabajado y el nivel salarial que tiene el trabajador. El programa deber calcular el impuesto de Hacienda (se le retiene un 20% del salario bruto) y el impuesto de seguridad social (un 8% del salario bruto). El programa deber mostrar en lneas separadas, la siguiente informacin: el nombre del trabajador, el salario bruto, la cantidad retenida para el pago del impuesto de Hacienda, la cantidad correspondiente al pago del impuesto de la seguridad social y el salario neto del trabajador.

Ejercicio 6.18.
Suponga que trabaja en un videoclub. El encargado quiere que le escriba un programa que calcule el recargo que tienen que pagar los clientes cuando se retrasan en la devolucin de pelculas de acuerdo con las siguientes normas: el alquiler de los videos cuesta 8 pesos al da, que se pagan en el momento de alquilarlos. El periodo de alquiler es de un da. El recargo por retraso es de 4 pesos al da y se abonar al devolver la pelcula. Cuando el cliente entregue la pelcula, un empleado introducir los siguientes datos: nombre del cliente, ttulo de la pelcula y nmero de das de retraso (que pueden ser cero). El programa deber mostrar la siguiente informacin en lneas separadas: el nombre del cliente, el ttulo de la pelcula y el recargo por retraso.

Ejercicio 6.19.
Escribir una funcin que inicialice un arreglo de caracteres con una cadena cualquiera y la imprima por pantalla.

Ejercicio 6.20.

Pgina 36 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir una funcin que inicialice arreglo de caracteres con una cadena cualquiera y la imprima en orden inverso por pantalla.

Ejercicio 6.21.
a) Definir un tipo enumerativo MAYUSCULAS y MINUSCULAS. tformato compuesto por los smbolos

b) Escribir un programa que lea de teclado una cadena de caracteres e invoque a una funcin externa que la convierta paramtricamente a minsculas o maysculas, de acuerdo a una opcin ingresada por el usuario a travs del teclado. Con el resultado de la funcin presentar por pantalla la cadena convertida. Usar tipos enumerativos para la decodificacin de la seleccin ingresada por el usuario.

Ejercicio 6.22.
Entrega Obligatoria
Escribir una funcin que reciba dos arreglos cada uno con un nmero en formato de cadena de caracteres, los convierta a nmeros de un tipo determinado y los compare, devolviendo un entero como resultado de la comparacin, -1, si el primero es el mayor de ambos, 0 si son iguales, y 1 si el primero de los argumentos es el menor. Para ello utilizar las funciones atoi() y atof() de la biblioteca estndar. Qu puede concluir del uso de estas funciones? Qu desventajas presentan?

Ejercicio 6.23.
Entrega Obligatoria
Escribir un programa que reciba un nmero flotante (float) y lo convierta a una cadena de caracteres, en forma inversa a la funcin atof(). La funcin retorna el resultado en un arreglo de caracteres recibido como segundo parmetro.

Ejercicio 6.24.
Entrega Obligatoria
Reformule la funcin anterior de acuerdo al siguiente prototipo. char * ftoa (float f); Evale la practicidad de trabajar con punteros y arreglos en ambos programas.

Ejercicio 6.25.

Pgina 37 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir una funcin que recibe un vector conteniendo la representacin ASCII de un nmero entero positivo en formato decimal, y devuelva su valor en base octal sobre el mismo vector. Sugerencia: utilizar la funcin de biblioteca sprintf ().

Ejercicio 6.26.
Idem para base hexadecimal.

Ejercicio 6.27.
Idem para base binaria.

Ejercicio 6.28.
Entrega Obligatoria
Escribir una funcin que reciba como argumento una cadena de caracteres, calcule su longitud y la devuelva en un entero positivo. (Implementacin de la funcin strlen () de la biblioteca <string.h>).

Ejercicio 6.29.
Entrega Obligatoria
Escribir una funcin que dada una cadena de caracteres y un arreglo de caracteres con espacio suficiente, copie la cadena en el arreglo, terminando la cadena con el caracter '\0' (implementacin de la funcin strcpy () de la biblioteca <string.h>). Esta funcin ya fue escrita utilizando punteros. Comparando implementaciones Cual de las dos soluciones resulta mas adecuada? ambas

Ejercicio 6.30.
Entrega Obligatoria
Escribir una funcin que reciba dos arreglos con cadenas de caracteres terminadas en '\0', realice una comparacin lexicogrfica de las mismas, devolviendo valores positivos, cero y negativos, segn corresponda (implementacin de la funcin strcmp () de la biblioteca <string.h>). Esta funcin ya fue escrita utilizando punteros. Comparando implementaciones Cual de las dos soluciones resulta mas adecuada? ambas

Ejercicio 6.31.

Pgina 38 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Entrega Obligatoria
Escribir una funcin que convierta a maysculas una cadena de caracteres recibida como argumento. (Funcin strlwr() ).

Ejercicio 6.32.
Entrega Obligatoria
Escribir una funcin que convierta a minsculas una cadena de caracteres recibida como argumento. (Funcin strupper() ).

Ejercicio 6.33.
Entrega Obligatoria
Escribir una funcin que recibe como argumentos dos cadenas de caracteres, y un entero positivo n. La funcin compara lexicogrficamente los primeros "n" caracteres, devolviendo un valor positivo, cero o negativo, segn corresponda. (Funcin strncmp () de la biblioteca <string.h>). Esta funcin ya fue escrita utilizando punteros. Comparando implementaciones Cual de las dos soluciones resulta mas adecuada? ambas

Ejercicio 6.34.
Entrega Obligatoria
Escribir un programa que dada una cadena de caracteres y un arreglo de caracteres con espacio suficiente, copie los primeros "n" caracteres de la cadena sobre el arreglo, sin terminar la cadena con el caracter nulo. (Funcin strncpy() de la biblioteca <string.h>). Esta funcin ya fue escrita utilizando punteros. Comparando implementaciones Cual de las dos soluciones resulta mas adecuada? ambas

Ejercicio 6.35.
Entrega Obligatoria
Escribir utilizando arreglos las funciones "left-trim" y "right-trim" escritas en la seccin correspondiente utilizando punteros. Elabore sus conclusiones acerca del mtodo que resulta mas conveniente de los dos.

Ejercicio 6.36.

Pgina 39 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Entrega Obligatoria
Escribir un programa que acepte un nmero seguido de un espacio y luego una letra. Si la letra que sigue al nmero es una f, el programa deber manejar el nmero introducido como una temperatura en grados Fahrenheit, convertirla en grados Celsius e imprimir un mensaje adecuado de salida. Si la letra que sigue al nmero es una c, el programa deber tratar al nmero como una temperatura en grados Celsius, convertirla a grados Fahrenheit, e imprimir un mensaje adecuado de salida. Si la letra no es ni una f ni una c, el programa deber imprimir un mensaje que diga que los datos son incorrectos y terminar. Utilice las funciones de conversin desarrolladas en la seccin Punteros de la presente Gua, utilizndolas como funciones externas al presente programa.

Ejercicio 6.37.
Escribir un programa que permita ingresar N nmeros enteros en un arreglo llamado "numeros", que calcule la suma total de los nmeros en el arreglo y que despliegue el conjunto de nmeros as como la suma de los mismos.

Ejercicio 6.38.
Escribir un programa que permita calcular el promedio aritmtico de una serie de valores ingresados por teclado almacenando la totalidad de los valores ledos). A tal efecto debe ingresarse primero la cantidad esperada de elementos a promediar, y luego el lote de datos de a uno por vez. Finalizado el ingreso de datos, mostrar el resultado por pantalla con 3 decimales. Realizar todas las validaciones que considere necesarias. Es necesario almacenar todos los datos del lote para poder calcular la media aritmtica?

Ejercicio 6.39.
Agregar al programa del ejercicio anterior en un archivo fuente separado, una funcin que calcule adems el desvo estndar del conjunto de datos ledos. Luego mostrar por pantalla el desvo estndar con 2 decimales. El desvo estndar de un lote muestral se calcula de acuerdo a la expresin:

Qu se puede concluir sobre el cdigo escrito para calcular la media aritmtica?

Ejercicio 6.40.
Pgina 40 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

En relacin a los dos ejercicios anteriores, se sabe que no es necesario almacenar la totalidad de los datos de un lote para realizar el clculo de la media aritmtica:

Siendo el desvo estndar del lote muestral calculado de acuerdo a la expresin:

Es necesario tener almacenado forzosamente todo el lote de datos, para poder calcular el desvo? Demuestre matemticamente que no es necesario tener almacenada la totalidad de los datos para obtener estos dos estimadores. Puede pensarse este problema como la lectura de una secuencia de valores, recalculando la media en cada iteracin (Actualizacin de la Media). Lo mismo sucede con el clculo del desvo estndar (problema conocido como Actualizacin del Desvo Estndar, y que es adems funcin de la Media actualizada).

Ejercicio 6.41.
Implementar el programa de forma tal que los datos a ingresar sean ledos como cadenas de caracteres y luego convertidos al tipo de dato deseado.

Ejercicio 6.42.
Escribir un programa que cargue en un vector de un tipo determinado (float, double o entero) una serie de valores ledos del teclado, y calcule el mximo y mnimo valor en l contenido, e informe adems sus respectivas posiciones dentro del arreglo.

Ejercicio 6.43.
Explicar la siguiente declaracin: char cadd[3][10] = { dia, mes, ao };

Ejercicio 6.44.
a) Defina un tipo enumerativo "tmes" con 12 smbolos que representen a cada uno de los meses del ao. b) Declare un arreglo de cadenas de caracteres con los nombres de los 12 meses del ao. c) Escriba un fragmento de cdigo que a partir del contenido de una variable de tipo tmes, imprima por pantalla la descripcin del mes (traduccin).

Pgina 41 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

d) Idem c) pero guardando sobre una cadena de caracteres la denominacin del mes, en formato: MM ( <denominacin> ) .
Sugerencia: utilizar la funcin de biblioteca sprintf ().

Ejercicio 6.45.
Modificar el ejercicio anterior para incluir un diccionario de meses, que permita presentar los nombres de los meses en espaol, ingls, y un segundo idioma extranjero. La decisin del idioma a utilizar ser tomada en tiempo de compilacin.
Sugerencia: utilizar compilacin adicional.

Ejercicio 6.46.
Idem para los das de la semana.

Ejercicio 6.47.
Entrega Obligatoria
Una matriz de nxm elementos es simtrica, si y solo si:

es una matriz cuadrada (m = n), y aij = aji para todo i, j =1,2,3,4,...,n.

donde aij representa el elemento que est en la fila i-sima y en la columna jsima de A. En base a lo anterior, escribir una funcin que reciba una matriz cuadrada de enteros y su dimensin, y determine si es una matriz simtrica retornando el resultado mediante una variable booleana. Comprobar su correcto funcionamiento contrastando el resultado del algoritmo con matlab.

Ejercicio 6.48.
Entrega Obligatoria
En lgebra Lineal, la traza de una matriz cuadrada de nxn se define como la suma de los elementos de su diagonal principal. Es decir, t (A)=a +a +a + ... + a . nn 11 22 33 Pgina 42 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

En base a lo anterior escribir una funcin que reciba una matriz cuadrada de doubles y su dimensin, y retorne el valor de su traza. Comprobar su correcto funcionamiento contrastando el resultado del algoritmo con matlab.

Ejercicio 6.49.
Entrega Obligatoria
Escribir una funcin que reciba una matriz cuadrada de doubles y su dimensin, y retorne el valor de su determinante. Comprobar su correcto funcionamiento contrastando el resultado del algoritmo con matlab.

Ejercicio 6.50.
Escribir una funcin que recibe como argumentos una matriz de enteros de N x M, y los enteros N y M, y obtenga la transpuesta de dicha matriz. Comprobar su correcto funcionamiento contrastando el resultado del algoritmo con matlab.

Ejercicio 6.51.
Entrega Obligatoria
Escribir una funcin que reciba dos matrices de dimensiones NxM y MxP, y cuatro enteros dando filas y columnas de cada matriz, y realice el producto de las dos matrices, devolviendo un puntero a la matriz resultado, y chequeando si las dimensiones de ambas matrices permiten efectuar el producto de las mismas. Comprobar su correcto funcionamiento contrastando el resultado del algoritmo con matlab.

Ejercicio 6.52.
Entrega Obligatoria
Escribir un programa que recibe como argumento un arreglo bidimensional de nmeros enteros, y dos enteros que definen sus dimensiones, y devuelva un entero que represente el mximo valor contenido en el mismo.

Ejercicio 6.53.

Pgina 43 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Entrega Obligatoria
Escriba el cdigo de una funcin que reciba una matriz de NxM y sus dimensiones (N y M) como argumentos. El programa deber calcular la derivada de primer orden en sentido horizontal primero, y vertical luego. En cada matriz de resultados parciales deber a posteriori buscar los valores mximos Comprobar su correcto funcionamiento contrastando el resultado del algoritmo con matlab.

Ejercicio 6.54.
Entrega Obligatoria
Explicar el significado de la siguiente declaracin: char ( * ( * ufa ()) []) ();

Ejercicio 6.55.
a)Escribir una funcin que, respondiendo al siguiente prototipo: status sort (void *[], size_t, ??????? ); ordene una tabla, conforme a un criterio de comparacin de registros pasado como puntero a funcin sobre el tercer argumento. b) Escribir el prototipo completo de la funcin. c) Escribir una posible funcin de comparacin, e invocar a la funcin (desarrollada en el punto a).

Ejercicio 6.56.
Entrega Obligatoria
a) Escribir una funcin que, respondiendo al siguiente prototipo: status print_plain_strings(FILE *, string[], size_t); imprima las cadenas de caracteres pasadas como segundo argumento, sobre un stream de texto previamente abierto pasado como primer argumento. b) Idem, pero imprimiendo el arreglo de cadenas en forma tabular con formato de pgina web (HTML). c) Idem, pero imprimiendo el arreglo de cadenas sobre un archivo XML. d) Si se define tres estrategias de impresin como plain, html y xml, correspondientes a las funciones de a), b) y c), escribir una funcin genrica: Pgina 44 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

status print_strings (FILE *, string[], size_t, status (*)(FILE *,string[],size_t)); que permita imprimir un arreglo de cadenas en mltiples formatos. e) Definir un tipo enumerativo fmt con los smbolos: FMT_PLAIN_TEXT, FMT_HTML y FMT_XML. f) Reescribir la funcin del punto d) si el nuevo prototipo es: status print_strings2(FILE *, string[], size_t, fmt); pero utilizando la construccin switch. g) Comparar las implementaciones de los puntos d) y f). h) Si se agregara en un futuro una nueva estrategia de impresin, cmo resultara el impacto en estas dos funciones? Cul es ms conveniente? i) Conformar un arreglo de punteros a funcin que contenga las mltiples estrategias de impresin. j) Escribir un programa invocable en lnea de rdenes que utilizando lo desarrollado en d), f) y g), imprima los argumentos en lnea de rdenes en formato y archivo indicados en los argumentos.

Pgina 45 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 7.Estructuras Uniones Campos de bits


Condiciones Generales para resolver el Trabajo Prctico N 7. Para el caso de los ejercicios que pidan nicamente escribir la funcin, stos deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo sumndose a las de los Trabajos Prcticos anteriores, y sern utilizadas en los prximos Trabajos Prcticos

Ejercicio 7.1.
Escriba una funcin que reciba dos valores enteros (dividendo y divisor) y que devuelva cociente y resto a travs de una estructura

Ejercicio 7.2.
Entrega Obligatoria
Escriba una funcin que reciba la hora con formato de 24 hs. y la devuelva en el formato AM/PM.

Ejercicio 7.3.
dem anterior, pero recibiendo la hora en formato AM/PM, y retornando en sistema de 24 hs.

Ejercicio 7.4.
Escriba una funcin que reciba un ngulo expresado en radianes y lo devuelva en formato sexagesimal.

Ejercicio 7.5.
Entrega Obligatoria
Escriba un programa que imprima, byte a byte, los bytes que constituyen una variable long. Utilice Uniones para su implementacin.
NOTA: Para apreciar mejor el resultado de este programa, se recomienda trabajar con formato hexadecimal

Pgina 46 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 7.6.
Se tiene una estructura definida de la siguiente forma: struct datos { long legajo; char apellido[21]; char nombre[16]; float sueldo; }

Ejercicio 7.7.
Escribir funciones que, mediante el uso de estructuras, realicen lo siguiente: a) Convertir coordenadas rectangulares en polares b) Convertir coordenadas polares en rectangulares c) Realizar suma, resta, producto, divisin, potencia y radicacin de nmeros complejos d) Agregar la posibilidad de expresar los ngulos en grados o radianes.

Ejercicio 7.8.
Entrega Obligatoria
Escribir un programa que cargue un vector de estructuras de tipo: struct datos { long legajo; char apellido[31]; char nombre[31]; }; El ingreso de datos se har en base a una funcin con el siguiente prototipo: void carga(struct datos *); Los datos se ingresan en un vector utilizando la funcin carga. Se considera un mximo de 100ingresos y la condicin de fin es legajo = 0. Escriba para esto Pgina 47 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

otra funcin, que reciba la estructuray devuelva 1 (uno) si se cumple la condicin de fin, o un 0 (cero) en caso contrario. El prototipo es: int fin(struct dato) Una vez generado el vector, se deber ordenarlo en forma creciente por apellido. Para ello, debe tambin utilizar una funcin para la cual Ud. debe proponer el prototipo. Finalmente, el vector ordenado debe ser guardado, registro por registro, en el archivo binario legajos.dbf, en el directorio raz de una disquetera. Al utilizar las funciones propuestas, Ud. notar que, al ingresar legajo=0 para salir del programa, la funcin carga() lo fuerza a ingresar un apellido y nombre que luego sern descartados. Sugiera una forma de solucionar esto, sin modificar el prototipo de la funcin carga().

Ejercicio 7.9.
Entrega Obligatoria
Definir una estructura de datos que permita representar el Tiempo, es decir horas, minutos y segundos. Desarrollar las funciones de manipulacin del Tiempo tales como a) crearTiempo: genera un estructura del tipo Tiempo inicializado en 0 horas, 0 minutos y 0 segundos. b) mostrarTiempo: imprime las horas, minutos y segundos en el siguiente formato hh:mm:ss

Ejercicio 7.10.
Entrega Obligatoria
Definir una estructura de datos que represente una fecha y el conjunto de funciones de manipulacin de una fecha siguiente: a) crearFecha: funcin que devuelve una fecha inicializada en alguna fecha particular, b) mostrarFecha: funcin que imprime una fecha que recibe, c) copiarFecha: funcin que recibe una fecha y devuelve la misma en otra variable, d) sigDia: funcin que aumenta una fecha en un da, e) diaAnt: funcin que disminuye una fecha en un da.

Ejercicio 7.11.

Pgina 48 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Construir una estructura de datos que represente a un automvil. Un automvil es una estructura que tiene los siguientes atributos:

numeroDominio: el nmero de patente, numeroMotor: nmero que trae grabado el motor, marca: marca del automvil modelo: el modelo de automvil tamaoMotor: nmero que indica la potencia del motor. color: el color de la carrocera

Escribir las siguientes funciones para manipular un automvil como el definido en el ejercicio anterior: a) crearAuto: genera una instancia de tipo Automvil con valores de inicializacin adecuados para cada uno de sus atributos. b) cambiarColor: modifica el valor del atributo color de un automvil que recibe c) mostrarAuto: imprime todos los atributos de un automvil en particular d) clonarAuto: es una funcin que reproduce un automvil en otra variable de tipo Automvil (funcin clone())

Ejercicio 7.12.
Escribir un programa que permita al usuario generar una lista de automviles, los muestre ordenados segn el nmero de dominio, permita modificar cualquiera de los atributos de un automvil, ofrezca la posibilidad de agregar un nuevo automvil a la lista, de eliminar un automvil a la lista, permita determinar cul es el automvil de mayor potencia presente en la lista.

Ejercicio 7.13.
Definir un tipo de dato basado en estructuras que permita almacenar la informacin de una tarjeta de crdito: N de tarjeta, nombre del titular, fecha de expiracin.

Ejercicio 7.14.
Entrega Obligatoria
En funcin de las estructuras ya definidas en ejercicios previos, definir un tipo de dato basado en estructuras anidadas que permita almacenar la siguiente informacin de un cliente:

Nombre y apellido.

Pgina 49 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.


Departamento de Electrnica Tcnicas Digitales III

ID de cliente. Fecha de alta. Fecha de ltima modificacin. Domicilio particular. Domicilio laboral. N de tarjeta de crdito.

Ejercicio 7.15.
Idem para estructuras referenciadas.

Ejercicio 7.16.
Escribir un programa que permita manejar informacin sobre Estudiantes. Se necesita conocer el padrn (identificador nico para cada Estudiante), cinco calificaciones en punto flotante, fecha de ingreso a la Facultad, Carrera en la que estn inscriptos. Las funciones para manipular un Estudiante son: a) crearEstudiante: genera un Estudiante con un nmero de padrn que recibe. b) agregarCalificacion: agrega una nota de las cinco notas que puede tener un estudiante. c) calcularPromedio: devuelve el promedio de las notas que pertenecen a un Estudiante.

Ejercicio 7.17.
Escribir un programa invocable por lnea de rdenes que obtenga la fecha actual del sistema y la presente por stdout para los siguientes formatos: a) AAAAMMDD b) AAAAMMDD HhmmSS c) HH:mm:SS del DD/MM/AAAA Ayuda: usar la biblioteca <time.h>

Ejercicio 7.18.
Modificar el ejercicio anterior para que el formato de salida pueda ser informado al programa por medio de comandos en lnea de rdenes (sysdate).

Pgina 50 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 7.19.
Entrega Obligatoria
Escribir un programa invocable en lnea de rdenes que reciba dos fechas, y presente por stdout la diferencia entre ellas, en una unidad de tiempo indicada tambin como argumento en lnea de rdenes (timediff).

Ejercicio 7.20.
Entrega Obligatoria
Definir el Tipo de Dato "Direccin IP", que permita trabajar con direcciones IP de equipos de red que utilicen el protocolo TCP/IP. El Tipo Abstracto Direccin IP puede ser definido como una coleccin finita y ordenada de cuatro elementos de tipo Octeto y un elemento de tipo Delimitador. El tipo Octeto representa al conjunto de nmeros enteros comprendidos en el intervalo [ 0 , 255 ]. El tipo Delimitador representa a un smbolo separador de elementos de tipo Octeto. Es nico dentro de toda la coleccin, y es utilizado solo a los efectos de su representacin textual. Las posibles operaciones sobre los datos son:

Crear una direccin IP. Destruir una direccin IP. Establecer un Octeto determinado de la coleccin. Obtener un Octeto determinado de la coleccin. Establecer el Delimitador de la coleccin. Obtener el Delimitador de la coleccin. Obtener una representacin textual a partir de la direccin IP, como una sarta de smbolos Ci , con: Ci = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }

En cuanto a la implementacin, se desea disponer de funciones que respondan a los siguientes prototipos: ip* void ip* crear_direccion_ip ( octeto o1, octeto o2, octeto o3, octeto o4 ); destruir_direccion_ip ( ip ); establecer_delimitador_ip ( ip , delimitador );

Pgina 51 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. delimitador octeto ip* string bool bool obtener_delimitador_ip ( ip ); obtener_octeto ( ip , int ); establecer_octeto_ip ( ip , octeto ); direccion_ip_a_string ( ip ); es_local_host ( ip ); es_broadcast ( ip );

Departamento de Electrnica Tcnicas Digitales III

Definir todos los tipos utilizados en la implementacin del Tipo de Dato Direccin IP. Encapsular toda la implementacin de este Tipo de Dato en una biblioteca cuyo header est contenido en un archivo denominado "ip.h", y cuyo cdigo objeto est contenido en un archivo "ip.obj". Escriba un cdigo anfitrin (scaffold) como para mostrar la utilizacin de la biblioteca. Escriba el archivo Makefile correspondiente, parametrizadas de compilacin y enlace. con las debidas opciones

Ejercicio 7.21.
Entrega Obligatoria
Definir un Tipo de Dato Complex que permita operar con nmeros complejos. Implementarlo en una unidad de biblioteca, que sea referenciada desde la funcin main() del archivo principal.

Ejercicio 7.22.
Entrega Obligatoria
Implementar un Tipo de Dato Vector que incorpore en forma segura y conveniente las funcionalidades de un arreglo esttico estndar de punteros a datos, utilizando memoria dinmica.

Ejercicio 7.23.
Se tienen la siguiente estructura: struct datos { long cod_art; int cantidad;

Pgina 52 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. char[26] descripcin; }; Escriba un programa que realice lo siguiente:

Departamento de Electrnica Tcnicas Digitales III

Cargue datos en memoria, correspondientes a dicha estructura (fin de datos: cod_art = 0) Ordene en forma creciente por cantidad, usando vector de punteros

Ejercicio 7.24.
Escribir una funcin que reciba los coeficientes de una funcin polinmica de 2do grado, expresada como y = a.x2 b.x c y devuelva las races a travs de una estructura. Considere tanto races reales como imaginarias.

Ejercicio 7.25.
Escribir una funcin o programa que pida el ingreso de los coeficientes de una funcin polinmica de orden n y, a continuacin, calcule sus races. Utilice el mtodo que prefiera, aunque se sugieren lo siguientes: biseccin, interpolacin lineal, o mtodo de Graeffe. Intente que los coeficientes ingresen como argumentos implementando una funcin de parmetros variables. de la funcin,

Ejercicio 7.26.
Escriba un programa que implemente la integracin de una funcin a travs del mtodo del trapecio. Contemple la posibilidad de modificar la precisin del resultado.

Ejercicio 7.27.
Dado un conjunto de pares ordenados correspondientes a una funcin, escriba una funcin en C que estime la recta que mejor se adecue a los pares ordenados.
Notas: se trata de una aplicacin elemental del mtodo de aproximacin de los cuadrados mnimos No se pide representacin grfica (aunque, si lo desea, puede intentarlo!). Slo se piden los coeficientes de la recta.

Ejercicio 7.28.
Dado un conjunto de pares ordenados correspondientes a una funcin, escriba una funcin en C que estime la parbola que mejor se adecue a los pares

ordenados
Notas: se trata de una aplicacin elemental del mtodo de aproximacin de los cuadrados mnimos No se pide representacin grfica (aunque, si lo desea, puede intentarlo!). Slo se piden los coeficientes de la parbola.

Pgina 53 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 8.Operadores a nivel de Bits y ports.


Condiciones Generales para resolver el Trabajo Prctico N 8. Para el caso de los ejercicios que pidan nicamente escribir la funcin, stos deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo sumndose a las de los Trabajos Prcticos anteriores, y sern utilizadas en los prximos Trabajos Prcticos. Por otra parte para aquellos ejercicios que pidan acceso a puertos de E/S recordar que el mismo se puede realizar mediante la invocacin previa a ioperm para su habilitacin, y una vez finalizados los acceso a los ports, invocar operm nuevamente nuevamente para su deshabilitacin. Por otra parte los programas involucrados deben ejecutarse con privilegios de root. Utilice el comando sudo para tal fin.

Ejercicio 8.1.
Escribir una funcin que reciba un carcter y lo devuelva con todos sus bits negados.

Ejercicio 8.2.
Entrega Obligatoria
Escribir una funcin que reciba un carcter y lo devuelva negando los bis que estn en orden par (los impares no se modifican).

Ejercicio 8.3.
Entrega Obligatoria
Escribir una funcin que reciba un carcter y lo devuelva con sus bits invertidos (El MSB pasa a ser el LSB y viceversa)

Ejercicio 8.4.
Escribir un programa que lea el port 0x300 y calcule el promedio de todos los valores ledos que presenten paridad par. El programa no debe detener en ningn momento la lectura del port, salvo al presionar la tecla Q, accin que finaliza el programa. Se sabe adems que el port actualiza sus datos cada 10 mseg. Duerma al proceso sin consumir CPU cada vez que no necesite acceder. Pgina 54 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 8.5.
Entrega Obligatoria
Utilice la placa de puerto paralelo para generar los siguientes resultados: a) Encienda todos los LEDs b) Apague todos los LEDs c) Encienda los LEDs correspondientes a bits impares d) Muestre por pantalla es estado de los switchs e) Genere un efecto barrido encendiendo secuencialmente un LED por vez de derecha a izquierda. f) Intente lo mismo con ms de un LED g) Mejore los cdigos de e) y f), eligiendo por teclado cuantos bits se encendern, en que direccin (de izquierda a derecha o a la inversa) y a qu velocidad. h) Encienda los LEDs correspondientes a los swiths en ON

Ejercicio 8.6.
Se dispone de un hardware externo que nos entrega la informacin recogida por l en el port 0x303. Escribir un programa que explore el puerto continuamente separando las muestras al menos 70 milisegundos y que se detenga cuando se presione la tecla Q. Cuando se detenga la exploracin se debe informar el valor mnimo, el valor mximo y el promedio de los valores ledos.

Ejercicio 8.7.
Entrega Obligatoria
Se pide escribir un programa que muestre en pantalla la frecuencia cardiaca de un paciente, expresada en pulsaciones/minuto. La seal cardiaca proveniente del medidor ingresa a travs del port 0x310, que toma el valor 0xFF cada vez que se produce un latido. Permanece en este estado durante 10 mseg, y vuelve a 0x00, en espera del siguiente latido. La frecuencia cardiaca debe calcularse como el promedio de las 8 ultimas mediciones, y actualizarse en pantalla cada 5 segundos. Se finaliza pulsando la tecla Q.

Ejercicio 8.8.
Se tiene una estructura definida de la siguiente forma:

Pgina 55 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. struct datos { long legajo; char apellido[21]; char nombre[16]; float sueldo; };

Departamento de Electrnica Tcnicas Digitales III

Escribir una funcin que enve por el puerto paralelo variables correspondientes al tipo struct datos

Ejercicio 8.9.
En una PC se reciben tramas desde otra PC remota conectada al puerto 0x297, con la siguiente informacin:

N datos de tipo real (doble precisin) Como ltimo elemento de cada trama se recibe un carcter ASCII con la operacin a realizar (S= sumatoria, P= promedio, M= mximo)

- La informacin proveniente del puerto 0x297 se recibe byte a byte y cada uno de estos bytes deber almacenarse en un vector en el orden en que llega, incluyendo la operacin a realizar. - Por el puerto 0x298, se recibe un byte con un 1 en el bit ms alto, los 7 bits restantes indican el total de los N datos a recibir en esa trama. Este byte indica cundo lleg una trama de datos y el byte permanecer sin alteracin hasta que no haya mas datos a recibir, cambiando automticamente el bit mas alto a cero al finalizar la recepcin del ultimo byte de la trama. - Finalizada la recepcin de los valores de cada trama, deber invocarse una funcin que realice la operacin determinada con ellos (suma, promedio u obtencin del mximo), a la cual se le pasara como parmetro el puntero a los datos. - El clculo de la sumatoria, el promedio y el mximo se implementar mediante funciones. - El resultado de la operacin (un long double) se deber reenviar por el puerto 0x299 mediante una funcin que utilice punteros. - Lo descrito anteriormente se realizar continuamente sin detener en ningn momento el proceso de recepcin y proceso de los datos hasta que se presione la tecla Q (mayscula). Notas:

No se permite el uso de variables globales Las funciones devuelven el valor del resultado (de la sumatoria, promedio o mximo).

Pgina 56 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

El vector de recepcin se deber dimensionar para recibir el total de los datos para el peor de los casos posibles junto con la operacin a realizar. Este vector se reutilizar cada vez que llegue una nueva partida de datos. Asimismo, el vector podr formar parte de un tipo de dato creado por el programador, para facilitar la resolucin del programa

Ejercicio 8.10.
Entrega Obligatoria
Para un programa que har uso del puerto paralelo de una PC se necesita disponer de funciones que permitan colocar a nivel lgico "1" "0" un bit determinado dentro de un byte a ser presentado al puerto paralelo. Se pide: a) Escribir una funcin llamada "Set()", que obedezca al siguiente prototipo: unsigned char Set( unsigned char Datos, int Linea); que reciba un byte sobre la variable "Datos" y el nmero de lnea que ser forzada a nivel lgico "1", devolviendo por el nombre el resultado de la operacin. Ejemplo: Si en "Datos" se recibe 1000 0001 y Linea=3, se debe retornar el byte 1000 1001 b) Dar un ejemplo de invocacin de la funcin. c) Idem a) pero para una funcin llamada "Clear()" que coloque a nivel lgico "0" la lnea indicada, y devuelva por el nombre el resultado de la operacin. Ejemplo: Si en "Datos" se recibe 111 1100 y lnea = 3, se debe devolver el byte 111 0 111. d) Dar un ejemplo de invocacin de la funcin. ACLARACION: La lnea 0 se corresponde con el bit menos significativo (LSB) del byte, y la linea 7 con el bit ms significativo (MSB) del byte.

Ejercicio 8.11.
Escribir una funcin de acuerdo al siguiente prototipo: int beep (int tiempo); tiempo es un valor medible en segundos, e indica durante el tiempo que debe dejarse sonar el parlante de la PC de acuerdo a como est programado. Debe setear los dos bits menos significativos del port 0x61 para activar el parlante (comienza a sonar el beep) y resetear el bit menos significativo para apagarlo (deja de sonar el beep).

Pgina 57 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Si la funcin activa exitosamente el parlante retorna 0, de otro modo un valor positivo.

Ejercicio 8.12.
Entrega Obligatoria
Escribir una funcin de acuerdo al siguiente prototipo: int nota (int octava, int nota, int tempo); Octava, va de 0 a 7 ( de acuerdo a las octavas de un piano). Nota es un valor correspondiente a una constante de enumeracin en donde se define un valor para cada nota de la primer columna de la tabla adjunta Tempo es la duracin en mseg. de la nota musical enviada al timer de sonido de la PC. En la siguiente tabla se tiene la frecuencia en Hertz, que corresponde a cada nota de cada octava.
DO DO# RE RE# MI FA FA# SOL SOL# LA LA# SI Octava 0 Octava 1 Octava 2 Octava 3 Octava 4 Octava 5 Octava 6 Octava 7 16,35 32,70 65,41 130,81 261,63 523,25 1046,50 2093,00 17,32 34,65 69,30 138,59 277,18 554,37 1108,74 2217,46 18,35 36,71 73,42 146,83 293,66 587,33 1174,66 2349,32 19,45 38,89 77,78 155,56 311,13 622,25 1244,51 2489,02 20,60 41,20 82,41 164,81 329,63 659,26 1328,51 2637,02 21,83 43,65 87,31 174,61 349,23 698,46 1396,91 2793,83 23,12 46,25 92,50 185,00 369,99 739,99 1479,98 2959,96 24,50 49,00 98,00 196,00 392,00 783,99 1567,98 3135,96 25,96 51,91 103,83 207,65 415,30 830,61 1661,22 3322,44 27,50 55,00 110,00 220,00 440,00 880,00 1760,00 3520,00 29,14 58,27 116,54 233,08 466,16 923,33 1864,66 3729,31 30,87 61,74 123,47 246,94 493,88 987,77 1975,53 3951,07

Tener en cuenta que la frmula de conversin de frecuencias viene dada por la siguiente expresin que contempla la frecuencia de oscilacin del cristal piezoelctrico conectado a la entrada del PIT (Programmable Interval Timer) cuenta_timer = 1.193.180 / frecuencia. El valor a programar para la nota es un valor de 16 bits que se escribir en el port 0x42, a razn de un byte a la vez comenzando por el byte menos significativo.

Pgina 58 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 9. Streams
Condiciones Generales para resolver el Trabajo Prctico N 9. Para el caso de los ejercicios que pidan nicamente escribir la funcin, stos deben estar escritos en un archivo fuente que contenga solo la funcin pedida. Las definiciones que se requieran deben efectuarse en un archivo header que tenga el mismo nombre del fuente C. Objetivo:Las funciones desarrolladas en esta seccin irn luego a libreras de cdigo sumndose a las de los Trabajos Prcticos anteriores, y sern utilizadas en los prximos Trabajos Prcticos

Ejercicio 9.1.
Escriba un programa que lea el archivo de texto A:\TTT.TXT y determine:

Cantidad total de palabras Cantidad de veces que aparece la palabra diodo

Ejercicio 9.2.
Escribir un programa que genere un archivo de texto con los caracteres que el operador ingrese por teclado. El programa termina cuando se ingresa el carcter @.

Ejercicio 9.3.
Escribir un programa que muestre por pantalla el archivo de texto generado en el problema anterior.

Ejercicio 9.4.
El archivo binario ~/info1/BIPOLAR.DAT contiene una rudimentaria base de datos de transistores bipolares. La base tiene registros de cinco campos:

Nombre del transistor: alfabtico 10 caracteres Tipo: alfabtico de tres caracteres

hFE: valores enteros entre 50 y 420 Potencia: valores reales entre 10mW y 12W Tensin de ruptura: valores enteros entre -130V y +130V

Pgina 59 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Se pide un programa que permita realizar consultas a la base de datos. Luego, el programa pedir el nombre del transistor, y toda la informacin relevante del mismo se informar por pantalla. La bsqueda debe hacerse en forma binaria, mediante una funcin con el siguiente prototipo: struct TR buscar (struct TR * , char *, int);
NOTA: struct TR es el tipo correspondiente a la estructura que UD. utilizar para organizar la informacin en el archivo. Si le asigna otro nombre tngase en cuenta en el prototipo.

Ejercicio 9.5.
Escriba un programa que permita copiar archivos de cualquier tipo.

Ejercicio 9.6.
Escribir un programa que lea una cadena de caracteres ingresada por teclado y la imprima por pantalla. Para ello utilizar las funciones de biblioteca scanf() con formato "%s", gets() y fgets(). Comparar los resultados y explicar la conveniencia de utilizar cada una de ellas, y bajo qu circunstancias.

Ejercicio 9.7.
Construir los siguientes dos (2) programas: Encoder: convertir un texto compuesto por smbolos del alfabeto ASCII (caracteres) a otro idntico en contenidos pero compuesto por smbolos del alfabeto ISO-8859-1.

Decoder: convertir un texto compuesto por smbolos del alfabeto ISO-8859-1 a otro idntico en contenidos pero compuesto por smbolos (caracteres) del alfabeto ASCII.

Pgina 60 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

El programa Encoder, materializado sobre un archivo ejecutable denominado "ascii2iso" deber ser invocado de la siguiente forma: cat textoASCII.txt | ascii2iso>textoISO.txt El programa Decoder, materializado sobre un archivo ejecutable denominado "iso2ascii" deber ser invocado de la siguiente forma: cat textoISO.txt | iso2ascii>textoASCII.txt en donde "textoISO.txt" y "textoSCII.txt" son dos archivos de texto usados como ejemplo, conteniendo smbolos de los alfabetos ISO-8859-1 y ASCII, respectivamente.

Ejercicio 9.8.
En un archivo CSV (coma separated value) se recibe un listado con los clientes que han comprado algn producto a una empresa. En particular los campos 4 y 5 indican el nmero de sucursal y el cdigo de cliente, respectivamente. El cdigo de cliente puede ser: una direccin IP. una direccin de correo electrnico. un nmero de tarjeta de crdito. a) Escribir una funcin que reciba sobre un argumento de tipo char * el cdigo de cliente, y aunque sea rudimentariamente, los clasifique de acuerdo a las tres posibles categoras: codigo_cliente_t clasificar_campo (char *); b) Escribir una funcin que, recibiendo el cdigo de cliente como string y su tipo, permita formatearlo convenientemente para su impresin. c) Escribir una funcin que, recibiendo el cdigo de cliente, lo clasifique internamente y retorne por el nombre un puntero a la funcin de impresin correspondiente. Utilizar un arreglo global de punteros a funciones.

Pgina 61 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 9.9.
Entrega Obligatoria
Escribir un programa que utilizando las funciones ya desarrolladas e incluidas en una librera, convierta un archivo de texto a minsculas o maysculas, dependiendo de la seleccin hecha por el usuario: Uso: chgcase <archivo origen> <archivo destino> <formato> en donde el formato puede ser: -u : a mayusculas (UUPERCASE) -l : a minusculas (LOWERCASE)

Ejercicio 9.10.
Entrega Obligatoria
Escribir un programa de comando en lnea de rdenes que cuente la cantidad de lneas de un archivo de texto. Consultar la documentacin del comando wc de Linux en las man pages, en particular para la opcin: wc -l .

Ejercicio 9.11.
Escribir una funcin permita imprimir datos directamente sobre la impresora, a travs del flujo stdprn.

Ejercicio 9.12.
Escribir un programa que permita numerar las lneas de un archivo de texto: Uso: numerator <numero maximo> <archivo de salida>

Ejercicio 9.13.
Se desea disponer de una funcin para depurar un programa, volcando la informacin sobre un archivo de texto histrico (log file), de acuerdo al siguiente prototipo: status LogDebug(char archivo [], string datos); en donde archivo contiene la ruta al archivo sobre el cual aadir los datos (sin borrar los ya existentes), datos es la cadena de caracteres con la informacin a guardar, y status un tipo enumerativo con los smbolos ERROR y OK. Se pide: a) Definir los tipos status y string.

Pgina 62 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

b) Escribir el cdigo de la funcin, teniendo en cuenta que el puntero datos puede ser nulo, producto de informacin faltante. c) Dar un ejemplo de invocacin de la funcin.

Ejercicio 9.14.
Escribir un programa tal que lea cadenas con gets() y con fputs() las escriba en un archivo de nombre prueba. Para que finalice el programa, hay que ingresar una lnea en blanco.

Ejercicio 9.15.
Escriba un programa que lea todas y cada una de las cadenas generadas por el programa del ejercicio anterior.

Ejercicio 9.16.
Entrega Obligatoria
Escriba un programa que reemplace por una tabulacin grupos de entre 2 y 5 espacios consecutivos en un archivo.

Ejercicio 9.17.
Escribir un programa que escriba un double, un int y un long en un archivo de disco y luego los lea del archivo. Usar fread(), fwrite(). Analizar el contenido con mc (Midnigth Commander) o similar.

Ejercicio 9.18.
Escribir un programa de comandos en lnea de rdenes que genere un archivo de texto con informacin de clientes morosos (saldo negativo) contenida en un archivo binario (entrada). El archivo binario de entrada contiene una secuencia de estructuras de longitud desconocida, del siguiente tipo: typedef struct { char calle[MAX_LARGO]; int numero; int piso, char depto; Pgina 63 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. } StDomicilio; typedef struct { char CBU[MAX_LARGO]; double saldo; char categoria; } StCuentaBancaria; typedef struct { char razonsocial [MAX_LARGO]; StDomicilio domicilio; StCuentaBancaria cuenta; }StCliente; El programa debe ser invocado como:

Departamento de Electrnica Tcnicas Digitales III

morosos <archivo de datos> <archivo a generar> y el formato de una lnea del archivo de texto a generar debe ser el siguiente, con valores delimitados por pipes ("|"): <Razon Social> | <CBU> | <Saldo> \n Ejemplo: Juan Perez|123456789|-43.50 Mara Fernandez|258654|-7.23 Jos Bianchi|124674881|-192.47

Ejercicio 9.19.
Entrega Obligatoria
Escribir un programa de comandos en lnea de rdenes que permita extraer un campo contenido en un archivo de texto de tipo CSV (valores separados por comas), que sea invocado como: extract <archivo de entrada> <nmero de campo> <archivo de salida> Ejemplo: Si el archivo de entrada, in.txt est compuesto de los siguientes campos: Juan, Perez, Viamonte 1566 3H, 4559-9281 Pgina 64 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ana, Sols, Argerich 3144 PB, 4583-8567 al invocar al programa como: extract in.txt 3 out.txt se habr de generar un segundo archivo de texto, out.txt, con el siguiente contenido: Viamonte 1566 3H Argerich 3144 PB Se debe validar los argumentos del programa e informar al usuario en caso de error. Debe contemplarse los casos en que el archivo est vaco, y el que no exista el campo seleccionado.
Nota: Para la resolucin del ejercicio puede suponerse que cada rengln del archivo de texto no contiene ms de 16K caracteres, incluidos todos los delimitadores y el retorno de carro.

Ejercicio 9.20.
Se requiere disponer de un programa que permita convertir el contenido de un archivo de texto al "jeringoso", y que guarde el texto convertido sobre un segundo archivo de texto. Se pide: a) Escribir el cdigo del programa C utilizando argumentos en lnea de rdenes, de forma que el programa pueda ser utilizado mediante la siguiente invocacin: jering <archivo entrada> <archivo salida> en donde <archivo entrada> es el nombre (con su ruta) del archivo con el contenido original, y <archivo salida> es el nombre (con su ruta) del archivo a ser creado con el contenido original traducido al jeringoso. Se deben validar los argumentos recibidos por el programa, y alertar al usuario si no se puede abrir alguno de los archivos involucrados en la conversin.

Ejercicio 9.21.
Escribir un programa que permita generar un lote de nmeros aleatorios sobre un archivo de texto, de acuerdo a la siguiente forma de uso: random <cantidad> <minimo> <maximo> <archivo destino> en donde <cantidad> es el tamao del lote, <mnimo> y <mximo> los extremos del intervalo al que pertenecen los nmeros generados, y <archivo destino> el archivo destino donde han de volcarse las muestras.

Ejercicio 9.22.

Pgina 65 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir un programa de comando en lnea de rdenes que genere un archivo CSV con las muestras de una funcin senoidal de la forma: S (t ) = A sin(2 * * f * t + ) La invocacin del programa debe responder a: sample <forma > <cantidad> <amplitud> <frecuencia> <inicio> <fin> <fase> <archivo> <delimitador> en donde: <forma> <cantidad> <amplitud> <frecuencia> <inicio> <fin> <archivo> forma de onda, cadena literal "SENOIDAL". Cantidad de muestras a generar. Amplitud de pico de la senoidal. frecuencia de la senoidal. Valor inicial de la variable independiente. Valor final de la variable independiente. Path del archivo CVS de destino.

<delimitador> Secuencia de caracteres delimitadores (ej. |, "|", <coma>, <TAB>, etc.). Comprobar el contenido del archivo resultante con una planilla de clculo (importacin de archivos CSV).

Ejercicio 9.23.
Escribir un programa de comandos en lnea de rdenes que convierta un archivo de texto de tipo CSV (comma-separated values) a formato HTML. Uso: csv2html <input file> <output file> <delimitter> <web page title>

En donde <delimitter> es el carcter delimitador del arvchivo CSV y <web page title> el ttulo a darle a la pgina HTML resultante. La idea es visualizar los campos del archivo como una tabla de datos. Sugerencia: Lea un simple fuente de HTML para ver su estructura.

Ejercicio 9.24.
Escribir un programa que lee un archivo de texto e imprime en pantalla las primeras n lneas que recibe en la lnea de comandos. Si n es mayor que el nmero de lneas presentes en el archivo de entrada, imprime hasta la ltima que encuentre en el archivo de entrada.

Ejercicio 9.25.

Pgina 66 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Entrega Obligatoria
Escribir un programa similar al del ejercicio anterior, que imprime las ltimas n lneas ledas desde el archivo de entrada.
Nota: Comparar este ejercicio y el anterior con los comandos more y less de Linux (consultar las man pages)

Ejercicio 9.26.
Entrega Obligatoria
Escribir un programa que concatena dos archivos de texto cuyos nombres recibe desde la lnea de comandos.

Ejercicio 9.27.
Escribir un programa que busque una cadena de caracteres que recibe desde la lnea de comandos, en un archivo de texto y determine si esa cadena existe o no. En caso de encontrarse dicha cadena, tambin deber informar en qu lnea se encuentra.

Ejercicio 9.28.
Documente los siguientes prototipos de funciones, indicando el significado de los parmetros formales, del tipo de dato que devuelve y cmo se invoca: fgetc(), ungetc(), puts(), fseek(), ftell(), freopen(), fcloseall(), y rewind().
Nota: Mientras ya estar abriendo las man pages para copiar y pegar, cumplimos en aclarar que este TP requiere que lo explique con sus propias palabras.

Ejercicio 9.29.
Un archivo llamado "polar.dat" contiene las coordenadas polares necesarias en un programa de grficas. Actualmente este archivo contiene los siguientes datos: Distancia (en cm.) 2,00 6,00 10,00 4,00 12,00 8,00 Angulo (grados) 45.0 30.0 45.0 60.0 55.0 15

Escribir un programa que cree este archivo.

Pgina 67 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Ejercicio 9.30.
Escribir un programa que lea el archivo creado en el ejercicio anterior y cree otro de nombre "xycord.dat". Las entradas al nuevo archivo deben contener las coordenadas rectangulares que corresponden a las coordenadas polares en el archivo "polar.dat". Las coordenadas polares se convierten a rectangulares mediante las ecuaciones: x = r*coseno(t) y = r*seno(t) donde r es la coordenada de distancia y t es el equivalente en radianes a la coordenada del ngulo en el archivo "polar.dat."

Ejercicio 9.31.
Escribir un programa invocable en lnea de rdenes que permita restaurar un archivo de texto transmitido por FTP en un modo incorrecto. a) Desde plataforma UNIX a plataforma Windows b) Viceversa.

Ejercicio 9.32.
Se tiene dos archivos con la misma estructura, es decir, ambos contienen informacin acerca de ciudades de la Repblica Argentina: cdigo de la ciudad (nico para cada ciudad), nombre de la ciudad, nombre de la provincia a la que pertenece, nombre del departamento al que pertenece la ciudad, si es ciudad capital de la provincia correspondiente o no, cantidad de habitantes en la ciudad, fecha de fundacin de la ciudad, sueldo actual promedio de un empleado pblico tpico que trabaja en la ciudad.

Ejercicio 9.33.
Empleado pblico tpico es un empleado administrativo de planta que cobra segn el escalafn general, en cualquier reparticin oficial, en la ciudad correspondiente. Esta informacin debe estar ordenada por provincia y por cdigo de ciudad. Se debe generar un tercer archivo que contenga los datos de los dos archivos anteriores, ordenado por provincia y por cdigo de ciudad.

Ejercicio 9.34.
Una librera quiere automatizar su sistema de control de inventario. Las condiciones que debe reunir el sistema de control de inventario, son las siguientes:

Pgina 68 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

a) El sistema debe estar funcionando mientras la librera est abierta. Cuando la librera abra por la maana, el programa leer el inventario desde el archivo de inventario, "entrada.dat". Cuando, al finalizar el da, se cierre la librera, el inventario actualizado deber grabarse en el mismo archivo. b) Cuando la librera reciba un envo de libros, el inventario deber actualizarse bien, mediante el aumento del nmero de libros en depsito o bien mediante la entrada de un nuevo libro, si an no est contenido en el inventario. c) Cuando los libros estn agotados, el inventario deber actualizarse mediante el borrado de la entrada, pero slo cuando el nmero de libros en reserva sea cero. d) Cada vez que un libro sea vendido, el inventario deber actualizarse. e) El propietario quiere tener un listado completo del inventario, ordenado alfabticamente por el ttulo de los libros. f) Tambin quiere poder mostrar la informacin bibliogrfica referente a un libro en concreto que haya en el inventario. g) El programa debe generar una lista de los ttulos de todos lo libros que haya en el inventario e indicar cuntas copias de cada libro se venden cada da. En las reuniones han acordado la informacin referente a cada libro que se guardar en el inventario. La informacin siguiente es la que se almacenar en el archivo de inventario "entrada.dat" para cada libro:

Ttulo (50 caracteres como mximo) Apellido del autor (30 caracteres como mximo) Nombre del autor(20 caracteres como mximo) Precio Editorial (30 caracteres como mximo) ISBN Fecha de copyright Nmero de ejemplares disponibles Estado (1 para libros que pueden solicitarse a la editorial y 0 para los libros agotados en la editorial y que no se reimprimen)

Ejercicio 9.35.
Entrega Obligatoria

Pgina 69 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escribir una funcin que permita leer al dispositivo de audio del computador. El prototipo es: int DSPread (int fd, struct DSPparams , int TimeRead, char *buffer, size_t tam); fd es el file descriptor obtenido mediante la funcin open (). La estructura DSPparams, debe ir en un archivo header complementario del fuente de la funcin, y debe como mnimo contener los siguientes elementos: int SampleSize: Tamao de la muestra de audio con que se desea leer el dispositivo int SampleRate: Velocidad de muestreo a la que se desea configurar el dispositivo de audio int Channels: Cantidad de canales que se desea trabajar (1 o 2). La funcin debe: a) Configurarlo con los parmetros recibidos en la estructura DSPparams b) Leer audio durante el tiempo estipulado en el argumento TimeRead. El valor e este parmetro se mide en segundos. c) Guardar las muestras ledas en buffer (cuarto parmetro de la funcin), considerando como tamao del mismo el parmetro tam. d) retornar la cantidad de muestras ledas (es decir la cantidad de elementos del tamao SampleSize), o -1 en caso de error.

Ejercicio 9.36.
Entrega Obligatoria
Escribir una funcin que escriba en el dispositivo de audio del computador. El prototipo es: void DSPwrite (int fd, struct DSPparams, char *buffer, size_t tam, int flag); fd es el file descriptor obtenido mediante la funcin open (). La estructura DSPparams, es la misma del caso anterior. Si este argumento contiene NULL, no debe ser tomado en cuenta y se trabajar con los parmetros configurados en el dispositivo. La funcin debe: a) Configurar el dispositivo con los parmetros recibidos en la estructura DSPparams, siempre que este argumento sea diferente a NULL.

Pgina 70 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

b) Escribir en el dispositivo la informacin mediante los parmetros tam, y buffer. c) En la escritura manejar el bloqueo del dispositivo de audio mediante el parmetro flag. Si es flag es 0 no bloquea el dispositivo durante la escritura. d) retornar la cantidad de bytes escritos, o -1 en caso de error.

Ejercicio 9.37.
Entrega Obligatoria
Utilizando las funciones de los dos ejercicios anteriores desarrolle una aplicacin ejecutable desde la consola que permita leer audio estreo con 15KHz de mxima frecuencia, y tamao de muestra de 16 bits, y lo reproduzca en el parlante de su computador.

Ejercicio 9.38.
Tome el cdigo del ejercicio anterior, y modifquelo para que la reproduccin de audio se lleve a cabo introduciendo una demora de algunos microsegundos a uno de los canales. Mediante enum trabaje el canal en donde se desea introducir la demora. La cantidad de milisegundos se pasa por lnea de comandos. Ejemplo $ dplay R 120 reproducir la entrada de audio aplicando al canal derecho (R de Rigth) una demora de 120 mseg. $ dplay L 200 reproducir la entrada de audio introduciendo al canal izquierdo (L de left) una demora de 200 mseg.

Ejercicio 9.39.
Desarrolle una funcin que abra un archivo de audio en formato wav PCM e imprima en pantalla todos sus parmetros. El encabezado contiene el siguiente formato.
Nombre del campo ChunkID Tamao[Bytes] 4 Offset[Bytes] 0 Endian Big Descripcin Se almacenan los caracteres RIFF Es el tamao del archivo menos 8 bytes = 4 + (8 + SubChunk1Size) + (8 + SubChunk2Size) Se almacenan los caracteres WAVE

ChunKSize

Little

Format

Big

Pgina 71 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

SubChunk1ID SubChunk1Size AudioFormat NumChannels SampleRate ByteRate

4 4 2 2 4 4

12 16 20 22 24 28

Big Little Little Little Little Little

Se almacenan los caracteres fmt Vale 16 para PCM Para PCM = 1 Cantidad de canales Mono = 1; Stero = 2, etc Frecuencia de muestreo SampleRate*NumChannels*BitPerSa mple/8 Cantidad de bytes por muestra de todos los canales = NumChannels*BitsPerSample/8 Cantidad de bits por muestra: 8 = 8 bits; 16 = 16 bits Se almacenan los caracteres data Cantidad de bytes de audio. NumSamples*'NumChannels'*bitpers ample/8 Las muestras de audio

BlockAlign

32

Little

BitsPerSample SubChunk2ID SubChunk2Size Data

2 4 4 SubChunk2Size

34 36 40 44

Little Big Little Little

A continuacin se muestra el parseo de un archivo wav.


52 49 46 46 60 54 13 00 57 41 56 45

ChunkID RIFF

ChunkSize 1266784Bytes

Format WAVE

66

6d

74

20

10

00

00

00

01

00

02

00

SubChunk1ID fmt

SubChunk1Size 16Bytes

AudioFormat PCM

NumChannel 2

44

AC

00

00

10

B1

02

00

04

00

10

00

SampleRate 44100Hz

ByteRate 67285464Bytes/s

BlockAlign 4Bytes

BitPerSample 16Bits

64

61

74

61

3C

54

13

00

SubChunk2ID data

SubChunk2Size 126674:8Bytes

Notas:

Pgina 72 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.


Departamento de Electrnica Tcnicas Digitales III

Si las muestras son de 8 bits se guarda en el rango de 0 a 255. Las muestras de 16 bits son almacenadas en complemento a dos. Las muestras para dos canales estn ordenadas de la siguiente manera
Muestra0 Canal0 Muestra0 Canal1 Muestra1 Canal0 Muestra1 Canal1 Muestra2 Canal0 Muestra2 Canal1

Ejercicio 9.40.
Escriba un programa que utilizando la funcin anterior y la de escritura del dispositivo de audio, reproduzca por el sistema de sonido del computador un archivo wav.

Ejercicio 9.41.
Realice una funcin que tome como entrada un archivo wav PCM stereo e invierta los canales.

Ejercicio 9.42.
Desarrolle una funcin que tome como entrada un archivo wav stereo, sume ambos canales y genere un archivo wav mono.

Ejercicio 9.43.
Desarrolle una funcin que abra un archivo de audio wav mono y modifique la frecuencia de muestreo del mismo a la mitad, generando como salida un archivo wav mono.

Ejercicio 9.44.
Desarrolle una FIFO de N elementos para datos del tipo int. Dicha FIFO debe presentar la siguiente interfaz. struct fifo * fifoCreate (int N);

Descripcion: Crea la FIFO. Parametros: Cantidad de elementos de la FIFO. Retorna: Puntero a la estructura de control de la FIFO. En caso de error devuelve NULL.

int fifoWrite (struct fifo *p, int *dataPtr, int dataSize);


Descripcion: Escribe datos en la FIFO. Parametros:

Pgina 73 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.


Departamento de Electrnica Tcnicas Digitales III

Puntero a la structura de control de la FIFO. Puntero a los datos a escribir en la fifo. Cantidad de elementos a escritos.

Retorna: La cantidad de elementos escritos en la FIFO. O retorna -1 si la cantidad de elementos es mayor al tamao definido cuando se la cre

int fifoRead (struct fifo *p, int *dataPtr, int dataSize);


Descripcion: Lee datos de la FIFO. Parametros:


Puntero a la structura de control de la FIFO. Puntero al buffer donde colocar los datos leidos. Cantidad de elementos a leer.

Retorna: La cantidad de elementos leidos en la FIFO O retorna 0 si est vaca, y -1 si hubo cualquier otro error.

int fifoDestroy (struct fifo *p);


Parametros: Puntero a la structura de control de la FIFO. Retorna: Cero en caso de exito, -1 en el caso opuesto.

Nota:

No debe usar mkfifo. La estructura de control de la FIFO debe contener todo lo necesario para el manejo de la misma.

Ejercicio 9.45.
Tomando como base el ejercicio anterior, desarrolle una FIFO de N bytes para elemento de tamao no definido.

Ejercicio 9.46.
Entrega Obligatoria
Escriba un programa que invoque a la funcin de lectura del dispositivo de audio y enve las muestras ledas al FIFO ubicado en ~/Info1/conector. Pgina 74 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Escriba un segundo programa que tome las muestras de ese FIFO y las enve a la salida de audio correspondiente.

Ejercicio 9.47.
Entrega Obligatoria
Desarrollar una aplicacin que ejecutada en diferentes terminales del mismo equipo Linux por dos usuarios permita a estos establecer un chat, sencillo.

Ejercicio 9.48.
Entrega Obligatoria
Utilizando la funcin de librera provista por la ctedra para abrir una conexin por red modifique el programa anterior para que el chat pueda hacerse entre usuarios con sesin en equipos diferentes pero vinculados por una red de datos.

Ejercicio 9.49.
Usando la misma funcin de librera del ejercicio anterior desarrolle, un programa que pueda transmitir un archivo al computador cuya direccin IP se le especifique por lnea de comandos. El receptor guarda los archivos recibidos en la ruta /download/. Si en esa direccin ya existe un archivo con ese nombre, el archivo destino llevar el mismo nombre del que se transmite, al que se le aade un nmero de secuencia: 001, 002, etc, segn cuantas versiones haya del mismo en el directorio de recepcin (se busca con ello evitar pisar archivos que no sean duplicados). Sugerencias: vea la funcin select en las man pages de Linux para resolver la espera de teclado y conexin entrante al mismo tiempo.

Ejercicio 9.50.
Entrega Obligatoria
Utilizando la funcin provista por la ctedra para abrir una conexin, la funcin DSPread escrita en el Ejercicio 4.35, y la funcin DSPWrite escrita en el Ejercicio4.36, escriba un programa que opere de acuerdo a las siguientes especificaciones. El programa se ejecuta con el siguiente comando streamer [modo] [ip] modo puede tomar dos valores: tx o rx.

Pgina 75 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Si modo es tx, abre una conexin con el nodo especificado en el parmetro ip, utilizando la funcin provista por la ctedra, lee audio desde el dispositivo a 15KHz de ancho de banda, con un tamao de muestra de 16 bits, y estreo, y lo transmita por red al nodo remoto. Si modo es rx, entonces abre la conexin con el nodo remoto especificado en el parmetro ip, y espera por ella audio asumindolo con Ancho de Banda 15 KHz., tamao de muestra 16 bits, y estreo, y lo escriba en el dispositivo de audio. Utilice el puerto de conexin 5466.

Ejercicio 9.51.
Modifique el programa anterior para que antes de comenzar la transmisin el extremo transmisor, le indique al receptor mediante intercambio de mensajes los parmetros de audio (Frecuencia de Muestreo, estreo/mono, y tamao de muestra). El receptor deber programar al dispositivo de audio, y si dicha accin no arroj errores, le indicar mediante un mensaje al extremo transmisor que est listo para recibir audio. A partir de este evento, comienza la transmisin. Si la programacin del dispositivo de audio en el extremo receptor dio errores, entonces debern suspender la transmisin enviando por consola los mensajes correspondientes, y cerrando la conexin mediante la funcin de librera provista por la Ctedra.

Pgina 76 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

T.P. N 10. Ejercicios Integradores


Ejercicio 10.1.
Una curtiembre necesita desarrollar el software para una mquina que mida el rea de los cueros que han finalizado el proceso de curtido. El modelo ms comn de estas mquinas consiste bsicamente en una cinta transportadora que desplaza los cueros, uno por uno, a una velocidad constante. La medicin en s se realiza en base a 16 sensores pticos ubicados en una hilera perpendicular al desplazamiento de los cueros, por debajo de los mismos. El sistema recibe una potente iluminacin desde arriba y cada sensor detecta o no la presencia de luz. Si no hay luz, significa que el cuero est pasando por all. Como cada sensor corresponde a un rea parcial del cuero a ser medido, la superficie total del cuero se obtendr sumando todas las reas parciales. A este proceso se lo denomina medicin de rea por integracin grfica. El objetivo principal de la medicin es clasificar los cueros en 3 clases: chicos (rea menor a 2,3 m2), medianos (rea entre 2,3 y 3,6 m2) y grandes (rea mayor a 3,6m2). La velocidad de desplazamiento de la cinta es de 0,9 m/min, y cada sensor cubre una longitud de 12,5 cm. La hilera de sensores enva el estado de cada uno de los mismos a travs de los ports de una PC, a partir del 0x310. Cada sensor se corresponder con un bit que se pondr en 0 cuando detecte luz, y en 1 cuando no la detecte. Todos los sensores de la hilera envan la informacin de su estado cada 3 segundos. Una vez puesto en marcha el sistema, con la recepcin del valor 0Fh en el port 0x312, todos los sensores estn en 0, y la medicin comenzar cuando cualquiera de ellos se ponga en 1 (porque un cuero comenz a pasar sobre la hilera de sensores). Se considera finalizado el paso de un cuero cuando, luego de 3 lecturas consecutivas, todos los sensores estn en 0. El fin del proceso completo se produce cuando el port 0x312 recibe el valor 7Fh. Se pide desarrollar el programa en lenguaje C que realice la medicin segn las indicaciones dadas, y adems determine e informe:

Cantidad de cueros de cada clase promedio de todos los cueros

Ejercicio 10.2.
(Tema de Parcial) Se tiene la siguiente esctructura: Pgina 77 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As. struct datos_taller { unsigned int numero; unsigned char encendida; unsigned int rpm; }; Escriba una funcin cuyo prototipo es: struct datos_taller maquinas(unsigned char);

Departamento de Electrnica Tcnicas Digitales III

El carcter recibido por la funcin maneja la siguiente informacin: Bit 0 a 2 Bit 3 Bits 4 a 7 nmero de mquina (de 1 a 8). apagada (0) o encendida (1). velocidad (en RPM) de cada mquina.

La funcin debe devolver los 3 datos de funcionamiento (es decir, nmero de mquina, si est encendida o no, y velocidad (en caso de estar prendida) a travs de la estructura indicada en el prototipo.

Ejercicio 10.3.
Utilice la funcin del ejercicio anterior para escribir un programa que recibir los datos de las mquinas de un taller a travs del port 0x300. El programa debe determinar en tiempo real (es decir, mientras se van recibiendo los datos): a) Cantidad de mquinas apagadas b) Velocidad promedio de las mquinas encendidas La informacin recibida por el port se actualiza como mnimo cada 0,5 segundos. El programa finaliza pulsando la tecla X (mayscula o minscula). Cuidado! Recuerde que no se puede interrumpir al programa en espera de la intervencin del usuario.

Ejercicio 10.4.
(Tema de final) Se tiene un archivo maestro con los datos de los clientes de una agencia de remises. Los registros de datos de dicho archivo presentan la siguiente estructura: Telfono (campo clave), Apellido y nombre, Direccin, Cantidad de viaje realizados e Importe acumulado. La ruta y nombre de dicho archivo es D:\REMIS\MAESTRO.DAT Se pide un programa en lenguaje C que presente un men con las siguientes opciones:

Pgina 78 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

a) VIAJES: en esta opcin se registra cada uno de los viajes realizados, guardndolos en un archivo de novedades, cuya ruta y nombre es D:\REMIS\NUEVOS.DAT. La estructura de este archivo es idntica a la del archivo maestro, excepto que el importe ahora no es un acumulado, sino el correspondiente a cada viaje. Se debe verificar en el archivo maestro la cantidad de viajes de cada cliente, ya que cada 10 viajes realizados, el siguiente es gratis. En este caso, el importe a registrar ser $0. b) ACTUALIZACIN: esta opcin actualizar el archivo maestro con los datos registrados en el de novedades. Se actualizan los campos correspondientes a cantidad de viajes e importe acumulado. En caso de que sea un nuevo cliente, se agregar el nuevo registro. Adems, despus de la actualizacin se borrar el archivo de novedades. c) SALIR: Esta opcin finalizar el programa NOTA: Tenga en cuenta que la bsqueda se har a travs del campo clave telfono.

Ejercicio 10.5.
(Tema de final) Despus de denodados esfuerzos, el Servicio de Inteligencia de Chinlandia ha logrado desencriptar la clave de los mensajes secretos que envan los espas de Tibecia, su legendaria nacin rival. Los programadores chinlandeses han logrado captar una transmisin espa y mediante un ingenioso dispositivo lograron que la misma ingrese, byte a byte, por el puerto 0x320 de una vieja PC abandonada en la embajada de Iowandia. Consideraremos que la transmisin es continua, ya que el dispositivo contraespa transmite constantemente. La clave para desencriptar los mensajes ingresa a travs del puerto 0x330, procedindose de la siguiente manera. a) Se sabe que comienza un mensaje vlido cuando tres bytes seguidos del mensaje tienen el valor F5. b) A partir de all se lee un byte de la clave por cada byte del mensaje c) La clave consiste en las siguientes reglas:

Si todos los bits de orden par de la clave estn en 0, forzar los bits de orden 3 y 1 del mensaje a 1 Si los bits 5 y 4 de la clave estn en 1, invertir todos los bits del mensaje. Si el valor de la clave es impar, intercambio los 4 bits de ms peso por los de menos peso del mensaje. En el resto de los casos, el byte mensaje se descarta.

d) El mensaje termina cuando tres bytes desencriptados consecutivos toman el valor 5F

Pgina 79 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.

Departamento de Electrnica Tcnicas Digitales III

Cuando se desencripta un mensaje completo, el programa dar la opcin de guardarlo en disco como archivo de texto. La ruta ser C:\CHINLANDIA\ y el nombre lo elige el usuario. Si Ud. curs la materia antes de 2006, en vez de esto, retransmita el mensaje desencriptado por el puerto 0x340. Despus de cualquiera de las dos opciones, el sistema estar en condiciones de recibir y desencriptar un mensaje nuevo. NOTAS: Recuerde: el mensaje a desencriptar llega por el port 0x320, y la clave por el 0x330. Para asegurar la sincronizacin de los puertos, tenga en cuenta que los datos se mantienen durante 250 mseg. Debe incluir al menos una funcin con el siguiente prototipo: char desencriptar(char, char); Puede salir del programa en cualquier momento presionando la tecla X (mayscula o minscula), pero sin cortar la ejecucin del programa.

Ejercicio 10.6.
(Tema de final) Una conocida casa de empanadas con servicio de delivery quiere disponer de un sistema para optimizar la gestin de pedidos. En primer lugar, se cuenta con una base de datos con los siguientes datos:

Telfono (se utilizar como cdigo de cliente) Nombre Direccin Cantidad de pedidos acumulados

Cuando un cliente llama, se solicita en primer lugar su nmero de telfono. Si dicho telfono ya est registrado se procede a ingresar su pedido; en caso contrario, se procede al alta del mismo en la base de datos, solicitando nombre y direccin. A continuacin, tanto si ya era cliente como si fue dado de alta en ese llamado, se toma nota de su pedido. Para ello se ingresar el gusto elegido (los gustos disponibles son carne, pollo, jamn y queso y humita) y la cantidad de empanadas de cada uno. Decida Ud. como implementar este ingreso. Tenga en cuenta que esta informacin NO FORMAR PARTE de la base de datos, aunque se incrementar en 1 (uno) la cantidad de pedidos acumulados. Una vez que la operadora termina de ingresar el pedido, se emitirn por el port 0x330 una serie de 7 (siete) bytes con la informacin relativa a cada pedido, codificada de la siguiente manera:

Pgina 80 de 81

Universidad Tecnolgica Nacional Facultad Regional Bs. As.


Departamento de Electrnica Tcnicas Digitales III

1er byte: AAh 2do byte: Nmero de pedido (comienza en 0 y se incrementa en uno por cada nuevo pedido) Bytes 3ro a 6to: Se transmite un byte por cada gusto. Los dos primeros bits de cada uno de estos bytes corresponden al gusto, mientras que los seis restantes corresponden a la cantidad de empanadas de ese gusto 7mo byte: FAh

NOTA: El programa termina con nmero de telfono 0 (cero)

Pgina 81 de 81

Vous aimerez peut-être aussi