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

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mie Ene 25 13:06:06 CET 2012


Hola Jorge,

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

Tienes varios errores, que podrías corregirlos tú mismo, siguiendo los
mensajes que te da el compilador. 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
> //monitor2 de 19 pulgadas 1500
> //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.
>
> #include <stdio.h>
> #include <conio.h>
>
> #define nRETIRPF 0.15
>
> int main(void)
>
> {
>
>     int opc,venta,combo,monitor;
>

'opc' debería ser de tipo 'char', ya que la usas con 'scanf()' más abajo.

Además, no usas la variable 'combo', así que puedes eliminarla.

    const a=1700, b=2100, c=2500, p=1000, l=1500, m=0, n=0, imp=550;
>
>

En C, ya no se acepta el 'int' como el tipo por defecto implícito y no se
permite definir entidades sin escribir explícitamente un tipo de dato. Esto
significa que debes indicar 'int', o mejor dicho 'const int'.

Sin embargo, modificas 'imp' en una sentencia de 'scanf()', por lo tanto
'imp' NO puede ser constante. Deberías definirla aparte:

int imp = 550;

    venta=0
>

Esto es un error. Todas las sentencias terminan en un punto y coma, al
menos que sea un bloque de sentencias formado por una pareja de llaves {}.

Lo anterior sería así,

venta = 0;

    printf("Los Siguientes combos a vender son: Combo1:1700, Combo2:2100,
> Combo3:2500 \n");
>     printf("Por Favor elija su combo: Escriba a para combo1, b para
> combo2, c para combo3 \n");
>     scanf("%c", &opc);
>                  if(opc=='a'){
>                               venta=venta+a}
>                  if(opc=='b'){
>                               venta=venta+b}
>                  if(opc=='c'){
>                               venta=venta+c}
>
>

Aquí tienes el mismo error: escribe el punto y coma al final de cada
asignación; esto es,

venta += a;
venta += b;
venta += c;

También date cuenta que es mejor acostumbrarse a usar el operador de suma y
asignación += que realizar dos operaciones: suma y luego asignación.

Sugiero que uses 'if/else' en este caso, ya que 'opc' no cambiará de valor
durante estas sentencias; así que es imposible que 'opc' contenga 'a' e
inmediatamente después contenga 'b'; por ejemplo. Por otra parte, podrías
usar un 'switch/case' para mayor legibilidad, ya que la lógica se basa en
el valor guardado en 'opc'. El esquema sería el siguiente:

switch( opc )
{
  case 'a': ....
  case 'b': ....
  case 'c': ....
}


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

Aquí tenemos el mismo tipo de error y el mismo problema de diseño que antes.


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

Aquí está el problema que comenté anteriormente, si dejas que 'imp' sea
constante. Si la has definido como una variable, entonces ya no tenemos
problemas.

                                      if(imp=='s'){
>                                                    venta=venta+imp}
>                                       if(imp=='n'){
>                                                    venta=venta+n}
>
>

Aquí, lo mismo que antes: escribe el punto y coma al final.

             if venta>=3500{
>

Esto es un error. La sentencia 'if' SIEMPRE requiere paréntesis que
engloben a la condición a comprobar. Por lo tanto, esto es,

if( venta >= 3500 )

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

Aquí ocurre lo mismo que antes: escribe los paréntesis.

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

Viendo los tipos de errores en el código fuente, necesitas volver a los
temas básicos de la sintaxis de C.


Espero que esto te ayude.

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


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