Помощь - Поиск - Пользователи - Календарь
Полная версия: Калькулятор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Mnogosisa_pravda_ona
Как так сделать, чтобы выбор цифры осуществлялся нажатием клавиши "Enter" столько раз сколько одинаковых цифр надо выбрать.Например, выбрал кнопку "1" и нажал "Enter" три раза, должно получится 111. Я думаю вы меня поняли, что я хочу узнать?
Unconnected
А как выбирается цифра?
Mnogosisa_pravda_ona
с помощью стрелок.
Вот так выглядит калькулятор
Unconnected
Т.е. у тебя вообще только интерфейс пока что? Нажатия на цифры вообще не обрабатываются?
Mnogosisa_pravda_ona
ну операции "+","-","/","*" написаны.Вот теперь с цифрами вожусь

Добавлено через 8 мин.
Вот задать кол-во цифр я могу,а вот чтоб решал уже пользователь, не получается.
Unconnected
Ну, как вариант, можно завести двумерный массив, в него "перенести" весь твой интерфейс завести две переменные для хранения координат,и, при нажатии, например, стрелки вправо, прибавлять к переменной, отвечающей за столбцы, единицу. А при нажатии Enter узнавать, чему равны координаты, и брать из матрицы цифру с такими координатами.
Mnogosisa_pravda_ona
Я кстате напутал не стрелками прибавлять а "Enter'ом", А можешь пример привести? а то у меня с представлением плохо
Unconnected
Для начала покажи то, что ты уже сделал, а то я так и не понял твоего интерфейса...
Mnogosisa_pravda_ona
Короче я хочу сделать калькулятор как windows'e только вместо мышкой, управлять стрелками и выбирать Enter'om.
Вот код
volvo
Mnogosisa_pravda_ona, все довольно просто, свой цикл while true do меняешь вот на этот:
count := 0;
while true do begin
ch := #1;
while (ch <> #13) and (ch <> #0) do ch := readkey;
if ch = #0 then ch := readkey;
case ch of
#72: kn:=kn-1;
#80: kn:=kn+1;
#75: kn:=kn-1;
#77: kn:=kn+1;
#13:
begin
case kn of
1: begin plus; textcolor(red); lett := '+'; end;
2: begin minus; textcolor(red); lett := '-'; end;
3: begin multiply; textcolor(red); lett := '*'; end;
4: begin separate; textcolor(red); lett := '/'; end;
5, 6, 7, 9, 10, 11, 12, 13, 15, 16:
begin
for i := 0 to 9 do
if digits[i] = kn then a := i;
textcolor(green);
lett := chr(a + ord('0'));
end;


18: exit;
end;
gotoxy(8+count,4); write(lett); inc(count);
end;

end;
if kn=0 then kn:=18;
if kn=19 then kn:=1;
buttoms(kn);
end;
, и добавляешь вот такие константы/переменные:
const
digits: array[0 .. 9] of integer = (
11, 5, 9, 12, 15, 6, 10, 13, 16, 7
);
var
count: integer;
lett: char;

Попробуй, посмотри что получится.

А вообще, твою программу можно сократить наполовину...
Mnogosisa_pravda_ona
Не понимаю.Считает что неправильно вызвана процедура.
volvo
Я тоже не понимаю, что там у тебя происходит. Вот этот файл прекрасно компилируется и работает:
Нажмите для просмотра прикрепленного файла
Mnogosisa_pravda_ona
Спасибо,теперь итог буду делать.
Mnogosisa_pravda_ona
А вот ещё вопрос появился.Совсем не подумал как вводить второе число?
Mnogosisa_pravda_ona
Никто не поможет со вторым числом?
volvo
А что со вторым числом? Точно так же, как и первое... Только введи доп. переменную, скажем, isSecond: Boolean, в начале присвой ее False, и при нажатии любой из НЕцифровых кнопок меняй на True. Вот тебе и будет индикатор, какое число считывается в настоящий момент, если False - то первое, если True - то второе...

Можно сделать эту переменную не Boolean, а Byte, тогда сможешь вводить таким же образом и третье, и четвертое и т.д. числа...
Mnogosisa_pravda_ona
А т.е. надо ко второму числу присвоить другую переменную(напрмер integer) и завести второй массив для ввода повторяющихся цифр?А ещё как можно ограничить ввод цифр в пределах моей нарисованной строки?
volvo
Цитата
т.е. надо ко второму числу присвоить другую переменную(напрмер integer) и завести второй массив для ввода повторяющихся цифр?
Я этого не говорил... Вот то, что касается ввода двух чисел:
Нажмите для просмотра прикрепленного файла

(после ввода первого числа жмешь знак, операции, потом второе число, потом "="... А вот потом - сюрприз! Можешь вводить еще один знак, и еще одно число, и так далее, пока не надоест, и не выйдешь из программы. Только еще раз повторяю: все действия - через знак "=" !!!)

Как ограничить ввод цифр - попробуй подумать сам...
Mnogosisa_pravda_ona
Ну вот действительно сюрприз! smile.gif Там же inc'и. Я даже без понятия как ограничить...
TheDimaT
program Calkulytor;
uses crt;
var
a, b, c, d: real;

begin
writeln('----------------------------------КАЛЬКУЛЯТОР!----------------------------------');
writeln('Выбирете действие');
writeln('1-Сложение (+)');
writeln('2-Вычитание (-)');
writeln('3-Умножение (*)');
writeln('4-Деление (/)');
writeln('5-Квадрат числа (a2)');
writeln('6-Куб числа (a3)');
writeln('7-Корень числа (^)');
readln(b);
if b = 2 then
begin
writeln('Уменьшаемое=');
readln(a);
writeln('Вычитаемое=');
readln©;
d := a - c;
writeln('Разница чисел равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
if b = 1 then
begin
writeln('1-ое Слагаемое=');
readln(a);
writeln('2-ое Слагаемое=');
readln©;
d := a + c;
writeln('Сумма чисел равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
if b = 3 then
begin
writeln('1-ый Множитель=');
readln(a);
writeln('2-ой Множитель=');
readln©;
d := a * c;
writeln('Произвидение чисел равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
if b = 4 then
begin
writeln('Делимое=');
readln(a);
writeln('Делитель=');
readln©;
d := a / c;
writeln('Частное чисел равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
if b=5 then
begin
writeln('Число А=');
readln(a);
d:= a * a;
writeln('Число равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
if b=6 then
begin
writeln('Число А=');
readln(a);
d:= a * a * a;
writeln('Число равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
if b=7 then
begin
writeln('Число А=');
readln(a);
d:=sqrt(a);
writeln('Число равно: ', d);
writeln('-------------------------------------КОНЕЦ!-------------------------------------');
end;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.