Writeln ('Вы действительно хотите’,




Рассмотрим процесс создания меню по шагам. Рассматривается фрагмент программы в развитии соответствующий.

Собственно текст меню (предложены 4 условных варианта и 5 - выход из программы с подтверждением):

writeln(' Заголовок меню');

writeln('1. Первый вариант действий');

writeln('2. Второй вариант действий ');

writeln('3. Третий вариант действий’);

writeln('4. Четвёртый вариант действий ');

writeln('5. Выход из программы');

writeln('Ваш выбор:');

readln (choice2);{ввод ответа пользователя

для анализа и выбора действий}

Далее необходимо определить и выполнить вариант вычислений в соответствии с выбором пользователя. Для этого применяется оператор множественного выбора CASE... OF и переменная CHOICE2:

Case choice2 of

Begin

{ Реализация первого варианта действий }

{ операторы }

...

End;

Begin

{ Реализация второго варианта действий }

{ операторы }

...

End;

Begin

{ Реализация третьего варианта действий }

{ операторы }

...

End;

Begin

{Реализация четвёртого варианта действий }

{ операторы }

...

End;

Begin

Writeln ('Вы действительно хотите’,

’ закончить работу? (Y/N)');

readln (exit_ans);

if exit_ans = 'Y'

then... { Реализация выхода }

end;

end; { case }

Пока данный вариант показывает, во-первых, меню в «линейном виде», а нормальное меню работает до отказа пользователя от работы, во-вторых, в нём нет блокировок от некорректных действий пользователя.

Для обеспечения работы меню «в цикле» можно сделать так.

Var

exit_ans: string;

choice2: integer;

F: boolean;

{Тело главной вызывающей программы}

Begin

F:= true; { Флаг управления циклом меню }

while (F = true) do

Begin

writeln(' Заголовок меню');

writeln('1. Первый вариант действий');

writeln('2. Второй вариант действий ');

writeln('3. Третий вариант действий’);

writeln('4. Четвёртый вариант действий ');

writeln('5. Выход из программы');

writeln('Ваш выбор:');

readln (choice2);

 

Case choice2 of

Begin

{ Реализация первого варианта действий }

{ операторы }

...

End;

Begin

{ Реализация второго варианта действий }

{ операторы }

...

End;

Begin

{ Реализация третьего варианта действий }

{ операторы }

...

End;

Begin

{Реализация четвёртого варианта действий }

{ операторы }

...

End;

Begin

Writeln ('Вы действительно хотите’,

’ закончить работу? (Y/N)');

readln (exit_ans);

if exit_ans = 'Y'

then F:=false;{флаг управления циклом }

end;

end; { case }

end; { While }

writeln ('Спасибо! До свидания!');

readln;

End.

Защиты по-прежнему нет, символ вместо цифры приведёт к аварийному завершению программы.

Никакой реакции нет на значение ответа вне интервала от 1 до 5 включительно. Эта защита реализуется фрагментом

Else writeln ('Incorrect menu point',choice2);

Поставленным в операторе CASE, перед завершающим его END

...

Begin

Writeln ('Вы действительно хотите’,

’ закончить работу? (Y/N)');

readln (exit_ans);

if exit_ans = 'Y'

then F:=false;

end;

Else writeln ('Incorrect menu point',choice);

end; { case }

...

Способ блокировки ввода пользователем «нецифры».

Для решения этой задачи пользователь может ввести символ, чтобы избежать контроля типа информации при вводе. Тип данных для переменной ответа – STRING. Но далее происходит принудительная попытка преобразовать символьную информацию (тип данных, в котором вводится значение пункта меню) в цифровую, для чего используется функция VAL(…).

readln (choice2);

val (choice2, choice, code);

Для контроля ввода рекомендуется применение процедуры

val (choice2, choice, code);

преобразующей введённую в символьной форме информацию (choice2) в число (choice). Параметр Code показывает результат преобразования: если значение параметра Code = 0, то преобразование прошло успешно, иначе необходимо информировать пользователя об ошибке и заставить повторить ввод. Вариант реализации этой защиты

Repeat

writeln(' Заголовок меню');

writeln('1. Первый вариант действий');

writeln('2. Второй вариант действий ');

writeln('3. Третий вариант действий’);

writeln('4. Четвёртый вариант действий ');

writeln('5. Выход из программы');

writeln('Ваш выбор:');

readln (choice2);

val (choice2, choice, code);

if (code<>0)

then writeln ('Вы ввели не число! ’,

Choice2,

’ Повторите ввод! ');

until code=0;

Case choice of

Begin

...

Усложнённое задание Дополнительно сформировать счётчик повторений попыток ввода (на 3-5 неудачных попыток). Когда заданный лимит попыток будет превзойдён, программа прекращает работу, уведомив пользователя о том, что он исчерпал свои возможности. Заблокировать, не допускать выполнения пунктов обработки информации, если не была введена исходная информация! Использовать «флажок», чтобы знать, введена информация или ещё нет

PROGRAM Menu;{Окончательный вариант }

Var

exit_ans: string;

choice, code: integer;

F, Fl: boolean;

{Тело главной вызывающей программы}

Begin

F:= true; { Флаг управления циклом меню }

while (F = true) do

Begin

Repeat

writeln(' Заголовок меню');

writeln('1. Первый вариант действий');

writeln('2. Второй вариант действий ');

writeln('3. Третий вариант действий’);

writeln('4. Четвёртый вариант действий ');

writeln('5. Выход из программы');

writeln('Ваш выбор:');

readln (choice2);

val (choice2, choice, code);

if (code<>0)

then writeln ('Вы ввели не число!’,

’ Повторите ввод! ');

until code=0;

Case choice of

Begin

{ Реализация первого варианта действий }

{ операторы }

...

End;

Begin

{ Реализация второго варианта действий }

{ операторы }

...

End;

Begin

{ Реализация третьего варианта действий }

{ операторы }

...

End;

Begin

{Реализация четвёртого варианта действий }

{ операторы }

...

End;

Begin

writeln ('Вы действительно хотите’,

’ закончить работу? (Y/N)');

readln (exit_ans);

if exit_ans = 'Y'

then F:=false;

end;

Else writeln ('Incorrect menu point',choice);

end; { case }

end; { While }

writeln ('Спасибо за работу! До свидания!');

readln;

End.

Далее необходимо отладить программу. Для этого подойдут пункты оператора CASE, в ветвях которого будут стоять только операторы вывода на монитор, которые только выводят отладочную информацию для своего пункта, например, для 1 пункта меню:

Begin

{Реализация первого варианта действий }

Writeln (‘Выбран и работает 1 пункт меню’);

End;

И т.д.по порядку.

После отладки можно приступать к «наполнению» составных операторов в ветвях оператора CASE, по очереди реализуя соответствующие варианты вычислений – ввод исходной информации, варианты обработки, выход из программы.

Repeat

writeln(' Заголовок меню');

writeln('1. Первый вариант действий');

writeln('2. Второй вариант действий ');

writeln('3. Третий вариант действий’);

writeln('4. Четвёртый вариант действий ');

writeln('5. Выход из программы');

writeln('Ваш выбор:');


АРХИВ

PROGRAM Menu;

Var

exit_ans: string;

choice, code: integer;

F, Fl: boolean;

{Тело главной вызывающей программы}

Begin

{ clrscr; }

F:= true; { Флаг управления циклом меню }

while (F = true) do

Begin

Repeat

{ clrscr;}

writeln(' Заголовок меню');

writeln('1. Первый вариант действий');

writeln('2. Второй вариант действий ');

writeln('3. Третий вариант действий’);

writeln('4. Четвёртый вариант действий ');

writeln('5. Выход из программы');

writeln('Ваш выбор:');

readln (choice2);

val (choice2, choice, code);

if (code<>0)

then writeln ('Вы ввели не число!’,

’ Повторите ввод! ');

until code=0;

Case choice of

Begin

{ Реализация первого варианта действий }

{ операторы }

...

End;

Begin

{ Реализация второго варианта действий }

{ операторы }

...

End;

Begin

{ Реализация третьего варианта действий }

{ операторы }

...

End;

Begin

{Реализация четвёртого варианта действий }

{ операторы }

...

End;

Begin



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: