Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xgirl12 en 30 Marzo 2013, 22:36 pm



Título: Problemas con ELSE
Publicado por: Xgirl12 en 30 Marzo 2013, 22:36 pm
Hola, que tal a todos por aquí.

Solicitando su ayuda para que este programa me corra, el problema es que me dice que no hay IF antes de los ELSE, pero sí los hay.
Espero sus comentarios y gracias de antemano por su atención.

Código:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

char nom[10];
float Compra, Desc, Total;


 main() {
  /*Declaración para introducir el nombre del cliente */
  printf("Ingrese el nombre del cliente: \n",nom);
  scanf("%9s", nom);
  printf("El nombre del cliente es %s \n", nom );
 
  /*Declaración para introducir total de la compra */
  printf ("Ingrese el total de su compra: \n", Compra);
  scanf ("%6.2f", &Compra);
 
  /* Operaciones para aplicar descuento */
  if(Compra >= 8000){
 
  Total = Compra-(Compra*0.12);
  printf("El total a  pagar es de: %6.2f \n", Total);
}
else
 {
if(Compra == 7999 && Compra >=5500)
Total = Compra-(Compra*.10);
printf("El total a pagar es de: %5.2f \n", Total);
}
else
{
if(Compra ==5499 && Compra >=3100)
Total = Compra-(Compra*.07);
printf("El total a pagar es de:%6.2f \n", Total);
}
else
{
if(Compra == 3099 && Compra >=1500)
Total = Compra-(Compra*.05);
printf("El total a pagar es de: %6.2f \n", Total);
}
while (Compra !=1500)
{
if (Compra < 1500)
printf("Su compra no aplica descuento \n");
printf("El total a pagar es de: %5.2f \n",Compra);
}
 
 
 
 
return 0;
}


Título: Re: Problemas con ELSE
Publicado por: avesudra en 30 Marzo 2013, 22:59 pm
Es que la estructura que tu pones para el else-if es esta:
Código
  1. else
  2. {
  3.  if ( . . . )
  4. }
Y la correcta para un else-if es esta:
Código
  1. else if( . . . )
  2. {
  3.  
  4. }
Y el error es obvio dado que no hay un if anterior sino un else.Quedando tu code así(el while provoca un bucle infinito pero eso ya te lo dejo a tí , te he comentado algunos printf porque dabas argumentos de más):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. /**¡No es bueno usar variables globales**/
  7.  
  8. int main()
  9. {
  10.    float Compra, Desc, Total;
  11.    char nom[10];
  12.    /*Declaración para introducir el nombre del cliente */
  13.    printf("Ingrese el nombre del cliente: \n");//Aquí no va nom....
  14.    scanf("%9s", nom);
  15.    printf("El nombre del cliente es %s \n", nom );
  16.  
  17.    /*Declaración para introducir total de la compra */
  18.    printf ("Ingrese el total de su compra: \n");//Aquí no va Compra...
  19.    scanf ("%6f", &Compra);//Aquí da un error si le pones el .2
  20.  
  21.    /* Operaciones para aplicar descuento */
  22.    if(Compra >= 8000)
  23.    {
  24.        Total = Compra-(Compra*0.12);
  25.        printf("El total a  pagar es de: %6.2f \n", Total);
  26.    }
  27.    else if(Compra == 7999 && Compra >=5500)
  28.    {
  29.        Total = Compra-(Compra*.10);
  30.        printf("El total a pagar es de: %5.2f \n", Total);
  31.    }
  32.    else if(Compra ==5499 && Compra >=3100)
  33.    {
  34.        Total = Compra-(Compra*.07);
  35.        printf("El total a pagar es de:%6.2f \n", Total);
  36.    }
  37.    else if(Compra == 3099 && Compra >=1500)
  38.    {
  39.        Total = Compra-(Compra*.05);
  40.        printf("El total a pagar es de: %6.2f \n", Total);
  41.    }
  42.    while (Compra !=1500)//Esto provoca un bucle infinito...
  43.    {
  44.        if (Compra < 1500)
  45.            printf("Su compra no aplica descuento \n");
  46.        printf("El total a pagar es de: %5.2f \n",Compra);
  47.    }
  48.    return 0;
  49. }
  50.  


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 31 Marzo 2013, 00:27 am
Muchas gracias por tus comentarios - correcciones Avesudra. Me gustaría que me dijeras de que otra forma no se me haría un bucle infinito, ¿estará bien si utilizara otro if para por una cantidad X me dijera que es inválido o una tecla para salir?


