elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Importante bucle mientras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Importante bucle mientras  (Leído 2,117 veces)
ElfoArdiente

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Importante bucle mientras
« en: 16 Mayo 2019, 02:49 am »

AYUDA POR FAVOR!!!
estoy haciendo un programa en C para una materia en algoritmo y necesito ayuda para regularizar la materia, por favor

mi problema es el bucle while mi condición no me cumple ayudaaa..

MI CODIGO:


// Trabajo Evaluativo

#include<stdio.h>

int main(){

// Declaracion de variables.

int n_cliente, opcion, recauda_combo, pre_combo1, pre_combo2, pre_combo3, pago, total, precioFinal, cant_cliente;

// Declaracion de variables auxiliares.

pre_combo1 = 250;  //precio del combo 1
pre_combo2 = 255; // precio del combo 2
pre_combo3 = 350; // precio del combo 3

/*

Opcion 1 = combo1
Opcion 2 = combo2
Opcion 3 = combo3

*/

// Ingreso de datos.

printf("Ingrese el numero del cliente: \n");
scanf("%d",&n_cliente);

printf("Ingrese el precio del combo elegido: (1-combo 1: $250, 2-combo 2: $255, 3-combo 3: $350):\n");
scanf("%d",&opcion);

printf("Ingrese la forma de pago: (1- efectivo, 2- tarjeta de debito, 3- tarjeta de credito): \n");
scanf("%d",&pago);

// Inicio de la estructura iterativa mientras.

while(n_cliente != 9999){  // al escribir 9999 no me sale del bulce
   
   // Inicio de la estructura selectiva segun sea.
   
   switch (opcion){
      
      case 1:
            printf("Selecciono la opcion combo 1: \n\n");
           
            // Inicio de la estructura anidada para el combo1.
           
            if((opcion == 1)&&(pago == 1)){
               
               cant_cliente = n_cliente * pre_combo1;   /* Cant_cliente es el total de clientes por el combo elegido.*/
               total = cant_cliente * 0.10;           //  calculando el porcentaje y guardando en la variable total.
               precioFinal = cant_cliente - total;    //  calculando el descuento para obtener el precio total.
                   // recaudacion
               
               printf("El precio que debe pagar por el combo elegido es: %d \n\n",precioFinal);
               
           }else{
              
              if((opcion == 1)&&(pago == 2)){
                 cant_cliente = n_cliente * pre_combo1;
                 total = cant_cliente;
              
                 
                 printf("El precio que debe pagar por el combo elegido es: %d \n\n",total);
                 
              }else{
                 
                 if((opcion == 1)&&(pago == 3)){
                    
                    cant_cliente = n_cliente * pre_combo1;
                    total = cant_cliente * 0.25;
                    precioFinal = cant_cliente - total;
                    
         
                    printf("El precio que debe pagar por el combo elegido es: %d \n\n",precioFinal);
                 }
              }
           }
           break;
           
           case 2:
              
              printf("Seleciono la opcion combo 2: \n\n");
              
              // Inicio de la estructura anidada para el combo2.
              
              if((opcion == 2)&&(pago == 1)){
               
               cant_cliente = n_cliente * pre_combo2;
               total = cant_cliente * 0.10;
               precioFinal = cant_cliente - total;
               recauda_combo = precioFinal;
               
               printf("El precio que debe pagar por el combo elegido es: %d \n\n",precioFinal);
               
           }else{
              
              if((opcion == 2)&&(pago == 2)){
                 
                 cant_cliente = n_cliente * pre_combo2;
                 total = cant_cliente;
                 recauda_combo = total;
                 
                 printf("El precio que debe pagar por el combo elegido es: %d \n\n",total);
                 
              }else{
                 
                 if((opcion == 2)&&(pago == 3)){
                    
                    cant_cliente = n_cliente * pre_combo2;
                    total = cant_cliente * 0.25;
                    precioFinal = cant_cliente - total;
                    recauda_combo = precioFinal;
                    
                    printf("El precio que debe pagar por el combo elegido es: %d \n\n",precioFinal);
                    
                 }
              }
           }
           break;
          
           case 3:
          
           printf("Selecciono la opcion combo 3: \n\n");
          
           // Inicio de la estrutura anidada para el combo3.
          
           if((opcion == 3)&&(pago == 1)){
               
               cant_cliente = n_cliente * pre_combo3;
               total = cant_cliente* 0.10;
               precioFinal = cant_cliente - total;
               
               
               printf("El precio que debe pagar por el combo elegido es: %d \n\n",precioFinal);
               
           }else{
              
              if((opcion == 3)&&(pago == 2)){
                 
                 cant_cliente = n_cliente * pre_combo3;
                 total = cant_cliente;
                 
                 printf("El precio que debe pagar por el combo elegido es: %d \n\n",total);
                 
              }else{
                 
                 if((opcion == 3)&&(pago == 3)){
                    
                    cant_cliente = n_cliente * pre_combo3;
                    total = cant_cliente * 0.25;
                    precioFinal = cant_cliente - total;
                    
                    printf("El precio que debe pagar por el combo elegido es: %d \n\n",precioFinal);
                 }
              }
           }
           break;
          
           default: printf("Opcion invalida vuelva a intentarlo: \n\n");    
          
   }               
                    // Mostrar el importe total del combo.
               
               printf("El improte total del combo es: %d\n\n",cant_cliente);
   
   
                  // Mostrar la cantidad de clientes que eligieron el combo 2.
                     
                    if(opcion == 2){
                       
                       printf("La cantidad de clientes que eligieron el combo 2 es: %d\n\n",n_cliente);
                       
               }
               
               // Mostrar el porcentaje respecto del combo a pagar.
               
                 if((opcion == 1)&&(pago != 2)){
         
                      printf("El importe de descuento del combo es: %d\n\n",total);
               
                   }else{
              
                   if((opcion == 2)&&(pago != 2)){
                 
                     printf("El importe de descuento del combo es: %d\n\n",total);
                 
                 }else{
                 
                  if((opcion == 3)&&(pago != 2)){
                    
                    printf("El importe de descuento del combo es: %d\n\n",total);
            
                  }
                }
               }
               
               // Mostrar  el importe de  recaudacion de un combo.
               
               printf("El importe recaudado del combo es $%d:\n\n",recauda_combo);
               
               // Ingreso de datos.
   
                   printf("Ingrese el numero del cliente: \n\n");
                    scanf("%d",&n_cliente);

                    printf("Ingrese el precio del combo elegido: (1-combo 1: $250, 2-combo 2: $255, 3-combo 3: $350): \n");
                    scanf("%d",&opcion);

                    printf("Ingrese la forma de pago: (1- efectivo, 2- tarjeta de debito, 3- tarjeta de credito): \n");
                    scanf("%d",&pago);
               
   
}

 return 0;

}


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Importante bucle mientras
« Respuesta #1 en: 16 Mayo 2019, 03:06 am »

