Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mattray10 en 2 Marzo 2021, 22:22 pm



Título: ayuda para cambiar este ejercicio
Publicado por: mattray10 en 2 Marzo 2021, 22:22 pm
necesito que el cero no se cuente, en este programa cuando lo pones lo cuenta como un numero mas, hay posibilidad de cambiar eso o en su defecto hacer un código distinto?

ESTE ERA EL ENUNCIADO.
--------------------------------------------------------------------------------------------
ingresar 100 números o ingresar números hasta que se ingrese el 0, lo que ocurra primero.(números ingresados por el usuario)

Finalizado el ingreso o forzada la finalización al ingresar 0, se debe indicar:

Cuántos números fueron ingresados
Cuántos números son positivos y cuántos son negativos
Cuántos números son pares y cúantos son impares
--------------------------------------------------------------------------------------------
Código
  1. int main() {
  2.  
  3.    int max_num = 100;
  4.    int numero = -1;
  5.    int pos=0,neg=0,cont=0,par=0,impar=0;
  6.  
  7.  for(int i=0; i<max_num && numero!=0; i++) {
  8.    cout<<"ingrese un numero ";cin>>numero;
  9.    cont++;
  10.    if(numero%2==0){
  11.        par++;
  12.    }
  13.    else{
  14.        impar++;
  15.    }
  16.    if(numero<0){
  17.        neg++;
  18.    }
  19.    else{
  20.        pos++;
  21.    }
  22.  }
  23.  cout<<"se ingresaron "<<cont<<" numeros"<<endl;
  24.  cout<<"se ingresaron "<<pos<<" positivos "<<endl;
  25.   cout<<"se ingresaron "<<neg<<" negativos "<<endl;
  26.    cout<<"se ingresaron "<<par<<" pares "<<endl;
  27.    cout<<"se ingresaron "<<impar<<" impares "<<endl;
  28.  return 0;
  29. }

MOD: El código debe estar entre etiquetas de Código GeSHi


Título: Re: ayuda para cambiar este ejercicio
Publicado por: K-YreX en 3 Marzo 2021, 00:22 am
Al igual que en el tema anterior, el código debe incluirse entre etiquetas de Código GeSHi

Si no quieres tener en cuenta el 0, es muy sencillo.
Código
  1. int numero = -1;
  2. for(int i = 0; i < MAX_NUM && numero != 0; ++i) {
  3.  cout << "Introduce un numero: ";
  4.  cin >> numero;
  5.  if(numero != 0) {
  6.    // todo lo demas
  7.  }
  8. }

Otra forma de conseguir lo mismo sería:
Código
  1. int numero;
  2. cout << "Introduce un numero (0 para terminar): ";
  3. cin >> numero;
  4. while(numerosIngresados < MAX_NUMEROS && numero != 0) {
  5.  ++numerosIngresados;
  6.  // comprobar si es par/impar y positivo/negativo
  7.  cout << "Introduce otro numero (0 para terminar): ";
  8.  cin >> numero;
  9. }
Personalmente me gusta más la segunda opción. Queda un código un poco más limpio, evitas el uso de una variable más, no necesitas inicializar <numero> a un valor concreto para que funcione y puedes cambiar el mensaje para que ponga "...otro número..." en vez de siempre "...un número...".
Además en muchas ocasiones (sobre todo académicas) se suele incidir en utilizar un for() únicamente cuando la condición dependa solo del contador del for() y no con condiciones compuestas (aunque sea totalmente válido); y por ende sustituirlo por un while() en tal caso.