/* 060208-1.c
* 45 min
*/
#include <stdio.h>
void pedir_precios (float vp [], int n);
void inicializar_cesta (int vc [], int n);
void leer_codigo (int *c);
void leer_cantidad (int *c);
void factura (int vc[], float vp[], int n);
float tipo_iva (int codigo);
int main (void)
{
float vp [10]; /* Vector de precios */
int vc [10]; /* Vector de cantidades */
int c, q;
pedir_precios (vp, 10);
do {
inicializar_cesta (vc, 10);
do {
leer_codigo (&c);
if (c > 0) {
leer_cantidad (&q);
vc[c-1] += q;
}
} while (c > 0);
if (c == 0)
factura (vc, vp, 10);
} while (c != -95);
printf ("Hasta luego\n");
return 0;
}
void pedir_precios (float vp [], int n)
{
int i;
printf ("Por favor, introduce los precios (en euros):\n");
for (i = 0; i < n; i++) {
printf ("Código %d: ", i+1);
scanf ("%f", &vp [i]);
}
}
void inicializar_cesta (int vc [], int n)
{
int i;
for (i = 0; i < n; i++)
vc[i] = 0;
printf ("Nueva cesta\n");
}
void leer_codigo (int *c)
{
do {
printf ("Código de producto: ");
scanf ("%d", c);
if (*c != -95 && (*c < 0 || *c > 10))
printf ("Código de producto incorrecto: %d\n", *c);
} while (*c != -95 && (*c < 0 || *c > 10));
}
void leer_cantidad (int *c)
{
printf ("Unidades: ");
scanf ("%d", c);
}
void factura (int vc[], float vp[], int n)
{
int i;
float pp;
float iva;
float suma;
printf ("\nFactura\n\n"
"Código Cant. Precio IVA Subtotal\n");
suma = 0.0;
for (i = 0; i < n; i++)
if (vc [i] != 0) {
pp = vc [i] * vp [i];
iva = pp * tipo_iva (i);
printf ("%4d %5d x %6.2f + %5.2f %5.2f\n",
i+1, vc[i], vp[i], iva, pp + iva);
suma += pp + iva;
}
printf ("Total %28.2f\n", suma);
}
/* Cuidado, internamente decrementamos en uno los códigos */
float tipo_iva (int codigo)
{
if (codigo >= 0 && codigo <= 2) return 0.04;
if (codigo >= 3 && codigo <= 6) return 0.07;
return 0.16;
}