Здавствуйте, я новенькая на этом форуме, еще даже тольком не освоилась...
Поискала вот в задачах, но так и не нашла, конечно может так искала плохо...
В общем, мне надо написать программу "Консольный калькулятор". А я даже не понимаю толком, что это такое... Простой калькулятор я написала... Вот, что нам задали....
Задание
Разработать программу, вычисляющую простейшие математические операции. Тип операции и операнды передаются через командную строку программы. Никакого другого ввода не должно быть. Вывод результата осуществляется на экран.
Формат командной строки
В квадратных скобках указываются необязательные параметры. Параметры в командной строке указываются через пробел.
Для вычисления выражения:
ИмяПрограммы ./опреация операнд1 [операнд2]…[операндN]
Максимальное количество опрендов – 5.
Для получения информации о программе и возможных параметрах
ИмяПрограммы /?
Параметры командной строки
/sum - Считается сумма всех операндов.
/mul - Считается произведение всех операндов
/div - Считается частное всех операндов. (Операнд1/Операнд2/…/ОперандN)
/sub - Считается разность всех операндов. (Операнд1 - Операнд2 - … - ОперандN)
/avg - Считается среднее арифметическое операндов
/min - Находится минимум из операндов
/max - Находится максимум из операндов
/? - при запуске программы с данным ключом производится вывод информации
Ошибки
Программа должна обрабатывать ошибки и выдавать пользователю сообщение, в следующих ситуациях:
• Неизвестная операция
• Нечисловой операнд
• Отсутствие операндов
• Слишком много операндов
• Деление на ноль. Программа не должна аварийно завершаться!
Воть, а я не наю, как это сделать.... Заранее благодарна!
To: Kolu4ka
Ну, вот тебе пример программы (обрабатывает пока только "+" и "-"):
Type
OperFunc = Function(Var Error: Boolean;
X, Y: Real): Real;
function _add(var err: boolean;
a, b: real): real; far;
begin
err := false;
_add := a + b;
end;
function _sub(var err: boolean;
a, b: real): real; far;
begin
err := false;
_sub := a - b;
end;
function DoOperation(f: OperFunc): real;
var
X, _result: real;
sVal: string;
p, ErrorCode: integer;
isError: Boolean;
begin
_result := 0;
for p := 2 to ParamCount do begin
sVal := ParamStr(p);
writeln(sVal);
Val(sVal, X, ErrorCode);
If ErrorCode <> 0 Then Begin
WriteLn('illegal parameter #', p, ' . Stopped. ');
Halt(101);
End;
_result := f(isError, _result, X);
If isError Then Begin
Writeln('Division by zero !!!');
Halt(100);
End;
end;
DoOperation := _result;
end;
var
sOper: string;
_result: real;
i: integer;
found: boolean;
const
n = 8;
opers: Array[1 .. n] of string =
('/sum',
'/mul',
'/div',
'/sub',
'/avg',
'/min',
'/max',
'/?' );
tips: array[1 .. n] of string =
(
'Считается сумма всех операндов.',
'Считается произведение всех операндов.',
'Считается частное всех операндов.',
'Считается разность всех операндов.',
'Считается среднее арифметическое операндов',
'Находится минимум из операндов',
'Находится максимум из операндов',
'Данное сообщение...'
);
begin
if ParamStr(1) = '/?' then begin
for i := 1 to n do
writeln(opers[i] + ': ' + tips[i]);
Halt(100);
end;
if paramcount < 3 then writeln('not enough parameters')
else begin
sOper := paramstr(1);
i := 1; found := false;
while (i < n) and (not found) do
if opers[i] = sOper then found := True else inc(i);
if not found then writeln('error in parameter: ' + sOper)
else begin
{ main cycle: }
case i of
1: _result := DoOperation(_add);
4: _result := DoOperation(_sub);
end;
writeln('result = ', _result:10:5);
end;
end;
end.
Родите меня обратно!!! Неужели все так сложно....
Ох, спасибо большое....Терь бы разобраться...
Kolu4ka, мы тут посовещались и подумали, что немного напугали тебя слова