Acabar ejecucion pulsando 0

Iniciado por droken26, 20 Febrero 2015, 16:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

droken26

Estoy realizando un ejercicio el cual me piden que calcule numeros primos y una vez calculado vuelva a preguntar si quiere volver a calcular nuevamente otro numero. El programa se va ejecutando digamos en Bucle hasta que pulsemos 0

Ahi es donde tengo el problema no se donde poner esa condicion ni de que forma, asi de como indicarle nuevamente que haga la pregunta de si quiere volver a calcular un nuevo numero primo.

Os dejo el codigo.

Espero que alguien me ponga sobre la pista porque estoy "aburrido", ademas de estar empezando en este mundo.

Muchas gracias y un saludo

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int n, c, divisores;
 
   do{
       printf("Introduzca un numero entero positivo para verificar si es o no primo:\n");
       scanf("%d",&n);
       
       
   }while (n<0);
   
   divisores = 0;
   
   for(c=2; c<=n/2; c++)
       
       if (n%c == 0)
           
           divisores++;
   if (divisores >= 1) printf ("%d no es primo\n", n);
   else printf ("%d es primo\n",n);
   
   if(n==0)
   printf("Fin del Programa\n");
   
   {
       
   return(0);
       }
}


Mod: Mensaje modificado, al publicar código usa etiquetas GeSHi

_Enko

#1
Hola, algo asi deberia de servirte  :-*
Código (cpp) [Seleccionar]

int n;
while(scanf("%d",&n) && (n != 0)){
//o, n > 0?

// hacer programa
}
return 0; //exit



Citardo{
        printf("Introduzca un numero entero positivo para verificar si es o no primo:\n");
        scanf("%d",&n);
       
       
    }while (n<0);
   
n menor que 0. Es un numero negativo.
Saludos.

droken26

Perdona Enko, no lo llego a ver, he includo esas lineas pero nada, sigue igual, me lo podrias indicar el lugar exacto en el cogido fuente que puse en mensaje inicial.

Un saludo

_Enko

Código (cpp) [Seleccionar]

int main(int argc, char *argv[]) {

    int n;
    while(scanf("%d",&n) && (n != 0)){
       //n tiene el valor que necesitas y no es 0.
       //todos tus calculos y mensajes que necesites en el caso que n!=0
    }
    //si estas aqui, es porque n=0.
    //imprimes mensaje de despedida.
    return 0;
}


Saludos.

droken26

Gracias Enko, ahora tengo otro problema mas...

He realizado el código y funciona, pero le indico que me pregunte si desea realizar otra operación, si le pongo que si, entra en bucle pero si le pongo que no, se cierra el programa que es lo que debe de hacer, el problema que tengo es como quitar ese bucle, que cuando le pongo que si, pues me pregunte nuevamente que numero desea operar nuevamente.

Os dejo el código, creo que algo se me escapa
un saludo

#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main()
{
    int n,i,c=0;
    char resp;
    printf("Introduzca un numero entero positivo, para terminar pulse 0: \n");
    //while(scanf("%d", &n) && (n !=0)){
scanf("%d", &n);
while (n!=0){
        for(i=1;i<=n;i++){

            if (n%i==0)c++;
        }
        if(c==2) printf("El numero es primo. \n");
        else printf("El numero no es primo. \n");

            do{
                printf("Desea repetir la operacion s/n: \n");
                resp=getche();
            } while((resp == 's') || (resp =='S'));
            system("pause");
            return 0;
    }
    }

user-marcos

#5
Código (cpp) [Seleccionar]


#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main()
{
do{
   int n,i,c=0;
   char resp;
   printf("Introduzca un numero entero positivo, para terminar pulse 0: \n");
   //while(scanf("%d", &n) && (n !=0)){
scanf("%d", &n);
while (n!=0){
       for(i=1;i<=n;i++){

           if (n%i==0)c++;
       }
       if(c==2) printf("El numero es primo. \n");
       else printf("El numero no es primo. \n");

          if(n!=0){
               printf("Desea repetir la operacion s/n: \n");
               resp=getche();      
  }
  else resp='s';
           } while((resp == 's') || (resp =='S'));
           system("pause");
           return 0;
   }

No lo he probado por que estoy en linux, mira ver si te funciona

rir3760

Cita de: droken26 en 22 Febrero 2015, 13:21 PMHe realizado el código y funciona, pero le indico que me pregunte si desea realizar otra operación, si le pongo que si, entra en bucle pero si le pongo que no, se cierra el programa que es lo que debe de hacer, el problema que tengo es como quitar ese bucle, que cuando le pongo que si, pues me pregunte nuevamente que numero desea operar nuevamente.
Lo que debes hacer es utilizar un bucle do ... while donde primero verifiques que el valor no sea cero para así realizar la verificación si es primo o no, a continuación pides confirmación al usuario si desea repetir el proceso. La condición para que el bucle se repita es que el numero no sea cero y la respuesta del usuario sea s.

De esta forma:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int n,i,c=0;
   char resp;
   
   do {
      puts("Introduce un numero entero positivo (0 para terminar)");
      scanf("%d", &n);
      if (n != 0){
         
         /* Verificar si es primo */
         
         printf("Desea repetir la operacion s/n: \n");
         scanf(" %c", &resp);
      }
   }while (n != 0 && (resp == 's' || resp == 'S'));
   
   return 0;
}


Sin embargo (siendo diplomatico) no gusta ya que tienes dos formas de salida cuando la primera (introducir el valor cero) basta para terminar el programa. Por ultimo si apenas empiezas deberías evitar el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

droken26