Guia C UADE

21
FACULTAD DE INGENIERÍA Y CIENCIAS EXACTAS Ingeniería en Informática Programación I Trabajo Práctico Funciones 1. Realizar una función que reciba tres números y devuelva “N” si estos no corresponden a las medidas de los lados de un triángulo, “E” si corresponden a un triángulo equilátero, “I” si corresponden a un triángulo isósceles y “S” si corresponde a un triángulo escaleno. No usar operadores lógicos. 2. Hacer una función que reciba tres valores enteros positivos y devuelva el mayor estricto de los tres. En caso de no existir devolver -1. No usar operadores lógicos. 3. Realizar una función que reciba el año como parámetro y devuelva verdadero si el año es bisiesto o falso si no lo es. Se recuerda que un año es bisiesto cuando es divisible por 4. Sin embargo aquellos años que sean divisibles por 4 y también por 100 no son bisiestos, a menos que también sean divisibles por 400. Por ejemplo, 1900 no fue bisiesto pero sí lo fueron el 2000 y 2004. 4. Realizar una función que reciba como parámetros día, mes y año indique si la fecha es un fecha gregoriana válida. 5. Realizar una función que reciba como parámetros día, mes, año y una cantidad de días, y devuelva la fecha resultante de sumar a la fecha recibida la cantidad de días. La fecha resultante debe ser una fecha gregoriana. 6. La tarifa de un videoclub para el alquiler de sus videos es: Dibujos = $2; Estrenos = $3; Otros = $2.5. Además cobra por devolución tardía $1 por el primer día y $0.5 por cada no de los días siguientes. Realizar una función que devuelva el alquiler a pagar por un cliente, sabiendo que recibe como parámetros el tipo de video y la cantidad de días desfasados en devolución. Si la devolución es anterior al día de devolución recibirá un entero negativo. 7. Una editorial determina el precio de un libro según la cantidad de páginas que contiene. El costo básico del libro es de $5, más el precio $0,02 por página con encuadernación rústica. Si el número de páginas supera las 300 la encuadernación debe ser en tela, lo que incrementa el costo en $3. Además, si el número de páginas sobrepasa las 600 se hace necesario un procedimiento especial de encuadernación que incrementa el costo en $8. Realizar una función que devuelva el costo de un libro dado el número de páginas. 8. Un banco necesita para sus cajeros automáticos un programa que lea una cantidad de dinero e informe la cantidad mínima de billetes a entregar,

description

Lenguaje C

Transcript of Guia C UADE

Page 1: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo Práctico – Funciones

1. Realizar una función que reciba tres números y devuelva “N” si estos no corresponden a las medidas de los lados de un triángulo, “E” si corresponden a un triángulo equilátero, “I” si corresponden a un triángulo isósceles y “S” si corresponde a un triángulo escaleno. No usar operadores lógicos.

2. Hacer una función que reciba tres valores enteros positivos y devuelva el mayor estricto de los tres. En caso de no existir devolver -1. No usar operadores lógicos.

3. Realizar una función que reciba el año como parámetro y devuelva verdadero si el año es bisiesto o falso si no lo es. Se recuerda que un año es bisiesto cuando es divisible por 4. Sin embargo aquellos años que sean divisibles por 4 y también por 100 no son bisiestos, a menos que también sean divisibles por 400. Por ejemplo, 1900 no fue bisiesto pero sí lo fueron el 2000 y 2004.

4. Realizar una función que reciba como parámetros día, mes y año indique si la fecha es un fecha gregoriana válida.

5. Realizar una función que reciba como parámetros día, mes, año y una cantidad de días, y devuelva la fecha resultante de sumar a la fecha recibida la cantidad de días. La fecha resultante debe ser una fecha gregoriana.

6. La tarifa de un videoclub para el alquiler de sus videos es: Dibujos = $2; Estrenos = $3; Otros = $2.5. Además cobra por devolución tardía $1 por el primer día y $0.5 por cada no de los días siguientes. Realizar una función que devuelva el alquiler a pagar por un cliente, sabiendo que recibe como parámetros el tipo de video y la cantidad de días desfasados en devolución. Si la devolución es anterior al día de devolución recibirá un entero negativo.

7. Una editorial determina el precio de un libro según la cantidad de páginas que contiene. El costo básico del libro es de $5, más el precio $0,02 por página con encuadernación rústica. Si el número de páginas supera las 300 la encuadernación debe ser en tela, lo que incrementa el costo en $3. Además, si el número de páginas sobrepasa las 600 se hace necesario un procedimiento especial de encuadernación que incrementa el costo en $8. Realizar una función que devuelva el costo de un libro dado el número de páginas.

8. Un banco necesita para sus cajeros automáticos un programa que lea una cantidad de dinero e informe la cantidad mínima de billetes a entregar, considerando que existen billetes de $100, $50, $10, $5 y $1. Realizar una función que calcule dichas cantidades.

Page 2: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo Práctico – Vectores

1. Realizar una función que imprima los valores de un vector de N posiciones, desde la posición máxima a la posición mínima.

2. Realizar una función que devuelva la suma de todos los elementos de un vector de N elementos.

3. Realizar una función que devuelva el mínimo elemento de un vector.

4. Realizar una función que devuelva la posición en que se haya un valor dado mediante el método de búsqueda binaria. En caso que no lo encuentre devolver -1,.

5. Realizar una función que permita determinar la cantidad de veces que se repite un valor en un vector dado.

6. Realizar una función que permita eliminar un valor de un arreglo. Se sabe que todos los elementos válidos del vector se almacenan en forma consecutiva, y que los elementos no utilizados se inicializan con -1.

7. Realizar una función que determine si todos los elementos de dos vectores son iguales y están en el mismo orden.

8. Se tiene un programa que permite cargar y mostrar los datos almacenados en una pila y una cola. Estos programas contienen variables globales. Modifique los mismos de modo tal que no contenga más variables globales.

/* ----------------------------------------------------- *//* Implementación de una pila estática *//* ---------------------------------------------------- */#include <stdio.h>#define TAM 5

/* Variables globales */int dato; /* elemento a ingresar en la pila */int pila [TAM]; /* vector donde se almacena los elem.de la pila */int *tope=pila+TAM; /* dir. del próximo elem. a ingresar en la pila */

/* prototipos de las funciones */void apilar (void);void desapilar (void);int pilavacia (void);int pilallena (void);int primeropila(void);

/* programa principal */int main (void){

/* Carga la pila hasta que se llene o ingrese un cero */printf("ingrese un número distinto a 0: ");scanf("%d",&dato);while(dato!=0 && !pilallena()){

apilar();printf("ingrese un número distinto a 0: ");scanf("%d",&dato);

}/* Muestra la pila, perdiendo todos los *//* elementos que estaban cargados en ella */printf("Datos cargados en la pila\n");while(!pilavacia()) {

printf("%d\n", primeropila());desapilar();

Page 3: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

}printf("Fin de datos\n");

return 0;}/* ------------------------------------------ *//* Función apilar: coloca un elemento nuevo en*//* la pila en la posición tope y desplaza *//* este a la posición del siguiente elemento */ /* ------------------------------------------ */void apilar(void){

tope--;*tope=dato;

}/* ------------------------------------------ *//* Función desapilar: elimina el último *//* elemento ingresado en la pila *//* ------------------------------------------ */void desapilar(void){

tope++;}/* --------------------------------------------- *//* Función pilavacia: determina si la pila tiene *//* elementos. Devuelve 1 si la pila está vacía. *//* --------------------------------------------- */int pilavacia (void){

return(tope==pila+TAM)?1:0;}/* -------------------------------------------- *//* Función pilallena: Determina si la pila está *//* llena. Devuelve 1 en caso afirmativo */int pilallena(void){

return(tope==pila)?1:0;}/* ------------------------------------------ *//* Función primeropila: Devuelve el primer *//* elemento a salir de la pila *//* ------------------------------------------ */int primeropila (void){

return *tope;}

/* ------------------------------------------------------------- *//* Implementación de una cola circular estática *//* ------------------------------------------------------------- */#include <stdio.h>#define TAM 5

/* Variables globales */int dato; /* elemento a ingresar en la pila */int cola [TAM]; /* vector donde se almacena los elem.de la cola */int *poner=cola, /* dirección del elemento a poner */ *sacar=cola; /* dirección del próximo elemento a sacar */

/* prototipos de las funciones */void acolar (void);void desacolar (void);int colavacia (void);int colallena (void);int primerocola(void);

/* programa principal */int main (void){

/* Carga la cola hasta que se llene o ingrese un cero */printf("Ingrese un número distinto a 0: ");scanf("%d",&dato);

Page 4: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

while(dato!=0&& !colallena()){acolar();printf("Ingrese un número distinto a 0: ");scanf("%d",&dato);

}/* Muestra la cola, perdiendo todos los *//* elementos que estaban cargados en ella */printf("Datos cargados en la cola\n");while(!colavacia()) {

printf("%d\n", primerocola());desacolar();

}printf("Fin de datos\n");

}/* ------------------------------------------ *//* Función acolar: coloca un elemento nuevo en*//* la cola en la posición poner y desplaza *//* este a la posición del siguiente elemento */ /* ------------------------------------------ */void acolar(void){

*poner=dato;poner++;if (poner==cola+TAM)

poner=cola;}/* ------------------------------------------ *//* Función desacolar: elimina el primer *//* elemento ingresado en la cola *//* ------------------------------------------ */void desacolar(void){

*sacar=dato;sacar++;if (sacar==cola+TAM)

sacar=cola;}/* --------------------------------------------- *//* Función colavacia: determina si la cola tiene *//* elementos. Devuelve 1 si la cola está vacía *//* --------------------------------------------- */int colavacia (void){ return (poner==sacar)?1:0;}/* -------------------------------------------- *//* Función colallena: Determina si la cola está *//* llena. Devuelve 1 en caso afirmativo *//* -------------------------------------------- */int colallena(void){ return (poner+1==sacar || poner==sacar+TAM-1)?1:0;}/* ------------------------------------------ *//* Función primerocola: Devuelve el primer *//* elemento a salir de la cola *//* ------------------------------------------ */int primerocola (void){

return *(sacar);}

Page 5: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo Práctico – Matrices

1. Realizar una función que permita cargar con números enteros, una matriz de 5x5, ingresando los datos desde teclado. ¿En qué cambiaría la función si la matriz contuviera otro tipo de datos y/o tuviese otras dimensiones?

2. Realizar una función que determine si una matriz cuadrada de dimensión N es simétrica con respecto a su diagonal principal.

3. Realice una función devuelva verdadero si todas sus columnas de una matriz son palíndromos.Ejemplos:

4. Dada una matriz de 5x5 de números enteros, ordenar en forma ascendente cada una de sus filas.

5. Realizar 9 funciones que generen las matrices detalladas a continuación:

6. Hacer una función que cargue una matriz con números al azar entre 0 y 999, la cual representa la lluvia mensual caída del año 1995 al 2008. Las filas representan los años y las columnas correponden a los 12 meses del año.

7. Dada una matriz cargada utilizando la función del ejercicio anterior, realizar funciones para:

a) Almacenar en un vector la lluvia promedio caida en cada uno de los meses b) Almacenar en un vector la lluvia promedio caida durante cada uno de los añosc) Mostrar los resultados obtenidos en los puntos a y b

8. Dadas dos matrices cuadradas A y B de dimensión NxN, obtener una matriz C de dimensión NxN, que contenga el producto de las dos primeras, sabiendo que:

9. Dada una matriz de dimension NxN. realizar las siguientes operaciones:a) Intercambiar dos filas cualquiera.b) Intercambiar dos columnas cualesquiera. c) Intercambiar una fila y una columna dadad) Transponer la matriz sobre si misma

4000030000200001

1234012300120001

4000340023401234

00016008004002000

1111222233334444

12345678910111213141516

0102304005067080

1234123412341234

12341213145111615610987

1221233233331111Para esta matriz la función devuelve falso

1221233423341221Para esta matriz la función devuelve verdadero

Page 6: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo práctico – Cadenas

1. Hacer una función que permita invertir una secuencia de caracteres.

2. Hacer una función que determine si una secuencia de caracteres es capicúa.

3. Hacer una función que devuelva la cantidad de palabras (separados por uno o más espacios) que tiene una frase.

