-2

¿Como puedo saber?:

  • Cuantos son menores a 10.
  • Cuantos están entre 10 y 20.
  • Cuantos son mayores de 20.

Por ejemplo, si tengo números del 1 al 21. Manualmente sé que 9 son menores a 10, 10 están entre 10 y 20. Finalmente 1 es mayor a 20.

¿Cómo podría hacer eso?


Llevo esto:

#include <iostream>
using namespace std;

int main()
{

    for(int i=1; i<=21; i++) {
        int var1,var2,var3, valorx;
        cout<<"ingresa un valor"<<endl;
        cin>>valorx;

        if(valorx<15) {
            var1++;
        }
        else if(i>50) {
            var2++;
        }
        else if(i>=25 && i<=45) {
            var3++;
        }
    }

    cout<<var1<<endl;
    cout<<var2<<endl;
    cout<<var3<<endl;
}
Elblack Ninja
  • 549
  • 1
  • 19
Pinolillo
  • 9
  • 2
  • Deberías agregar que has hecho hasta ahora. Sino has hecho nada, te recomiendo que leas las reglas o normas para publicar una pregunta de lo contrario la cerrarán. Y no se para que o cual es el objetivo de lo que necesitas, pero puedes hacer lo que dices usando operadores lógicos para comparar. – Franqo Balsamo Sep 08 '20 at 23:18
  • #include using namespace std; int main() { for(int i=1; i<=51+1; i++){ int var1,var2,var3, valorx; cout<>valorx; if(valorx<15){ var1++; } else if(i>50){ var2++; } else if(i>=25 && i<=45){ var3++; } } cout< – Pinolillo Sep 08 '20 at 23:37
  • Por favor lee [como preguntar](https://es.stackoverflow.com/help/how-to-ask) –  Sep 09 '20 at 02:58
  • 1
    ¿Cuál es el problema con ese código? ¿Cuál es la pregunta? ¿Por qué pides un valor por teclado? Por cierto, ese código nunca funcionará porque has declarado las variables adentro del for, cuando en realidad deben estar afuera y también debes inicializar `var1`, `var2` y `var3`. – MrDave1999 Sep 09 '20 at 03:05
  • No entiendo bien tu pregunta, ¿podrías dar más detalles? – Elblack Ninja Sep 09 '20 at 08:40

1 Answers1

2

Tienes tres opciones:

  1. Discrimina los números con sentencias if:

    if (numero < 10)
        ++var1;
    else if (numero < 20)
        ++var2;
    else
        ++var3;
    

    Con estas sentencias if encadenadas, los números "caen" en la categoría adecuada por eliminación: no se comprobará si un número es menor de veinte a no ser que se sepa que no es mayor que diez.

  2. Discrimina los números con una sentencia switch

    switch (numero / 10)
    {
        case 0: ++var1; break;
        case 1: ++var2; break;
        case 2: ++var3; break;
    }
    

    Al hacer la división entera, todo número menor de diez será cero, todo número entre diez y veinte será uno y todo número entre veinte y treinta será dos, etc...

  3. Con la premisa anterior, se puede contar directamente sobre una formación:

    int recuento[3]{}; // Inicializa todos los elementos a cero
    
    for (int i = 1; i <= 21; ++i)
        ++recuento[i / 10];
    

    En recuento[0] se almacenan los números menores a diez, en recuento[1] los que están entre diez y veinte y en recuento[2] los que están entre veinte y treinta.

Otras cosas a tener en cuenta:

  • Favorece el preincremento frente al postincremento: lee este artículo para saber más del tema.
  • Inicializa las variables: Tus variables var1, var2 y var3 no han sido inicializadas, esto implica que tienen un valor indeterminado en su primer uso y que por tanto estás contando los valores mal.
  • main debe devolver un valor: lee este hilo para saber más del tema.

Siguiendo esas premisas y escogiendo la tercera opción, tu código podría parecerse a:

#include <iostream>
using namespace std;

int main()
{
    int recuento[3]{};

    for (int i = 1; i <= 21; ++i) {
        int valor;
        cout << "ingresa un valor"<<endl;
        cin >> valor;

        ++recuento[valor / 10];
    }

    for (int i = 0; i != 3; ++i)
        cout
            << "Valores entre " << (i * 10)
            << " y " << ((i + 1) * 10)
            << ": " << recuento[i] << '\n';

    return 0;
}

Puedes ver el código funcionando en Try it online!, ten en cuenta que si el usuario introduce valores mayores de veinte, el código fallará.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82