Как сделать проверку ввода на turbo pascal
Перейти к содержимому

Как сделать проверку ввода на turbo pascal

  • автор:

Как сделать проверку ввода на turbo pascal

В языке Турбо Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ.

Счетный оператор цикла FOR имеет такую структуру:

Здесь FOR, TO, DO — зарезервированные слова (для, до, выполнить);

— параметр цикла — переменная типа INTEGER (точнее, любого порядкового типа,

— начальное значение — выражение того же типа;

— конечное значение — выражение того же типа;

— произвольный оператор Турбо Паскаля.

При выполнении оператора FOR вначале вычисляется выражение и осуществляется присваивание : = . После этого циклически повторяется:

  • проверка условия ; если условие не выполнено, оператор FOR завершает свою работу;
  • выполнение оператора ;
  • наращивание переменной на единицу.

В качестве иллюстрации применения оператора FOR рассмотрим программу, осуществляющую ввод с клавиатуры произвольного целого числа N и вычисление суммы всех целых чисел от 1 до N (пример 1.5).

for i : = 1 to n do

Отметим два обстоятельства. Во-первых, условие, управляющее работой оператора FOR, проверяется перед выполнением оператора : если условие не выполняется в самом начале работы оператора FOR, исполняемый оператор не будет выполнен ни разу. Другое обстоятельство — шаг наращивания параметра цикла строго постоянен и равен (+1). Существует другая форма оператора:

Замена зарезервированного слова ТО на DOWNTO означает, что шаг наращивания параметра цикла равен (-1), а управляющее условие приобретает вид = .

Пример 1.5 можно модифицировать так, чтобы сделать его пригодным для подсчета любых сумм — положительных и отрицательных:

for i := 1 to n do

for i := -1 downto n do s : = s + i ;

Два других оператора повторений лишь проверяют условие выполнения или повторения цикла, но не связаны с изменением счетчика цикла.

Оператор цикла WHILE с предпроверкой условия:

Здесь WHILE, DO — зарезервированные слова (пока [выполняется условие], делать);

— выражение логического типа;

— произвольный оператор Турбо Паскаля.

Если выражение имеет значение TRUE, то выполняется , после чего вычисление выражения и его проверка повторяются. Если имеет значение FALSE , оператор WHILE прекращает свою работу.

Рассмотрим пример 1.6, иллюстрирующий использование оператора WHILE. Найдем так называемое «машинное эпсилон» — такое минимальное, не равное нулю вещественное число, которое после прибавления его к 1.0 еще дает результат, отличный от 1.0.

while epsilon/2 + 1 > 1 do

WriteLn(‘Машинное эпсилон = ‘,epsilon)

Оператор цикла REPEAT. UNTIL с постпроверкой условия:

Здесь REPEAT, UNTIL- зарезервированные слова (повторять до тех пор, пока не будет выполнено условие);

— произвольная последовательность операторов Турбо Паскаля;

— выражение логического типа.

Операторы выполняются хотя бы один раз, после чего вычисляется выражение : если его значение есть FALSE, операторы повторяются, в противном случае оператор REPEAT. . . UNTIL завершает свою работу.

Для иллюстрации применения оператора REPEAT. UNTIL модифицируем программу из примера 1.3. Модификация (пример 1.7) состоит в том, что программа будет все время повторять цикл ввода символа и печати его кода до тех пор, пока очередным символом не будет символ CR (вводится клавишей Enter).

until ord(ch) = CR

Обратите внимание: пара REPEAT. UNTIL подобна операторным скобкам begin. .. end, поэтому перед UNTIL ставить точку с запятой необязательно.

Для гибкого управления циклическими операторами FOR, WHILE и REPEAT в состав Турбо Паскаля включены две процедуры:

BREAK — реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за концом циклического оператора;

CONTINUE — обеспечивает досрочное завершение очередного прохода цикла; эквивалент передачи управления в самый конец циклического оператора.

Введение в язык этих процедур практически исключает необходимость использования операторов безусловного перехода GOTO.

Контроль ввода данных пользователем

Ошибка при вводе буквы

Доброй ночи. Работаю с PascalABC.Net. Интересует контроль ввода данных пользователем (так, чтоб можно было вводить лишь число, а при вводе не числа, а любого символа выдавало сообщение «Введено не число» и возвращало для исправления на ту строку где была сделана ошибка), как это реализовать в моей программе и куда вставлять так скажем? На данный момент выводит такую ошибку при вводе например буквы «а» А вот собственно и сам код:

program Gauss1; uses crt; const num=5; c=0.00000001; var a: array [1..num,1..num] of real; b, x: array [1..num] of real; n, i, j, k: integer; delenie: real; var s:string; err:integer; v:integer; begin val(s,v,err); if err<>0 then writeln('Введено не число'); writeln; clrscr; writeln('Решение СЛАУ по методу Гаусса.'); writeln; writeln('Введите колич-во неизвестных величин и нажмите ENTER:'); readln(n); writeln; writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:'); for k:=1 to n do for j:=1 to n do begin write ('a[',k,',',j,']='); read(a[k,j]); end; writeln; writeln('Введите вектоp В свободных членов нажимая ENTER:'); for k:=1 to n do begin write ('b[',k,']='); read (b[k]); end; writeln; writeln('Расширеная матрица:'); for i:=1 to n do begin for j:=1 to n do write (a[i, j]:5:3,' ':2); write (b[i]:5:3,' ':2); writeln; end; writeln; writeln(' Прямой ход '); for i:=1 to n-1 do begin for k:=i+1 to n do begin if a[i,i]=0 then a[i,i]:=c; delenie:= -1*(a[k,i] / a[i,i]); for j:=1 to n do a[k,j]:= a[k,j] + a[i,j] * delenie; b[k]:= b[k] + b[i] * delenie; end; end; writeln(' Результат прямого хода: '); for i:=1 to n do begin for j:=1 to n do write (a[i, j]:5:3,' ':2); write (b[i]:5:3,' ':2); writeln; end; writeln; writeln('обратный ход'); for i:=n downto 1 do begin for j:= i+1 to n do b[i]:= b[i] - a[i,j] * x[j]; x[i]:= b[i] / a[i,i]; end; writeln('ОТВЕТ:'); for i:=1 to n do writeln('X[',i:1,']=', x[i]:1:2, '.'); readkey; end. 

Как сделать проверку ввода на turbo pascal

Регистрация: 17.12.2011

Сообщений: 12

Проверка на ввод целых чисел в Паскале посимвольно

Написана программа вычисления суммы/разницы целых чисел с рекурсией (например, «99+23-3+48=»). Помогите пожалуйста добавить проверку на посимвольный ввод именно целых чисел(от 0 до 999) и знаков «+» и «-«. Конец ввода — «=». У меня только для чисел от 0 до 9 получается.

uses crt; function Calculate(s: string): integer; begin if Length(s)=1 then Calculate:= Ord(s[1])-Ord('0') else case s[Length(s)-1] of '+': Calculate:= Calculate(Copy(s,1,Length(s)-2))+Ord(s[Length(s)])-Ord('0'); '-': Calculate:= Calculate(Copy(s,1,Length(s)-2))-Ord(s[Length(s)])+Ord('0'); end end; var Str: string; Chr: char; begin repeat read(Chr); Str:=Str+Chr; until (Chr = '='); writeln('Введенное выражение: ', Str); str:= copy(str,1,length(str)-1); writeln('Результат: ', Calculate(Str)); end.

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.03.2012 в 16:21 .

Как сделать проверку ввода на turbo pascal

Здраствуйте, подскажите как реализовать контроль ввода в консоли?Например чтобы ничего не вводилось кроме цифр и точки и нельзя было ввести точку больше 1 раза.

Регистрация: 09.01.2008
Сообщений: 26,238

1) какой Паскаль? Turbo Pascal или Delphi ? (консоль принципиально разная!)

