编程伪代码嵌入控制结构

时间:2013-09-17 03:05:19

标签: pseudocode

任何人都可以帮我改变这个嵌套,如果进入一个控制案例,或更高效的东西(只是不循环)?

针对以下问题设计解决方案,尽可能使用模块。使用结构化流程图和相应的伪代码说明您的解决方案。

健康诊所的付款时间表如下所示:

一个。如果患者是第一次没有保险的患者,则应在服务时全额支付费用。

湾如果患者是第一次有保险的患者,那么就有一半了 费用应在服务时支付,余额在账单上支付 月结单。

℃。如果患者不是第一次没有保险的患者那么一半 费用应在服务时支付,余额计费 月结单。

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

2 个答案:

答案 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]()

由您决定是否认为基于真值表最小化或直观分类的代码更好。