Ejercicio 4 · Fundamentos de Programación UOC Juny 2022

Tema: Modificación y ampliación de un algoritmo completo · Del examen Juny (2022)

Enunciado

Ejercicio 4 (50% del total). Comprensión y modificación de algoritmos de gestión de clientes

A continuación se facilita el código de un algoritmo que efectúa la gestión de clientes y pólizas de un servicio:

1 const

2 MIN_CUSTOMERS: integer = 1; { Mínimo número de clientes admisible }

3 MAX_CUSTOMERS: integer = 10; { Máximo número de clientes admisible }

4 end const

5

6 type

7 tCustomer = record

8 customerId: integer;

9 isPolicyHolder: boolean;

10 insurancePremium: real;

11 end record

12

13 tCustomerTable = record

14 customers: vector[MAX_CUSTOMERS] of tCustomer;

15 numCustomers: integer;

16 end record

17 end type

18

19 algorithm UOCRepairService

20 { Bloque de variables }

21 var

22 customerTable: tCustomerTable;

23 averageInsurancePremium: real;

24 totalCustomers: integer;

25 numPolicyHolders: integer;

26 i: integer;

27 auxSum: real;

28 end var

29

30 { Fase de inicialización }

31 averageInsurancePremium:= 0.0;

32 auxSum:= 0.0;

33 customerTable.numCustomers:= 0;

34 numPolicyHolders:= 0;

35

36 { Petición de volumen de clientes }

37 writeString("INPUT DATA");

38 writeString("NUMBER OF CUSTOMERS? (1-10) >>");

39 totalCustomers:= readInteger();

40 { Filtro de validación de rango }

41

42 while totalCustomers < MIN_CUSTOMERS or totalCustomers > MAX_CUSTOMERS do

43 writeString("INVALID DATA, TRY AGAIN!");

44 writeString("NUMBER OF CUSTOMERS? (1-10) >>");

45 totalCustomers:= readInteger();

46 end while

47

48 for i:= 1 to totalCustomers do

49 writeString("CUSTOMER #");

50 writeInteger(i);

51 writeString("ID? (AN INTEGER) >>");

52 customerTable.customers[i].customerId:= readInteger();

53 writeString("IS POLICY HOLDER? (FALSE, TRUE) >>");

54 customerTable.customers[i].isPolicyHolder:= readBoolean();

55 writeString("INSURANCE PREMIUM [EUR]? (A REAL) >>");

56 customerTable.customers[i].insurancePremium:= readReal();

57 customerTable.numCustomers:= customerTable.numCustomers + 1;

58 end for

59

60 { Cómputo de la suma de primas de titulares }

61 for i:= 1 to customerTable.numCustomers do

62 if customerTable.customers[i].isPolicyHolder then

63 auxSum:= auxSum + customerTable.customers[i].insurancePremium;

64 numPolicyHolders:= numPolicyHolders + 1;

65 end if;

66 end for

67

68 { Obtención del promedio de las pólizas }

69 if numPolicyHolders > 0 then

70 averageInsurancePremium:= auxSum / integerToReal(numPolicyHolders);

71 end if;

72

73 { Impresión de métricas finales }

74 writeString("RESULTS");

75 writeString("AVERAGE INSURANCE PREMIUM [EUR]:");

76 writeReal(averageInsurancePremium);

77 end algorithm

Se solicita especificar las modificaciones puntuales imprescindibles en las líneas del algoritmo para dotarlo de las siguientes prestaciones auxiliares:

a.

Computar el número de ocasiones en que el operario suministra una cantidad de clientes fuera de rango al validar la entrada, mostrando este acumulador por la salida estándar con anterioridad a la presentación del promedio económico.

b.

Obtener el porcentaje de clientes que figuran como titulares de póliza sobre la cifra global de clientes procesados. Este índice debe comunicarse por pantalla acompañado de un texto descriptivo e impreso con representación decimal.

Enunciado: Ejercicio 4 · Fundamentos de Programación UOC Juny 2022

Solución

Según los criterios oficiales de corrección

a. Computar el número de ocasiones en que el operario suministra una cantidad de clientes fuera de rango al validar la entrada, mostrando este acumulador por la salida estándar con anterioridad a la presentación del promedio económico.

Solución: ```pseudocode { Incorporar a continuación de la línea 27: } failedInputsCount: integer; { Contador de lecturas no válidas } { Añadir tras la línea 34: } failedInputsCount := 0; { Incorporar en el cuerpo del bucle de validación, por ejemplo tras la línea 44: } failedInputsCount := failedInputsCount + 1; { Inserción tras la línea 74 (con anterioridad al promedio económico): } writeString("NUMBER OF INCORRECT ATTEMPTS:"); writeInteger(failedInputsCount); ```

b. Obtener el porcentaje de clientes que figuran como titulares de póliza sobre la cifra global de clientes procesados. Este índice debe comunicarse por pantalla acompañado de un texto descriptivo e impreso con representación decimal.

Solución: ```pseudocode { Incorporar a continuación de la línea 27: } policyHoldersRatio: real; { Porcentaje de clientes con póliza } { Añadir tras la línea 34: } policyHoldersRatio := 0.0; { Insertar tras la finalización del cómputo de titulares, tras la línea 71: } policyHoldersRatio := (integerToReal(numPolicyHolders) / integerToReal(customerTable.numCustomers)) * 100.0; { Inserción tras la línea 76: } writeString("PERCENTAGE CLIENT WITH POLICY (%):"); writeReal(policyHoldersRatio); ```

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Ejercicio 4 · Juny 2022

Más ejercicios de Modificación y ampliación de un algoritmo completo