Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Freelancer en 29 Junio 2011, 06:24 am



Título: duda sobre pequeño programa en c
Publicado por: Freelancer en 29 Junio 2011, 06:24 am
hola estoy aprendiendo a programar en c y me e puesto hacer un pequeño programa algo basico con condiciones y cyclos bueno le programa trata sobre decir cuantos numeros son pares positivos y cuantos numeros son pares negativos
haora eso ya lo se hacer lo que no se bien es que al definir el cyclo qusiera que me deja de pedir numeros al precionar la tecla espacio pero no se si eso se puede hacer pero creo que si se puedo pero al menos no se como aqui les dejo el codigo de el programa
Código:
//Programa de pares and impares negativos y positivios con condiciones y tambien ciclos 
#include <stdio.h>
#include <conio.h>
// declaracion de variables
int num;
int parp,parn,imparp,imparn;

int main(){
    while(num!=""){
/* esta es la parte que yo quisiera saber como poner que se termine el ciclo, al precionar espacio en el teclado porque habria que poner que num es diferente a algo en este caso a espacio y cuando apretemos espacio termina el ciclo y no introducimos mas numeros y nos dice cuales son pares positivos y pares negativos vale bueno espero que puedan responder mi duda */

    printf("ingrese un numero");
    scanf("%d",&num);
    
    if(num/2=0 && num>0) // condiciones
    parp=parp+1;
    else
       if(num/2=0 && num<0)
       parn=parn+1;
    else
       if(num/2!=0 && num>0)
       imparp=imparp+1;
    else
       if(num/2!=0 && num<0)
       imparn=imparn+1;
    }
    printf("pares positivivos : ",parp);  // mostramos el resultado
    printf("pares negativos : ",parn);
    printf("impares positivos : ",imparp);
    printf("impares negativos : ",imparn);
    
getch(); // pausamos el programa
}


Título: Re: duda sobre pequeño programa en c
Publicado por: leogtz en 29 Junio 2011, 08:19 am
El programa  tiene algunos errores.

No puedes comparar el espacio con "num"

Código:
while(num!=""){
num es de tipo int, el espacio es un caracter, aparte tu estás tratando de comparar num con la cadena " ".

Lo que puedes hacer es checar la entrada del scanf(), el scanf() te devuelve algo según lo que se haya leído, puedes checar así:

Código
  1.    while(scanf("%d", &numero) != 0)
  2.  

Es decir, el ciclo terminará cuando se haya ingresado algo que no sea un número, por ejemplo una letra.

Para comprobar si un número es par o impar deberías de checar el residuo.

if(numero % 2 == 0) <---- si el residuo de la división de numero entre 2 es 0, quiere decir que el número es par. También puedes usar la función fmod() definida en math.h para checar el residuo.

Otra cosa, no estás inicializando las variables parp,parn,imparp,imparn por lo que estás acumulando en valores basura.

Otra cosa, se llaman "ciclos", no cyclos.
Otra cosa, no es necesaria la librería conio.h ni getch(). Puedes pausar la ejecución del programa con una función estándard como getchar().

Aquí está la corrección a tu programa, c estándard:


Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.    int numero = 0;
  6.    int pares = 0;
  7.    int impares = 0;
  8.  
  9.    printf("Numero : ");
  10.    while(scanf("%d", &numero) != 0)
  11.    {
  12.        if(numero % 2 == 0)
  13.            pares++;
  14.        else
  15.            impares++;
  16.        printf("Numero : ");
  17.    }
  18.  
  19.    printf("\nPares : %d\nImpares : %d\n", pares, impares);
  20.  
  21.    while(getchar() != '\n');
  22.    getchar();
  23.  
  24.    return 0;
  25. }
  26.  
  27. Una versión más corta:
  28. [code=c]while(scanf("%d", &numero) != 0)
  29.    {
  30.        fmod(numero, 2.0) == 0 ? pares++ : impares++;
  31.        printf("Numero : ");
  32.    }
  33.  
[/code]


Título: Re: duda sobre pequeño programa en c
Publicado por: Freelancer en 29 Junio 2011, 14:20 pm
muchas gracias por la aclaratoria, lo de getch(); lo hacia por que asi lo utilizan en la universidad donde estoy estudiando jeje pero ya   había leeido en este mismo foro que no es muy recomendable usar getch() aunque supongo que getchar es lo mismo