elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:27  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ¿Como retornar a un paso anterior?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como retornar a un paso anterior?  (Leído 224 veces)
skatres

Desconectado Desconectado

Mensajes: 18


Ver Perfil
¿Como retornar a un paso anterior?
« en: 20 Noviembre 2011, 20:15 »

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.


En línea
RyogiShiki


Desconectado Desconectado

Mensajes: 709


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: ¿Como retornar a un paso anterior?
« Respuesta #1 en: 20 Noviembre 2011, 20:18 »

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

Código
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

Código
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


« Última modificación: 20 Noviembre 2011, 20:38 por RyogiShiki » En línea

skatres

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: ¿Como retornar a un paso anterior?
« Respuesta #2 en: 20 Noviembre 2011, 21:58 »

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

Código
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

Código
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
En línea
RyogiShiki


Desconectado Desconectado

Mensajes: 709


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: ¿Como retornar a un paso anterior?
« Respuesta #3 en: 20 Noviembre 2011, 22:18 »

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
# 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
« Última modificación: 20 Noviembre 2011, 23:10 por RyogiShiki » En línea

skatres

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: ¿Como retornar a un paso anterior?
« Respuesta #4 en: 20 Noviembre 2011, 22:29 »

Claro!!, ya me ha salido :), muchas gracias por tu atencion compi
En línea
RyogiShiki


Desconectado Desconectado

Mensajes: 709


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: ¿Como retornar a un paso anterior?
« Respuesta #5 en: 20 Noviembre 2011, 22:31 »

De nada, Me alegra que te haya funcionado.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines