UNIVERSIDAD TECNOLOGICA NACIONAL FAC. REG. GRAL. PACHECO
TECNICO SUPERIOR EN PROGRAMACION PROGRAMACION II GUIA DE TRABAJOS PRACTICOS
Programación II
Página: 1
TRABAJO PRACTICO Nº 1 REPASO GENERAL En los ejercicios de todos los TP se sugiere utilizar punteros en la resolución de los mismos, en lugar de la notación de subíndice. 1) Dada una lista de 10 números enteros, cargarlos en un vector. Luego determinar e informar cual es el máximo de ellos. Resolverlo de los siguientes modos: a) Suponer que el máximo es único. b) Suponer que el máximo podría estar repetido, por lo tanto informar cuantas veces aparece en el vector. 2) Dada una lista de 10 números enteros, cargarlos en un vector. Luego determinar e informar cual es el máximo de ellos y en que posición dentro del vector se encuentra. Considerar que las posiciones del vector empiezan desde el cero. Resolverlo de los siguientes modos: a) Suponer que el máximo es único. b) Suponer que el máximo podría estar repetido, por lo tanto informar en que posiciones aparece en el vector. 3) Dada una lista de 10 números enteros, cargarlos en un vector. Luego ordenar el vector en forma descendente (de mayor a menor) e informar por pantalla el nuevo vector. 4) Dada una lista de 10 números enteros, cargarlos en un vector. Luego ordenar el vector en forma descendente (de mayor a menor) e informar por pantalla el nuevo vector, indicando además para cada número cual era su orden original antes de ser ordenado. Nota: En lista original el orden comienza desde 1 y llega hasta 10. Resolver el ejercicio de los siguientes modos: a) Usando 2 vectores independientes. b) Usando un vector de registros. 5) Dada una lista de 15 códigos de clientes, todos números de 3 dígitos y desordenados, cargarlos en un vector. Ingresar luego un código de entre los 15 anteriores y determinar e informar la posición del mismo dentro del vector. 6) Dada una lista de 15 códigos de clientes, todos de tipo 5 caracteres y desordenados, cargarlos en un vector. Ingresar luego un código de entre los 15 anteriores y determinar e informar la posición del mismo dentro del vector. 7) Dada una lista de 15 códigos de clientes, todos números de 3 dígitos y ordenados de menor a mayor, cargarlos en un vector. Ingresar luego un código de entre los 15 anteriores y determinar e informar la posición del mismo dentro del vector. 8) Dada una lista de 15 códigos de clientes, todos números de 3 dígitos y ordenados de menor a mayor, cargarlos en un vector. Ingresar luego un código, si el mismo es encontrado determinar e informar la posición del mismo dentro del vector. Si fuera un código inexistente informar con un mensaje de error. 9) Dada una lista de 15 números cargarlos en una matriz de 3 filas y 5 columnas. Luego informar para cada fila cual es el máximo valor y en que orden se encuentra dentro de la misma.
Programación II
Página: 2
10) Dada una lista de 15 números cargarlos en una matriz de 3 filas y 5 columnas. Luego informar para cada columna cual es el mínimo valor y en que orden se encuentra dentro de la misma. 11) Dada una lista de 15 números cargarlos en una matriz de 3 filas y 5 columnas. Luego ordenar cada fila de la matriz en forma descendente (de mayor a menor) e informar por pantalla como quedó cada fila. 12) Dada una lista de 15 números cargarlos en una matriz de 3 filas y 5 columnas. Luego ordenar cada fila de la matriz en forma descendente (de mayor a menor) e informar por pantalla como quedó cada fila reordenada y cual era el orden de cada número en la fila de la matriz original. 13) Dada una lista de 15 números cargarlos en una matriz de 3 filas y 5 columnas. Luego ordenar cada columna de la matriz en forma descendente (de mayor a menor) e informar por pantalla como quedó cada columna. 14) Dada una lista de 15 números cargarlos en una matriz de 3 filas y 5 columnas. Luego ordenar cada columna de la matriz en forma descendente (de mayor a menor) e informar por pantalla como quedó cada columna reordenada y cual era el orden de cada número en la columna de la matriz original. 15) Una empresa de transporte de carga por camión posee 30 tarifas distintas de acuerdo al destino de los envíos que deba realizar. Dispone de un lote de registros con la siguiente información: Número de Tarifa (4 dígitos, arbitrarios y no correlativos) Importe por KM. Este primer lote no viene ordenado. A continuación dispone de un segundo lote de registros con la información de los envíos que se realizaron durante la semana pasada, conteniendo cada uno de ellos los siguientes campos: Número de Camión (1 a 100) Número de Tarifa Kms. recorridos Este lote finaliza con un registro con número de camión igual a cero. Puede haber más de un registro para el mismo número de camión y número de tarifa. Se nos pide realizar un programa que determine e informe: a) El total recaudado por cada tarifa. b) Un listado con el siguiente diseño, ordenado por total recaudado en forma descendente: Número de Camión Total recaudado (en $) 99 99999.99 99 99999.99 . . . . c) Indicar el número de camión que recorrió la menor cantidad de kms. en total entre los que realizaron viajes, los que no realizaron viajes no tenerlos en cuenta. Observación: Cada camión realizó cero, uno o varios viajes.
Programación II
Página: 3
16) Una empresa telefónica desea realizar la facturación de sus abonados por medio de un programa. Para ello dispone de la siguiente información de sus 20 tarifas: Número de Tarifa (3 dígitos, arbitrarios y no correlativos) Cantidad de llamadas libres Abono de la tarifa Importe de cada una de las llamadas excedidas El importe que se debe facturar a un abonado se determina con el importe del abono de la tarifa correspondiente, al cual se le adiciona el importe por cada una de las llamadas excedidas (si las hubiera). Existe un segundo lote de registros con la siguiente información: Número de Abonado (5 dígitos, arbitrarios y no correlativos) Número de Tarifa (3 dígitos, arbitrarios y no correlativos) Cantidad de llamadas realizadas El fin de esta información está dado por un número de abonado igual a cero y no existe ningún orden en los mismos. La empresa nos informó que hay como máximo 500 abonados. Se pide emitir un listado con el importe que pagará cada abonado, ordenado de mayor a menor por el importe, con el siguiente formato: Nro. de Abonado Nro. de Tarifa Importe a Pagar 99999 999 500,00 99999 999 480,00 . . . 17) Una empresa tiene un lote de registros con todas la ventas que se efectuaron durante año anterior. Cada registro contiene la siguiente información: Número de factura Día (1 a 31) Mes (1 a 12) Código de artículo (3 dígitos no correlativos) Cantidad vendida Este lote finaliza con un registro con número mes igual a cero. Con esta información se debe generar un listado con el siguiente formato: Código de Artículo Cantidad Total Vendida 999 999
9999 9999
Nota: La empresa nos informó que tiene un total de 300 artículos diferentes. No todos aparecen en el lote de ventas anterior, puesto que de algunos no se vendió ninguna unidad. Sin embargo, un mismo artículo puede aparecer varias veces repetido en el lote. 18) Una empresa dispone de un lote de registros desordenados con los siguientes datos de sus 200 clientes: Número de Cliente (4 dígitos no correlativos) Zona Geográfica (1 a 5) Saldo Inicial - Código de Estado: ‘A’(activo), ‘I’(inactivo) Programación II
Página: 4
-
Denomimación
Programación II
Página: 5
Se dispone de un segundo lote de registros desordenados con todas las ventas del día que efectuó la empresa. Cada registro contiene los siguientes datos: Número de Cliente (4 dígitos no correlativos) Importe de la Venta Este lote finaliza con un registro con importe igual a cero. Podría contener ventas erróneas de clientes que están Inactivos. Realizar un programa para determinar e informar: a) Procesar las ventas y actualizar el Saldo del Cliente. b) Listar los números de los clientes que aparecieron en el segundo lote y cuyo código de estado era Inactivo (ventas erróneas), con el siguiente formato: CLIENTES INACTIVOS CON VENTAS Número de Cliente 9999
Zona 99
Cada cliente debe listarse una sola vez, aunque haya habido varias ventas erróneas. c) Listar aquellos clientes que al finalizar el proceso quedaron con saldo deudor mayor a $ 500., con el siguiente diseño, y ordenado por saldo de mayor a menor. SALDOS DEUDORES Nro. de Cliente Denominación Saldo xxxx Perez, Juan 800.90 xxxx Garcia, Roberto 781.45 19) Una empresa dispone de un lote de registros con las ventas acumuladas por los vendedores desde el inicio del mes hasta el día anterior, con el siguiente diseño de registro: Código de Vendedor (4 dígitos no correlativos) Cantidad Vendida acumulada desde inicio del mes En este lote no aparecen todos los vendedores, puesto que algunos no vendieron aún ningún artículo en el mes. El lote finaliza con un registro con cantidad vendida igual a cero. Se dispone de un segundo lote con los datos de las ventas del día de hoy con el siguiente detalle: Número de Cliente (1 a 10.000) Código de Vendedor (4 dígitos no correlativos) Número de Artículo (1 a 35) Cantidad Vendida El fin del lote se indica con un registro con número de cliente igual a cero. En este segundo lote pueden aparecer vendedores que no figuraban en el primero. En total la empresa cuenta con un máximo de 50 vendedores. Se dispone de un tercer lote con los datos de los 35 artículos, ordenado secuencialmente por número de artículo y con los siguientes datos: Número. de Artículo (1 a 35) Precio Unitario Stock disponible Stock mínimo Confeccionar un programa para:
Programación II
Página: 6
a) Informar el número de vendedor que más pesos recaudó, totalizando las ventas del día de hoy. b) Informar por listado aquellos artículos que hayan quedado con stock disponible por debajo del stock mínimo, con el siguiente formato: ARTÍCULOS CON STOCK INFERIOR AL MÍNIMO Art. Stock Disp. Stock Mínimo Diferencia xx xxx xxx xxx 20) Indique cuales son los resultados que emite el siguiente programa, justificando claramente como llegó a los mismos. # include <stdio.h> void cargar(int (*)[5]); /* void cargar(int [3][5]); */ void calcular(int (*)[5],int *); /* void calcular(int [3][5],int [5]); */ void mostrar(int *); void main (void) { int mat[3][5]; int vec [5]; cargar(mat); calcular(mat,vec); mostrar(vec); } void cargar(int (*m)[5]) { int i,j; for (i=0;i<5;i++) for (j=0;j<3;j++) if (i = = j) *(*(m+j)+i)=i*j; else *(*(m+j)+i)=0; } void calcular (int (*m)[5], int *v) { int i,j,cont; for (i=0;i<3;i++) { cont = 0; for (j=0;j<5;j++) cont += *(*(m+i)+j); *(v+i)=cont; } } void mostrar (int *h) { int i;
Programación II
Página: 7
for (i=0;i<=2;i ++) printf(“Resultado: %d\n”, *(h+i)); } 21) Indique cuales son los resultados que emite el siguiente programa, justificando claramente como llegó a los mismos. # include <stdio.h> void cargar(int (*)[5]); /* void cargar(int [3][5]); */ void calcular(int (*)[5],int *); /* void calcular(int [3][5],int [5]); */ void mostrar(int *); void main (void) { int mat[3][5]; int vec [5]; cargar(mat); calcular(mat,vec); mostrar(vec); } void cargar(int (*m)[5]) { int i,j; for (i=0;i<5;i++) for (j=0;j<3;j++) *(*(m+j)+i)=i+j; } void calcular (int (*m)[5], int *v) { int i,j,suma;
/* void calcular(int m[3][5],int v[5]); */
for (i=0;i<3;i++) { for (suma=0,j=0;j<5;j++) suma += *(*(m+i)+j); *(v+i)=suma; } } void mostrar (int *h) { int i; for (i=4;i>=0;i ) { printf(“Resultado: %d\n”, *(h+i)); } } 22) Indique cuales son los resultados que emite el siguiente programa, justificando claramente como llegó a los mismos. # include <stdio.h> # include
Programación II
Página: 8
void cargar(int (*)[5]); void mostrar(int (*)[5]); void main() { int mat[3][5]; clrscr(); cargar(mat); mostrar(mat); getch(); } void cargar(int m[][5]) { int i, j; for(i=0;i<3;i++) for(j=0;j<5;j++) { if((ij)= =0) *(*(m+i)+j))=10; } } void mostrar(int (*m)[5]) { int i,j; for(j=0;i<5;j++) for(i=0;i<3;i++) { printf("%d\n",*(*(m+i)+j)); } } 23) Indique cuales son los resultados que emite el siguiente programa, justificando claramente como llegó a los mismos. #include <stdio.h> #define EOS '\0' void quehace(char *,char *); void main (void) { char cad1[30],cad2[30]; int cant; clrscr(); printf("Ingrese una cadena.\n"); gets(cad1); printf("Ingrese una cadena.\n"); gets(cad2); quehace(cad1,cad2); printf("El resultado es: \n"); puts(cad1); }
Programación II
Página: 9
void quehace(char *s,char *t) { char *p,*fin; for (p=s;*p;p++) ; fin=p; for (p=t;*fin++=*p;p++) ; } 24) Indique cuales son los resultados que emite el siguiente programa, justificando claramente como llegó a los mismos. #include <stdio.h> #define EOS '\0' void quehace(char *,char *); void main (void) { char cad1[30],cad2[30]; int cant; clrscr(); printf("Ingrese una cadena.\n"); gets(cad1); printf("Ingrese una cadena.\n"); gets(cad2); quehace(cad1,cad2); printf("El resultado es: \n"); puts(cad1); } void quehace(char *s,char *t) { char *p,*fin,*r; for (p=s;*p;p++) ; fin=p; for (r=t;*r;r++) ; for (p=t;*fin++=*p;p++) ; return rt; }
Programación II
Página: 10
TRABAJO PRACTICO Nº 2 ARCHIVOS 1) Se dispone de la información de los 10 artículos de una empresa y se desea grabar la misma en un archivo. Cada registro contiene la siguiente información: Número de Artículo (1 a 10) Descripción (string[30]) Precio Unitario (float) Confeccionar el diagrama y el programa C para resolver el problema. 2) Se dispone de la información de las ventas de un comercio y se desea grabar la misma en un archivo. Cada registro contiene la siguiente información: Número de Artículo (1 a 10) Número de Cliente (entero) Cantidad. de unidades vendidas (entero) El lote finaliza con un registro con número de artículo negativo. Puede haber varios registros para el mismo artículo y para el mismo cliente. Confeccionar el diagrama y el programa C para resolver el problema. 3) Confeccionar el diagrama y el programa C para leer e imprimir el archivo generado en el ejercicio 1. 4) Se dispone de un archivo de artículos con registros que contienen la siguiente información: Número de Artículo (1 a 10) Descripción (string[30] Precio Unitario (float) Los registros se encuentran desordenados. Se dispone de un segundo archivo con la información de las ventas de los artículos, cada registro contiene la siguiente información: Número de Articulo (1 a 10) Número de Cliente (entero) Cantidad. de unidades vendidas Puede haber varios registros para el mismo artículo. Determinar e informar: a) Cada uno de los números de los artículos que no registraron ventas. b) Un listado ordenado en forma decreciente por monto con el siguiente formato: Número de Artículo 99 99
Monto total obtenido por ventas 9999.99 9999.99
Observación: Para probar el ejercicio se pueden crear los archivos de entrada utilizando los programas de los ejercicios 1 y 2 respectivamente. 5) Se dispone de un archivo de artículos con registros que contienen la siguiente información: Programación II
Página: 11
Número de Artículo (1 a 50000) Descripción (string[30] Precio Unitario (float) Los registros se encuentran ordenados correlativamente por número de artículo. Se dispone de un segundo archivo con la información de las ventas de los artículos, cada registro contiene la siguiente información: Número de Articulo (1 a 50000) Cantidad de unidades vendidas Puede haber varios registros para el mismo artículo. Determinar e informar el total recaudado por la empresa en concepto de ventas. 6) Una empresa dispone del archivo SALDOS.DAT, ordenado por número de cliente, con los siguientes datos de sus 250 clientes: Número de Cliente (1 a 250) Razón Social (string[30]) Importe Total Facturado Total de pagos efectuados Saldo Deudor (Importe Total Facturado – Total de pagos efectuados) Código de Estado: A(activo), I(inactivo) Se dispone de un segundo archivo, VENTAS.DAT, con todas las ventas del día que efectuó la empresa. Cada registro contiene los siguientes datos: Cliente (1 a 235) Zona (0 a 99) Importe de la Venta Este archivo se encuentra desordenado y puede haber varios registros para el mismo cliente y zona. Puede haber registros erróneos con ventas a clientes inactivos. Realizar un programa C para: a) Actualizar a partir de las ventas, los campos Importe Total Facturado y Saldo Deudor) de cada cliente en el archivo SALDOS.DAT. b) Listar los números de los clientes y la zona de las ventas que no se pueden procesar por no estar el cliente ACTIVO, con el siguiente formato: CLIENTES INACTIVOS CON VENTAS Número de Cliente Zona xxxx xx Cada cliente se debe informar una sola vez. c) Listar aquellos clientes activos que al finalizar el proceso quedaron con saldo deudor mayor a $ 500., con el siguiente diseño: SALDOS DEUDORES Nro. de Cliente Razón Social Saldo xxxx Perez, Juan 800.90 . . . . . . xxxx Garcia, Roberto 501.45 Programación II
Página: 12
7) Una empresa dispone del archivo VENTAS.AAA con las ventas acumuladas por sus vendedores hasta la fecha de ayer, con el siguiente diseño de registro: Código de Vendedor (string[4]) Número de Artículo (1 a 35) Cantidad Vendida (entero, acumulado hasta el día de ayer) Hay un total de 12 vendedores, y no todos los vendedores vendieron todos los artículos. Las ventas se encuentran discriminadas por vendedor y por artículo. Se dispone de un segundo archivo, VENTAS.NUE, con los datos de las nuevas ventas a la fecha de hoy con el siguiente detalle: Número de Cliente (1 a 500.000) Razón Social (string[25]) Código de Vendedor (string[4]) Número de Artículo (1 a 35) Cantidad Vendida Se dispone de un tercer archivo, ARTIC.DAT, con los datos de los 35 artículos, ordenado secuencialmente por número de artículo y con los siguientes datos: Número de Artículo (1 a 35) Descripción (string[35]) Precio Unitario Stock disponible Stock mínimo Confeccionar un programa C para: a) Emitir un listado con la información de cada venta efectuada y con el siguiente diseño: VENTAS EFECTUADAS AL XX DE XXXXXXXXXXX DE 20XX Cliente Artículo Descripción Cantidad Precio Importe Unitario Total xxxxxx xx TV.Color xx xxx.xx xxxx.xx . . . . . . . . . . . . La fecha del día debe ser leída desde el sistema. b) Informar el código de vendedor que recaudó más dinero en total considerando solamente las ventas del día de la fecha. c) Generar un archivo VENTAS.BBB con igual diseño que VENTAS.AAA, con las ventas actualizadas. d) Informar por listado aquellos artículos que hayan quedado con stock disponible por debajo del stock mínimo, con el siguiente formato: ARTICULOS CON STOCK INFERIOR AL MINIMO Art. Descripción Stock Disp. Stock Mínimo Diferencia xx xxxxxxxxx xxx xxx xxx . . . . . 8) Una facultad dispone de un archivo llamado INSCRIP.DAT, con la siguiente información:
Programación II
Página: 13
Número de Legajo (6 dígitos) Apellido y Nombre (string[30]) Código de Materia (4 dígitos) Para cada alumno que se inscribió en una materia se generó un registro. Se ingresa por teclado el código de una materia y a continuación los resultados de los tres exámenes parciales de los distintos alumnos que se inscribieron en esa materia. Número de Legajo Nota Primer Parcial Nota Segundo Parcial Nota Tercer Parcial El fin de los datos se indica con un número de legajo negativo. Se pide confeccionar un programa C para: a) Informar la cantidad de alumnos que no aprobaron ningún parcial. b) Informar los alumnos de promoción directa (nota ocho o más en los tres parciales) PROMOCION DIRECTA Nro. Legajo Apellido y Nombre xxxxxx xxxxxxxxxxxxxxxxxx ... ..... c) Informar aquellos legajos ingresados por teclado que no figuran en el archivo de inscripción en esa materia, con el siguiente formato: LEGAJOS INEXISTENTES EN INSCRIPCION xxxxxx .. Nota: Hay como máximo 50 alumnos inscriptos en cada materia. 9) Una empresa posee 14 almacenes y en cada uno tiene un máximo de 700 productos. Para ello dispone de un archivo, ALMAC.DAT, con la información de todos los productos de todos los almacenes con el siguiente diseño de registro: Código de almacén (string[4]) Número de producto (1 a 5000) Nombre del producto (string[30]) Saldo Existente Un mismo producto puede encontrarse en distintos almacenes y el archivo se encuentra ordenado por código de almacén. Se ingresa por teclado el código de un almacén y a continuación los movimientos de ingreso y egreso de productos que corresponden al mismo. Puede haber diversas operaciones por cada producto y se ingresan desordenadas. El fin se indica con una operación que tiene cantidad operada cero. Los datos que se ingresan son los siguientes:
Programación II
Página: 14
Número de producto Nombre del producto (string[30]) Cantidad operada con signo (+ si es ingreso, si es egreso) Los productos que no se encontraban previamente en el almacén, deben ser incorporados. Por esa razón se ingresa el nombre del producto en cada registro. Realizar un programa C para: a) Informar la existencia final de los productos del almacén luego de la actualización, y cuyo saldo ha quedado por debajo del promedio general del almacén procesado, con el siguiente diseño: PRODUCTOS CON SALDO POR DEBAJO DEL PROMEDIO Número Producto Nombre Producto Saldo xxx xxxxxxxxxxxxxxx xxx.xx . .. .. b) Grabar en el archivo ALMAC2.DAT los saldos finales de todos los artículos en todos los almacenes, ordenado por código de almacén y diseño idéntico a ALMAC.DAT. 10) Una empresa que comercializa un máximo de 500 artículos, dispone del archivo STOCK.DAT', ordenado secuencialmente por número de artículo, donde cada registro contiene: Número de Artículo (5 dígitos no correlativos) Unidades en Stock (entero) Precio Unitario (float) Se dispone de un segundo archivo con las ventas realizadas en el año, llamado ‘VENTAS.DAT' con la siguiente información por registro: Número de Artículo (5 dígitos no correlativos) Número de Cliente (1 a 300) Mes de Venta (1 a 12) Cantidad de Unidades Vendidas (entero) Estos registros se encuentran desordenados. Se pide determinar e informar: a) Un listado con los importes adquiridos por los clientes que compraron durante el año en 8 o más meses, ordenado en forma ascendente por número de cliente con el siguiente formato: Cliente Ene Feb Mar Abr May ..... xxx xxx.xx xxx.xx xxx.xx xxx.xx xxx.xx ..... xxx xxx.xx xxx.xx xxx.xx xxx.xx xxx.xx ..... b) Un listado, ordenado en forma ascendente por número de artículo, informando solamente aquellos que han quedado al fin del proceso con saldo cero. Observación: Utilizar dos programas para generar los archivos 'STOCK.DAT' y 'VENTAS.DAT' para usar como datos de prueba. 11) Una municipalidad desea efectuar un control de la cobranza del Impuesto Municipal en los 6 bimestres de un año.
Programación II
Página: 15
Existen 500 contribuyentes, numerados del 1 al 500. Se dispone del archivo 'IMPORT.DAT', ordenado por añobimestre, con 30 registros, conteniendo los importes de los impuestos de los últimos cinco años. Cada registro contiene: Año del Bimestre (1999 a 2003) Bimestre (1 a 6) Importe (float) Otro archivo, llamado 'CONTRI.DAT', ordenado secuencialmente por número de contribuyente nos informa sobre cada pago efectuado. Cada registro contiene: Número de Contribuyente (1 a 500) Año del Impuesto Bimestre Si el contribuyente no pago algún bimestre, entonces ese registro no existe en el archivo. Se pide confeccionar un programa para: a) Ingresar como primer dato por teclado el número de año a procesar (19xx/20xx). b) Informar las deudas de cada contribuyente, según el siguiente formato: DEUDAS REGISTRADAS EN EL AÑO: 19XX/20XX CONTRIBUYENTE BIMESTRES: 123456 IMPORTE ADEUDADO XXXX X X XXXX.XX XXXX X X X XXXX.XX Nota 1: Los pagos que no son del año ingresado por teclado se deben ignorar. Nota 2: Utilizar un programa para generar los archivos 'IMPOR.DAT' y 'CONTRI.DAT' para usar como datos de prueba. 12) Se ha efectuado un torneo de golf, a 4 vueltas de 18 hoyos cada una. Participaron 100 jugadores, los cuales fueron codificados para su identificación. Existe un archivo llamado JUGADOR.DAT con la información de cada uno de ellos, cada registro contiene: Código de Jugador (string[3]) Nombre y Apellido del jugador (string[30]) El archivo está ordenado por código de jugador. Para procesar los resultados finales, se ha grabado un segundo archivo llamado HOYOS.DAT con registros con la siguiente información: Código de Jugador (string[3]) Número de Hoyo (1 a 18) Cantidad de golpes (un número entero) Se informa la cantidad de golpes que necesitó un jugador para cumplir con cierto número de hoyo. El archivo está desordenado. Los directores del torneo necesitan conocer, para cada uno de los 18 hoyos, cual fue el jugador que empleó menor cantidad de golpes en la suma de las 4 vueltas. En caso que haya habido más de un jugador en esas condiciones, los directores necesitan conocer a todos pues los jugadores deberán compartir el premio. Programación II
Página: 16
Se debe emitir un listado con el siguiente diseño: Número de Hoyo Código Jugador Nombre y Apellido 1 xxx xxxxxxxxxxxxxxxx xxx xxxxxxxxxxxxxxxx 2 xxx xxxxxxxxxxxxxxxx xxx xxxxxxxxxxxxxxxx . . . . . . Nota: puede ocurrir que algunos jugadores hayan abandonado el torneo sin completar las cuatro vueltas, por lo que no se los tomará en cuenta para el listado solicitado. 13) Una empresa dispone de un archivo, “Legajos”, con un total de 400 registros, con los datos de sus empleados, cada uno de los cuales tiene la siguiente información: Número de legajo (5 dígitos no correlativos) Apellido y Nombre (25 caracteres) Antigüedad Categoría (1 a 5) Valor Horario Este archivo se encuentra desordenado. Se dispone de segundo archivo, “Horas”, con la información con las horas trabajadas por los empleados durante el año anterior, cada registro contiene la siguiente información: Número de legajo Día Mes Cantidad de horas trabajadas Este archivo se encuentra desordenado. Hacer un programa que determine e informe: a) Un listado de lo que trabajó y ganó en el año en total cada uno de los empleados, con el siguiente formato: Número de Legajo Apellido y Nombre Horas Anuales Trabajadas Total Ingresos ($) 99999 XXXXXXXXXXX 9999 99999,99 Este listado debe emitirse ordenado por Número de Legajo. b) Informar el número de categoría cuyos empleados hayan trabajado menos horas en total. c) Informar para cada empleado el día en que haya trabajado más horas para cada mes. Empleado: XXXXXXX Mes: Enero Día que trabajó más horas: XX Mes: Febrero Día que trabajó más horas: XX d) Informar el Legajo y Apellido/Nombre de cada uno de los empleados que hayan registrado horas trabajadas durante 8 ó más meses en el año. (no importa si los meses son correlativos
Programación II
Página: 17
14) La municipalidad dispone de un archivo, “Motos”, con los datos de las motos radicadas en el partido. Son 500 registros cada uno de los cuales tiene la siguiente información: Patente de la Moto (4 caracteres) Apellido y Nombre del Titular (25 caracteres) Origen de la moto (‘N’=Nacional, ‘I’=Importada) Categoría (1 a 5) Impuesto Mensual Este archivo se encuentra ordenado por patente de la moto. Se dispone de segundo archivo, “Pagos”, con la información de los impuestos del año anterior pagados por los titulares de las motos. Cada registro contiene: Patente de la Moto (4 caracteres) Mes Pagado Este archivo se encuentra desordenado y sólo contiene información de aquellos meses que fueron pagados. Si el titular no pagó algún mes, no existirá el registro en el archivo. Sugerencia: Este segundo archivo NO se debe cargar en memoria puesto que es demasiado grande. Hacer un programa que determine e informe: a) Un listado del total recaudado por cada moto inscripta en el partido, con el siguiente formato: Patente Apellido y Nombre del Titular Total Meses Pagados Total Recaudación ($) XXXX XXXXXXXXXXX 99 99999,99 b) Informar cada una de las patentes de motos que no hayan registrado pagos en ningún mes. c) Informar la patente de la moto por la cual se haya recaudado más dinero. d) Informar la recaudación por categoría de motos. Categoría Recaudación ($) 1 9999,99 2 9999,99 15) Una empresa de aviación dispone de 100 vuelos semanales y desea sistematizar la emisión de pasajes. Para ello cuenta con un archivo, ‘VUELOS.DAT’ con la siguiente información de cada vuelo: Nro. de vuelo (3 dígitos, arbitrario y no correlativo) Cantidad de asientos libres en ese vuelo Ciudad Origen (string[3]) Ciudad Destino (string[3]) Precio de un pasaje en ese vuelo Este archivo no viene ordenado. La empresa une un total de 20 ciudades diferentes. En los vuelos se repiten las ciudades origen y destino. Existe un segundo archivo, ‘PEDIDOS.DAT’, con los pedidos realizados durante el día de la fecha, cada registro contiene: Número de pedido (4 dígitos) Número de vuelo solicitado (3 dígitos, arbitrario y no correlativo) Cantidad de asientos solicitados
Programación II
Página: 18
Teniendo en cuenta que sólo se aceptarán los pedidos si la cantidad de asientos disponibles es mayor o igual a los asientos solicitados, se pide: a) Indicar cual fue la ciudad de destino más solicitada teniendo en cuenta todos los pedidos. b) Informar el total recaudado por la venta de pasajes que hayan sido aceptados. c) Imprimir al finalizar del proceso un listado con el siguiente diseño: Nro. de Vuelo Cantidad Asientos Libres Cantidad de asientos Rechazados 999 999 99 999 999 99 Este listado debe salir ordenado por número de vuelo, de menor a mayor. 16) Una empresa cuenta con un archivo, CLIENTES.DAT, con la siguiente información de cada uno de sus 200 clientes: Código de Cliente (string[3]) Nombre y Apellido del Cliente (string[30]) Número de Vendedor (1 a 5) Antigüedad del Cliente Este archivo está ordenado por código de cliente. Cuenta con un segundo archivo, VENTAS.DAT, con la información de las ventas que se realizaron durante el año anterior Cada registro contiene la siguiente información: Nro. de Factura Código de Cliente (string[3]) Código de Artículo Vendido (string[4]) Importe de la Venta Mes de la venta Puede haber más de un registro para el mismo cliente y artículo. Se pide a partir de estos datos, determinar e informar: a) Un listado con el siguiente formato: Código de Artículo Importe Total Vendido xxxx 9999,99 . . . . Este listado deberá salir ordenado por código de artículo. La empresa comercializa un total de 30 artículos, pero no todos pudieron haberse vendido durante el año pasado. b) Un listado con el siguiente formato: Cód. del Cliente Ap. y Nombre Importe Total Vendido xxxx xxxxxxxxxxx 9999,99 . . . . . . Este listado deberá salir ordenado de mayor a menor por importe total vendido.
Programación II
Página: 19
c) Los códigos de los clientes que realizaron compras durante 3 meses consecutivos. d) Generar un archivo con los totales vendidos por vendedor. Cada registro debe contener: Número de Vendedor (1 a 5) Total Recaudado ($) en el año en esa zona e) Generar un archivo con los totales vendidos por zona. Cada registro debe contener: Número de Zona (1 a 5) Total Recaudado ($) en el año en esa zona 17) Una pizzería dispone de un archivo “Pizza.dat” con las pizzas que comercializa con el siguiente formato de registro: Código de pizza (string[4]) Descripción (string[20]) Precio (float) En el archivo “Bebidas.dat” tiene grabado los siguientes datos de las bebidas que vende: Código de bebida (1 a 30) Descripción (string[30]) Precio unitario (float) Cantidad de unidad en stock (entero) Stock mínimo El archivo está ordenado por código de bebida de menor a mayor. Al tomar el pedido, el mozo genera un ticket los siguientes datos: Número de mozo (1 a 15) Número de mesa (1 a 10) Código de pizza Cantidad de pizzas Código de bebida Cantidad de bebida Número de ticket Se supone que cada pedido tiene un sólo tipo de pizza, y un sólo tipo de bebida. Confeccionar un programa C para: a) A partir de cada ticket, emitir por pantalla el importe del pedido, y grabar los datos del ticket en un archivo “Ventas.dat”. b) Al final del día, informar para cada mozo y mesa el importe vendido. c) Al final del día, actualizar el archivo de bebidas, e informar las bebidas (código y descripción) que hayan quedado con stock menor al stock mínimo. Nota punto a): Tener en cuenta que se pide el importe para un sólo ticket. Se puede grabar el importe de cada ticket en el archivo, aunque no es imprescindible, ya que puede calcularse. Se puede confeccionar un programa que termine cuando se ingrese algún valor inexistente (ejemplo: nº de mozo igual a 0), o hacer un menú para resolver los 3 puntos. Nota puntos b) y c): Los datos de los puntos b) y c) deben calcularse al final del día, es decir, una vez que se haya terminado de facturar los tickets. Se puede realizar el procesamiento cada vez que se ingresa un ticket, o tomar los datos del archivo ventas.dat. Se recomienda la segunda opción. 18) Una empresa con varias sucursales dispone de un archivo con la información con las ventas realizadas a los clientes durante el año anterior. Cada registro contiene los siguientes campos:
Programación II
Página: 20
Número de Cliente (1 a 150) Día en el que se efectuó la venta (1 a 31) Mes en el que se efectuó la venta (1 a 12) Código del Vendedor que efectuó la venta (4 dígitos no correlativos) Importe de la venta Puede haber más de un registro para el mismo número de cliente, para el mismo día , para el mismo mes, etc. Existe un segundo archivo con la información de los vendedores de la empresa. Cada registro contiene los siguientes datos: Código de Vendedor (4 dígitos no correlativos) Sucursal donde trabaja el vendedor (1 a 10) Cada vendedor trabaja en una sola sucursal. Este archivo viene ordenado por código de vendedor de mayor a menor. A partir de esta información se pide determinar e informar: a) Informar cual fue el bimestre del año en el que el total de pesos recaudados por las ventas haya sido mayor. b) Informar para cada mes y para cada sucursal la venta individual de mayor importe y el código del vendedor que la realizó. c) Teniendo en cuenta que cada vendedor obtiene un 5% de comisión sobre las ventas, emitir un listado con las comisiones totales anuales por vendedor y por mes. Este listado debe salir ordenado de mayor a menor por código de vendedor y no se deben informar aquellos vendedores que no obtuvieron comisión. d) Informar para cada sucursal cuantos vendedores distintos trabajan en cada una de ellas. Nro. de Sucursal Cantidad Vendedores 1 5 2 1 . . . . 19) Una empresa textil que realiza ventas mayoristas y a consumidor final, dispone de un lote de registros con información de las 80 telas que fabrica y comercializa con el siguiente formato: Código de tela (1 a 80) Descripción (string[30]) Precio por metro cuadrado (float) Cantidad de metros en stock (entero) Cantidad de metros en stock mínimo (entero) El lote está desordenado. Por cada una de las ventas que realiza registra los siguientes datos Día de la venta (1 a 31) Código de tela (1 a 80) Cantidad de metros vendida (entero) Legajo del vendedor (string[3]) Tipo de venta (M: mayorista; F: consumidor final) El lote está desordenado y termina con un código de tela inexistente.
Programación II
Página: 21
En otro lote tiene los datos de los vendedores: Legajo del vendedor (string[3]) Nombre (string[30]) La empresa tiene 15 vendedores. A partir de los datos de las ventas del último mes se pide confeccionar un programa C que resuelva los siguientes puntos: a) Informar para cada día la cantidad de metros que se vendió de cada una de las telas, a los clientes mayoristas y a los clientes consumidor final. b) Calcular e informar el importe total recaudado en todo el mes por la compras de los clientes mayoristas y por la de los clientes consumidor final. Los clientes mayoristas tienen un descuento del 10%. c) Informar los nombres de los vendedores que vendieron más de 20 tipos distintos de telas en todas las ventas que hicieron durante el mes. d) Informar las telas que quedaron con la cantidad de metros en stock por debajo del stock mínimo. 20) Indicar los errores en el siguiente programa. Proponer la solución #include #include <stdio.h> void cargar(struct articulo *); void buscar(char *, struct articulo *); void mostrar(struct articulo *); void main() { struct articulo xx[10]; char nart[4]; int pos; cargar(xx); printf("Ingrese el artículo a buscar: "); scanf("%s", nart); pos=buscar(nart,xx); printf("\nEl artículo ocupa la posición: %d", pos); mostrar(xx); } void cargar(struct articulo p) { int i; for(i=0;i<10;i++) { scanf("%s",p[i].nart); scanf("%f",p[i].pu); } }
Programación II
Página: 22
void buscar(char *vb, struct articulo *p) { int i; for(i=0;i<10;i++) if(strcmp(p[i].nart,vb)==0) return i; return 1; } void mostrar(struct articulo *p) { int i; for(i=0;i<10;i++) { printf("%s",p[i].nart); printf("%f",p[i].pu); } } 21) Una facultad cuenta con los siguientes archivos: Un archivo con los datos de las correlatividades. Cada registro contiene: Código de Materia (string[4]) Código de Materia Correlativa (string[4]) Hay un registro por cada correlatividad. El archivo está ordenado por Código de Materia. Un archivo con las notas de los finales de los alumnos. Cada registro contiene: Nro. de Legajo (4 dígitos, no correlativos) Código de Materia (string[4]) Nota (1 a 10, 13 = Desaprobado, 410 = Aprobado) Puede haber varios registros para el mismo legajo y para la misma materia. ( El alumno pudo haber rendido la misma materia más de una vez) Un archivo con las solicitudes de inscripciones de los alumnos. Cada registro contiene: Número de Legajo (4 dígitos, no correlativos) Código de Materia a inscribirse (string[4]) Este lote finaliza con un registro con legajo igual a cero. Observaciones: a) La facultado tiene 50 alumnos, b) Se dictan solamente 20 materias, c) Ningún alumno rinde la misma materia más de 3 veces, d) Cada materia tiene un máximo de 5 correlativas, e) Hay materias sin correlativas. Se pide: Para cada solicitud de inscripción (lote 3) informar si se acepta o se rechaza. Si se rechaza informar cantidad de materias correlativas adeudadas (no rendidas o no aprobadas). Para ser aceptada una solicitud se deben tener todos los exámenes finales de las correlativas aprobados. b) Los códigos de las materias que no tienen correlativas. a)
22) Los encargados de la organización de las olimpíadas disponen de un archivo donde constan los atletas inscriptos para las competencias de atletismo. Cada registro contiene:
Programación II
Página: 23
Código de país (3 dígitos no correlativos) Cantidad de atletas inscriptos (entero) Hay un registro por país. Participan un total de 120 países Para cada una de las competencias, disponen de un archivo donde se indica: Número de competencia (1 a 20) Categoría (‘F’ para femenina, ‘M’ para masculina) Además disponen de un archivo para cada uno de los atletas que participó en las competencias realizadas, con el siguiente formato: Código de país Número de competencia (1 a 20) Tiempo (float) Ubicación (entero) En el archivo pueden aparecer más de un registro para un mismo país y una misma carrera. Se pide determinar e informar: a) Un listado que indique para cada país, la cantidad de competencias ganadas en cada categoría (‘F’ y ‘M’ por separado). b) El país de menor tiempo promedio en total entre todas las competencias. (El promedio de tiempos para cada competencia surge de la suma de los tiempos individuales de cada uno de los atletas, dividido la cantidad de atletas. Recuérdese que la división por cero es una operación inválida.) c) El país que mayor cantidad de atletas inscribió para las competencias. 23) Un consorcio desea liquidar las expensas correspondientes al mes pasado. Dispone de un archivo “Gastos.dat” con los gastos realizados durante ese mes con el siguiente formato: Rubro (entero entre 1 y 10) Monto gastado (float) En otro archivo, “Deuda.dat” tiene almacenado la deuda atrasada de cada uno de los 50 departamentos. Cada registro contiene: Número de unidad (100 a 149) Propietario (string [30]) Deuda acumulada (float) Cada departamento paga una parte proporcional de los gastos generales de acuerdo a la superficie que tiene, en relación con la superficie total del edificio. Para obtener el monto de los gastos generales, a los gastos realizados se le suma un 5% en concepto de gastos de administración. Dispone de un tercer archivo, “Area.dat”, donde guarda: Número de unidad (100 a 149) Superficie en metros cuadrados (float) Este archivo está ordenado por número de unidad. Confeccionar un programa C para: a) Determinar el rubro que mayor gasto ocasionó.
Programación II
Página: 24
b) Generar un archivo que almacene para cada uno de los departamentos los siguientes datos: Número de unidad Propietario Deuda acumulada Monto de las expensas del último mes. A la deuda acumulada se le aplica un 3% de interés si es menor a $ 500. Si es mayor, se le aplica un 5% de interés. c) Emitir un listado ordenado de mayor a menor por deuda total (deuda acumulada más monto de las expensas del último mes) con el siguiente formato Número de Unidad Propietario Deuda total 24) Una empresa que industrializa maceteros para plantas desea procesar los datos de los pedidos de sus clientes del mes en curso. Para ello cuenta con un archivo llamado “Artic.dat” que contiene los siguientes datos: Código de Artículo (1 al 70) Nombre (String[20]) Kg. de Cemento necesarios para su producción (float) Unidad mínima de fabricación (Entero. Indica cuanto se produce como mínimo) Precio de Venta Stock Actual (Entero) Este archivo se encuentra ordenado por código de Artículo Luego cuenta con un archivo llamado “Pedidos.dat” que contiene los pedidos efectuados por los clientes para los próximos 3 meses con la siguiente estructura Día Mes Año Cliente (1 al 500) Código de Artículo (1 al 70) Cantidad (entero) El día, mes y año corresponden a la fecha de entrega requerida para la entrega de los productos. Este archivo se encuentra ordenado por fecha de entrega requerida en forma ascendente. Confeccionar un programa C que realice lo siguiente: a) Listado de importe de ventas por cliente con el siguiente formato: Cliente xxx Total
Mes 1 xxxx xxxx
Mes 2 xxxx xxxx
Mes 3 xxxx xxxxx
b) Generar un archivo que contenga las ordenes de producción necesarias para elaborar los productos pedidos. La estructura del nuevo archivo “Ordenes.dat” debe contener: Número de Orden (entero) Día Mes Año Código de Artículo (1 al 70) Cantidad a Producir (entero) Kg de Cemento Necesarios (float) Programación II
Página: 25
Para cada artículo debe haber una orden de elaboración por mes como máximo. La fecha corresponde a la fecha más temprana del mes en la que hay que realizar una entrega (primer pedido que hay que entregar en el mes para ese artículo). Para calcular la cantidad a producir hay que tener en cuenta el stock actual, la cantidad vendida y la cantidad mínima de producción. (Ej. Si mi stock actual es 20, tengo 50 de pedidos y la cantidad mínima a producir es 100, debo emitir una orden de elaboración por 100. Si en cambio mi stock actual es 7, la cantidad pedida es 70 y la producción mínima es 40, debo producir 63.). Mientras el stock disponible alcance, no se deben generar órdenes de elaboración. El número de orden se debe generar como número de ubicación del registro en el archivo. c) Cantidad de Kg de cemento a comprar para cada mes. 25) Una municipalidad tiene un archivo de nombre “Pago.dat” de las tasas abonadas por los contribuyentes durante el último mes. Los registros cuentan con los siguientes datos: Número de contribuyente (string(6)) Día de pago (1 a 31) Código de lugar de pago (1 a 15) Forma de pago (‘C’: contado; ‘D’: débito automático) Importe abonado En el archivo anterior no figuran los contribuyentes que no abonaron las tasas. Este archivo está ordenado por número de contribuyente. Dispone además de otro archivo “Contribu.dat” con los datos de todos los contribuyentes del partido con los siguientes datos: Número de contribuyente (string(6)) Nombre del contribuyente (string (30)) Localidad (string (30)) Categoría del contribuyente (‘R’: residencial; ‘C’: comercial; ‘I’: industrial) Deuda acumulada (float) Importe mensual de la tasa (float) En otro archivo se indica los lugares de pago, “Lugares.dat”: Código de lugar de pago (1 a 15) Lugar de pago. (string(30)) El código 1 identifica a la municipalidad, y del 2 al 15 pertenecen a los bancos que cobran las tasas municipales. Los registros están ordenadamente de menor a mayor por código de lugar de pago. Se desea: a) El porcentaje recaudado por cada categoría (R, C, I), en relación con el total recaudado b) Para cada día y cada lugar de pago, la recaudación obtenida por pago al contado y por débito automático. c) Generar un archivo de nombre “Deudor.dat” con todos los contribuyentes deudores con el siguiente formato: Número de contribuyente Deuda acumulada d) Un listado con todos los contribuyentes que registren deuda, ordenado de mayo a menor por la deuda acumulada, con el siguiente formato: Código de contribuyente
Programación II
Nombre Localidad Deuda acumulada
Página: 26
Nota 1: La deuda acumulada para aquellos contribuyentes que no abonaron el último mes será igual a la deuda que tenían más el importe mensual de la tasa. Observar que si el contribuyente pagó el último mes, no se sabrá si es o no deudor hasta que no se analice el archivo “Contribu.dat” (puede haber pagado ese mes, pero adeudar meses anteriores). Además, puede darse el caso de que el contribuyente abone conjuntamente con el último mes toda o parte de la deuda que tenía. Nota 2: Recordar que los archivos que se dan como dato pueden leerse cuantas veces sea necesario. 26) Una institución sanitaria dispone de un archivo con los datos de los pacientes atendidos en sus consultorios externos, ordenado alfabéticamente. Apellido y nombre (string[30]) Diagnóstico (carácter: AF) Fecha (día, mes, año) Obra Social (‘S’ ó ‘N’, según disponga o no de cobertura) Hacer el diagrama y la correspondiente codificación C que permita: a) Leyendo el archivo formar un vector con todos los pacientes que fueron atendidos y carecían de obra social. Usar funciones. b) Listar el vector obtenido informando Apellido y Nombre, ordenado alfabéticamente. c) Ingresar por teclado una fecha (día, mes año) y listar todos los pacientes que fueron atendidos esa fecha. d) Ingresar por teclado un código de diagnóstico y formar un vector con los pacientes con ese código y que tenían obra social, ordenado por apellido. e) Listar el vector anteriormente formado. 27) Una empresa cuenta con un archivo conteniendo los datos referidos a sus empleados, cada registro corresponde a un empleado y la estructura se detalla a continuación. Nombre (string[30]) Sección (entero) Categoría (entero) Sueldo Básico (float) Antigüedad (entero) Documento (entero) Sexo (carácter) Estado Civil (‘S’ Soltero, ‘C’ Casado, ‘V’ Viudo, ‘D’ Divorciado) Fecha de nacimiento Día Mes Año Realizar un diagrama y la codificación C para determinar: a) Imprimir un listado con los nombres de los empleados varones con categoría A, indicando la sección a la que pertenece. b) Emitir un listado indicando nombre y apellido y día de nacimiento de los empleados que nacieron en el mes de mayo. c) La empresa paga un complemento por antigüedad, que se calcula de la siguiente forma 3% del sueldo básico para antigüedad de 0 a 1 año 5% del sueldo básico para antigüedad de 2 a 3 años 10% del sueldo básico para antigüedad de 4 a 6 años 25% del sueldo básico para antigüedad de 7 a 10 años 30% del sueldo básico para antigüedad de más de 10 años La antigüedad de un empleado en la empresa se informa en cantidad de años en el campo respectivo. Programación II
Página: 27
Se quiere generar un archivo con un registro por empleado con la siguiente estructura: Nombre Sueldo Básico Bonificación 28) La asociación de propietarios de caballos quiere realizar una estadística referente a los 150 potrillos nuevos que han sido anotados en la misma. Se dispone de un archivo con los siguientes datos: Número de ejemplar (entero) Nombre (string [30]) Edad Padre Nombre (string[30]) Cantidad de carreras ganadas (entero) Cantidad de carreras corridas (entero) Madre Nombre (string[30]) Cantidad de carreras ganadas (entero) Cantidad de carreras corridas (entero) Los datos del archivo no se encuentran ordenados. Realizar el diagrama y codificación para: a) Determinar el nombre del potrillo cuyo padre ganó mayor cantidad de carreras., b) Emitir un listado conteniendo toda la información de cada potrillo ordenado según el número de ejemplar. c) Generar un archivo llamado ANTECEDENTE que sólo contenga los registros correspondientes a los potrillos cuyas madres hayan corrido más de 5 carreras. 29) Dos sucursales bancarias tienen cada una un archivo, “Banco1.dat” y “Banco2.dat”, compuestos por registros estructuras conteniendo: Documento del cliente (string[8]) Nombre del cliente (string[30]) Número de cuenta (5 dígitos no correlativos) Saldo Crédito ( ‘S’, ‘N’ indicando si se le ha concedido crédito) Los archivos están ordenados por documento del cliente. Tener en cuenta que un mismo cliente puede tener cuenta en ambos bancos. Escribir un programa que explore ambos archivos para: a) Generar un archivo con las personas de la primera sucursal que sólo tienen crédito en esa sucursal y que no aparezcan en la segunda sucursal. El archivo debe estar ordenado por nombre del cliente. b) Ingresar por teclado un importe y recorriendo ambos archivos listar aquellos cuyo saldo sea inferior a ese importe. El listado saldrá ordenado por saldo de mayor a menor y contendrá todos los datos. c) Ingresar los números de cuenta de aquellos clientes de las segunda sucursal que deben eliminarse y formar así un nuevo archivo actualizado. 30) Un club contiene dos archivos, el primero con los datos de los socios con la siguiente información.
Programación II
Página: 28
Número de Socio (5 dígitos no correlativos) Nombre del Socio (string[30]) Cobrador (string[6]) Pagos (string[12]) El club tiene un máximo de 250 socios. El archivo está ordenado por número de socio El campo Pagos contiene un 0 o un 1 por cada mes pagado o adeudado. Por ejemplo un valor “110000000010” significa que el socio solamente tiene pagos los meses de Enero, Febrero y Noviembre. El segundo archivo contiene los pagos efectuados durante la semana pasada. Cada registro contiene: Número de Socio (5 dígitos no correlativos) Mes Pagado(1 a 12) Tener en cuenta que puede haber varios registros por socio ya que pudo haber abonado distintos meses adeudados. Se pide: a) Generar un nuevo archivo con el diseño del primero pero con los datos del campo pagos actualizados. b) Generar un listado con el siguiente diseño y ordenado por socio. Cuotas Impagas del año Socio 12323 12431 30531
Meses Impagos feb
mar
abr abr
may
jun
nov jul
dic
31) Una empresa tiene los siguientes archivos. Un primer archivo con los datos de los artículos, con este diseño: Número de artículo (5 dígitos no correlativos) Nombre del artículo (string [30]) Precio unitario Este archivo no se encuentra ordenado y contiene 100 registros. Se dispone un segundo archivo, con los datos de los vendedores. Cada registro tiene la siguiente información: Número de vendedor (1 a 300) Número de provincia (1 a 25) Este archivo no se encuentra ordenado y contiene 300 registros. Finalmente se dispone un tercer archivo con las ventas de la empresa Cada registro tiene la siguiente información: Mes de la venta Número de vendedor (1 a 300) Número de artículo (7 dígitos) Cantidad de unidades Este archivo no se encuentra ordenado.
Programación II
Página: 29
Desarrollar un programa para determinar e imprimir: a) Por cada mes procesado, la recaudación del mes discriminada y ordenada por provincia: MES: XXXX PROVINCIA TOTAL RECAUDADO 1 99999.99 b) Para cada mes, los números de los artículos que no tuvieron ventas. Mes: XXXX Artículos sin ventas
Número
Nombre
XXXXX
XXXXXXXXXX
c) Los números de los vendedores inactivos por 6 o más meses consecutivos. VENDEDORES INACTIVOS
999
32) Dada la siguiente porción de código: struct z { int a; struct z * b; }; int f (struct z * c, int d) { struct z *x, *y ,*v; v=(struct z *) malloc(sizeof z); if (v = = NULL) return 0; v>a=d; x= c; y=NULL; while ((x != NULL ) && (c>a < d)) { y=c; x = x>b; } if (x != NULL) { v>b = x; x>b = y; } else { c = v; v>sig = NULL; } return 1; }
Programación II
Página: 30
Darle un nombre representativo a la función, a la estructura y a los campos de la misma. Indicar que hace la función. 33) Un banco debe procesar la información de sus clientes de tarjetas de créditos. Para ello dispone de un primer registro con: Porcentaje diario de interés (fija durante el mes) Cantidad de días del mes en proceso (28 a 31) Importe mensual de mantenimiento de la tarjeta Se dispone un archivo (máximo 500) con información del mes anterior, donde cada registro tiene: Número de tarjeta de crédito (12 dígitos) Importe (saldo) pendiente del mes anterior El archivo está ordenado en forma creciente por número de tarjeta. Finalmente se dispone de un archivo con las operaciones que se hubieran realizado en el mes (ordenado en forma creciente por número de tarjeta y día), con: Número de tarjeta de crédito (12 dígitos) Día de la operación (1 a 31) Código de la operación (1=compra, 2=retiro en efectivo, 3=depósito) Importe de la operación Código del negocio que vendió (1 a 3000). Si se trata de retiro en efectivo o depósito este campo es 0. Se pide un programa para determinar e informar: a) El resumen de operaciones de cada tarjeta de crédito con el siguiente formato: TARJETA NRO. 999999999999 DIA
COD.
Saldo Inicial
IMPORTE
99999.99
1 1 .
1 99999.99 3 99999.99 . .
31
1
99999.99
Intereses Mantenimiento
99999.99 99999.99
Saldo Final
99999.99
b) Cual fue el código del negocio al que se le pagar el menor importe. c) Al final del proceso informar que tarjetas de créditos no tuvieron operaciones en el mes: TARJETAS SIN OPERACIONES 999999999999
Programación II
Página: 31
34) Una empresa con una cantidad máxima de 2500 artículos, prepara un archivo por cada uno de los artículos con: Número de Artículo (7 dígitos) Cantidad de unidades en stock Precio de venta por unidad Número de proveedor A continuación se dispone otro archivo, uno por cada venta realizada con: Número de cliente (1 a 999) Fecha de venta (dd/mm/aa) Número de artículo Cantidad de unidades El lote no guarda ningún orden. Desarrollar un programa que determine e imprima al final del proceso: a) Para los clientes que como mínimo compraron en 3 de los 12 meses del año: VENTAS DEL MES Nro. Cliente 1 2 3 4 ..... 999 9999.99 9999.99 9999.99 9999.99 Ordenado por número de cliente. b) Para los artículos con existencia nula o negativa: LISTADO DE ART. SIN EXISTENCIA NRO. ARTICULO EXISTENCIA PROVEEDOR 9999999 0 9999 1 c) Para los números de artículos erróneos (inexistentes): LISTADO DE ART. INEXISTENTES NRO. ARTICULO NRO. CLIENTE CANT. NO VENDIDA 9999999 999 9999 La cantidad de artículos inexistentes en menor a 300. d) Determinar a que cliente y mes corresponde el máximo importe mensual de ventas.
Programación II
Página: 32
35) En una facultad desean tener información de los exámenes de ingreso para los estudiantes femeninos y masculinos por separado en distintos archivos. Se sabe que no hay más de 1300 inscriptos. Para ello poseen: Un archivo ordenado por legajo en forma creciente, en el que cada registro tiene la siguiente información: Legajo del alumno (5 caracteres) Apellido y Nombre del alumno (40 caracteres) Sexo ('F', 'M') Un archivo con las calificaciones del examen de ingreso, en el que cada registro contiene: Legajo del alumno (5 caracteres) Nota del examen Este archivo se encuentra desordenado y tiene información sólo de los alumnos que rindieron el examen. La facultad desea generar dos archivos, uno con la información de los estudiantes masculinos y otro con los femeninos, cuyos registros estén formados por: Legajo del alumno (5 caracteres) Apellido y nombre del alumno (40 caracteres) Información sobre si rindió o no el examen (string 'rindió' o string 'no rindió') Nota del examen Para aquellos estudiantes que no rindieron el examen grabar en la nota: 1. Estos archivos deben estar ordenados por legajo del alumno en forma creciente. Además desean saber el promedio de las notas de las mujeres, el promedio de las notas de los hombres y el promedio de todos los alumnos. Dichos promedios deben calcularse sin los ausentes. Construya un programa que genere los dos archivos mencionados y que emita los promedios solicitados. 36) Un laboratorio dispone para la elaboración de todos sus productos de 1750 componentes. El laboratorio tiene registrados 80 productos, pero en la actualidad sólo fabrica algunos. Toda la información sobre productos y componentes se halla contenida en 3 archivos binarios. El primer archivo contiene: Código de Componente (string[5]) Precio por miligramo El segundo archivo contiene: Número de producto (1 a 80) Código de Componente (string[5]) Cantidad. de mg. necesarios Tener en cuenta que en este archivo, por cada producto habrá tantos registros como componentes tenga el mismo. La información de este archivo corresponde a los productos que se fabrican actualmente. Un tercer archivo contiene: Número de producto (1 a 80) Nombre del producto (string[25]) Código de presentación (1=comprimidos, 2=jarabe, 3=inyectable)
Programación II
Página: 33
Este archivo está desordenado y tiene 80 registros. Contando con estos datos se desea obtener un archivo binario que contenga y sólo para los productos que se fabrican, los siguientes campos: Número de producto (1 a 80) Nombre del producto (string[25]) Precio Además se pide informar el costo promedio de los productos en sus distintas presentaciones. Es decir promedio de los comprimidos, jarabes e inyectables. Se asegura que se fabrica por los menos uno de cada presentación. 37) Un supermercado dispone de los siguientes archivos: Un primer archivo con el horario que cumplió cada cajero y en que caja trabajó. Cada registro contiene: Número de Caja (1 a 5) Código de cajero (string[3]) Hora de entrada (entero 8 a 22) Hora de salida (entero 8 a 22) Este archivo está desordenado y un mismo cajero puede tener varios registros si trabaja en forma discontinua. Un segundo archivo con la información de los 8 cajeros que trabajan en el supermercado. Cada registro contiene: Código de cajero (string[3]) Nombre y Apellido (string[30]) Este archivo está desordenado. Un tercer archivo con la información de las ventas efectuadas el día anterior. Cada registro contiene: Número de caja (1 a 5) Importe Total de la venta Hora de entrada a la caja (entero) Minuto de entrada a la caja (entero) Hora de salida de la caja (entero) Minuto de salida de la caja (entero) Se pide determinar e informar: a) El total recaudado por cada cajero, informando solamente aquellos que en el día anterior hayan trabajado. b) El código del cajero que haya tenido mayor cantidad de minutos libres, sin tener en cuenta los cajeros que no hayan trabajado el día anterior. c) El Nombre y Apellido del cajero que haya efectuado la venta individual de mayor importe. 38) Un banco dispone de los siguientes archivos: Un primer archivo contiene los datos de las cajas de ahorro, cada registro contiene: Nro. de caja de ahorro (7 dígitos no correlativos) Saldo de la cuenta Este archivo se encuentra desordenado y hay como máximo 300 cajas de ahorro. Programación II
Página: 34
Un segundo archivo con los movimientos, extracciones y depósitos. Cada registro contiene: Mes del movimiento Número de caja de ahorro (7 dígitos no correlativos) Código de operación (1=extracción, 2=depósito) Importe del movimiento Este archivo se encuentra ordenado por mes. Desarrollar un programa para determinar e informar: a) Para cada mes procesado el siguiente listado ordenado en forma decreciente por saldo: Cuentas nuevas del mes XX Nro. de Cuenta 9999999
Saldo 999,99
b) Un listado ordenado por número de cuenta con el siguiente formato: Saldos a fin de mes Nro. Cuenta 1 2 3 4 ................ 9999999 9999,99 9999,99 9999,99 9999,99 c) Por cada mes procesado: CUENTAS SIN MOVIMIENTOS EN EL MES XX Nro. Cuenta 9999999
Saldo 9999,99
d) Por cada mes procesado: TOTAL MOVIMIENTOS DEL MES XX Nro. Cuenta Saldo Anterior Total Depósitos Total Extracción Saldo Actual 9999999 9999,99 9999,99 9999,99 9999,99 e) Al final del proceso, en que mes y a que cliente correspondió la máxima entracción. f) Al final del proceso los números de cuenta sin movimientos en los últimos 6 meses (con 6 o más meses de antigüedad)
Programación II
Página: 35