Título: Re: Problemas con ELSE
Publicado por: avesudra en 31 Marzo 2013, 00:34 am
Sí claro que está bien, si la cantidad es menor que 1500 no se aplica descuento pero quería que te dieses cuenta de que ahí un bucle no pinta nada.


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 31 Marzo 2013, 00:44 am
OK. Corrigiendo y en un momento más comento que tal me fue.


Título: Re: Problemas con ELSE
Publicado por: 85 en 31 Marzo 2013, 18:52 pm
faltaban cosas, el tipo int en la función MAIN y el return 0.
y las etiquetas de c++ XD. Y las globales hacelas locales preferentemente.
y el bucle
y usar else-if


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. int main()
  7. {
  8. char nom[10];
  9. float Compra, Desc, Total;
  10.  
  11. /*Declaración para introducir el nombre del cliente */
  12. printf("Ingrese el nombre del cliente: \n",nom);
  13. scanf("%9s", nom);
  14. printf("El nombre del cliente es %s \n", nom );
  15.  
  16. /*Declaración para introducir total de la compra */
  17. printf ("Ingrese el total de su compra: \n", Compra);
  18. scanf ("%6.2f", &Compra);
  19.  
  20. /* Operaciones para aplicar descuento */
  21. if(Compra >= 8000){
  22.  
  23. Total = Compra-(Compra*0.12);
  24. printf("El total a  pagar es de: %6.2f \n", Total);
  25. }
  26.        else if(Compra == 7999 && Compra >=5500)
  27.        {
  28. Total = Compra-(Compra*.10);
  29. printf("El total a pagar es de: %5.2f \n", Total);
  30.        }
  31.        else if(Compra ==5499 && Compra >=3100)
  32.        {
  33. Total = Compra-(Compra*.07);
  34. printf("El total a pagar es de:%6.2f \n", Total);
  35.        }
  36.        else if(Compra == 3099 && Compra >=1500)
  37.        {
  38. Total = Compra-(Compra*.05);
  39. printf("El total a pagar es de: %6.2f \n", Total);
  40.        }
  41.  
  42. if (Compra !=1500)
  43. {
  44. if (Compra < 1500)
  45.    printf("Su compra no aplica descuento \n");
  46.  
  47. printf("El total a pagar es de: %5.2f \n",Compra);
  48. }
  49.  
  50. return 0;
  51. }
  52.  


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 31 Marzo 2013, 21:52 pm
Hola de nuevo.

Sólo cometándoles que modifique siguiendo sus consejos, pero no me corria como yo quería. No me daba el total a pagar y como bien me decía avesudra me generaba un bucle que no paraba.

Pero volví al código original y lo cambie como bien me dijeron con otro If en lugar del while y ya me corre.

Se los paso, pero quisiera que me dijeran de que otra forma lo puedo mejorar, ¿se podrá con un swich para no usar tantos if?

De antemano gracias, es un gusto poder interactuar con gente que no se burla por preguntas sencillas como estas, pero cuando se está aprendiendo es importante.



Código:
#include <stdio.h>
#include <conio.h>
int main()
{
char nom[10];
float Compra, Desc, Total;
/*Declaración para introducir el nombre del cliente */
printf("Ingrese el nombre del cliente: \n");
scanf("%9s", nom);
printf("El nombre del cliente es %s \n", nom );
/*Declaración para introducir total de la compra */
printf ("Ingrese el total de su compra: \n", Compra);
scanf ("%f", &Compra);
/* Operaciones para aplicar descuento */
if(Compra >= 8000){
Total = Compra-(Compra*0.12);
}
else
{
if(Compra <= 7999 && Compra >=5500){
Total = Compra-(Compra*.10);
}
else
{
if(Compra <=5499 && Compra >=3100){
Total = Compra-(Compra*.07);
}
else
{
if(Compra <= 3099 && Compra >=1500){
Total = Compra-(Compra*.05);
}
else
{
if (Compra < 1500){
printf("Su compra no aplica descuento \n");
Total = Compra;
}
}
}
}
}
printf ("El total de su compra es: %.2f\n", Total);
getch ();
return 0;
}


Si me pudieran decir como hacer para que mi código aparezca numerado.
Saludos.


Título: Re: Problemas con ELSE
Publicado por: Wofo en 31 Marzo 2013, 22:21 pm
El switch no lo puedes usar en este caso porque no admite expresiones lógicas sino solo valores literales. Puedes ver más (con ejemplos y todo) sobre switch en este link: http://www.cplusplus.com/doc/tutorial/control/

