首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帕斯卡和国家安全局?

帕斯卡和国家安全局?
EN

Stack Overflow用户
提问于 2017-05-26 11:23:44
回答 2查看 89关注 0票数 0

我必须为编程逻辑做一项作业(荷兰语)。我们必须使用结构化程序并将其转换/导出为Pascal代码(是的,我知道,史前的!)但他们说,这就像学习“拉丁语”,如果你学习它,你就像一个基础。)

现在,我已经在转换var的过程中发现了几个bug。

如果我输入STOP (代码中写着: Read ),while循环实际上会继续,并打印出下一行:写naam‘moet',lidgeld:0:2,’euro‘。

而不是因为“停止”并打印出底线而跳出while循环吗?

在其他代码中,很容易检查{}并逐步监视它。但在这段代码里我完全迷路了。在读完naam之后,我已经用了一个IF语句来做“停止”的工作,但是它仍然打印出了一次写naam‘moet',lidgeld:0:2,’euro‘。

“帕斯卡法典”:

代码语言:javascript
复制
    { Generated by Structorizer 3.26-05 }
program Vereniging;

var
  { TODO: check and accomplish variable declarations }

  leeftijd: integer ; kinderen : integer ; leden : integer ; inkomen : real ; totaal : real ; lidgeld : real ; gemiddelde : real ; naam : string;


begin
  lidgeld := 0;
  leden := 0;
  totaal := 0;
  gemiddelde := 0;
  writeln('Geef naam en voornaam in: ');
  readln(naam);
  writeln;
  writeln('Geef de leeftijd in: ');
  readln(leeftijd);
  writeln;
  writeln('Geef het aantal kinderen ten laste in: ');
  readln(kinderen);
  writeln;
  writeln('Geef het jaarinkomen in: ');
  readln(inkomen);
  while (naam <> 'stop') or (naam <> 'STOP') do
  begin
    lidgeld := 10;
    if (leeftijd > 50) then
    begin
      lidgeld := lidgeld - 2;
      leden := leden + 1;
      totaal := totaal + lidgeld;
      gemiddelde := totaal / leden;
    end;
    if (kinderen > 0) and (kinderen < 6) then
    begin
      lidgeld := lidgeld - kinderen;
      leden := leden + 1;
      totaal := totaal + lidgeld;
      gemiddelde := totaal / leden;
    end
    else
    begin
      lidgeld := lidgeld - 5;
      leden := leden + 1;
      totaal := totaal + lidgeld;
      gemiddelde := totaal / leden;
    end;
    if (inkomen < 12500) then
    begin
      lidgeld := lidgeld - 2.5;
      leden := leden + 1;
      totaal := totaal + lidgeld;
      gemiddelde := totaal / leden;
    end;
    if (leeftijd > 50) and (kinderen >= 5) and (inkomen < 12500) then
    begin
      lidgeld := lidgeld - 8.5;
      leden := leden + 1;
      totaal := totaal + lidgeld;
      gemiddelde := totaal / leden;
    end;
    writeln;
    writeln(naam, ' moet ', lidgeld:0:2, ' euro lidgeld betalen.');
    writeln;
    writeln('Geef naam en voornaam in: ');
    readln(naam);
    writeln;
    writeln('Geef de leeftijd in: ');
    readln(leeftijd);
    writeln;
    writeln('Geef het aantal kinderen ten laste in: ');
    readln(kinderen);
    writeln;
    writeln('Geef het jaarinkomen in: ');
    readln(inkomen);
    writeln;
  end;
  writeln;
  writeln('Het totaal aantal leden : ', leden);
  writeln;
  writeln('Het totaal aantal lidgeld : ', totaal:0:2, ' euro.');
  writeln;
  writeln('Het gemiddelde : ', gemiddelde:0:2, ' euro.');
  writeln;
  writeln('Druk op <ENTER> om het programma af te sluiten');
  readln();
end. 

NSD图片

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-26 11:32:59

WHILE...DO循环上的条件是错误的--不管您输入了什么,这两个条件中至少有一个是真的,并且循环将执行(因为A OR BTRUE,如果ATRUE还是BTRUE):

如果键入stop,则条件(naam <> 'STOP')将为true,循环将执行。

如果输入STOP,则条件(naam <> 'stop')为true,循环将执行。

您想要做的是以不区分大小写的方式与'STOP'进行比较,这样无论您输入什么-- STOPstopStopStOp等等--测试都将是TRUE。或者,如果您在单词stop上键入一些变化以外的其他内容,则测试将是FALSE

票数 1
EN

Stack Overflow用户

发布于 2017-05-26 13:52:46

我知道史前..。

即使是史前语言,许多编程语言仍然必须从pascal那里学到一些东西。还有很多程序员。

如果您真的想这样做,在输入“停止”以回应程序的提示"Geef naam en voornaam in:“之后,程序停止提问,那么您必须添加以下一行:

代码语言:javascript
复制
if (naam='stop') or (naam='STOP') then break;

在您的程序中,这一行之后的恰好是

代码语言:javascript
复制
readln(naam);

否则,正如前面的答案所述,您必须更改循环序幕如下:

代码语言:javascript
复制
while (naam<>'stop') AND (naam<>'STOP') do begin...

但这不会阻止该项目继续要求"Geef de leeftijd“、"Geef het aantal kinderen”、"Geef het jaarinkomen in“。

清楚了吗?问题中描述的主要错误是您对编程的理解,而不是pascal语言。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44200355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档