[C con Clase] ayuda con el siguiente ejercicio error al compilar

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mie Ene 25 17:18:07 CET 2012


Hola Jorge,

2012/1/25 Jorge Yonusg <jorgeyonusg en gmail.com>

> Muchísimas gracias amigo Steven tomare el mas importante de tus consejo y
> me devuelvo a sentencias básicas,
> hice los arreglos y correcciones en la parte de los monitores no deja
> seleccionar y suma todo ruego me expliques como solucionar esto.
>
>
Veamos el código fuente.


> //Una tienda de articulos de computación, requiere calcular su venta según
> los
> //combos que se puedan ensamblar, sabiendo que tenemos 2 tipos de
> Monitores
> //monitor1 de 15 pulgadas 1000 bsf
> //monitor2 de 19 pulgadas 1500 bsf
> //tres combos de CPU
> //teclado, mouse y cornetas respectivamente y los precios son de
> //combo1 1700
> //combo2 2100
> //combo3 2500
> //adicionalmente una
> //impresora 550 se le
> //obsequiara un pendrive si el combo vendido supera los 3500 bsf.
>
> #include <stdio.h>
> #include <conio.h>
>
> #define nRETIRPF 0.15
>
> int main(void)
>
> {
>     char opc,monitor,imp;
>     int venta;
>     const int a=1700, b=2100, c=2500, p=1000, l=1500, m=0, n=0, s=550;
>
>
>     venta=0;
>
> printf(" \n");
> printf("Los Siguientes combos a vender son: \n");
> printf("Combo1:1700Bsf, Combo2:2100Bsf, Combo3:2500Bsf \n");
> printf(" \n");
> printf(" \n");
> printf("Por Favor elija su combo: \n");
> printf("Escriba a para combo1, b para combo2, c para combo3 \n");
> printf(" \n");
> scanf("%c", &opc);
>                  switch(opc)
>                             {
>                             case 'a': venta=venta+=a;
>                             case 'b': venta=venta+=b;
>                             case 'c': venta=venta+=c;
>

En primer lugar, lo que te interesa es hacer esto:

venta += a;

y no reasignar a 'venta' con su propio valor. Aparte de que no es nada
lógico, puede provocar errores de programación en cuanto al valor correcto
de 'venta'.

En segundo lugar, 'switch/case' funciona en base a UN salto al caso
correcto, y NO un salto al caso adecuado y luego otro salto fuera del
'switch'. Por lo tanto, si queremos el segundo comportamiento, usando
'switch/case', indicamos 'break' entre cada caso, para que salte fuera de
esta sentencia de control. Esto es,

case 'a':
  venta += a;
break;

case 'b':
  venta += b;
break;

case 'c':
  venta += c;
break;

                            }
>
> printf(" \n");
> printf("Los Monitores a la Venta que complementan el combo son:  \n");
> printf("Monitor1 de 15 pulgadas: 1000Bsf, Monitor2 de 19 pulgadas: 1500Bsf
> \n");
> printf(" \n");
> printf(" \n");
> printf("Por Favor elija su Monitor: \n");
> printf("Escriba p para Monitor1, l para Monitor2,m para nigún monitor \n");
> printf(" \n");
> scanf("%c", &monitor);
>                          switch(monitor)
>                             {
>                             case 'p': venta=venta+=p;
>                             case 'l': venta=venta+=l;
>                             case 'm': venta=venta+=m;
>

Aquí tienes el mismo tipo de problema.

                            }
>
> printf(" \n");
>
> printf("Todos los Combos Incluyen teclado, mouse y cornetas,
> adicionalmente \n");
> printf("tenemos a la venta: Impresora precio 550Bsf.\n");
> printf(" \n");
> printf(" \n");
> printf("Quiere su combo con impresora: Escriba s si la desea, sino escriba
> n \n");
> scanf("%c", &imp);
>                         switch(imp)
>                                    {
>                                    case 's': venta=venta+=s;
>                                    case 'n': venta=venta+=n;
>

Aquí, lo mismo.

                                   }
>
>              if (venta>=3500) //igual errores de sintaxis parentesis
>              {
>              printf("Su factura: %i\n", venta);
>              printf("Ud tiene un Pendrive Kingston 8GB de Obsequio.Gracias
> por su compra \n");
>              }
>              if (venta<3500) //igual errores de sintaxis parentesis
>

Esto es sintácticamente correcto, pero no es muy práctico. Si comprobamos
una condición y resulta ser falsa, entonces no tiene sentido comprobar si
su condición negativa (opuesta) es verdadera; lógicamente, así es. Por esta
razón, existe el vocablo 'else'.

Recomiendo usar 'if/else'. Esto es,

if( venta >= 3500 )
{
  ...
}
else  // lógicamente, venta < 3500
{
  ...
}

             {
>              printf("Su factura: %i\n", venta);
>              printf("Gracias por su compra \n");
>              }
>
> getch();
> return 0;
> }
>
>

Espero que esto te oriente.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120125/70be1326/attachment.html>


Más información sobre la lista de distribución Cconclase