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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con "DO WHILE" y "WHILE"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con "DO WHILE" y "WHILE"  (Leído 1,654 veces)
santibarquero98

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Duda con "DO WHILE" y "WHILE"
« en: 2 Junio 2015, 17:32 pm »

Buenas, estoy haciendo ejercicios para resolver algoritmos ya que es algo que necesito practicar y bueno, he logrado hacer el ejercicio, que es el siguiente (copiado y pegado):

Determine el valor de un pasaje en avión , conociendo la distancia a recorrer, el número de días de estancia, y sabiendo que si la distancia a recorrer es superior a 1000 Km y el número de días de estancia es superior a 7, la línea aérea le hace un descuento del 30%. ( el precio por km. es de$35.00)

El código que funciona es el siguiente:

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4. /* Se declaran las variables */
  5. int distancia,dias;
  6. int prectotalkm,descuento,valorpasaje;
  7.  
  8. /* Se pide al usuario la informacion de dos de las variables */
  9. printf("Introduce la distancia.\n"); /* Queda declarada la variable DISTANCIA */
  10. scanf("%d",&distancia);
  11.  
  12. printf("Introduce el numero de dias. \n"); /* Queda declarada la variable DIAS */
  13. scanf("%d",&dias);
  14. /* Se declaran variables que ya se pueden declarar */
  15. prectotalkm=distancia*35;
  16. descuento=(prectotalkm*30)/100;
  17. valorpasaje=prectotalkm-descuento;
  18.  
  19. /* COMIENZA EL ALGORITMO */
  20.  
  21. /*Mientras que la distancia sea menor a 1000 */
  22. while(distancia<1000)
  23. {
  24. printf("El precio del pasaje es %d",prectotalkm);
  25. return 0;
  26. }
  27.  
  28. /* Mientras que la distancia sea mayor a 1000 */
  29.  
  30. while(distancia>1000)
  31. {
  32. if(dias>7)
  33. {
  34. printf("El valor del pasaje es %d",valorpasaje);
  35. }
  36. else
  37. {
  38. printf("El valor del pasaje es %d",prectotalkm);
  39. }
  40. return 0;
  41.  
  42. }
  43. return 0;
  44. }
  45.  

Pero yo al principio lo he hecho con DO WHILE y no funcionaba, daba siempre el mismo resultado, sin pasar al segundo DO WHILE, siempre hacía el primero y el código "malo" es el siguiente:

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4. /* Se declaran las variables */
  5. int distancia,dias;
  6. int prectotalkm,descuento,valorpasaje;
  7.  
  8. /* Se pide al usuario la informacion de dos de las variables */
  9. printf("Introduce la distancia.\n"); /* Queda declarada la variable DISTANCIA */
  10. scanf("%d",&distancia);
  11.  
  12. printf("Introduce el numero de dias. \n"); /* Queda declarada la variable DIAS */
  13. scanf("%d",&dias);
  14.  
  15. /* Se declaran variables que ya se pueden declarar */
  16.  
  17. prectotalkm=distancia*35;
  18. descuento=(prectotalkm*30)/100;
  19. valorpasaje=prectotalkm-descuento;
  20.  
  21. /* COMIENZA EL ALGORITMO */
  22.  
  23. /*Mientras que la distancia sea menor a 1000 */
  24. do
  25. {
  26. printf("El precio del pasaje es %d",prectotalkm);
  27. return 0;
  28. }
  29. while(distancia<1000);
  30.  
  31. /* Mientras que la distancia sea mayor a 1000 */
  32.  
  33. do
  34. {
  35. if(dias>7)
  36. {
  37. printf("El valor del pasaje es %d",valorpasaje);
  38. }
  39. else
  40. {
  41. printf("El valor del pasaje es %d",prectotalkm);
  42. }
  43. }
  44. while(distancia>1000);
  45. return 0;
  46. }
  47.  

¿Alguien me puede explicar porque el primer código con WHILE funciona pero el mismo y con DO WHILE no? Se que DO WHILE comprueba la condición al final pero no se que tiene que ver realmente, debería funcionar, pero eso se lo dejo a los sabios jeje

P.D: ¿Cómo pongo el código con colores para que no sean tan basto de ver? ¿Tengo que hacerlo manual?

Mod: para que el código se vea en colores, debes usar las etiquetas GeSHi, es el cuadro selector que está a la derecha, arriba de los emoticones


« Última modificación: 2 Junio 2015, 18:06 pm por engel lex » En línea

pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Duda con "DO WHILE" y "WHILE"
« Respuesta #1 en: 2 Junio 2015, 18:29 pm »

Creo que estás usando el while como si fuese un condicional y no como un bucle, me parece muy mala práctica.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda con "DO WHILE" y "WHILE"
« Respuesta #2 en: 2 Junio 2015, 18:39 pm »

efectivamente como dice pacosn1111 usas while mal...

while y do-while son ciclos... sirven para repetir operaciones y las repetirán siempre que la condición se cumpla

esto
Código
  1. while(distancia<1000)
  2. {
  3. printf("El precio del pasaje es %d",prectotalkm);
  4. return 0;
  5. }
  6.  
  7. /* Mientras que la distancia sea mayor a 1000 */
  8.  
  9. while(distancia>1000)
  10. {
  11. if(dias>7)
  12. {
  13. printf("El valor del pasaje es %d",valorpasaje);
  14. }
  15. else
  16. {
  17. printf("El valor del pasaje es %d",prectotalkm);
  18. }
  19. return 0;
  20.  
  21. }
  22. return 0;
  23.  
es simplemente absurdo... para que hacer un ciclo que no termina la primera vuelta?
 
si no es por el return 0, ese ciclo si entra es infinito

para eso existe el if y el if-else

Código
  1. if(distancia<1000){
  2. printf("El precio del pasaje es %d",prectotalkm);
  3.  
  4. }else {/* Mientras que la distancia sea mayor o igual a 1000 */
  5.  
  6. if(dias>7){
  7. printf("El valor del pasaje es %d",valorpasaje);
  8. }else {
  9. printf("El valor del pasaje es %d",prectotalkm);
  10. }
  11. }
  12. return 0;
  13.  
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
santibarquero98

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Duda con "DO WHILE" y "WHILE"
« Respuesta #3 en: 2 Junio 2015, 20:19 pm »

Y mira que lo he estado pensando mientras escribía el algoritmo...en fin, me quedo con el detalle de repetición porque la verdad que hubiese sido más simple.

Gracias.
En línea

edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: Duda con "DO WHILE" y "WHILE"
« Respuesta #4 en: 2 Junio 2015, 21:12 pm »

Te recomiendo que utilices constantes para los datos que tienes, sería mejor que declararas el precio y el limite de kilometros, así cuando necesites reajustar los valores solo lo haces en la constante y no en todo el código. Incluso hasta el descuento lo podrias declarar como constante en el preprocesador.

Código
  1. #define PRECIO 35
  2. #define LIMITE 1000 //Kilometros

Me gusta usar ciclos do-while cuando las repeticiones dependen de cierta condición o por ejemplo para validar datos de entrada, si el dato no es correcto repite y repite. ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines