Я пишу простую программу на Ada95, чтобы проверить, верен ли ввод макета шахматной доски.Я совсем новичок в Аде, и я понимаю, что мне есть чему поучиться.Я получаю следующие сообщения об ошибках:
35: 31: аргумент преобразования типа должен быть одним выражением
47: 07: аргумент преобразования типа должен быть одним выражением
47: 22: недопустимый операнд для преобразования массива
53: 10: аргумент типапреобразование должно быть одним выражением
58: 10: аргумент преобразования типа должен быть одним выражением
61: 13: аргумент преобразования типа долженбыть одним выражением
64: 13: аргумент преобразования типа должен быть одним выражением
66: 13: аргумент преобразования типа должен быть однимвыражение
68: 13: аргумент преобразования типа должен быть одним выражением
76: 15: недопустимое использование знака подтипа в выражении или вызове
Я включил свой полный код ниже, чтобы, если есть что-то, что может вызвать проблему в рекламеeclaration, это доступно для справки.
-- RULES:
-- Only black squares may have pieces on them
-- Black squares start at the bottom left hand corner
-- Total checker count for a color cannot exceed 12
-- A color may not have more than 7 kings
with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;
procedure Checker_Checker is
type Checkers_Piece is ("b", "BK", "RK", "BC", "RC");
type Checkers_Board is array (1..8, 1..8) of Checkers_Piece;
Checkers_String: String(1..64);
invalid,
BK_Count, -- black king checker
RK_Count, -- red king checker
RC_Count, -- red checker
BC_Count, -- black checker
b_Count, -- blank space
Char_Count : Integer := 0;
procedure Print_Board (Object: in Checkers_Board) is
Print_Divider: String(1..17);
Print_Squares: String(1..17);
begin
Print_Divider := "-----------------";
Print_Squares := "| | | | | | | | |";
for X in 1..8 loop
Put_Line(Print_Divider);
for Y in 1..8 loop
Print_Squares(Y+1) := Checkers_Board(X, Y);
end loop;
Put_Line(Print_Squares);
end loop;
Put_Line(Print_Divider);
end Print_Board;
begin
Get(Checkers_String);
for I in 1..8 loop
for J in 1..8 loop
Char_Count := Char_Count + 1;
Checkers_Board(I, J) := Checkers_String(Char_Count);
end loop;
end loop;
for Y in 1..8 loop
for X in 1..8 loop
if Checkers_Board(Y, X) = 'b' then
Put_Line("There is a piece on a white space.");
invalid := invalid + 1;
end if;
if Checkers_Board(Y, X) = "BK" then
BK_Count := BK_Count + 1;
BC_Count := BC_Count + 1;
elsif Checkers_Board(Y, X) = "RK" then
RK_Count := RK_Count + 1;
RC_Count := RC_Count + 1;
elsif Checkers_Board(Y, X) = "RC" then
RC_Count := RC_Count + 1;
elsif Checkers_Board(Y, X) = "BC" then
BC_Count := BC_Count + 1;
elsif Checkers_Board(Y, X) = "b" then
b_Count := b_Count + 1;
else
Put_Line("There is an unidentified character on the board.");
end if;
end loop;
end loop;
Print_Board;
if RK_Count > 7 then
Put_Line("There are more than 7 Red Kings on the board.");
end if;
if BK_Count > 7 then
Put_Line("There are more than 7 Black Kings on the board.");
end if;
if RC_Count > 12 then
Put_Line("There are more than 12 Red Checkers on the board.");
end if;
if BC_Count > 12 then
Put_Line("There are more than 12 Black Checkers on the board.");
end if;
if b_Count < 32 then
Put_Line("There are too many checkers on the board.");
end if;
if invalid = 0 then
Put_Line("This is a valid checker board.");
else
Put_Line("This is an invalid checker board.");
end if;
end Checker_Checker;
Я знаю, что мой код беспорядок ... пожалуйста, не слишком критикуйте его ... Я стараюсь изо всех сил в изучении Ады.Спасибо за вашу помощь.