No veo por ningun lado que le asignes a n_cliente el valor 9999 para salor del bucle o que le des la opcion al usuario de que lo haga.
O estoy ciego o no lo has incluido. Utiliza las etiquetas GeSHI y selecciona el lenguaje en el foro.
Intenta formatear mejor el codigo de tus programas para que sean legibles a simple vista e intenta utilizar alternativas mas cortas.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Importante bucle mientras
« Respuesta #2 en: 16 Mayo 2019, 04:35 am »

Bueno varias cosas. El programa como ya te han dicho se puede hacer más legible y debes ponerlo entre etiquetas de código GeSHi.
El programa no tiene ningún error y finaliza cuando introduces el número 9999 como cliente. Pero antes debes introducir las otras dos variables que pides. Si no quieres que pase esto debes pedir el número del cliente antes de empezar el <while> y justo antes de terminarlo y las otras dos variables pedirlas únicamente dentro del <while>.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
ElfoArdiente

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Importante bucle mientras
« Respuesta #3 en: 17 Mayo 2019, 01:24 am »

Código
  1.  
  2. #include<stdio.h>
  3.  
  4. int main()
  5. {
  6. int n_clien, opc, pago;
  7. int tot, porc, recaud;
  8.  
  9. /*
  10. n_clien = numero de clientes.
  11. opc = opcion.
  12. tot = total.
  13. porc = porcentaje.
  14. recaud = recaudacion.
  15. */
  16.  
  17.   printf("Ingrese el numero de cliente: ");
  18.   scanf("%d",&n_clien);
  19.   printf("Ingrese el precio: (1-250, 2-255, 3-250):");
  20.   scanf("%d",&opc);
  21.   printf("Ingrese el pago: (1-efectivo, 2-T. credito, 3-T. debito):");
  22.   scanf("%d",&pago);
  23.  
  24.   if((opc == 2)&&(pago == 1))
  25.   {
  26.   tot = n_clien * 255;
  27.   porc = tot * 0.05;
  28.   recaud = tot - porc;
  29.   }
  30.   else{
  31.  
  32.    if((opc == 2)&&(pago == 2))
  33.    {
  34.  
  35.   tot= n_clien * 255;
  36.  
  37. }
  38. else{
  39.  
  40. if((opc == 2)&&(pago == 3))
  41. {
  42.  
  43. tot = n_clien * 255;
  44. porc = tot * 0.05;
  45. recaud = tot - porc;
  46.  
  47. }
  48.   }  
  49.  }
  50.  
  51.  printf ("\nEl total del precio es: %d\n",tot);
  52.  
  53.  printf ("\nEl precio con el descuento es: %d\n",recaud);
  54.  
  55.  printf ("\nEl descuento sobre el total es: %d%%\n",porc);
  56.  
  57.  printf ("\nEl numero de clientes que eligieron el combo 2 es: %d\n",n_clien);
  58.  
  59.  
  60. }
  61.  
  62.  

