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

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

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

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


Новичок
*

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

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


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

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

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

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

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

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


Гость






2 переменные (вещественные лучше всего, чтобы не было проблем, скажем, с делением) для хранения операндов, и одна (символьная) для хранения операции... Дальше -

readln(x1); { <--- читаем первое число }
readln(op); { <--- берем ЗНАК операции }
readln(x2); { <--- второе число }

case op of
'+': writeln(x1 + x2);
'-' : writeln(x1 - x2);
{ и так далее }
end;

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


Новичок
*

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

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


Ну если тебе надо только с плюсом, то код можно такой:
Код
Program Vremya_02_03_07;
var x,y:byte;
begin
readln(x);
readln;
readln(y);
writeln(x+y);
readln;
end.



Сообщение отредактировано: T i m e -


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(T i m e @ 2.03.2007 13:42)
код можно такой:
Код
Program Vremya_02_03_07;
var x,y:byte;
begin
read(x);
read;
read(y);
writeln(x+y);
readln;
end.

Я предупреждал? Предупреждал... Получите "-1", распишитесь...

Объясняю: если вводишь число <enter> знак <enter> число <enter>, то вместо знака "+" читается #13, соответственно получаем "сдвиг" между тем, что вводим, и тем, что ожидает программа, результат - "invalid numeric format"

Если <число><знак><число> <enter> - то в числовую переменную пытаешься прочесть строку, как результат - "invalid numeric format"... Проверяй то, что выкладываешь !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Да... там с readln всё прокатывало, я проверял...
Потом чё то взбрендело на read исправить... зачем не заню даже... unsure.gif
Минус 1 так минус 1 - мне не жалко раз заслужил... mega_chok.gif
Ладно... в общем я отредактировал... с readln там всё работает.


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Ребят вы не поняли...
Я не знаю как описать опирацию считывания кнопки с цифрой...
Мне нужно что бы после нажатия 2 (двойки) сразу считывался следующий знак(+,-,*,/) , а не 2 (двойка), потом Enter, потом считывание знака...
Возьмите обычный калькулятор за 10 рублей и посмотрите принцип действия...

Если будут идеи, пишите...
Спасибо...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Это?
uses crt;
var
first, second, ch: char;

begin
first := readkey; write(first);
ch := readkey; write(ch);
second := readkey; write(second);

readkey;

write('=');
case ch of
'+': writeln(ord(first) + ord(second) - 2 * ord('0'));
'-': writeln(ord(first) - ord(second));
'*': writeln((ord(first) - ord('0')) * (ord(second) - ord('0')));
'/': writeln((ord(first) - ord('0')) / (ord(second) - ord('0')));
end;

end.
работает только с однозначными числами, нужны двухзначные - возьми калькулятор за 20 рублей, и посчитай...

Сообщение отредактировано: Алена -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Есть у кого-нибудь калькулятор за 20 рублей???)))
а то 10 рублевый не работает... ;(


Хочу, что бы двухзначные циферки тоже работали...;(;(;(

Сообщение отредактировано: Kolyancz -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

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

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


Так нельзя разве:
var k,i,j:integer;
z:char;
s:string;
begin
clrscr;
i:=0; j:=0;
readln(s);
k:=1; while ((pos(s[k],'+-/*')=0) and (k<length(s))) do inc (k);
val(copy(s,1,k-1),i,j);
z:=s[k];
val(copy(s,k+1,255),j,k);
case z of
'+': k:=i+j;
'-': k:=i-j;
'/': k:=i div j;
'*': k:=i*j;
end;
writeln;
writeln(i,' ',z,' ',j,'=',k);
end.

?
Проверки только на корректность нужны..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


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

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






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


Гуру
*****

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

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


-Саня-
Эту тему перечитай еще раз. rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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