PROG2 - TP 1 y 2 Kloster - 20090822

35
UNIVERSIDAD TECNOLOGICA NACIONAL FAC. REG. GRAL. PACHECO TECNICO SUPERIOR EN PROGRAMACION PROGRAMACION II GUIA DE TRABAJOS PRACTICOS Programación II Página: 1

Transcript of PROG2 - TP 1 y 2 Kloster - 20090822

Page 1: PROG2 - TP 1 y 2 Kloster - 20090822

UNIVERSIDAD TECNOLOGICA NACIONAL FAC. REG. GRAL. PACHECO

TECNICO SUPERIOR EN PROGRAMACION

PROGRAMACION II

GUIA DE TRABAJOS PRACTICOS

Programación II Página: 1

Page 2: PROG2 - TP 1 y 2 Kloster - 20090822

TRABAJO PRACTICO Nº 1REPASO 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

Page 3: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 4: PROG2 - TP 1 y 2 Kloster - 20090822

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 9999999 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

Page 5: PROG2 - TP 1 y 2 Kloster - 20090822

- Denomimación

Programación II Página: 5

Page 6: PROG2 - TP 1 y 2 Kloster - 20090822

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 Zona

9999  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

Page 7: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 8: PROG2 - TP 1 y 2 Kloster - 20090822

    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) /* void calcular(int m[3][5],int v[5]);  */{   int i,j,suma;

   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 <conio.h>

Programación II Página: 8

Page 9: PROG2 - TP 1 y 2 Kloster - 20090822

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((i­j)= =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

Page 10: PROG2 - TP 1 y 2 Kloster - 20090822

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 r­t;}

Programación II Página: 10

Page 11: PROG2 - TP 1 y 2 Kloster - 20090822

TRABAJO PRACTICO Nº 2ARCHIVOS

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 Monto total obtenido por ventas

99 9999.9999 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

Page 12: PROG2 - TP 1 y 2 Kloster - 20090822

­ 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

Page 13: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 14: PROG2 - TP 1 y 2 Kloster - 20090822

­ 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

Page 15: PROG2 - TP 1 y 2 Kloster - 20090822

­ 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

Page 16: PROG2 - TP 1 y 2 Kloster - 20090822

Existen 500 contribuyentes, numerados del 1 al 500.

Se dispone del archivo 'IMPORT.DAT', ordenado por año­bimestre, 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: 1­2­3­4­5­6   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

Page 17: PROG2 - TP 1 y 2 Kloster - 20090822

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: XXXXXXXMes: EneroDía que trabajó más horas: XXMes: FebreroDí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

Page 18: PROG2 - TP 1 y 2 Kloster - 20090822

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,992 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

Page 19: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 20: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 21: PROG2 - TP 1 y 2 Kloster - 20090822

­ 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

Page 22: PROG2 - TP 1 y 2 Kloster - 20090822

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 <conio.h>#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

Page 23: PROG2 - TP 1 y 2 Kloster - 20090822

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, 1­3 = Desaprobado, 4­10 = 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:

a) 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.

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

Page 24: PROG2 - TP 1 y 2 Kloster - 20090822

­ 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

Page 25: PROG2 - TP 1 y 2 Kloster - 20090822

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ículoLuego 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 Mes 1 Mes 2 Mes 3xxx xxxx xxxx xxxxTotal  xxxx 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

Page 26: PROG2 - TP 1 y 2 Kloster - 20090822

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 recaudadob) 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    Nombre     Localidad     Deuda acumulada 

Programación II Página: 26

Page 27: PROG2 - TP 1 y 2 Kloster - 20090822

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: A­F)­ 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íaMesAñ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

Page 28: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 29: PROG2 - TP 1 y 2 Kloster - 20090822

­ 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 Meses Impagos

12323 mar abr may jun nov12431 feb abr30531 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

Page 30: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 31: PROG2 - TP 1 y 2 Kloster - 20090822

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.    IMPORTE

              Saldo Inicial            99999.99

                     1      1        99999.99                     1      3     ­99999.99                     .       .                             .

                     31     1  99999.99

              Intereses        99999.99              Mantenimiento  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

Page 32: PROG2 - TP 1 y 2 Kloster - 20090822

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

                                                           1c) 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

Page 33: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 34: PROG2 - TP 1 y 2 Kloster - 20090822

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

Page 35: PROG2 - TP 1 y 2 Kloster - 20090822

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 Saldo     9999999 999,99

b) Un listado ordenado por número de cuenta con el siguiente formato:

Saldos a fin de mes

Nro. Cuenta 1 2 34            ................

9999999          9999,99          9999,99               9999,99            9999,99

c) Por cada mes procesado:

CUENTAS SIN MOVIMIENTOS EN EL MES XX

Nro. Cuenta Saldo            9999999 9999,99

d) Por cada mes procesado: 

TOTAL MOVIMIENTOS DEL MES XX

Nro. Cuenta   Saldo Anterior   Total Depósitos   Total Extracción   Saldo Actual9999999         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