Могу предложить такой вариант - в цикле repeat число вводится как строка и посимвольно проверяется. если введено неправильно - возвращает на ввод, если правильно - преобразует строку в число для дальнейшей работы.
var a,err: integer; s: string; i: byte; error: boolean; begin repeat error:=true; writeln ('введите число'); readln (s); for i:=1 to length(s) do begin if (ord(s[i])<48) or (ord(s[i])>57) then begin error:=false; writeln ('введено не число'); break; end end; until error=true; val(s,a,err); writeln ('введено число ',a); end.
Пример: введите число 12O введено не число введите число 120 введено число 120
takerra
04.08.2021
Заполнение с клавиатуры:
Var A:array[1..5] of integer; i,O,P:integer; Begin Write('Введите массив A(5): '); O:=0; P:=0; For i:= 1 to 5 do Begin Read(A[i]); if A[i] < 0 then O:=O+1 else if A[i] > 0 then P:=P+1; End; WriteLn('Количество отрицательных: ',O); WriteLn('Количество положительных: ',P); End.
Заполнение случайными числами:
Const N = 5; Var A:array[1..N] of integer; i,O,P:integer; Begin Randomize; Write('Введите массив A(5):'); O:=0; P:=0; For i:= 1 to N do Begin A[i]:=random(2*N+1)-N; Write(' ',A[i]); if A[i] < 0 then O:=O+1 else if A[i] > 0 then P:=P+1; End; WriteLn; WriteLn('Количество отрицательных: ',O); WriteLn('Количество положительных: ',P); End.