Постановка задачи
Основная задача.
Организовать экранное меню из трех пунктов (расчет площади прямоугольника, треугольника и круга). По выбранному номеру пункта выполнить расчет площади соответствующей фигуры с проверкой корректности ввода данных и возможности вычислений.
Дополнительные задачи.
1. Добавить в меню четвертый пункт – «Выход» – и организовать внешний цикл WHILE для выполнения программы, пока не будет выбран соответствующий пункт меню.
2. Добавить в каждое вычисление площади вопрос «Продолжить вычисление (Y / N)?» и цикл REPEAT, который должен выполняться, пока не будет введено «N».
Математическая модель
, где p – полупериметр, .
Описание алгоритма
Алгоритм Lab3.
А. Начать исполнение.
1. Присвоить переменной Loop значение "истина".
2. Пока Loop имеет значение "истина", повторять:
А. Вывести на экран меню: "1 – Расчет площади прямоугольника
2 – Расчет площади треугольника
3 – Расчет площади круга".
Б. Вывести сообщение "Выберите пункт меню".
В. Ввести n.
Г. Исследовать n:
1. Если n =1, то:
А. Повторять:
1. Вывести сообщение "Введите стороны прямоугольника".
2. Ввести a, b.
3. Если a ≤0, или b ≤0,
А. то вывести сообщение "Некорректный ввод".
Б. иначе вывести "Площадь прямоугольника равна ", ab.
4. Вывести сообщение "Продолжить вычисления (Y / N)?".
5. Ввести символ ot.
Б. Конец цикла при условии ot = 'N'.
2. Если n =2, то:
А. Повторять:
1. Вывести сообщение "Введите стороны треугольника".
2. Ввести a, b, c.
3. Если a ≤0, или b ≤0, или с≤0,
А. то вывести "Некорректный ввод".
Б. иначе:
1. Если a + b ≤ c, или a + c ≤ b, или b + c ≤ a,
А. то вывести "Некорректный ввод".
Б. иначе:
1. Рассчитать полупериметр .
2. Вывести "Площадь треугольника равна ", .
4. Вывести сообщение "Продолжить вычисления (Y / N)?".
5. Ввести символ ot.
Б. Конец цикла при условии ot = 'N'.
3. Если n =3, то:
А. Повторять:
1. Вывести сообщение "Введите радиус круга".
2. Ввести r.
3. Если r ≤0,
А. то вывести сообщение "Некорректный ввод".
Б. иначе вывести "Площадь круга равна ", πr2.
4. Вывести сообщение "Продолжить вычисления (Y / N)?".
5. Ввести символ ot.
Б. Конец цикла при условии ot = 'N'.
4. Если n =4, то присвоить переменной Loop значение "ложь".
3. Конец цикла.
Б. Закончить исполнение.
Текст программы
program Lab3;
{$APPTYPE CONSOLE}
uses SysUtils;
var
Loop:Boolean;
n:Integer;
a,b,c,p,r:Real;
ch:Char;
begin
Loop:=True;
while Loop do
begin
Writeln(' Меню:');
Writeln('1. Расчет площади прямоугольника');
Writeln('2. Расчет площади треугольника');
Writeln('3. Расчет площади круга');
Writeln('4. Выход из программы');
Write('Выберите пункт меню: ');
Readln(n);
case n of
1:begin
repeat
Write('Введите стороны прямоугольника: ');
Readln(a,b);
if (a<=0) or (b<=0) then
Writeln('Некорректный ввод')
else
Writeln('Площадь прямоугольника равна ',
a*b);
Write('Продолжить вычисления (Y/N)? ');
Readln(ch);
until UpCase(ch)='N';
end;
2:begin
repeat
Write('Введите стороны треугольника: ');
Readln(a,b,c);
if (a<=0) or (b<=0) or (c<=0) then
Writeln('Некорректный ввод')
else
if (a+b<=c) or (a+c<=b) or (b+c<=a) then
Writeln('Вычисление невозможно')
else
begin
p:=(a+b+c)/2;
Writeln('Площадь треугольника равна ',
Sqrt(p*(p-a)*(p-b)*(p-c)));
end;
Write('Продолжить вычисления (Y/N)? ');
Readln(ch);
until UpCase(ch)='N';
end;
3:begin
repeat
Write('Введите радиус круга: ');
Readln(r);
if r<=0 then
Writeln('Некорректный ввод')
else
Writeln('Площадь круга равна ',Pi*Sqr(r));
Write('Продолжить вычисления (Y/N)? ');
Readln(ch);
until UpCase(ch)='N';
end;
4:Loop:=False;
end;
end;
end.
Тест
Для каждого пункта меню необходимо выполнить несколько тестов с отрицательными числами, неправильными треугольниками и т.д. Примеры таблиц тестов приведены ниже.
Пункт 1 – «Площадь прямоугольника»
a | b | Расчетная площадь | Результат работы программы |
-3 | Некорректный ввод | … | |
… | |||
… | … | … | … |
Пункт 2 – «Площадь треугольника»
a | b | c | Расчетная площадь | Результат работы программы |
-1 | Некорректный ввод | … | ||
Вычисление невозможно | … | |||
… | ||||
… | ||||
… | … | … | … | … |
Пункт 3 – «Площадь круга»
r | Расчетная площадь | Результат работы программы |
-2 | Некорректный ввод | … |
314.1592653 | … | |
… | … | … |