我必须为编程逻辑做一项作业(荷兰语)。我们必须使用结构化程序并将其转换/导出为Pascal代码(是的,我知道,史前的!)但他们说,这就像学习“拉丁语”,如果你学习它,你就像一个基础。)
现在,我已经在转换var的过程中发现了几个bug。
如果我输入STOP (代码中写着: Read ),while循环实际上会继续,并打印出下一行:写naam‘moet',lidgeld:0:2,’euro‘。
而不是因为“停止”并打印出底线而跳出while循环吗?
在其他代码中,很容易检查{}并逐步监视它。但在这段代码里我完全迷路了。在读完naam之后,我已经用了一个IF语句来做“停止”的工作,但是它仍然打印出了一次写naam‘moet',lidgeld:0:2,’euro‘。
“帕斯卡法典”:
{ 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. 发布于 2017-05-26 11:32:59
WHILE...DO循环上的条件是错误的--不管您输入了什么,这两个条件中至少有一个是真的,并且循环将执行(因为A OR B是TRUE,如果A是TRUE还是B是TRUE):
如果键入stop,则条件(naam <> 'STOP')将为true,循环将执行。
如果输入STOP,则条件(naam <> 'stop')为true,循环将执行。
您想要做的是以不区分大小写的方式与'STOP'进行比较,这样无论您输入什么-- STOP、stop、Stop、StOp等等--测试都将是TRUE。或者,如果您在单词stop上键入一些变化以外的其他内容,则测试将是FALSE。
发布于 2017-05-26 13:52:46
我知道史前..。
即使是史前语言,许多编程语言仍然必须从pascal那里学到一些东西。还有很多程序员。
如果您真的想这样做,在输入“停止”以回应程序的提示"Geef naam en voornaam in:“之后,程序停止提问,那么您必须添加以下一行:
if (naam='stop') or (naam='STOP') then break;在您的程序中,这一行之后的恰好是:
readln(naam);否则,正如前面的答案所述,您必须更改循环序幕如下:
while (naam<>'stop') AND (naam<>'STOP') do begin...但这不会阻止该项目继续要求"Geef de leeftijd“、"Geef het aantal kinderen”、"Geef het jaarinkomen in“。
清楚了吗?问题中描述的主要错误是您对编程的理解,而不是pascal语言。
https://stackoverflow.com/questions/44200355
复制相似问题