4. Hacer una función que permita reemplazar en una secuencia de caracteres todos los guiones (-) por el carácter numeral (#).

5. Hacer una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no es múltiplo de ocho agregar delante de la cadena caracteres ‘0’ hasta que la misma sea múltiplo de 8.

Ejemplos: 472348237388539055823012 4723-4823 7388-5390 5582-30128237388539055823012 0000-0823 7388-5390 5582-3012

6. Hacer una función strNcpy() que permita extraer una sub-cadena, indicando la posición inicial y la cantidad de caracteres. Ejemplo, dada la secuencia: “El número de teléfono es 4356-7890. “ extraer la sub-cadena que comienza en la posición 26, la cantidad de 9 caracteres.

En los siguientes ejercicios utilice funciones de biblioteca para codificar las funciones solicitadas:

7. Hacer una función que permita insertar una sub-cadena en una cadena a partir de una posición dada.

8. Hacer una función que permita eliminar una sub-cadena a partir de una posición y un tamaño dados.

9. Hacer una función que permita convertir números enteros entre 0 y 999 a palabras. Para ello se recibe como parámetros el número y una cadena. ¿En qué cambiaría su programa si el rango de valores fuese diferente?

10. Escribir una función strright(<cadena>,<n>) que permita obtener una subcadena de caracteres con los últimos <n> caracteres de la cadena pasada como parámetro. La función no hará nada si el parámetro <n> es menor que cero o mayor que la longitud de la cadena.

Page 7: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo práctico – Estructuras

1. Definir estructuras para almacenar los siguientes tipos de datos:

a) fechab) horac) Datos de un producto

código de barras (21 dígitos)nombre (cadena de caracteres)precio unitario (número real)stock (número entero)fecha de actualización de stock (día, mes, año)

2. Desarrollar las siguientes funciones para manejar “tiempos”:

a) Ingresar un horario (horas, minutos, segundos) desde teclado, validando que sea correctob) Calcular la diferencia de horas. En el caso que la primera fecha es mayor a la segunda,

considerar que la primera hora corresponde a la hora del día anterior. La diferencia en horas no supera las 24 horas.

c) Generar una cadena con formato hh:mm:ss

3. Desarrollar las siguientes funciones para manejar “fechas”:

a) Ingresar una fecha (día, mes, año) desde teclado, validando que corresponda a una fecha gregoriana.

b) Indicar cual de dos fechas es la mayor.c) Sumar n días a una fechad) Generar una cadena con formato dd/mm/aaaa

4. Un supermercado desea contar con un programa que le permita registrar los datos de sus artículos. En el mismo no existen más de 1000 productos distintos. Realizar un programa ABM utilizando la estructura indicada en el punto 1.c, en el que los datos deberán estar ordenados por nombre. Contemplar las siguientes funciones: altaProd: parámetros recibidos serán el vector y la cantidad cargados hasta el momento. Esta

función deberá permitir cargar productos hasta que se llene el vector o hasta que ingresen un nombre vacío en el campo nombre.

bajaProd: parámetros recibidos serán el vector y la cantidad cargados hasta el momento. Esta función deberá permitir ingresar un nombre y eliminar los datos del producto.

mostrarProductos: parámetros recibidos serán el vector y la cantidad cargados hasta el momento. Esta función deberá permitir mostrar los datos de todos los productos del supermercado.

Page 8: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo práctico – Archivos binarios

1. Hacer un programa que utilice una función principal que invoque a las siguientes funciones:

Hacer una función grabarArch() que genere un archivo de enteros. Hacer una función mostrarArch() que reciba el nombre de un archivo, lo lea y muertre los

datos del mismo. Hacer una función agregarAcumulado() que reciba el nombre de un archivo, y agregue

al final de éste el resultado de sumar todos los valores que contiene. Hacer una función ordenarArch() que reciba el nombre de un archivo y lo ordene

utilizando el método optimizado de ordenamiento por burbujeo. Hacer una función buscarArch() que reciba el nombre de un archivo, y un valor e indique

en que posición se encuentra del archivo. En caso de no encontrarlo devolver un valor negativo. Usar método de búsqueda binaria.

Hacer una función eliminarValor() que reciba el nombre de un archivo y un valor y permita eliminarlo de forma lógica del mismo.

Hacer una función eliminarValor() que reciba el nombre de un archivo y un valor y permita eliminarlo de forma física del mismo.

2. Un laboratorio de especialidades medicinales posee un archivo en disco cuyos registros contienen los siguientes campos:

Lote: 5 caracteresCódigo de barras: 21 caracteresNombre: 40 caracteresCosto: número realStock: Número entero: Cantidad de envases almacenadosMes, Año: Enteros: Mes y año de vencimiento de la medicación

El archivo contiene un registro por cada lote, es decir que pueden existir varios registros para un mismo medicamento si éstos pertenecen a lotes distintos. Se solicita desarrollar uno o más programas para:

Crear el archivo, ingresando los datos por teclado. Borrar del archivo los registros de aquellos lotes que se encuentren vencidos,

comparando la fecha de vencimiento de cada uno con una fecha testigo que se ingresa por teclado. Para borrar los registros es necesario generar un nuevo archivo que contenga solamente los lotes no vencidos, emitiendo además un listado por pantalla con los registros eliminados.

Generar e imprimir un listado con el código, el nombre y la cantidad de unidades en stock para cada medicamento, sin importar el lote al que pertenezca. El archivo no está ordenado, y los medicamentos son a lo sumo 130.

Ejemplo:

CODIGO NOMBRE CANTIDAD EN STOCK10000 TERRAMICINA xxxx10001 CARBOPLAT yyyy

..... ............ ....

Page 9: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo práctico – Archivo de texto

1. Hacer una función que permita eliminar todos los comentarios de una o varias líneas de un programa fuente escrito en lenguaje “C”,.

2. Hacer una función que permita eliminar todas las directivas para el preprocesador de un programa fuente escrito en lenguaje “C”.

3. Hacer un programa que invoque y pruebe las siguientes funciones:

grabarMatriz() permite grabar una matriz, tal que en un renglón se encuentren los valores reales de toda una fila

leerMatriz() permite cargar una matriz desde el archivo generado por la función anterior

4. Hacer un progranma que invoque y pruebe las siguientes funciones:

grabarMatriz() permite grabar una matriz, tal que los valores estan separados por comas (,) leerMatriz() permite cargar una matriz desde el generado por la función anterior

5. Utilizar el Block de notas o cvualquier otro editor para crear un archivo de texto que contenga los datos de una matriz “rala” (matriz con más del 75 % de sus celdas sin valor definido) con el siguiente formato: (fila;columna;valor). Luego escribir una función cargarMatriz() que permita leer el archivo mencionado y cargarlo en una matriz de M x N enteros, teniendo en cuenta que no todas las posiciones tienen un valor asociado.

Ejemplo:Se tiene un archivo con una matriz de 3x3 con los siguientes datos:

(0;0;5)(1;1;8)(2;0;66)

La matriz deberá quedar cargada con los siguientes valores.

5 0 0 0 8 0 66 0 0

6. Hacer un programa que invoque y pruebe las siguientes funciones:

grabarPrecios() permite grabar en un archivo de texto el rango de precio sugerido de un producto. Cada dato se debe grabar en línea distinta.

descripciónprecioDesdeprecioHasta

grabarPromedios() permite leer el archivo generado en la función anterior y generar otro archivo de texto con los promedios de los precios de los productos. Tanto la descripción como el promedio se graban en diferentes líneas.

descripciónpromedio

mostrarMejores() permite mostrar los productos cuyo precio promedio es superior al precio promedio de todos los productos.

7. Hacer un programa que permita ingresar una lista de apellidos y nombres en formato "Apellido, Nombre" y guarde en el archivo ARMENIA.TXT, los nombres de aquellas personas cuyo apellido termina con la cadena "IAN", en el archivo ITALIA.TXT los terminados en "INI" y en el archivo ESPAÑA.TXT los terminados en “EZ”. Descartar el resto. Ejemplo:

Arslanian, Gustavo --> ARMENIA.TXT

Page 10: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Rossini, Giuseppe --> ITALIA.TXTPérez, Juan --> ESPAÑA.TXT Smith, John --> descartar

8. Se dispone de un archivo de texto con los datos de las partidas de 196 aviones de Aeroparque con el siguiente formato:

01-04 número de vuelo06-25 días de la semana de salida (se indica con “No” si ese día el avión no parte del aeropuerto)27-49 ciudad de destino51-52 hora de partida54-55 minuto de partida57-58 hora de llegada60-61 minuto de llegada63- empresa de aviación

Hacer una función permita informar todos los vuelos que salgan lunes, martes o sábado a un determinado destino y su horario de salida sea posterior a las 15:30. Dicho destino deberá ingresarse desde teclado (el ingreso de este puede ser total o parcial).La pantalla deberá mostrar los siguientes datos.- número de avión destino- hora de partida - expresada como hh:mm - - duración estimada de vuelo - expresada como hh:mm -- aerolínea.Se sabe que existen aviones que parten un día y arriban al día siguiente.

9. Se dispone de tres formatos diferentes de archivos de texto donde se almacenan datos de empleados. Los formatos se indican al pié.Hacer un programa en 'C', para cada uno de los formatos de archivos suministrados, que permitan leer uno de los archivos y grabar los datos obtenidos en un archivo binario con la siguiente estructura:

