Задача вообщем то не сложная, только не могу придумать как написать одну штуку...
Вводится число 2 На экране число 2
Вводится знак + На экране число 2
Вводится число 5 На экране число 5
Нажимается Enter На экране число 7...
Вот так вот... У кого-нибудь есть идеи???
volvo
2.03.2007 16:21
2 переменные (вещественные лучше всего, чтобы не было проблем, скажем, с делением) для хранения операндов, и одна (символьная) для хранения операции... Дальше -
readln(x1); { <--- читаем первое число } readln(op); { <--- берем ЗНАК операции } readln(x2); { <--- второе число }
case op of '+': writeln(x1 + x2); '-' : writeln(x1 - x2); { и так далее } end;
T i m e
2.03.2007 18:42
Ну если тебе надо только с плюсом, то код можно такой:
Код
Program Vremya_02_03_07; var x,y:byte; begin readln(x); readln; readln(y); writeln(x+y); readln; end.
volvo
2.03.2007 18:59
Цитата(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"... Проверяй то, что выкладываешь !!!
T i m e
2.03.2007 19:14
Да... там с readln всё прокатывало, я проверял... Потом чё то взбрендело на read исправить... зачем не заню даже... Минус 1 так минус 1 - мне не жалко раз заслужил... Ладно... в общем я отредактировал... с readln там всё работает.
Kolyancz
5.03.2007 20:13
Ребят вы не поняли... Я не знаю как описать опирацию считывания кнопки с цифрой... Мне нужно что бы после нажатия 2 (двойки) сразу считывался следующий знак(+,-,*,/) , а не 2 (двойка), потом Enter, потом считывание знака... Возьмите обычный калькулятор за 10 рублей и посмотрите принцип действия...
Если будут идеи, пишите... Спасибо...
Алена
5.03.2007 21:02
Это?
uses crt; var first, second, ch: char;
begin first := readkey; write(first); ch := readkey; write(ch); second := readkey; write(second);
работает только с однозначными числами, нужны двухзначные - возьми калькулятор за 20 рублей, и посчитай...
Kolyancz
5.03.2007 21:10
Есть у кого-нибудь калькулятор за 20 рублей???))) а то 10 рублевый не работает... ;(
Хочу, что бы двухзначные циферки тоже работали...;(;(;(
Malice
5.03.2007 23:05
Так нельзя разве:
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.
? Проверки только на корректность нужны..
TarasBer
5.03.2007 23:07
Такой вариант (калькулятор за 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 (логарифм одного по основанию другого). Для выхода из программы введите вторым числом ноль.
-Саня-
28.09.2007 21:35
народ хелп плиз мне для коледжа калкулятор нужен дз задали помогите плиз
Ozzя
29.09.2007 11:14
-Саня- Эту тему перечитай еще раз.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.