2015-03-12 3 views
-2

Программа для скелетной программы 2015 года имеет ряд важных проблем проверки, в частности, для проверки типа ввода. Для этой процедуры, как обеспечить, чтобы пользователь вводил SOMETHING и INTEGER.Подтверждение ввода типа переменной

код процедуры:

Procedure GetMove(Var StartSquare, FinishSquare : Integer); 
Begin 
    Write('Enter coordinates of square containing piece to move (file first): '); 
    Readln(StartSquare); 
    Write('Enter coordinates of square to move piece to (file first): '); 
    Readln(FinishSquare); 
End; 

Я знаю, что это является основным, хотя я как ни странно, я понятия не имею.

+1

Вы сделали * любое усилие *, чтобы сделать это самостоятельно? Пробовали ли вы проверить, что произойдет, если вы попытаетесь ввести что-то отличное от целого? Вы пробовали ничего не вводить (просто нажимая клавишу Enter) и видя, что происходит и какие значения вы получаете в своих переменных? –

+0

И как вы думаете, вы можете ввести координаты (множественное число) в одно целое? –

+0

Если у вас действительно нет идеи, вам нужно поговорить с вашим инструктором. Попросите несколько советов, просмотрите заметки, которые вы записали в классе, и перечитайте главы книги, которые сопровождают это задание. –

ответ

0

Вы хотите ввести координату, как ссылку на ячейку таблицы. Например, A1, B17. Вам нужно найти первую цифру и разбить строку в этой точке. Затем проверьте две части. Я предполагаю, что, как и для электронных таблиц, альфа-часть - это столбец, а числовая часть - это строка.

function TryDecodeCoord(const coord: string; out col: string; out row: Integer): Boolean; 
var 
    FirstDigit: Integer; 
begin 
    FirstDigit := 1; 
    while (FirstDigit <= Length(coord)) and (IsDigit(coord[FirstDigit])) do 
    Inc(FirstDigit); 

    if (FirstDigit = 1) or (FirstDigit > Length(coord)) then 
    begin 
    Result := False; 
    Exit; 
    end; 
    col := Copy(coord, 1, FirstDigit - 1); 

    if not TryStrToInt(Copy(coord, FirstDigit, MaxInt), row) then 
    begin 
    Result := False; 
    Exit; 
    end; 

    Result := True; 
end; 

Вам необходимо будет реализовать IsDigit. Современные версии Delphi предоставляют функции RTL для такого рода вещей. В противном случае вы можете легко проверить, есть ли символ >='0' и <='9'.

Ожидаю, что вам понадобится дополнительная проверка, чем это. И, возможно, способ преобразования столбца из текста в целое. Но это должно заставить вас идти.

+0

Прошу прощения за мое невежество - что такое программа «Скелет 2015 года»? –

+0

@Hugh Вы должны задать вопрос автору вопроса –

+0

И нижний план? –