Pascal 和 NSD?
Pascal and NSDs?
我必须为编程逻辑分配作业(荷兰语)。我们必须使用 Structorizer 然后 convert/export 将其转化为 Pascal 代码(是的,我知道,史前!但他们说这就像学习 "latin",如果你学习它,你就像一个基础。)
现在,我在转换 var 时已经不得不找出几个错误。但我想问的主要问题是:
如果我输入 STOP(在代码中说:Read naam),while 循环实际上会继续并打印出下一行:write naam 'moet', lidgeld:0:2, 'euro lidgeld betalen .'
而不是因为 'STOP' 而跳出 while 循环并打印出最后几行?
在其他代码中,检查 {} 并逐步监控它相当容易。但是在这里,有了这段代码,我完全迷路了。在 read naam 之后我已经使用了一个 IF 语句来使 'stop' 工作,但它仍然再次打印出来 write naam 'moet', lidgeld:0:2, 'euro lidgeld betalen.'
帕斯卡代码:
{ 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 picture
您的 WHILE...DO
循环条件是错误的 - 无论您输入什么,这两个条件中至少有一个 为真,并且循环将执行(因为 A OR B
是 TRUE
if either A
is TRUE
or B
是 TRUE
):
如果输入stop
,则条件(naam <> 'STOP')
为真,循环将执行。
如果输入STOP
,则条件(naam <> 'stop')
为真,循环将执行。
您要做的是以 不区分大小写 的方式与 'STOP'
进行比较,这样无论您键入什么 - STOP
,stop
、Stop
、StOp
等 - 测试将是 TRUE
。或者,如果您输入的不是单词 stop
的某些变体,则测试将是 FALSE
.
I know, prehistoric...
即使是史前时代,很多编程语言仍然要向pascal学习一些东西。还有很多程序员。
如果你真的想要这样,在输入 "STOP" 回复程序提示 "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 ”。
清楚了吗?您问题中描述的主要错误是您对编程的理解,而不是 pascal 语言。
我必须为编程逻辑分配作业(荷兰语)。我们必须使用 Structorizer 然后 convert/export 将其转化为 Pascal 代码(是的,我知道,史前!但他们说这就像学习 "latin",如果你学习它,你就像一个基础。)
现在,我在转换 var 时已经不得不找出几个错误。但我想问的主要问题是:
如果我输入 STOP(在代码中说:Read naam),while 循环实际上会继续并打印出下一行:write naam 'moet', lidgeld:0:2, 'euro lidgeld betalen .'
而不是因为 'STOP' 而跳出 while 循环并打印出最后几行?
在其他代码中,检查 {} 并逐步监控它相当容易。但是在这里,有了这段代码,我完全迷路了。在 read naam 之后我已经使用了一个 IF 语句来使 'stop' 工作,但它仍然再次打印出来 write naam 'moet', lidgeld:0:2, 'euro lidgeld betalen.'
帕斯卡代码:
{ 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 picture
您的 WHILE...DO
循环条件是错误的 - 无论您输入什么,这两个条件中至少有一个 为真,并且循环将执行(因为 A OR B
是 TRUE
if either A
is TRUE
or B
是 TRUE
):
如果输入stop
,则条件(naam <> 'STOP')
为真,循环将执行。
如果输入STOP
,则条件(naam <> 'stop')
为真,循环将执行。
您要做的是以 不区分大小写 的方式与 'STOP'
进行比较,这样无论您键入什么 - STOP
,stop
、Stop
、StOp
等 - 测试将是 TRUE
。或者,如果您输入的不是单词 stop
的某些变体,则测试将是 FALSE
.
I know, prehistoric...
即使是史前时代,很多编程语言仍然要向pascal学习一些东西。还有很多程序员。
如果你真的想要这样,在输入 "STOP" 回复程序提示 "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 ”。
清楚了吗?您问题中描述的主要错误是您对编程的理解,而不是 pascal 语言。