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% de la nota). Adaptación y ampliación de un algoritmo completo

Considera el siguiente algoritmo que gestiona el registro de asegurados y calcula el coste medio de las primas suscritas por titulares de pólizas:

1 const

2 MIN_CUSTOMERS: integer = 1; { Min. Number of Customers }

3 MAX_CUSTOMERS: integer = 10; { Max. Number of Customers }

4 end const

5

6 type

7 tCustomer = record

8 customerId: integer;

9 isPolicyHolder: boolean;

10 insurancePremium: real;

11 end record

12

13 tCustomertTable = record

14 customers: vector[MAX_CUSTOMERS] of tCustomer;

15 numCustomers: integer;

16 end record

17 end type

18

19 algorithm RepairService

20 { Variable definition }

21 var

22 customerTable: tCustomertTable;

23 averageInsurancePremium: real;

24 totalCustomers: integer;

25 numPolicyHolders: integer;

26 i: integer;

27 auxSum: real;

28 end var

29

30 { Variable initialization }

31 averageInsurancePremium:= 0.0;

32 auxSum:= 0.0;

33 customerTable.numCustomers:= 0;

34 numPolicyHolders:= 0;

35

36 { Data input }

37 writeString("INPUT DATA");

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

39 totalCustomers:= readInteger();

40 { Data validation }

41

42 while totalCustomers < MIN_CUSTOMERS or

43 totalCustomers > MAX_CUSTOMERS do

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

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

46 totalCustomers:= readInteger();

47 end while

48

49 for i:= 1 to totalCustomers do

50 writeString("CUSTOMER #");

51 writeInteger(i);

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

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

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

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

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

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

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

59 end for

60

61 { Get values for average insurance premium calculation }

62 for i:= 1 to customerTable.numCustomers do

63 if customerTable.customers[i].isPolicyHolder then

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

65 numPolicyHolders:= numPolicyHolders + 1;

66 end if

67 end for

68

69 { If recovered policy holders, then average insurance premium calculation }

70 if numPolicyHolders > 0 then

71 averageInsurancePremium:= auxSum / integerToReal(numPolicyHolders);

72 end if

73

74 { Data output }

75 writeString("RESULTS");

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

77 writeReal(averageInsurancePremium);

78

79 end algorithm

Se requiere adaptar el código para cumplir con dos nuevos requisitos:

a. Incorporar al registro tCustomer un nuevo campo para almacenar si la póliza está sujeta a franquicia ( deductible). Este dato únicamente se le debe solicitar y leer al usuario cuando el cliente sea efectivamente titular de la póliza ( isPolicyHolder = true). En caso de no ser titular, se registrará como falso.

b. Aplicar de forma inmediata una rebaja del 10% sobre el importe de la prima ( insurancePremium) en aquellas pólizas que cuenten con franquicia.

Indica de manera concisa y referenciando las líneas numéricas del código base las modificaciones mínimas precisas para llevar a cabo estos cambios sin tener que transcribir el algoritmo al completo.

a)

b)

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

Solución

Según los criterios oficiales de corrección

a. Definición del porcentaje de descuento y ampliación del tipo de dato tCustomer

Solución: ```pseudocode Tras la línea 3: Incorporar la constante que fija el porcentaje de rebaja: DISCOUNT_RATE: integer = 10; Tras la línea 10: Agregar dentro del registro tCustomer el campo booleano indicador de franquicia: hasDeductible: boolean; ```

b. Entrada selectiva de datos y aplicación del descuento del 10%

Solución: ```pseudocode Tras la línea 57 (dentro del bucle de captura de datos de clientes): Insertar la lectura condicionada y el recálculo de la prima con descuento: if customerTable.customers[i].isPolicyHolder then writeString("HAS DEDUCTIBLE? (FALSE, TRUE) >>"); customerTable.customers[i].hasDeductible := readBoolean(); if customerTable.customers[i].hasDeductible then customerTable.customers[i].insurancePremium := customerTable.customers[i].insurancePremium * integerToReal(100 - DISCOUNT_RATE) / 100.0; end if else customerTable.customers[i].hasDeductible := false; end if ```

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