#define N 16#define M 32typedef struct {

char nombre [N]; char domicilio [M]; int dd,mm, aa; /* fecha de emisión del cheque*/ int plazoValidez;

}Cheque;

Nota: si la longitud del dato informado en el archivo de texto es mayor al

especificado en la estructura, este dato deberá guardarse truncado. Los espacios de los valores de texto que se encuentren al final de la

cadena deberán ser eliminados.

Archivo 1: Todos los campos de este archivo son de longitud fija. 1 2 3 4 5 6 123456789012345678901234567890123456789012345678901234567890123

Pérez Juan 2008021130 Corrientes 348 González Ana M 2008011515 Juan de Garay 1111 3er piso dto A

Page 11: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Archivo 2: Todos los campos de este archivo son de longitud fija.Pérez Juan#2008021130#Corrientes 348#González Ana M#2008011515#Juan de Garay 1111 3er piso Dto A#

Archivo 3: Todos los campos de este archivo están precedidos de un número de dos dígitos que indica la longitud del campo a leer.10Pérez Juan10200802113014Corrientes 34814González Ana M10200801151534Juan de Garay 1111 3er piso dto A

Page 12: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo práctico – Línea de comandos

Desarrollar los siguientes programas en lenguaje C. Todo el ingreso de datos en los mismos debe realizarse a través de la línea de comandos, no permitiéndose el uso de funciones de lectura de teclado como scanf(), gets(), etc. Los programas deben validar la cantidad y tipo de los parámetros recibidos. En caso de detectarse algún error se imprimirá un texto de ayuda que indique el modo de uso del programa. Ese mismo texto se mostrará cuando el único parámetro recibido sea /? o /h.

1. Elevar un número real a una potencia entera, imprimiendo el resultado.

2. Imprimir un mensaje de una o más palabras centrado en pantalla. Si el mensaje es muy extenso deberá dividirse en varias líneas. La pantalla tiene un ancho de 80 columnas.

3. Escribir un programa que ocasione una demora con una cantidad de milisegundos recibida como parámetro.

4. Dada una fecha expresada en tres enteros, sumarle una cantidad de días e imprimir la nueva fecha.

5. Dada una fecha expresada en tres enteros, imprimir el valor juliano de la misma. El 1° de enero corresponde al día 1.

6. Copiar un archivo con otro nombre.

7. Imprimir por pantalla el contenido de un archivo de texto.

8. Desarrollar un generador de referencias cruzadas para un programa fuente en lenguaje C.

Page 13: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo práctico – Asignación dinámica de memoria

1. Un supermercado desea tener un programa que le permita registrar los datos de un producto. En el mismo no existe más de 1000 variedades de productos. Realizar un programa ABM cuyos datos deberán estar ordenados por nombre. Nota: usar un vector de punteros a estructurasEl programa deberá contemplar las siguientes funciones: altaProd(): parámetros recibidos serán el vector y la cantidad cargados hasta el momento.

Esta función deberá permitir cargar productos hasta que se llene el vector o hasta que ingresen un nombre vacío en el campo nombre.

bajaProd(): parámetros recibidos serán el vector y la cantidad cargados hasta el momento. Esta función deberá permitir ingresar un nombre y eliminar los datos del producto.

mostrarProductos(): parámetros recibidos serán el vector y la cantidad cargados hasta el momento. Esta función deberá permitir mostrar los datos de todos los productos del supermercado.

2. Hacer una función que reciba como parámetro un puntero a la cabeza de una lista simple e invierta el orden de sus nodos, sin destruir y crear nodos nuevos y sin intercambiar la información contenida en los mismos.

3. Realizar una función que determine si todos los elementos de dos listas son iguales (puede haber elementos repetidos), sin destruir y crear nodos nuevos y sin intercambiar la información contenida en los mismos.

4. Implementar, sobre una lista vinculada, el tipo de datos PILA, con las siguientes operaciones:apilar(DADA, e): apila el elemento e en la pila DADA.desapilar (DADA): desapila un elemento de la pila DADA.tope(DADA): devuelve la información que se encuentra en el tope de la pila DADA.pilaVacia (DADA): devuelve verdadero si la pila DADA está vacía, y falso en caso contrario.inicializarPila(DADA): inicializa la pila DADA vacía.Probar las funciones cargando y mostrando una pila de elementos enteros.

