¿Como retornar a un paso anterior?

Iniciado por skatres, 20 Noviembre 2011, 20:15 PM

0 Miembros y 1 Visitante están viendo este tema.

skatres

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:

/*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.

RyogiShiki

#1
Lo que haces es un loop que se repite hasta que el dato ingresado sea el correcto:


scanf("%d", &lado_mayor);
while (lado_mayor < lado_menor) {
   printf("El lado mayor tiene que ser mayor que el menor");
   scanf("%d", &lado_mayor);
}


o


int error_flag = 0;

do {
 error_flag = 0;
 //pedir valor
 scanf("%d", &lado_mayor);
 if (lado_mayor < lado_menor) {
   erro_flag = 1;
   //mostrar algún error
 }
 
} while (error_flag);




Saludos


skatres

Cita de: 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:


scanf("%d", &lado_mayor);
while (lado_mayor < lado_menor) {
   printf("El lado mayor tiene que ser mayor que el menor");
   scanf("%d", &lado_mayor);
}


o


int error_flag = 0;

do {
 error_flag = 0;
 //pedir valor
 scanf("%d", &lado_mayor);
 if (lado_mayor < lado_menor) {
   erro_flag = 1;
   //mostrar algún error
 }
 
} while (error_flag);




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

RyogiShiki

#3
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í:


# 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);
     //----------------------------
     while (lado_mayor < lado_menor) {
printf(" El lado mayor tiene que ser mayor que el menor");
printf("\n Intentalo nuevamente: ");
scanf("%d", &lado_mayor);
     }
     //---------------------------                                                
     
     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;
}


Saludos


skatres

Claro!!, ya me ha salido :), muchas gracias por tu atencion compi

RyogiShiki

De nada, Me alegra que te haya funcionado.

Saludos