【问题标题】:Pascal program does not show maximum value帕斯卡程序不显示最大值
【发布时间】:2014-05-16 02:44:09
【问题描述】:

请帮助我,我的程序只是继续显示姓氏和数字,这是程序。 我真的不明白这里有什么问题,但我确实希望你们能看到它真的需要一些帮助它杀死我的大脑

Var
Counter:Integer;
MaxValue:Integer;
NumofVotes:Array[1..4]of Integer;
ChristianName:Array[1..4]of String;
Surname:Array[1..4]of String;
WinnerFName:String;
WinnerSName:String;
WinnerParty:String;
CandidateParty: Array[1..4] of String;

begin
  FOR Counter:= 1 to 4 Do
  If Counter= Counter Then
  begin
Writeln ('Please enter Christian name of Candidate ', Counter, ':');
Readln (ChristianName[Counter]);
Writeln ;
Writeln ('Please enter Surname of Candidate ', Counter, ':');
Readln (Surname[Counter]);
Writeln ;
Writeln ('Please enter number of votes received by Candidate ', Counter, ':');
Readln (NumOfVotes[Counter]);
Writeln ;
Writeln ('Please enter party of Candidate ', Counter, ':');
Readln (CandidateParty[Counter]);

  end;

  IF Counter = 1 THEN
begin
MaxValue:= NumofVotes[Counter];
WinnerFName:= ChristianName[Counter];
WinnerSName:= Surname[Counter];
WinnerParty:= CandidateParty[Counter];
end

ELSE
IF (NumofVotes[Counter]>MaxValue) THEN
begin
WinnerFName:= ChristianName[Counter];
WinnerSName:= Surname[Counter];
MaxValue:= NumofVotes[Counter];
WinnerParty:= CandidateParty[Counter]
end;
Writeln ;
Writeln ('The winner of the elections for this constituency is:');
Writeln ('FirstName: ', WinnerFName, ' Surname: ', WinnerSName);
Writeln ('From the ', WinnerParty);
Writeln (WinnerFName, ' has won with ', MaxValue, ' votes');
Writeln ;
Writeln  ;
Writeln ('Press <Enter> to end');
Readln  ;

end.

【问题讨论】:

  • If Counter= Counter Then .. 那是什么样的测试?计数器始终是计数器。 IF Counter = 1 THEN .. 你不能在帕斯卡循环之后使用'for'循环索引变量。就算可以,怎么可能是‘1’,上次是‘4’。
  • 我这样做是因为当我没有这样做时,程序会变得很奇怪,它会同时显示所有四个问题,而不是按顺序显示它们
  • 对不起,我刚刚把它拿出来了,它仍然可以工作,非常感谢,但是没有测试最大值呢??
  • 如果您正确地格式化您的代码,您将能够(通过缩进级别)看到流程不像您想象的那样进行。 学习格式化您的代码,以便您可以阅读并遵循执行路径。 (强调是因为这已经在这里说了数百次了,但似乎没有人注意到它。不得不一遍又一遍地重复自己,这让人很沮丧。)话虽如此,学会正确地格式化你的代码。 :-) 有关为什么这很重要的一个明确示例,请参阅this answer,这不是我写的。
  • 非常感谢先生,我刚上高中,想做一些编程,因为我真的很喜欢编程,但我似乎已经让它工作了,这就是我得到的

标签: counter record pascal records highest


【解决方案1】:

代码似乎缺少一对begin ... end 关键字。结果,for 指令在第一个 end 关键字处结束,即在读取所有候选数据之后。那么Counter4 并且IF Counter = 1 中的比较失败——执行继续到ELSE。那里未初始化的MaxValue 可能为零,因此第四个NumofVotes 大于此值,最终导致打印第四个候选对象。

要使代码符合您的预期,请在FOR ... DO 之后添加begin,并在Writeln ; Writeln ('The winner ... is:'); 之前使用end 关闭它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多