Mira hay corregi el código

Como hago para hacer un bucle que se itere varias veces y al final en la salida me de los resultados de los printf
PD: intente hacer con el bucle while pero al intentar finalizar el programa el bucle, no me sale y en la salida me sigue preguntando si quiere ingresar tanto.. Y queda como un bucle infinito, nose si me entienden soy muy novato y mis profes no me enseñan nada, me pueden ayudar porfa
« Última modificación: 17 Mayo 2019, 01:28 am por ElfoArdiente » En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Importante bucle mientras
« Respuesta #4 en: 17 Mayo 2019, 01:55 am »

No entiendo muy bien que quieres hacer.
Puedes echarle la culpa a los profesores o buscarte la vida leyendo libros, tutoriales etc.
Se puede aprender en 1 semana lo que te van a pedir todo el curso de programación.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Importante bucle mientras
« Respuesta #5 en: 17 Mayo 2019, 02:46 am »

Repites muchas veces el mismo código lo cual no es para nada eficiente. Tienes que pensar bien lo que quieres hacer antes de programar. Haz un esquema en un papel o algo por el estilo que te ayude a organizar la información.
Te dejo un ejemplo para que veas que se puede organizar mejor el código basándome en el primer código que publicaste. No está completo ya que lo que tienes bien te he puesto un comentario para que lo incluyas tú. Tampoco era plan de hacerlo todo. Espero que te sirva de ayuda porque no es algo que haga a menudo así que aprovéchalo.

