Ada程序卡滞-输入卡滞
我手头有一个相当简单的Ada项目。任务是收集“选民”的选票,并将其与每个“候选人”的分数进行比较,确定哪位候选人与选民最匹配 输入如下所示,然后是应输出的输出:Ada程序卡滞-输入卡滞,ada,Ada,我手头有一个相当简单的Ada项目。任务是收集“选民”的选票,并将其与每个“候选人”的分数进行比较,确定哪位候选人与选民最匹配 输入如下所示,然后是应输出的输出: Input: 0 0 0 1 1 1 -1 -1 -1 1 7 A 1 1 1 1 1 1 1 1 1 1 B -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 C 1 -1 1 -1 1 -1 1 -1
Input:
0 0 0 1 1 1 -1 -1 -1 1
7
A
1 1 1 1 1 1 1 1 1 1
B
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
C
1 -1 1 -1 1 -1 1 -1 1 -1
D
1 0 1 0 1 0 1 0 1 0
E
0 -1 0 -1 0 -1 0 -1 0 -1
F
1 1 1 1 0 0 0 0 0 0
G
0 0 0 1 -1 0 0 -1 1 1
Output:
A
F
G
到目前为止,我有一个程序,将每个候选人的选票与选民的选票进行比较。我知道我需要做什么,因为我以前在Java中做过,但我不确定我应该如何在Ada中接受输入。这是我到目前为止所拥有的
with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;
procedure Candidates is
-- take an array of candidates and determine which candidate best matches
-- the user's votes, then return those candidates
Number_Of_Candidates: Integer;
subtype VoterArray_Index is Integer range 1..10;
subtype CandidatesArray_Index is Integer range 1..Number_Of_Candidates;
type VoterArray is array(VoterArray_Index) of Integer;
type CandidatesArray is array(Character range 'A' .. 'Z') of array;
type Best_CandidatesArray is array(CandidatesArray_Index) of array;
Voter: VoterArray;
Candidates: CandidatesArray;
Best_Candidates: Best_CandidatesArray;
function Get_Input() is
-- get the input and put it into the correct arrays
Current_Line : string;
begin
Get(Current_Line);
function Get_Best_Score(CandidatesArray: in out CandidatesArray) is
-- go through the arrays and find the best score
SameAnswers: Integer;
DifferentAnswers: Integer;
BestScore: Integer;
subtype CandidateArray is array(VoterArray_Index) of Integer;
Candidate: CandidateArray;
begin
for I in CandidatesArray_Index loop
Candidate := Candidates(I);
for J in VoterArray_Index loop
if Candidate(J) /= 0 and Voter(J) /= 0 then
if Candidate(J) /= Voter(J) then
DifferentAnswers := DifferentAnswers + 1
else
SameAnswers := SameAnswers + 1
end if;
end if;
end loop;
if SameAnswers - DifferentAnswers >= BestScore then
Best_Candidates(I) := Candidate;
end if;
SameAnswers := 0;
DifferentAnswers := 0;
end loop;
end Get_Best_Score;
正如你所看到的,我不知道如何将数字放入数组。如果你有任何建议或我应该采取的不同方式,我洗耳恭听
提前感谢。您可以使用streams在以下位置读取数据:
Integer'Read(流句柄,变量)
另一个选项是通过Get读取数组中每个元素的值,如果需要调整处理格式更改的过程,我建议使用helper函数:
Function Get_Vote ( File : File_Type ) Return Integer is
begin
Return Result : Integer do
Integer_IO.Get(
File => File,
Item => Result
);
End return;
end Read_Votes;
及
您可以使用流在以下位置读取数据:
Integer'Read(流句柄,变量)
另一个选项是通过Get读取数组中每个元素的值,如果需要调整处理格式更改的过程,我建议使用helper函数:
Function Get_Vote ( File : File_Type ) Return Integer is
begin
Return Result : Integer do
Integer_IO.Get(
File => File,
Item => Result
);
End return;
end Read_Votes;
及
因为文件中给出了行数,所以必须足够大才能容纳所有可能的元素。相反,您可以声明: 或者,您可以: 在任何一种情况下,都可以根据需要访问数组元素:
for i in Candidates'Range loop
for j in Voter_Array'Range loop
Ada.Integer_Text_IO.put(Candidates(i)(j), 5);
end loop;
Ada.Text_IO.New_Line;
end loop;
附录:这种方法假设候选名称是连续的字符
s。作为另一种选择,考虑一个数组:<代码> CydiDATEORION < /COD>,其中每个<代码>名称<代码>从文件中读取:
type Candidate_Record is
record
Name : Character;
Votes : Voter_Array;
end record;
type Candidate_Array is array(Positive range <>) of Candidate_Record;
Candidates : Candidate_Array(1 .. Number_Of_Candidates);
for i in Candidates'Range loop
Ada.Text_IO.Put(Candidates(i).Name & ':');
for j in Voter_Array'Range loop
Ada.Integer_Text_IO.Put(Candidates(i).Votes(j), 5);
end loop;
Ada.Text_IO.New_Line;
end loop;
类型候选记录为
记录
名称:字符;
投票:投票人数组;
结束记录;
类型候选_数组是候选_记录的数组(正范围);
候选对象:候选对象数组(1..候选对象的数量);
对于候选范围循环中的i
Ada.Text_IO.Put(候选人(i).Name&':');
对于投票者数组的距离循环中的j
Ada.Integer_Text_IO.Put(候选人(i).投票(j),5);
端环;
Ada.Text\u IO.New\u行;
端环;
因为文件中给出了行数,所以a必须足够大以容纳所有可能的元素。相反,您可以声明:
或者,您可以:
在任何一种情况下,都可以根据需要访问数组元素:
for i in Candidates'Range loop
for j in Voter_Array'Range loop
Ada.Integer_Text_IO.put(Candidates(i)(j), 5);
end loop;
Ada.Text_IO.New_Line;
end loop;
附录:这种方法假设候选名称是连续的字符
s。作为另一种选择,考虑一个数组:<代码> CydiDATEORION < /COD>,其中每个<代码>名称<代码>从文件中读取:
type Candidate_Record is
record
Name : Character;
Votes : Voter_Array;
end record;
type Candidate_Array is array(Positive range <>) of Candidate_Record;
Candidates : Candidate_Array(1 .. Number_Of_Candidates);
for i in Candidates'Range loop
Ada.Text_IO.Put(Candidates(i).Name & ':');
for j in Voter_Array'Range loop
Ada.Integer_Text_IO.Put(Candidates(i).Votes(j), 5);
end loop;
Ada.Text_IO.New_Line;
end loop;
类型候选记录为
记录
名称:字符;
投票:投票人数组;
结束记录;
类型候选_数组是候选_记录的数组(正范围);
候选对象:候选对象数组(1..候选对象的数量);
对于候选范围循环中的i
Ada.Text_IO.Put(候选人(i).Name&':');
对于投票者数组的距离循环中的j
Ada.Integer_Text_IO.Put(候选人(i).投票(j),5);
端环;
Ada.Text\u IO.New\u行;
端环;
是否需要从文件中读取输入?行数似乎是内在的;行中的条目数是先验的吗?输入将从文件中读取,是的。它将以我在帖子中的格式给出。我还将知道行数。是否需要从文件中读取输入?行数似乎是内在的;行中的条目数是先验的吗?输入将从文件中读取,是的。它将以我在帖子中的格式给出。我还要知道行数。谢谢。这对我帮助很大。谢谢。这对我帮助很大。
type Candidate_Record is
record
Name : Character;
Votes : Voter_Array;
end record;
type Candidate_Array is array(Positive range <>) of Candidate_Record;
Candidates : Candidate_Array(1 .. Number_Of_Candidates);
for i in Candidates'Range loop
Ada.Text_IO.Put(Candidates(i).Name & ':');
for j in Voter_Array'Range loop
Ada.Integer_Text_IO.Put(Candidates(i).Votes(j), 5);
end loop;
Ada.Text_IO.New_Line;
end loop;