Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: skatres en 20 Noviembre 2011, 20:15 pm



Título: ¿Como retornar a un paso anterior?
Publicado por: skatres en 20 Noviembre 2011, 20:15 pm
Hola a todos, en mi intento de seguir aprendiendo en esto de la programacion, me surgió esta duda, que no consigo encontrar por internet, la cual es la siguiente:

Dispongo de este programa:

Código:
/*Escribe un programa que pregunte al usuario los dos lados de un rectángulo y
presente por pantalla el cálculo del perímetro (suma de los lados) y el área (base por
altura).*/

# include <stdio.h>
# include <stdlib.h>

int main()
{ int lado_menor,lado_mayor,base,altura,perimetro,area;

      printf("\n Introduce el valor del lado menor:");
      scanf("%d",&lado_menor);
     
      printf("\n Introduce el valor del lado mayor:");
      scanf("%d",&lado_mayor);
     
                              if(lado_mayor<lado_menor)
                                                       printf("El lado mayor tiene que ser mayor que el menor");
                                                       
                                                       else
                                                       
     
      printf("\n Introduce el valor de la base:");
      scanf("%d",&base);
     
      printf("\n introduce el valor de la altura:");
      scanf("%d",&altura);
     
      perimetro=(lado_menor*2)+(lado_mayor*2);
      area=(base*altura);
     
      printf("\n El perimetro es:%d",perimetro);
   
      printf("\n El area es:%d",area);



system("Pause");
return 0;
   


Bien pues me gustaría saber como puedo retornar , en caso de que el valor del lado mayor sea menor, a la pregunta de introducir el lado mayor.


Título: Re: ¿Como retornar a un paso anterior?
Publicado por: RyogiShiki en 20 Noviembre 2011, 20:18 pm
Lo que haces es un loop que se repite hasta que el dato ingresado sea el correcto:

Código
  1. scanf("%d", &lado_mayor);
  2. while (lado_mayor < lado_menor) {
  3.    printf("El lado mayor tiene que ser mayor que el menor");
  4.    scanf("%d", &lado_mayor);
  5. }
  6.  

o

Código
  1. int error_flag = 0;
  2.  
  3. do {
  4.  error_flag = 0;
  5.  //pedir valor
  6.  scanf("%d", &lado_mayor);
  7.  if (lado_mayor < lado_menor) {
  8.    erro_flag = 1;
  9.    //mostrar algún error
  10.  }
  11.  
  12. } while (error_flag);
  13.  



Saludos


Título: Re: ¿Como retornar a un paso anterior?
Publicado por: skatres en 20 Noviembre 2011, 21:58 pm
Lo que haces es un loop que se repite hasta que el dato ingresado sea el correcto:

Código
  1. scanf("%d", &lado_mayor);
  2. while (lado_mayor < lado_menor) {
  3.    printf("El lado mayor tiene que ser mayor que el menor");
  4.    scanf("%d", &lado_mayor);
  5. }
  6.  

o

Código
  1. int error_flag = 0;
  2.  
  3. do {
  4.  error_flag = 0;
  5.  //pedir valor
  6.  scanf("%d", &lado_mayor);
  7.  if (lado_mayor < lado_menor) {
  8.    erro_flag = 1;
  9.    //mostrar algún error
  10.  }
  11.  
  12. } while (error_flag);
  13.  



Saludos

Gracias!!.No termino de comprender la primera opcion, podrías explicarme como debería de ir, porque amí me sale un bucle infinito, siento las molestias


Título: Re: ¿Como retornar a un paso anterior?
Publicado por: RyogiShiki en 20 Noviembre 2011, 22:18 pm
Mira es muy simple, primero pides el dato del número menor, una vez leido  pides el dato del número mayor, justo después colocas el loop en él la condición será evaluada como verdadera o falsa, si es falsa el loop no se ejecuta, si es verdadera se ejecuta hasta que la condición sea falsa. Digamos:

Numero Menor: 10
Numero Mayor: 5
 Se evelua la condición para entrar o no al loop:
 Numero mayor < Numero menor : Si (true)
    Entramos al loop
    solicitamos de nuevo el número: 15
    reinicia el loop y se vuelve a evaluar la expresión:
 Numero mayor < numero menosr: No (false)
 La condición no se cumple, el loop no se ejecuta y el flujo normal del programa continua.

En definitiva sería algo así:

Código
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.      int lado_menor,lado_mayor,base,altura,perimetro,area;
  7.      printf("\n Introduce el valor del lado menor:");
  8.      scanf("%d",&lado_menor);
  9.  
  10.      printf("\n Introduce el valor del lado mayor:");
  11.      scanf("%d",&lado_mayor);
  12.      //----------------------------
  13.      while (lado_mayor < lado_menor) {
  14. printf(" El lado mayor tiene que ser mayor que el menor");
  15. printf("\n Intentalo nuevamente: ");
  16. scanf("%d", &lado_mayor);
  17.      }
  18.      //---------------------------                                                
  19.  
  20.      printf("\n Introduce el valor de la base:");
  21.      scanf("%d",&base);
  22.  
  23.      printf("\n introduce el valor de la altura:");
  24.      scanf("%d",&altura);
  25.  
  26.      perimetro=(lado_menor*2)+(lado_mayor*2);
  27.      area=(base*altura);
  28.  
  29.      printf("\n El perimetro es:%d",perimetro);
  30.  
  31.      printf("\n El area es:%d",area);
  32.  
  33.  
  34.  
  35.      system("Pause");
  36.      return 0;
  37. }
  38.  

Saludos


Título: Re: ¿Como retornar a un paso anterior?
Publicado por: skatres en 20 Noviembre 2011, 22:29 pm
Claro!!, ya me ha salido :), muchas gracias por tu atencion compi


Título: Re: ¿Como retornar a un paso anterior?
Publicado por: RyogiShiki en 20 Noviembre 2011, 22:31 pm
De nada, Me alegra que te haya funcionado.

Saludos