Para que el código te aparezca numerado tienes que usar el GeSHi al editar el post (hay un botón que dice GeSHi, le das y seleccionas el lenguaje que estés usando).

Un consejo es que te olvides de conio.h ya que no es C estándar. Tienes algunas alternativas en este post:  |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

Saludos,
Wofo.


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 1 Abril 2013, 05:34 am
Gracias por contestar Wofo, pero me están pidiendo que incluya al menos una estructura repetitiva (while, do-while o for).
Nada más que llegado a este punto no sé de que forma podría hacerle, por eso había puesto un while pero me daba un bucle...

Espero alguna sugerencia.

Saludos.


Título: Re: Problemas con ELSE
Publicado por: MeCraniDOS en 1 Abril 2013, 13:53 pm
Puedes añadir un bucle do-while para preguntar al cliente si desea repetir la operación, en caso afirmativo volver al inicio, y en caso negativo finalizar

Saludos


Título: Re: Problemas con ELSE
Publicado por: 85 en 1 Abril 2013, 13:55 pm
Si un bucle que permita realizar más compras.

El array 'nom' era muy peque, sólo 10 podés usar uno más grande XD

Código
  1. int main()
  2. {
  3.        char nom[128];
  4. float Compra, Desc, Total;
  5.        int a, opc;
  6. for(a=0;; a++)
  7.        {
  8.    if(a>0){
  9. printf("\n\tDesea Realizar una nueva compra?\n");
  10. fflush(stdin);
  11.                scanf("%d",&opc);
  12. if(opc==0) break;
  13.            }
  14.  
  15.            // Declaración para introducir el nombre del cliente
  16.    printf("Ingrese el nombre del cliente: \n",nom);
  17. fflush(stdin);
  18.    scanf("%9s", nom);
  19.    printf("El nombre del cliente es %s \n", nom );
  20.  
  21.    // Declaración para introducir total de la compra
  22.    printf ("Ingrese el total de su compra: \n", Compra);
  23. fflush(stdin);
  24.    scanf ("%f", &Compra);
  25.  
  26.    // Operaciones para aplicar descuento
  27.    if(Compra >= 8000)
  28.            {
  29. Total = Compra-(Compra*0.12);
  30. printf("El total a  pagar es de: %6.2f \n", Total);
  31.    }
  32.            else if(Compra == 7999 && Compra >=5500)
  33.            {
  34. Total = Compra-(Compra*.10);
  35. printf("El total a pagar es de: %5.2f \n", Total);
  36.            }
  37.            else if(Compra ==5499 && Compra >=3100)
  38.            {
  39. Total = Compra-(Compra*.07);
  40. printf("El total a pagar es de:%6.2f \n", Total);
  41.            }
  42.            else if(Compra == 3099 && Compra >=1500)
  43.            {
  44. Total = Compra-(Compra*.05);
  45. printf("El total a pagar es de: %6.2f \n", Total);
  46.            }
  47.  
  48.    if (Compra !=1500)
  49.    {
  50. if (Compra < 1500)
  51.    printf("Su compra no aplica descuento \n");
  52.  
  53.  
  54. printf("El total a pagar es de: %5.2f \n",Compra);
  55.    }
  56.        }
  57.  
  58. return 0;
  59. }
  60.  

cuando pongas las etiquetas de código, tenés que poner code=cpp
hasta luego



Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 2 Abril 2013, 00:54 am
Excelente por las sugerencias y gracias por el ejemplo 85, muy amable de tu parte y ahora si, mil gracias a todos por su ayuda.

¡Saludos!


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 11 Abril 2013, 06:50 am
Hola de nuevo a todos.

Retomando este programa, ahora me piden que le añada arreglos (arrays), pero la verdad no sé como es que encajarían aquí, les pido sugerencias de cómo lo podría agregar, es decir, que parte del programa puedo modificar para este asunto.

Espero que me hayan entendido y gracias de antemano.

Saludos.