5. Implementar, sobre una lista vinculada, el tipo de datos COLA, con las siguientes operaciones:acolar(DADA, e): agrega el elemento e en la cola DADA.desacolar(DADA): retira el primer elemento de la cola DADA.primero(DADA) : devuelve el primer elemento de la cola DADA.colaVacia(DADA): devuelve verdadero si la cola DADA está vacía, y falso en caso contrario.inicializarCola(DADA): inicializa la cola DADA vacía.Probar las funciones cargando y mostrando una pila de elementos enteros

6. Modificar el ejercicio 1 para utilizar una lista enlazada simple construida en forma ordenada en lugar de un vector de punteros a estructuras.

7. Modificar el ejercicio anterior para utilizar una lista doblemente enlazada construida en forma ordenada en lugar de una lista simple.

Page 14: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo Práctico - Recursividad

1. La función de Ackermann int A(int m, intn) se define de la siguiente forma:

n+1 si m = 0A(m-1,1) si n = 0A(m-1,A(m,n-1)) de otro modo

Realizar un cuadro con los valores que adopta la función para valores de m entre 0 y 3 y de n entre 0 y 4.

2. Dados dos parámetros de tipo entero, devolver el resultado de calcular el Máximo Común Divisor de dos enteros no negativos, basándose en las siguientes fórmulas matemáticas:

MCD(X,X) = XMCD(X,Y) = MCD(Y,X)Si X>Y => MCD(X,Y) = MCD(X-Y,Y).

Utilizando la función MCD anterior calcular el MCD de todos los elementos de una cola dada, sabiendo que: MCD(X,Y,Z) = MCD(MCD(X,Y), Z).

3. Realizar una función que muestre los N primeros números naturales en forma ascendente.

4. Realizar una función que devuelva la suma de los N primeros números naturales.

5. Realizar una función que devuelva el producto de dos números enteros, por sumas sucesivas.

6. Realizar una función que devuelva el resto de dos números enteros, utilizando restas sucesivas.

7. Realizar una función que devuelva la cantidad de dígitos de un número entero.

8. Realizar una función que reciba un número binario, y lo devuelva convertido a base decimal.

9. Realizar una función que imprima los valores por filas de una matriz de NxM.

10. Realizar una función que sume todos los elementos de una matriz de NxM.

11. Realizar una función que devuelva el elemento de valor mínimo de una matriz de NxM.

12. Realizar una función que imprima los valores de una lista en orden inverso.

13. Realizar una función que devuelva la suma de todos los elementos de la lista.

14. Realizar una función que devuelva la cantidad de elementos que posee la lista.

15. Realizar una función que devuelva el elemento de valor mínimo de una lista.

16. Realizar una función que devuelva el número de nodo en que se haya un valor dado; en caso de no encontrarlo devolver -1.

17. Realizar una función que permita insertar un dato al final de la lista.

18. Realizar una función que permita eliminar un dato de la lista.

19. Realizar una función que permita invertir una lista sin tener que eliminar ni generar nuevos nodos.

Page 15: Guia C UADE

FACULTAD DE INGENIERÍA Y CIENCIAS EXACTASIngeniería en InformáticaProgramación I

Trabajo Práctico - Árboles

9. Realizar una función que devuelva la cantidad de elementos que tiene un árbol.

10. Realizar una función que devuelva la suma de elementos que contiene el árbol.

11. Realizar una función que devuelva la cantidad de hojas que tiene un árbol.

12. Realizar una función que devuelva la cantidad de elementos que no son hojas.

13. Realizar una función que devuelva cuantos elementos pares posee el árbol.

14. Realizar dos funciones tal que devuelvan, una el valor mínimo y la otra el valor máximo de un árbol.

15. Realizar una función que devuelva si un elemento pertenece al árbol.

16. Realizar una función que devuelva el nivel que ocupa un elemento en un árbol.

17. Realizar una función que devuelva la altura del árbol.

18. Realizar una función que devuelva el orden de un elemento en un árbol (es decir cuantos elementos hay más pequeños que este).

19. Realizar una función que determine si un árbol está completo.

20. Realizar una función que determine si un árbol es perfecto.

21. Realizar una función que determine si dos árboles tienen la misma cantidad de elementos

22. Realizar una función que determine si dos árboles son idénticos.

23. Realizar una función que dado un valor K, muestre por pantalla todos los elementos del árbol que sean mayores que K.

24. Realizar una función que determine el valor del primer ancestro común de dos elementos.