from tkinter import *
class Main(Frame):
def __init__(self, root):
super(Main, self).__init__(root)
self.build()
def build(self):
self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)
btns = [
"C", "DEL", "*", "=",
"1", "2", "3", "/",
"4", "5", "6", "+",
"7", "8", "9", "-",
"(", "0", ")", "X^2"
]
x = 10
y = 140
for bt in btns:
com = lambda x=bt: self.logicalc(x)
Button(text=bt, bg="#FFF",
font=("Times New Roman", 15),
command=com).place(x=x, y=y,
width=115,
height=79)
x += 117
if x > 400:
x = 10
y += 81
def logicalc(self, operation):
if operation == "C":
self.formula = ""
elif operation == "DEL":
self.formula = self.formula[0:-1]
elif operation == "X^2":
self.formula = str((eval(self.formula))**2)
elif operation == "=":
self.formula = str(eval(self.formula))
else:
if self.formula == "0":
self.formula = ""
self.formula += operation
self.update()
def update(self):
if self.formula == "":
self.formula = "0"
self.lbl.configure(text=self.formula)
if __name__ == '__main__':
root = Tk()
root["bg"] = "#000"
root.geometry("485x550+200+200")
root.title("Калькулятор")
root.resizable(False, False)
app = Main(root)
app.pack()
root.mainloop()
Объяснение:
1.Создаём окно 485 на 550. Размеры не важны, мне понравились такие. Так же указываем, что окно не будет изменяться.
class Main(Frame):
def __init__(self, root):
super(Main, self).__init__(root)
self.build()
def build(self):
pass
def logicalc(self, operation):
pass
def update():
pass
if __name__ == '__main__':
root = Tk()
root["bg"] = "#000"
root.geometry("485x550+200+200")
root.title("Калькулятор")
root.resizable(False, False)
app = Main(root)
app.pack()
root.mainloop()
2.Делаем кнопочки
В методе build создаём такой список:
btns = [
"C", "DEL", "*", "=",
"1", "2", "3", "/",
"4", "5", "6", "+",
"7", "8", "9", "-",
"+/-", "0", "%", "X^2"
]
Он отвечает за все кнопки, отображающиеся у нас в окне.
3.Мы создали список, теперь проходимся циклом и отображаем эти кнопки. Для этого в том же методе пишем следующее:
x = 10
y = 140
for bt in btns:
com = lambda x=bt: self.logicalc(x)
Button(text=bt, bg="#FFF",
font=("Times New Roman", 15),
command=com).place(x=x, y=y,
width=115,
height=79)
x += 117
if x > 400:
x = 10
y += 81
4.Замечательно, у нас есть кнопочки. Добавляем надпись с выводом результата. Я хочу что бы текст был слева, следовательно, атрибутов выравнивания текста писать не нужно.
self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"),
bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)
5.Пишем логику
def logicalc(self, operation):
if operation == "C":
self.formula = ""
elif operation == "DEL":
self.formula = self.formula[0:-1]
elif operation == "X^2":
self.formula = str((eval(self.formula))**2)
elif operation == "=":
self.formula = str(eval(self.formula))
else:
if self.formula == "0":
self.formula = ""
self.formula += operation
self.update()
def update(self):
if self.formula == "":
self.formula = "0"
self.lbl.configure(text=self.formula)
Так, как у нас нет ввода с клавиатуры, мы можем позволить себе сделать так, просто проверить на спец. кнопки (C, DEL, =) и в остальных случаях просто добавить это к формуле.
за внимание!)
type
Matrix=array[,] of integer;
procedure MatPrint(a:Matrix; w:integer);
begin
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to Length(a,1)-1 do Write(a[i,j]:w);
Writeln
end
end;
procedure MatProd(a,b,c:Matrix);
begin
for var i:=0 to Length(a,0)-1 do
for var j:=0 to Length(b,1)-1 do begin
var s:=0;
for var k:=0 to Length(a,1)-1 do s+=a[i,k]*b[k,j];
c[i,j]:=s
end
end;
begin
var a,b,c:Matrix;
var m,n,p:integer;
Write('Число строк матрицы А: '); Read(n);
Write('Число столбцов матрицы А и строк матрицы В: '); Read(m);
Write('Число столбцов матрицы В: '); Read(p);
a:=MatrixRandom(n,m,-50,50);
Writeln('Матрица А'); MatPrint(a,4);
b:=MatrixRandom(m,p,-50,50);
Writeln('Матрица B'); MatPrint(b,4);
SetLength(c,n,p);
Writeln('Матрица C');
MatProd(a,b,c);
MatPrint(c,7)
end.
Тестовое решение:
Число строк матрицы А: 4
Число столбцов матрицы А и строк матрицы В: 8
Число столбцов матрицы В: 7
Матрица А
33 -30 20 7 1 5 10 -47
-6 -1 -22 6 -33 41 4 -1
-10 -45 -16 6 -13 9 1 37
5 37 15 -48 42 -19 1 26
Матрица B
-19 42 -14 -36 38 -18 -41
-24 -20 26 -50 -36 -5 -32
-1 5 -43 15 11 49 0
-44 -35 -27 20 33 -49 14
40 7 -38 -37 48 2 -26
-24 5 -11 12 -43 47 -42
-24 11 8 -13 -9 -13 -12
-41 46 -24 20 3 -25 -25
Матрица C
1372 -179 -1176 -295 2387 1475 524
-2463 -580 1701 1697 -3622 575 -525
-1255 1857 -989 3806 353 -1214 957
2160 2631 -460 -4040 341 1340 -3017