2) вообще-то, два варианта:
A. давать вводить что хочешь. ввод осуществлять в строку. После ввода проверять, что там ввели (например, самый действенный и простой способ — проверять через VAL() ) — если ввели неверно — сообщение об ошибке -> переход на начало цикла ввода (повтор ввода).

B. осуществлять ввод нажимаемых клавиш (в TurboPascal — Readkey()) и анализировать, что же нажали.
Если нажаты не те клавиши, игнорировать их, например.
Но в этом случае прийдётся реализовывать простейший однострочный редактор (ну, как минимум нужна обработка клавиши «BackSpace» — в идеале — движение стрелками курсора, Delete, вставка/замена и т.д..) В принципе тоже ничего сложного, но в пару строк кода не уложишься, конечно.

Serge_Bliznykov
Посмотреть профиль
Найти ещё сообщения от Serge_Bliznykov

Пользователь
Регистрация: 27.06.2010
Сообщений: 11
Сообщение от Serge_Bliznykov

1) какой Паскаль? Turbo Pascal или Delphi ? (консоль принципиально разная!)

2) вообще-то, два варианта:
A. давать вводить что хочешь. ввод осуществлять в строку. После ввода проверять, что там ввели (например, самый действенный и простой способ — проверять через VAL() ) — если ввели неверно — сообщение об ошибке -> переход на начало цикла ввода (повтор ввода).

B. осуществлять ввод нажимаемых клавиш (в TurboPascal — Readkey()) и анализировать, что же нажали.
Если нажаты не те клавиши, игнорировать их, например.
Но в этом случае прийдётся реализовывать простейший однострочный редактор (ну, как минимум нужна обработка клавиши «BackSpace» — в идеале — движение стрелками курсора, Delete, вставка/замена и т.д..) В принципе тоже ничего сложного, но в пару строк кода не уложишься, конечно.

Это все в Delphi.
Первый вариант не годится.Требуют обработку именно во время ввода.
Можно поподробнее про второй вариант?Как мне проигнорировать символ во время ввода?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *