IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Консольный калькулятор, помогите написать консольный калькулятор
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Женский

Репутация: -  0  +


Здавствуйте, я новенькая на этом форуме, еще даже тольком не освоилась...
Поискала вот в задачах, но так и не нашла, конечно может так искала плохо...
В общем, мне надо написать программу "Консольный калькулятор". А я даже не понимаю толком, что это такое... unsure.gif Простой калькулятор я написала... Вот, что нам задали....
Задание
Разработать программу, вычисляющую простейшие математические операции. Тип операции и операнды передаются через командную строку программы. Никакого другого ввода не должно быть. Вывод результата осуществляется на экран.
Формат командной строки
В квадратных скобках указываются необязательные параметры. Параметры в командной строке указываются через пробел.
Для вычисления выражения:
ИмяПрограммы ./опреация операнд1 [операнд2]…[операндN]
Максимальное количество опрендов – 5.
Для получения информации о программе и возможных параметрах
ИмяПрограммы /?
Параметры командной строки
/sum - Считается сумма всех операндов.
/mul - Считается произведение всех операндов
/div - Считается частное всех операндов. (Операнд1/Операнд2/…/ОперандN)
/sub - Считается разность всех операндов. (Операнд1 - Операнд2 - … - ОперандN)
/avg - Считается среднее арифметическое операндов
/min - Находится минимум из операндов
/max - Находится максимум из операндов
/? - при запуске программы с данным ключом производится вывод информации
Ошибки
Программа должна обрабатывать ошибки и выдавать пользователю сообщение, в следующих ситуациях:
• Неизвестная операция
• Нечисловой операнд
• Отсутствие операндов
• Слишком много операндов
• Деление на ноль. Программа не должна аварийно завершаться!

Воть, а я не наю, как это сделать.... blush.gif Заранее благодарна!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Воть, а я не наю, как это сделать.... blush.gif Заранее благодарна!

Что ИМЕННО вызывает затруднения? Калькуляторов на форуме есть куча, возьми любой из них и просто добавь обработку командной строки (см. функции ParamStr и ParamCount). А ЗА тебя я не думаю, что кто-то будет делать все задание полностью... no1.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Женский

Репутация: -  0  +


Цитата
что кто-то будет делать все задание полностью...

а мне и не надо полностью....Я же говорю, простой калькулятор я написала...
Просто я не знаю что такое командная строка в паскале blush.gif
Значит, это все в функциях ParamStr и ParamCount? Спасибо, я попробую huh.gif
Если сдам эту работу, то с меня большая шоколадка! !flowers.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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.

rolleyes.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Женский

Репутация: -  0  +


blink.gif
Родите меня обратно!!! Неужели все так сложно....
Ох, спасибо большое....Терь бы разобраться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Kolu4ka, мы тут посовещались и подумали, что немного напугали тебя слова
Цитата
обрабатывает пока только "+" и "-"

на самом деле можешь оценивать прогу почти как готовую, для обработки всего остального понадобиться дописать тебе где-то десяток строк... give_rose.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 11:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name