Debes ver qué cosas quieres guardar y cuales no hace falta; por ejemplo no es necesario guardar el precio antes del descuento y después (si fuera necesario pues entonces sí, creas una variable <precio_inicial> y otra <precio_final>). Si quieres mostrar cuántos clientes han elegido la opción 2 no tiene mucho sentido mostrarlo al terminar cada iteración porque en este caso si la opción es 2, los clientes que habrán elegido la opción 2 son todos <numero_clientes> y si la opción no es 2, entonces ninguno. Lo lógico desde mi punto de vista sería mostrar eso al terminar el programa (entonces en cada vuelta si la opción es 2, acumulamos los clientes que han elegido esa opción).
Código
  1. // creamos constantes globales para los precios ya que usar numeros sueltos que no se sabe lo que significa no es una buena practica
  2. const int PRECIO_1 = 250;
  3. const int PRECIO_2 = 255;
  4. const int PRECIO_3 = 350; // supongo esto ya que en el ultimo mensaje es 250 igual que precio1
  5.  
  6. // constantes para los descuentos
  7. const float DESCUENTO_1 = 0.15;
  8. const float DESCUENTO_3 = 0.25;
  9.  
  10. // constante para determinar el valor que se usa para finalizar el programa
  11. const int CLIENTES_EXIT = 9999;
  12.  
  13. int main(){
  14.    // creamos las variables que vamos a usar pensando bien en lo que necesitamos
  15.    int numero_clientes; // numero de clientes que van a "comprar" una de las opciones
  16.    int clientes_opcion2 = 0; // numero de clientes que eligen la opcion 2
  17.    int opcion_precio, opcion_pago; // opciones tanto de precio como de forma de pago
  18.    float precio, descuento; // precio de la compra (con decimales) y descuento aplicado
  19.  
  20.    // pides el numero de clientes
  21.    while(numero_clientes != CLIENTES_EXIT){
  22.        // pides las opciones
  23.  
  24.       // calculamos los precios segun el precio por cliente
  25.        if(opcion_precio == 1)
  26.            precio = numero_clientes * PRECIO_1;
  27.        else if(opcion_precio == 2)
  28.            precio = numero_clientes * PRECIO_2;
  29.        else
  30.            precio = numero_clientes * PRECIO_3;
  31.  
  32.        // calculamos lo necesario segun el metodo de pago
  33.        if(opcion_pago == 1)
  34.            descuento = precio * DESCUENTO_1;
  35.        else if(opcion_pago == 3)
  36.            descuento = precio * DESCUENTO_3;
  37.        else // si no es la opcion 1 ni 3, entonces es la 2 (suponiendo que solo se admiten esos 3 valores)
  38.            clientes_opcion2 += numero_clientes; // equivalente a clientes_opcion2 = clientes_opcion2 + numero_clientes
  39.  
  40.        // aplicamos el descuento
  41.        precio -= descuento; // equivalente a decir precio = precio - descuento
  42.  
  43.        // mostramos los resultados
  44.        printf("El importe final es: %.2f\n", precio); // mostramos el precio con 2 decimales
  45.        // muestras el descuento de la misma manera (CUIDADO: si la opcion de pago es 2 se mostrara el descuento de la repeticion anterior ya que no se actualiza)
  46.  
  47.        // pides numero de clientes nuevamente para repetir el programa
  48.    }
  49.    // llegamos aqui una vez que introducimos <numero_clientes = 9999>
  50.    printf("El numero de clientes que han elegido la opcion de pago 2 son: %d\n", clientes_opcion2);
  51. }

A la hora de pedir las opciones hay un problema. Que pasa si el usuario introduce opciones no válidas?? O qué pasa si el usuario introduce <numero_clientes = 10000>??
Bueno lo segundo es fácil. Cambiamos la condición del <while> por un (numero_clientes < CLIENTES_EXIT) y listo.
Lo primero se suele solucionar con lo que se conoce como filtro. Un filtro es un bucle que pide un valor al usuario y se repite mientras el valor no sea válido, o sea básicamente un filtro que solo deja pasar valores válidos. Esto se implementa con un <do while>. Te dejo un ejemplo de un filtro para que solo deje pasar números positivos y pares. Como tarea te queda adaptarlo a ti a tu problema...
Código
  1. int numero;
  2. do{ // hacer lo que hay dentro del bucle (pedir un valor)...
  3.    printf("Introduce un numero par y positivo: ");
  4.    scanf("%d", &numero);
  5. }   while(numero < 0 || numero % 2 != 0); // ... mientras el numero sea menor que 0 o sea impar
  6. // cuando un valor pase el filtro llegamos aqui y podemos asegurar que ese valor es positivo y par
  7. printf("El numero introducido es: %d\n", numero);
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
ElfoArdiente

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Importante bucle mientras
« Respuesta #6 en: 17 Mayo 2019, 05:48 am »

woooooowww!!! realmente eres muy bueno ;D ;D, muchisimas gracias por ayudarme a comprender, ahora voy a terminar mi codigo, ojala algun dia puede agradecerte
En línea

ElfoArdiente

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Importante bucle mientras
« Respuesta #7 en: 17 Mayo 2019, 07:12 am »

woooooowww!!! realmente eres muy bueno ;D ;D, muchisimas gracias por ayudarme a comprender, ahora voy a terminar mi codigo, ojala algun dia pueda agradecerte en persona
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,237 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
Bucle en vb6 ????
Programación Visual Basic
marcofbb 2 1,710 Último mensaje 28 Mayo 2010, 03:44 am
por marcofbb
Bucle que no lee
PHP
Riki_89D 2 1,859 Último mensaje 2 Diciembre 2010, 17:29 pm
por Riki_89D
Cerrar aplicación mientras ser reproduce un bucle Do/Loop
.NET (C#, VB.NET, ASP)
Lekim 5 3,451 Último mensaje 21 Octubre 2015, 09:54 am
por Lekim
Como frenar un bucle for con un bucle while en bash linux
Scripting
mario290386 0 2,027 Último mensaje 5 Mayo 2019, 13:58 pm
por mario290386
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines