Dev - C++ - Problema con flujos (parte matemática)

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con flujos (parte matemática)

Publicado por David (8 intervenciones) el 20/10/2018 04:06:44
Buenas, tengo que codificar un cpp dónde voy a trabajar con una lista de "x" cantidades de alumnos y partiendo de eso, tengo que crear "x" cantidades de comisiones de no más de 30 alumnos, el problema mio no yace en la codificación, sino, en la parte matemática de éste, estuve pensando un largo rato y diagramando cómo llegar a la solución, pero no lo tengo claro.
Cómo harían ustedes esa parte? Yo podría partir de que mi lista tiene un número que dividido treinta no va a ser racional, pero y si fuese racional? Cómo podría acceder a la parte decimal del resultado para luego distribuir a esos alumnos que me sobran?

Ejemplo para aclarar:


Tengo 90 alumnos/30 (máximo de alumnos permitidos por comisión) me darían 3 comisiones.
Pero si tuviese 40,45,25, etc... ahí yace mi duda de cómo trabajar el código.

Si gustan puedo adjuntar el cpp de mi código para que vean como lo fui haciendo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con flujos (parte matemática)

Publicado por Martín (158 intervenciones) el 20/10/2018 11:07:21
Para determinar la cantidad de comisiones debes tener en cuenta el concepto de "división entera por exceso". En una operación de división siempre tienes que DIVIDENDO = DIVISOR * COCIENTE + RESTO.

En tu caso, por ejemplo, para 45 alumnos, con 30 alumnos por comisión será
45 = 30 * 1 + 15

O sea que tienes 1 comisión completa con 30 alumnos y 15 alumnos más que han quedado fuera. Obviamente necesitas una comisión más donde meter a esos 15 pavos restantes.

La mitad del problema ya la tienes resuelta: si la división tiene resto deberás añadir una comisión más, si no, no. Así:
90 / 30 => 3 comisiones (sin resto)
40 / 30 => 1 comisión + 1 más para el resto = 2 comisiones.

Bien, eso ya lo entendí.

Entonces en C++ se podría decir:
1
2
3
4
5
const int max = 30; // máxima cantidad de alumnos por comisión
int alumnos = 77;
 
int resto = alumnos % max;
int comisiones = alumnos / max + (resto != 0);

¿Y cómo se reparten?
Queda mal tener una comisión con 30 alumnos y otra con sólo 15, así que lo más común es que todas las comisiones tengas <más o menos> la misma cantidad de alumnos cada una. Esa cantidad se calcula dividiendo alumnos / comisiones, otra vez tiene que ser una división entera porque no queremos fraccionar a nadie. Pero si hubo resto habrá que ubicar al alumno restante en alguna de las comisiones, en cualquiera, la que más te guste.

Un ejemplo en código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
	const int max = 30; // máxima cantidad de alumnos por comisión
	int alumnos = 77;
 
	int resto = alumnos % max;
	int comisiones = alumnos / max + (resto != 0);
 
	std::cout << "cantidad de comisiones == " << comisiones << '\n';
 
	std::cout << alumnos / comisiones << " alumnos en cada comision.\n";
	if (resto)
		std::cout << "y un alumno mas para ubicar en alguna de las comisiones.\n";
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con flujos (parte matemática)

Publicado por David (8 intervenciones) el 20/10/2018 15:55:05
Muchas gracias.
Ahora voy aplicarlo en mi código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar