Tienes tres opciones:
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.
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...
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á.