1. Калькулятор
Предлагаю внеурочный вариант.
Внимание! За написание алгоритма и указанных поправок к нему бонус.
Я использовал две процедуры
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
Добавил глобальные переменные
c,oper:char; //последняя и предпоследняя операции
rez:real; //значение результата
zap:boolean;//запятая (с ней есть ошибка, можно использовать процедуру pos() на наличие запятой — решил не исправлять, предлагаю на досуге подумать …)
1. Процедура для всех кнопок …
procedure TForm1.Button1Click(Sender: TObject);
begin
c:=(Sender as TButton).Caption[1];
case (Sender as TButton).Tag of
1: c:=’o’; // 1/x
2: c:=’p’; // ±
end;
case c of
‘,’: if zap then begin
Edit1.Text:= Edit1.Text+c;
zap:=false;
end;
‘+’,’-‘,’/’,’*’,’=’: begin
case oper of
‘+’: Edit1.Text:=Floattostr(rez+StrtoFloat(Edit1.Text));
‘-‘: Edit1.Text:=Floattostr(rez-StrtoFloat(Edit1.Text));
‘/’: Edit1.Text:=Floattostr(rez/StrtoFloat(Edit1.Text));
‘*’: Edit1.Text:=Floattostr(rez*StrtoFloat(Edit1.Text));
end;
oper:=c;
rez:=StrtoFloat(Edit1.Text);
if c<>’=’ then Edit1.Text:=’0′;
end;
‘o’: begin Edit1.Text:=Floattostr(1/Strtofloat(Edit1.Text)); end;
‘C’: FormCreate(Sender);
‘%’: begin Edit1.Text:=Floattostr(Strtofloat(Edit1.Text)/100); end;
‘p’: begin Edit1.Text:=Floattostr(Strtofloat(Edit1.Text)*(-1)); end;
‘<‘: begin Edit1.Text:=copy(Edit1.Text,1,length(Edit1.Text)-1); end;
else begin
Edit1.Text:= Edit1.Text+c;
Edit1.Text:=Floattostr(Strtofloat(Edit1.Text));
end
end;
end;
2. Процедура создания формы, подготовка к работе
procedure TForm1.FormCreate(Sender: TObject);
begin
oper:=’ ‘;
rez:=0;
zap:=true;
Edit1.Text:=’0’;
end;
Как сделать калькулятор в кумире
Как вы знаете, компьютеры были изобретены для того, чтобы ускорить вычисления. Посмотрим, как решать простую вычислительную задачу в системе КуМир.
Задача. Сколько километров проехал автомобиль за 2 часа, если его средняя скорость равна 60 км/ч?
Конечно, одну такую задачу несложно решить устно или на калькуляторе, но для быстрого решения большого количества задач одного типа с разными исходными данными лучше разработать компьютерную программу. Для этого алгоритм решения нужно записать «в буквах». Обозначим время через t, а скорость — через v. Результат — пройденное расстояние — обозначим буквой S. Программа должна вычислить результат по исходным данным (рис. 6.14).
Рис. 6.14
Алгоритм решения задачи можно записать так:
Вход: v, t.
Шаг 1. S := v • t..
Результат: S..
Здесь нет ни одной команды перехода, которая направляет исполнителя на другой шаг. Поэтому порядок действий всегда одинаковый, какие бы исходные данные мы ни вводили.
Теперь остаётся оформить программу так, чтобы её можно было выполнить в системе КуМир.
Она может выглядеть, например, так:
алг Путь
вещ v, t, S
вывод «Введите скорость: «
вывод «Введите время: «
вывод «Расстояние: «, S
Обратите внимание, что здесь нет никаких чисел, программа решает задачу «в буквах». Буквами (точнее, именами, которые могут состоять из нескольких сиимволов) обозначены изменяемые величины — переменные.
объявляет переменные, т. е. сообщает компьютеру, что мы будем использовать переменные с именами v, t и s. Все они — вещественные, т. е. могут принимать не только целые, но и дробные значения, об этом говорит слово вещ в начале строки.
Команда вывод выводит данные в поле ввода и вывода программы (в нижней части окна). Это может быть просто строка символов, например
вывод «Введите скорость: «
или список того, что нужно вывести:
вывод «Расстояние: «, S
Здесь в списке два элемента: текст «Расстояние» и значение переменной величины s, они разделены запятой.
С помощью команды ввод пользователь (человек, работающий с программой) вводит исходные данные — скорость и время. Например, после вывода сообщения «Введите скорость: » компьютер выполняет команду
Она означает «ждать, когда пользователь введёт число, присвоить это число переменной v». В поле ввода и вывода мигает курсор — это означает, что нужно ввести число и нажать клавишу Enter.
Следующая страница Выводы. Интеллект-карта
Cкачать материалы урока
Простейший калькулятор
Написать программу, которая будет складывать, вычитать, умножать или делить два числа. Числа и знак операции вводятся пользователем. После выполнения вычисления программа не должна завершаться, а должна запрашивать новые данные для вычислений. Завершение программы должно выполняться при вводе символа ‘0’ в качестве знака операции. Если пользователь вводит неверный знак (не ‘0’, ‘+’, ‘-‘, ‘*’, ‘/’), то программа должна сообщать ему об ошибке и снова запрашивать знак операции. Также сообщать пользователю о невозможности деления на ноль, если он ввел 0 в качестве делителя.
Запустить бесконечный цикл.
- Запросить ввод знака операции.
- Если был введен ‘0’, то прервать цикл операцией break.
- Если был введен один из знаков арифметических операций, то в зависимости от того, какой знак был введен, выполнить соответствующее ему арифметическое действие. При этом при делении проверить не был ли введен ноль. Если это так, то вывести сообщение, иначе выполнить деление.
- Иначе сообщить о неверно введенном знаке.
Pascal
простой калькулятор на паскаль
Язык Си
При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат «%*c».
Python
простой калькулятор на python(питон)
КуМир
Basic-256
Нет оператора break, оператора выбора case.
Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.
Обнаруживается какой-то глюк «Деление на ноль», когда его не должно быть.
- Total 9
- 0
- 0
- 0
- 9
простой калькулятор на паскаль
var
x,y,z: real;
sign: char;
begin
while True do begin
write(‘sign: ‘); readln(sign);
if sign = ‘0’ then break;
if sign in [‘+’,’-‘,’*’,’/’] then begin
write(‘x=’); readln(x);
write(‘y=’); readln(y);
case sign of
‘+’: begin z := x + y; writeln(z:5:2) end;
‘-‘: begin z := x — y; writeln(z:5:2); end;
‘*’: begin z := x * y; writeln(z:5:2); end;
‘/’: if y 0 then begin
z := x / y;
writeln(z:5:2)
end
else
writeln(‘Division by zero!’);
end;
end
else writeln(‘Bad sign!’)
end;
end.
sign: 8
Bad sign!
sign: 4
Bad sign!
sign: —
x=5
y=6
-1.00
sign: +
x=4.45
y=10.66
15.11
sign: *
x=-3.4
y=-67
227.80
sign: /
x=-78
y=123
-0.63
sign: /
x=9
y=0
Division by zero!
sign: i
Bad sign!
sign: 0
Знак: 7
Неверно указан знак операции
Знак: 3
Неверно указан знак операции
Знак: +
x=4
y=5
9.00
Знак: /
x=0
y=0
Деление на ноль!
Знак: —
x=-34.4
y=-2
-32.40
Знак: 0
При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат «%*c».
простой калькулятор на python(питон)
Ноль в качестве знака операции завершит работу программы
Знак (+,-,*,/): h
Неверный знак операции!
Знак (+,-,*,/): +
x=78.456
y=23.567
102.02
Знак (+,-,*,/): —
x=3.44
y=10.25
-6.81
Знак (+,-,*,/): *
x=0.012
y=-2.15
-0.03
Знак (+,-,*,/): /
x=5
y=0
Деление на ноль!
Знак (+,-,*,/): /
x=-2.3
y=5
-0.46
Знак (+,-,*,/): 0
алг простейший калькулятор
нач
вещ x,y
сим s
нц пока да
вывод «Знак: »
ввод s
если s=’0′ то выход все
если s=’+’ или s=’-‘ или s=’*’ или s=’/’ то
вывод «x y Деление на ноль!», нс
иначе вывод x/y, нс
все
все
иначе
вывод «Неверный знак операции», нс
все
кц
кон
Знак: +
x=5.67
y=-4
1.67
Знак: /
x=5
y=0
Деление на ноль!
Знак: )
Неверный знак операции
Знак: /
x=3
y=10
0.3
Знак: 0
a = 1
while a=1
input «знак: «, s$
if s$ = «0» then
a=0
else
if s$ = «+» or s$ = «-» or s$ = «*» or s$ = «/» then
input «x: «, x
input «y: «, y
if s$ = «+» then print x+y
if s$ = «-» then print x-y
if s$ = «*» then print x*y
if s$ = «/» and y 0 then
print x/y
else
print «Деление на ноль»
endif
else
print «Знак может быть +, -, *, /»
endif
endif
endwhile
знак: /
x: 9
y: 0
Деление на ноль
знак: —
x: 9
y: -8
17
Деление на ноль
знак: /
x: 9
y: -8
-1.125
знак: 0
Нет оператора break, оператора выбора case.
Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.
Обнаруживается какой-то глюк «Деление на ноль», когда его не должно быть.
Простейший калькулятор
Написать программу, которая будет складывать, вычитать, умножать или делить два числа. Числа и знак операции вводятся пользователем. После выполнения вычисления программа не должна завершаться, а должна запрашивать новые данные для вычислений. Завершение программы должно выполняться при вводе символа ‘0’ в качестве знака операции. Если пользователь вводит неверный знак (не ‘0’, ‘+’, ‘-‘, ‘*’, ‘/’), то программа должна сообщать ему об ошибке и снова запрашивать знак операции. Также сообщать пользователю о невозможности деления на ноль, если он ввел 0 в качестве делителя.
Запустить бесконечный цикл.
- Запросить ввод знака операции.
- Если был введен ‘0’, то прервать цикл операцией break.
- Если был введен один из знаков арифметических операций, то в зависимости от того, какой знак был введен, выполнить соответствующее ему арифметическое действие. При этом при делении проверить не был ли введен ноль. Если это так, то вывести сообщение, иначе выполнить деление.
- Иначе сообщить о неверно введенном знаке.
Pascal
простой калькулятор на паскаль
Язык Си
При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат «%*c».
Python
простой калькулятор на python(питон)
КуМир
Basic-256
Нет оператора break, оператора выбора case.
Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.
Обнаруживается какой-то глюк «Деление на ноль», когда его не должно быть.
простой калькулятор на паскаль
var
x,y,z: real;
sign: char;
begin
while True do begin
write(‘sign: ‘); readln(sign);
if sign = ‘0’ then break;
if sign in [‘+’,’-‘,’*’,’/’] then begin
write(‘x=’); readln(x);
write(‘y=’); readln(y);
case sign of
‘+’: begin z := x + y; writeln(z:5:2) end;
‘-‘: begin z := x — y; writeln(z:5:2); end;
‘*’: begin z := x * y; writeln(z:5:2); end;
‘/’: if y 0 then begin
z := x / y;
writeln(z:5:2)
end
else
writeln(‘Division by zero!’);
end;
end
else writeln(‘Bad sign!’)
end;
end.
sign: 8
Bad sign!
sign: 4
Bad sign!
sign: —
x=5
y=6
-1.00
sign: +
x=4.45
y=10.66
15.11
sign: *
x=-3.4
y=-67
227.80
sign: /
x=-78
y=123
-0.63
sign: /
x=9
y=0
Division by zero!
sign: i
Bad sign!
sign: 0
main() <
float x,y;
char sign=’+’;
while (sign != ‘0’) <
printf(«Знак: «);
scanf(«%c%*c», &sign);
if (sign == ‘0’) < break; >
if (sign == ‘+’ || sign == ‘-‘ || sign == ‘*’ || sign == ‘/’) <
printf(«x %f%*c», &x);
printf(«y %f%*c», &y);
switch (sign) <
case ‘+’:
printf(«%.2f\n», x+y);
break;
case ‘-‘:
printf(«%.2f\n», x-y);
break;
case ‘*’:
printf(«%.2f\n», x*y);
break;
case ‘/’:
if (y != 0) printf(«%.2f\n», x/y);
else printf(«Деление на ноль!\n»);
>
>
else printf(«Неверно указан знак операции\n»);
>
>
Знак: 7
Неверно указан знак операции
Знак: 3
Неверно указан знак операции
Знак: +
x=4
y=5
9.00
Знак: /
x=0
y=0
Деление на ноль!
Знак: —
x=-34.4
y=-2
-32.40
Знак: 0
При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат «%*c».
простой калькулятор на python(питон)
print(«Ноль в качестве знака операции завершит работу программы»)
while True:
s = input(«Знак (+,-,*,/): «)
if s == ‘0’: break
if s in (‘+’,’-‘,’*’,’/’):
x = float(input(«x y %.2f» % (x+y))
elif s == ‘-‘:
print(«%.2f» % (x-y))
elif s == ‘*’:
print(«%.2f» % (x*y))
elif s == ‘/’:
if y != 0:
print(«%.2f» % (x/y))
else:
print(«Деление на ноль!»)
else:
print(«Неверный знак операции!»)
Ноль в качестве знака операции завершит работу программы
Знак (+,-,*,/): h
Неверный знак операции!
Знак (+,-,*,/): +
x=78.456
y=23.567
102.02
Знак (+,-,*,/): —
x=3.44
y=10.25
-6.81
Знак (+,-,*,/): *
x=0.012
y=-2.15
-0.03
Знак (+,-,*,/): /
x=5
y=0
Деление на ноль!
Знак (+,-,*,/): /
x=-2.3
y=5
-0.46
Знак (+,-,*,/): 0
алг простейший калькулятор
нач
вещ x,y
сим s
нц пока да
вывод «Знак: »
ввод s
если s=’0′ то выход все
если s=’+’ или s=’-‘ или s=’*’ или s=’/’ то
вывод «x y Деление на ноль!», нс
иначе вывод x/y, нс
все
все
иначе
вывод «Неверный знак операции», нс
все
кц
кон
Знак: +
x=5.67
y=-4
1.67
Знак: /
x=5
y=0
Деление на ноль!
Знак: )
Неверный знак операции
Знак: /
x=3
y=10
0.3
Знак: 0
a = 1
while a=1
input «знак: «, s$
if s$ = «0» then
a=0
else
if s$ = «+» or s$ = «-» or s$ = «*» or s$ = «/» then
input «x: «, x
input «y: «, y
if s$ = «+» then print x+y
if s$ = «-» then print x-y
if s$ = «*» then print x*y
if s$ = «/» and y 0 then
print x/y
else
print «Деление на ноль»
endif
else
print «Знак может быть +, -, *, /»
endif
endif
endwhile
знак: /
x: 9
y: 0
Деление на ноль
знак: —
x: 9
y: -8
17
Деление на ноль
знак: /
x: 9
y: -8
-1.125
знак: 0
Нет оператора break, оператора выбора case.
Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.
Обнаруживается какой-то глюк «Деление на ноль», когда его не должно быть.
Как сделать калькулятор в кумире
Следующая страница Выводы. Интеллект-карта
Cкачать материалы урока
- Запросить ввод знака операции.
- Если был введен ‘0’, то прервать цикл операцией break.
- Если был введен один из знаков арифметических операций, то в зависимости от того, какой знак был введен, выполнить соответствующее ему арифметическое действие. При этом при делении проверить не был ли введен ноль. Если это так, то вывести сообщение, иначе выполнить деление.
- Иначе сообщить о неверно введенном знаке.
Pascal
Python
Basic-256
- Total 9
- 0
- 0
- 0
- 9
var
x,y,z: real;
sign: char;
begin
while True do begin
write(‘sign: ‘); readln(sign);
if sign = ‘0’ then break;
if sign in [‘+’,’-‘,’*’,’/’] then begin
write(‘x=’); readln(x);
write(‘y=’); readln(y);
case sign of
‘+’: begin z := x + y; writeln(z:5:2) end;
‘-‘: begin z := x — y; writeln(z:5:2); end;
‘*’: begin z := x * y; writeln(z:5:2); end;
‘/’: if y 0 then begin
z := x / y;
writeln(z:5:2)
end
else
writeln(‘Division by zero!’);
end;
end
else writeln(‘Bad sign!’)
end;
end.
sign: 8
Bad sign!
sign: 4
Bad sign!
sign: —
x=5
y=6
-1.00
sign: +
x=4.45
y=10.66
15.11
sign: *
x=-3.4
y=-67
227.80
sign: /
x=-78
y=123
-0.63
sign: /
x=9
y=0
Division by zero!
sign: i
Bad sign!
sign: 0