Título: Re: Problemas con ELSE
Publicado por: rir3760 en 11 Abril 2013, 16:39 pm
Retomando este programa, ahora me piden que le añada arreglos (arrays), pero la verdad no sé como es que encajarían aquí, les pido sugerencias de cómo lo podría agregar, es decir, que parte del programa puedo modificar para este asunto.
Primero declaras las variables "Compra", "Desc" y "Total" como arrays:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_COMPRAS  10
  5.  
  6. int main(void)
  7. {
  8.   char nom[10];
  9.   float Compra[NUM_COMPRAS];
  10.   float Desc[NUM_COMPRAS];
  11.   float Total[NUM_COMPRAS];

A continuación creas un bucle donde realizas las operaciones por cada una de las compras:
Código
  1. int i;
  2.  
  3. for (i = 0; i < NUM_COMPRAS; i++){
  4.  
  5.   /*
  6.    ** Procesamos la compra utilizando
  7.    **
  8.    ** Compra[i]
  9.    ** Desc[i]
  10.    ** Total[i]
  11.    */
  12.  
  13. }
Como indica el comentario debes tratar a las tres variables como arrays indicando su nombre así como el indice del elemento a procesar.

No tiene uso practico, supongo te piden eso para practicar con arrays.

Por ultimo evita el uso de la biblioteca conio de Borland, el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Un saludo


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 12 Abril 2013, 06:17 am
Gracias por la idea rir3760, yo también pensé que los arreglos no le quedan bien a este programa en particular, pero pues lo tengo que hacer.
Estoy adaptándolo para subirlo y que me compartan sus opiniones.


Título: Re: Problemas con ELSE
Publicado por: Xgirl12 en 14 Abril 2013, 23:52 pm
Hola a todos.
Siguiendo con lo mismo y espero en verdad no aburrirlos, pero es que se me complica porque aunque me lo piden a si, no le encuentro la lógica para poder dejarlo bien.

El compañero rir3760 me aconsejo usar un bucle, pero ¿de qué forma lo utilizo para poder aplicar el descuento que le toque?

Tengo otros detalles que vienen en el código, pero me interesa saber si estoy demasiado pérdida o todavía hay alguna solución.

Les paso el código actual:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6.  
  7. main(){
  8.  
  9. float Total, Compra;
  10.  
  11.  
  12. struct Cliente {
  13. char nombre[10];
  14. char apellido[15];
  15. }Nom;
  16. /* En esta estructura quise poner Cat1 = 0.12 es decir, el porcentaje que le
  17. corresponde, pero me marca error... solamente quitando la igualdad sigue*/
  18. struct Categoria{
  19. float Cat1, Cat2, Cat3, Cat4;  
  20. };
  21.  
  22. /*Menu principal */
  23. printf("Categoría 1 corresponde de 8000 o mas\n");
  24. printf("Categoría 2 corresponde de 7999 a 5500\n");
  25. printf("Categoría 3 corresponde de 5499 a 3100\n");
  26. printf("Categoria 4 corresponde de 3099 a 1500\n");
  27.  
  28. float Descuento[5]={12,10,7,5};/* Aqui lo que quiero hacer es que me de una tabla donde
  29. se ven los descuentos que se otorgan por categoria */
  30.  
  31.  
  32.            // Declaración para introducir el nombre del cliente
  33.    printf("Ingrese el nombre del cliente: \n",Nom);
  34. fflush(stdin);
  35.    scanf("%9s", Nom);
  36.    printf("El nombre del cliente es %s \n", Nom );
  37.  
  38.    // Declaración para introducir total de la compra
  39.    printf ("Ingrese el total de su compra: \n", Compra);
  40. fflush(stdin);
  41.    scanf ("%f", &Compra);
  42.  
  43.    // Operaciones para aplicar descuento
  44.    if(Compra >= 8000)
  45.            {
  46. Total = Compra-(Compra*0.12);
  47. printf("El total a  pagar es de: %6.2f \n", Total);
  48.    }
  49.            else if(Compra == 7999 && Compra >=5500)
  50.            {
  51. Total = Compra-(Compra*0.10);
  52. printf("El total a pagar es de: %5.2f \n", Total);
  53.            }
  54.            else if(Compra ==5499 && Compra >=3100)
  55.            {
  56. Total = Compra-(Compra*0.07);
  57. printf("El total a pagar es de:%6.2f \n", Total);
  58.            }
  59.            else if(Compra == 3099 && Compra >=1500)
  60.            {
  61. Total = Compra-(Compra*0.05);
  62. printf("El total a pagar es de: %6.2f \n", Total);
  63.            }
  64.  
  65.    if (Compra !=1500)
  66.    {
  67. if (Compra < 1500)
  68.    printf("Su compra no aplica descuento \n");
  69.  
  70.  
  71. printf("El total a pagar es de: %5.2f \n",Compra);
  72.    }
  73.  
  74. system("pause");
  75. return 0;
  76.  
  77.  
  78. }

Saludos.