任何人都可以帮我改变这个嵌套,如果进入一个控制案例,或更高效的东西(只是不循环)?
针对以下问题设计解决方案,尽可能使用模块。使用结构化流程图和相应的伪代码说明您的解决方案。
健康诊所的付款时间表如下所示:
一个。如果患者是第一次没有保险的患者,则应在服务时全额支付费用。
湾如果患者是第一次有保险的患者,那么就有一半了 费用应在服务时支付,余额在账单上支付 月结单。
℃。如果患者不是第一次没有保险的患者那么一半 费用应在服务时支付,余额计费 月结单。
d。如果患者不是第一次有保险的患者那么全部 费用将在月结单上开具。
即如果患者是“首选”患者,没有保险,则收费的一半 应支付服务时间和每月结算的余额 言。
F。如果患者是保险的“首选”患者,则所有费用将在月结单上计费。
Start
Declare variables
Input(first,ins,pre)
if(first = 'T') then
if(ins = 'T') then
if(pre = 'T') then
Print('Monthly Statement')
else
Print('Pay one-half and Billed one-half')
endif
else
if(pre = 'T') then
Print('Pay one-half and Billed one-half')
else
Print('Pay full')
endif
endif
else
if(ins = 'T') then
if(pre = 'T') then
Print('Monthly Statement')
else
Print('Monthly Statement')
endif
else
if(pre = 'T') then
Print('Pay one-half and Billed one-half')
else
Print('Pay one-half and Billed one-half')
endif
endif
endif
Stop
答案 0 :(得分:0)
而不是如你所示的3个布尔,似乎实际上有两个变量:患者类型(3个值)和保险状态(2个值)。
如果你试图为一个人做这个,你可能会画一张3 x 2的桌子。
并且有3种可能的结果表示为字符串。
所以在这种情况下我会用二维数组做同样的事情:
enum PatientType { FirstTime, Normal, Preferred };
enum InsuranceStatus { NotInsured, Insured };
string HalfAndHalf = 'Pay one-half and Billed one-half';
string InFull = 'Pay in full';
string Payments = 'Monthly statement';
string Result[PatientType][InsuranceStatus] = {
/* NotInsured */ /* Insured */
/* FirstTime */ { InFull, HalfAndHalf },
/* Normal */ { HalfAndHalf, Payments },
/* Preferred */ { HalfAndHalf, Payments }};
现在您只需索引数组Result[patientType][insuranceStatus]
并打印此字符串即可。道德是数据表通常非常强大,可以降低代码复杂性,并且可以在将来轻松更改逻辑。
如果我的规格错误并且它实际上是3个布尔自变量,你仍然可以使用2x2x2数组。
答案 1 :(得分:0)
以下是我发布到Code Review的答案。我使用Python作为可执行的伪代码。
你必须为美国医疗保健工作。关于美国医疗保健的关键见解是,第一个问题始终是“你有保险吗?”实际上,如果您重新构建代码以首先询问,您会发现该模式将更加明显。
if insured:
if first:
if preferred:
print('Monthly Statement')
else:
print('Pay one-half and Billed one-half')
else:
if preferred then:
print('Monthly Statement')
else:
print('Monthly Statement')
else:
if first:
if preferred:
print('Pay one-half and Billed one-half')
else:
print('Pay full')
else:
if preferred:
print('Pay one-half and Billed one-half')
else:
print('Pay one-half and Billed one-half')
下一个目标是巩固以避免重复。您会注意到“首选”状态仅对初次使用的客户很重要,因此(first and not preferred)
是一个有用的常见表达方式;为了强调,我把它们括起来了。
答案:
if (not insured) and (first and not preferred):
pay_in_full()
elif (not insured) or (first and not preferred):
pay_half_bill_half()
else:
monthly_statement()
从那里,您可以获得这样的洞察力:一般来说,参保患者每月可以获得账单,而没有保险的患者可以支付一半的费用。但是,(first and not preferred)
承担一级可信度的惩罚。以下代码实现了这种直观的分类过程。
# Actions
def pay_in_full():
...
def pay_half_bill_half():
...
def monthly_statement():
...
# Determine trust level
trust_levels = [pay_in_full, pay_half_bill_half, monthly_statement]
trust = 2 if insured else 1 # insured -> monthly. uninsured -> pay half
trust -= 1 if first and not preferred # penalty for first-time unpreferred customers
# Call the code corresponding to the trust level
trust_levels[trust]()
由您决定是否认为基于真值表最小化或直观分类的代码更好。