我早些时候发布了这个,但它关闭了,因为我没有尝试编写代码,所以这里有个问题:

SECTIONS
$160 = section 1
$220 = section 2
$280 = section 3
$350 = section 4
$425 = section 5

开发一个伪代码,它接受不特定数量的化装师的名字作为输入,这些化装师各自支付了服装的全部费用和支付的金额。
一个化妆师可能已经为乐队五个部分中的任何一个支付了服装费用。该算法应根据化妆师为服装支付的金额,确定化妆师在其中扮演的角色算法还应该确定每个部分中为服装付费的化妆师的数量。
应打印人员姓名和他们已付款的部门。还应打印一份各节的名单和登记参加各节比赛的总人数,以及各节支付的总金额。
这里是我的尝试:*注意这是在帕斯卡尔编程,我需要帮助修复和完成它。请帮忙,再次感谢。
program Masqueraders;

uses
  WinCrt;  { Allows Writeln, Readln, cursor movement, etc. }

const
   MAX = 5; {this determine the amount of masquarader entered}
Type
  listname = Array[1..MAX] of string;
  listsect = Array[1..MAX] of string;
var
 names : listname;
 sections : listsect;
 i, amount, TotalMas, TotalAmt, c1, c2, c3, c4, c5, amt1, amt2, amt3, amt4, amt5 :     integer;

begin

 amount := 1;
 while amount <> 0 do
 begin

      i := i + 1;
      readln(names[i]);
      readln(amount);

      if(amount = 160) then
      begin

                c1 := c1 + 1;  {Count the number of persons for section 1}
                amt1 := amt1 + amount; {accumulate the amount for section 1}
                sections[i] := 'Section 1';
      end;

      if(amount = 220) then
      begin

                c2 := c2 + 1;  {Count the number of persons for section 1}
                amt2 := amt2 + amount; {accumulate the amount for section 1}
                sections[i] := 'Section 2';
      end; {end the IF for section 2}

      if(amount = 280) then
      begin

                c3 := c3 + 1;  {Count the number of persons for section 1}
                amt3 := amt3 + amount; {accumulate the amount for section 1}
                sections[i] := 'Section 3';
      end; {end the IF for section 3}

      if(amount = 350) then
      begin

               c4 := c4 + 1;
               amt4 := amt4 + amount;
               sections[i] := 'Section4';
      end; {end If for section 4}

      if (amount = 425) then
      begin

               c5 := c5 + 1;
               amt5 := amt5 + amount;
               sections[i] := 'Section5';


  end;{end the while loop}

  TotalMas := c1 + c2 + c3;
  TotalAmt := amt1 + amt2 + amt3;


  writeln('Name                    Section');  {Heading for the output}
  for i := 1 to MAX do
  begin

       write(names[i]);
       writeln('                    ',sections[i]);

  end;


  writeln('Section 1: ');
  write('Masquader: ', c1);
  write('Amount: ', amt1);



  writeln('Total Number of Masquarader: ', TotalMas);
  writeln('Total Amount Paid by masquarader: ', TotalAmt);

结束;
结束。
简而言之,它应该接受一个未定义的人数,并根据他们输入的金额将他们分配到各自的部门,然后计算每个部门的人数。这是我的电流输出:
姓名John Money=160第1部分
姓名Keith Money=220段John
这就是我想要的:
姓名John Money=160 Section 1
姓名Keith Money=220 Section2

最佳答案

我不太熟悉Pascal,所以我不能告诉您如何解决这个问题,但我注意到一个问题,您的代码似乎违反了“DRY”规则:不要重复您自己的代码每个if amt = xxx块中的代码看起来几乎完全相同,那么有没有一种方法可以编写该代码一次,然后每次用不同的参数调用代码?这样你就不会重写同一段代码五次。

关于algorithm - Pascal编程帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2354060/

10-12 20:45