Калькулятор Паскаль
Калькулятор Паскаля (Pascal)
Калькулятор Паскаля (Pascal) - это программа, которая позволяет выполнять арифметические операции и вычислять математические выражения по алгоритмам, схожим с теми, что используются в языке программирования Паскаль. В данном ответе будет представлен развернутый вариант описания калькулятора Паскаля на 1000 слов с примерами кода.
Вначале нам понадобится определить пользовательский интерфейс для калькулятора. Программа должна позволять пользователю ввести математическое выражение, а затем вывести его результат. Для этого можно использовать консольный интерфейс.
Пример кода на Паскале для простого калькулятора с базовыми операциями (+, -, *, /):
program PascalCalculator;
var
num1, num2, result: real;
operator: char;
begin
writeln('Введите первое число: ');
readln(num1);
writeln('Введите оператор (+, -, *, /): ');
readln(operator);
writeln('Введите второе число: ');
readln(num2);
case operator of
'+': result := num1 + num2;
'-': result := num1 - num2;
'*': result := num1 * num2;
'/': result := num1 / num2;
end;
writeln('Результат: ', result);
readln;
end.
В этом примере мы объявляем переменные num1, num2 и result типа real для хранения чисел и результата вычислений, а также переменную operator типа char для хранения оператора. После этого мы запрашиваем у пользователя ввод двух чисел и оператора. С помощью оператора case мы выбираем нужное действие в зависимости от оператора и выполняем соответствующие вычисления.
Теперь давайте рассмотрим немного сложнее пример с использованием более широкого набора операторов и возможностью использования скобок в выражениях:
program PascalCalculator;
const
operators: set of char = ['+', '-', '*', '/', '%', '^'];
function
Priority(op: char): integer;
begin
case op of
'+', '-': Result := 1;
'*', '/', '%': Result := 2;
'^': Result := 3;
end;
end;
procedure
Calculate(var stacknums: array of real; var stackops: array of char; var topNum, topOp: integer);
var
num1, num2: real;
op: char;
begin
num2 := stacknums[topNum];
Dec(topNum);
num1 := stacknums[topNum];
Dec(topNum);
op := stackops[topOp];
Dec(topOp);
case op of
'+': stacknums[topNum] := num1 + num2;
'-': stacknums[topNum] := num1 - num2;
'*': stacknums[topNum] := num1 * num2;
'/': stacknums[topNum] := num1 / num2;
'%': stacknums[topNum] := num1 mod num2;
'^': stacknums[topNum] := exp(num2 * ln(num1));
end;
end;
var
expression: string;
stacknums: array [1..100] of real;
stackops: array [1..100] of char;
topNum, topOp, i, len: integer;
num1, num2: real;
op: char;
begin
writeln('Введите выражение: ');
readln(expression);
topNum := 0;
topOp := 0;
len := Length(expression);
i := 1;
while i <= len do
begin
if expression[i] = ' ' then
begin
Inc(i);
Continue;
end;
if expression[i] = '(' then
begin
Inc(topOp);
stackops[topOp] := '(';
end
else if expression[i] = ')' then
begin
while stackops[topOp] <> '(' do
begin
Calculate(stacknums, stackops, topNum, topOp);
end;
Dec(topOp);
end
else if expression[i] in operators then
begin
while (topOp > 0) and (Priority(expression[i]) <= Priority(stackops[topOp])) do
begin
Calculate(stacknums, stackops, topNum, topOp);
end;
Inc(topOp);
stackops[topOp] := expression[i];
end
else
begin
num1 := StrToFloat(expression[i]);
Inc(topNum);
stacknums[topNum] := num1;
end;
Inc(i);
end;
while topOp > 0 do
begin
Calculate(stacknums, stackops, topNum, topOp);
end;
writeln('Результат: ', stacknums[topNum]);
readln;
end.
В этом примере мы добавляем функцию Priority, которая определяет приоритет оператора. Также мы объявляем процедуру Calculate, которая выполняет вычисления для двух чисел и оператора, используя обратную польскую запись. В основной части программы мы считываем выражение пользователя, разделяем его на числа и операторы, и применяем алгоритм вычисления с помощью стека чисел и операторов.
Это всего лишь небольшой пример того, как может быть реализован калькулятор Паскаля. В зависимости от требований и желаемого уровня функциональности, вы можете добавить поддержку более сложных операций, функций, переменных и т.д. Но, в целом, этот пример позволяет понять основы разработки калькулятора на Паскале.