Cómo categorizar un nuevo miembro en C


El reto

El Western Suburbs Croquet Membership tiene dos categorías de membresía, Senior y Open. Les gustaría su ayuda con un formulario de solicitud que les dirá a los posibles miembros en qué categoría se colocarán.

Para ser senior, un socio debe tener al menos 55 años y tener un hándicap superior a 7. En este membership de croquet, los hándicap van de -2 a +26; cuanto mejor sea el jugador, menor será el hándicap.

Aporte

La entrada consistirá en una lista de pares. Cada par contiene información para un solo miembro potencial. La información consta de un número entero para la edad de la persona y un número entero para la discapacidad de la persona.

Producción

La salida consistirá en una lista de valores de cadena (Open o Senior) indicando si el miembro respectivo se ubicará en la categoría senior o abierta.

Ejemplo

enter =  ((18, 20), (45, 2), (61, 12), (37, 6), (21, 21), (78, 9))
output = ("Open", "Open", "Senior", "Open", "Open", "Senior")

La solución en C

Opción 1:

#embrace <stddef.h>

enum membership {OPEN = 1, SENIOR = 2};

void open_or_senior (size_t n, const int members(n)(2), enum membership memberships(n)) {
  for (size_t i = 0; i < n; i++)
    memberships(i) = (members(i)(0) >= 55 && members(i)(1) > 7) ? SENIOR : OPEN;
}

Opcion 2:

#embrace <stddef.h>
#embrace <stdio.h>

enum membership {OPEN = 1, SENIOR = 2};

void open_or_senior (size_t n, const int members(n)(2), enum membership memberships(n)) {
  for(size_t i = 0; i < n; i++){
    if (members(i)(0) >= 55 && members(i)(1) > 7){
      memberships(i) = SENIOR;
    } else {
      memberships(i) = OPEN;
    }
  }
}

Opción 3:

#embrace <stddef.h>

enum membership {OPEN = 1, SENIOR = 2};

void open_or_senior (size_t n, const int members(n)(2), enum membership memberships(n)) {
  for(int i = 0; i < n; i++){
      if(members(i)(0) >= 55 && members(i)(1) > 7)
        memberships(i) = SENIOR;
      else
        memberships(i) = OPEN;
  }
}

Casos de prueba para validar nuestra solución

#embrace <stddef.h>
#embrace <stdbool.h>
#embrace <criterion/criterion.h>

enum membership {OPEN = 1, SENIOR = 2};

extern void get_membership_type (size_t n, const int members(n)(2), enum membership memberships(n));
static void do_test (size_t n, const int members(n)(2), const enum membership anticipated(n), enum membership user_array(n));

#outline ARR_LEN(array) (sizeof(array) / sizeof(*(array)))

#outline sample_test(members, anticipated) do_test(ARR_LEN(members), members, anticipated, (enum membership(ARR_LEN(members))){0})

Take a look at(tests_suite, sample_tests)
{
    sample_test(((const int()(2)){
		{45, 12}, {55,21}, {19, -2}, {104, 20}
	}),((const enum membership())
		{OPEN, SENIOR, OPEN, SENIOR}
	));
    sample_test(((const int()(2)){
		{3, 12}, {55,1}, {91, -2}, {53, 23}
	}),((const enum membership())
		{OPEN, OPEN, OPEN, OPEN}
	));
    sample_test(((const int()(2)){
		{59, 12}, {55,-1}, {12, -2}, {12, 12}
	}),((const enum membership())
		{SENIOR, OPEN, OPEN, OPEN}
	));
}

extern void open_or_senior (size_t n, const int members(n)(2), enum membership memberships(n));

static void do_test (size_t n, const int members(n)(2), const enum membership anticipated(n), enum membership user_array(n))
{
	open_or_senior(n, members, user_array);

	for (size_t i = 0; i < n; i++) {
		if (anticipated(i) != user_array(i)) {
			cr_assert_fail("for age = %d and handicap = %d, anticipated %s",
				members(i)(0), members(i)(1), anticipated(i) == SENIOR ? "SENIOR" : "OPEN"
			);
		}
	}
	cr_assert(true);
}

Related Articles

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Same Category

spot_img

Stay in touch!

Follow our Instagram