Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: droken26 en 20 Febrero 2015, 16:38 pm



Título: Acabar ejecucion pulsando 0
Publicado por: droken26 en 20 Febrero 2015, 16:38 pm
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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    int n, c, divisores;
  7.  
  8.    do{
  9.        printf("Introduzca un numero entero positivo para verificar si es o no primo:\n");
  10.        scanf("%d",&n);
  11.  
  12.  
  13.    }while (n<0);
  14.  
  15.    divisores = 0;
  16.  
  17.    for(c=2; c<=n/2; c++)
  18.  
  19.        if (n%c == 0)
  20.  
  21.            divisores++;
  22.    if (divisores >= 1) printf ("%d no es primo\n", n);
  23.    else printf ("%d es primo\n",n);
  24.  
  25.    if(n==0)
  26.    printf("Fin del Programa\n");
  27.  
  28.    {
  29.  
  30.    return(0);
  31.        }
  32. }

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


Título: Re: Acabar ejecucion pulsando 0
Publicado por: _Enko en 20 Febrero 2015, 16:46 pm
Hola, algo asi deberia de servirte  :-*
Código
  1. int n;
  2. while(scanf("%d",&n) && (n != 0)){
  3. //o, n > 0?
  4.  
  5. // hacer programa
  6. }
  7. return 0; //exit
  8.  


Citar
do{
        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.


Título: Re: Acabar ejecucion pulsando 0
Publicado por: droken26 en 20 Febrero 2015, 17:09 pm
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


Título: Re: Acabar ejecucion pulsando 0
Publicado por: _Enko en 20 Febrero 2015, 19:24 pm
Código
  1. int main(int argc, char *argv[]) {
  2.  
  3.    int n;
  4.    while(scanf("%d",&n) && (n != 0)){
  5.       //n tiene el valor que necesitas y no es 0.
  6.       //todos tus calculos y mensajes que necesites en el caso que n!=0
  7.    }
  8.    //si estas aqui, es porque n=0.
  9.    //imprimes mensaje de despedida.
  10.    return 0;
  11. }
  12.  

Saludos.


Título: Re: Acabar ejecucion pulsando 0
Publicado por: droken26 en 22 Febrero 2015, 13:21 pm
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

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7.    int n,i,c=0;
  8.    char resp;
  9.    printf("Introduzca un numero entero positivo, para terminar pulse 0: \n");
  10.    //while(scanf("%d", &n) && (n !=0)){
  11. scanf("%d", &n);
  12. while (n!=0){
  13.        for(i=1;i<=n;i++){
  14.  
  15.            if (n%i==0)c++;
  16.        }
  17.        if(c==2) printf("El numero es primo. \n");
  18.        else printf("El numero no es primo. \n");
  19.  
  20.            do{
  21.                printf("Desea repetir la operacion s/n: \n");
  22.                resp=getche();
  23.            } while((resp == 's') || (resp =='S'));
  24.            system("pause");
  25.            return 0;
  26.    }
  27.    }


Título: Re: Acabar ejecucion pulsando 0
Publicado por: user-marcos en 22 Febrero 2015, 14:35 pm
Código
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5.  
  6. int main()
  7. {
  8. do{
  9.    int n,i,c=0;
  10.    char resp;
  11.    printf("Introduzca un numero entero positivo, para terminar pulse 0: \n");
  12.    //while(scanf("%d", &n) && (n !=0)){
  13. scanf("%d", &n);
  14. while (n!=0){
  15.        for(i=1;i<=n;i++){
  16.  
  17.            if (n%i==0)c++;
  18.        }
  19.        if(c==2) printf("El numero es primo. \n");
  20.        else printf("El numero no es primo. \n");
  21.  
  22.           if(n!=0){
  23.                printf("Desea repetir la operacion s/n: \n");
  24.                resp=getche();    
  25.  }
  26.  else resp='s';
  27.            } while((resp == 's') || (resp =='S'));
  28.            system("pause");
  29.            return 0;
  30.    }
  31.  
No lo he probado por que estoy en linux, mira ver si te funciona


Título: Re: Acabar ejecucion pulsando 0
Publicado por: rir3760 en 22 Febrero 2015, 15:54 pm
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.
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int n,i,c=0;
  7.   char resp;
  8.  
  9.   do {
  10.      puts("Introduce un numero entero positivo (0 para terminar)");
  11.      scanf("%d", &n);
  12.      if (n != 0){
  13.  
  14.         /* Verificar si es primo */
  15.  
  16.         printf("Desea repetir la operacion s/n: \n");
  17.         scanf(" %c", &resp);
  18.      }
  19.   }while (n != 0 && (resp == 's' || resp == 'S'));
  20.  
  21.   return 0;
  22. }

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| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Un saludo


Título: Re: Acabar ejecucion pulsando 0
Publicado por: droken26 en 22 Febrero 2015, 17:12 pm
Muchas gracias, solucionado