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

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

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

> Самый обычный калькулятор
Kolyancz
сообщение 2.03.2007 12:12
Сообщение #1


Новичок
*

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

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


Задача вообщем то не сложная, только не могу придумать как написать одну штуку...

Вводится число 2
На экране число 2

Вводится знак +
На экране число 2

Вводится число 5
На экране число 5

Нажимается Enter
На экране число 7...

Вот так вот...
У кого-нибудь есть идеи??? wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
TarasBer
сообщение 5.03.2007 19:07
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

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


Такой вариант (калькулятор за 25 рублей)?
Бакспэйс не работает - это есть только в калькуляторах за 30 рублей.

program Calc;

uses
CRT;

var
N1: extended;
N2: extended;
Op: char;
Key, ScanKey: char;

procedure GetKeys;
begin
Key := ReadKey;
if Key = #0 then
ScanKey := ReadKey
else
ScanKey := #0;
end;

procedure GetNumber(var N: extended);
var
WasPoint: boolean;
Order: integer;
DN: extended;
Minus: boolean;
begin
N := 0;
Order := 0;
DN := 1;
WasPoint := False;
if Key = '-' then begin
Write(Key);
GetKeys;
Minus := True;
end else
Minus := False;
repeat
if Key in ['0' .. '9'] then begin
Write(Key);
if WasPoint then begin
if (Order < 20) then begin
DN := DN / 10;
N := N + DN * (byte(Key) - 48);
Inc(Order);
end;
end else if (N < 1E+20) then
N := N * 10 + byte(Key) - 48
end;
if (Key in ['.', ',']) and not WasPoint then begin
Write(Key);
WasPoint := True;
end;
GetKeys;
until Key in ['+', '-', '*', '/', '^', 'v', 'l', '=', #13];
if Minus then
N := -N;
WriteLn;
end;

procedure GetOp;
begin
if Key in ['=', #13] then
repeat
GetKeys;
until Key in ['+', '-', '*', '/', '^', 'v', 'l'];
repeat
op := Key;
WriteLn(op);
GetKeys;
until Key in ['0' .. '9', '.', ',', '-'];
end;

begin
repeat
GetKeys;
GetNumber(N1);
GetOp;
GetNumber(N2);
case op of
'+': WriteLn(N1 + N2: 0: 30);
'-': WriteLn(N1 - N2: 0: 30);
'*': WriteLn(N1 * N2: 0: 30);
'/': if Abs(N2) > 1E-30 then
WriteLn(N1 / N2: 0: 30)
else
WriteLn('ERROR');
'^': if (N1 > 1E-30) and (N2 < 50) then
WriteLn(Exp(N2 * Ln(N1)): 0: 30)
else
WriteLn('ERROR');
'v': if (N1 > 1E-30) and (Abs(N2) > 0.02) then
WriteLn(Exp(Ln(N1) / N2): 0: 30)
else
WriteLn('ERROR');
'l': if (N1 > 1E-30) and (N2 > 1E-30) then
WriteLn(Ln(N1) / Ln(N2): 0: 30)
else
WriteLn('ERROR');
end;
until Abs(N2) < 1E-30;
end.


Операции: +, -, *, /, ^ (степень), v (корень), l (логарифм одного по основанию другого).
Для выхода из программы введите вторым числом ноль.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Саня-
сообщение 28.09.2007 17:35
Сообщение #3


Гость






народ хелп плиз мне для коледжа калкулятор нужен дз задали помогите плиз !help.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 21:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"