You are on page 1of 35

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 9999
999 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 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
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) /* 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
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
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
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 Monto total obtenido por ventas

99 9999.99
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ñ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
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 <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
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
­ 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 Mes 1 Mes 2 Mes 3
xxx xxxx xxxx xxxx
Total  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
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    Nombre     Localidad     Deuda acumulada 

Programación II 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: 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í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 Meses Impagos

12323 mar abr may jun nov
12431 feb abr
30531 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.    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
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 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 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 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 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