/* 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; }