В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
рксский
рксский
10.10.2022 00:13 •  Информатика

6сынып бжб информатика

Показать ответ
Ответ:
RolW
RolW
30.01.2021 22:37
Если в нашем распоряжении имеется современная версия PascalABC.Net 3.2, то есть минимум два решить такую задачу. Массив мы будем заполнять случайными числами из интервала [1;98].

Первый использовать имеющуюся в этой версии паскаля возможность находить максимумы и минимумы встроенными в язык средствами. Это очень быстро программируется и обычно страхyет от возможных ошибок при написании более детальных программ.

// PascalABC.NET 3.2, сборка 1353 от 27.11.2016
// Внимание! Если программа не работает, обновите версию!

begin
  var a:=ArrRandom(30,1,98); a.Println;
  Writeln('D=',a.Where(x->x.IsEven).Max-a.Where(x->x.IsOdd).Max)
end.

Пример
29 52 58 75 13 77 63 13 17 6 67 17 53 51 14 93 83 30 81 17 93 58 13 71 78 96 42 66 4 91
D=3

Второй не привязан к упомянутой выше версии языка, т.е. может быть использован в школах, исповедующих "доисторический стиль программирования" ))) Естественно, он длиннее и можно будет сравнить количество строк кода. Алгоритм основан на последовательном переборе элементов массива и одновременном получении максимума среди четных и нечетных его элементов.

const
  n=30;
var
  a:array[1..30] of integer;
  i,a1max,a2max:integer;
begin
  Randomize;
  a1max:=0; a2max:=0;
  for i:=1 to n do begin
    a[i]:=Random(98)+1;
    Write(a[i],' ');
    if a[i] mod 2 <> 0 then
      begin if a1max<a[i] then a1max:=a[i] end
    else
      if a2max<a[i] then a2max:=a[i]
    end;
  Writeln;
  Writeln('D=',a2max-a1max)
end.

Замечу, что данный вариант программы содержит фрагмент, в котором школьники (да и не только школьники) часто делают ошибку.
if a[i] mod 2 <> 0 then
  begin if a1max<a[i] then a1max:=a[i] end
else
  if a2max<a[i] then a2max:=a[i]
Выделенные мной begin и end на первый взгляд не нужны. Но в этом-то и ошибка!
По правилам языка паскаль когда внутри одного if встречается другой if и хотя бы один из них неполный, т.е. не содержит else, последний else относится к самому последнему из if, который без его будет неполным.
Запутанно? Поясню на нашем фрагменте.
Его без этих begin ... end можно понимать так:

if a[i] mod 2 <> 0 then
  if a1max<a[i] then a1max:=a[i]
else
  if a2max<a[i] then a2max:=a[i]

Но можно и так:

if a[i] mod 2 <> 0 then
  if a1max<a[i] then a1max:=a[i]
  else
     if a2max<a[i] then a2max:=a[i]

И паскаль, увы, понимает как раз по последнему варианту. Посему как раз begin ... end решают эту проблему. Но... встречается она не очень часто и о ней быстро забывают. А потом нарываютcя и не могут понять причины.

Что ж, выбор как решать - за вами!
0,0(0 оценок)
Ответ:
ikurilo
ikurilo
11.05.2022 01:26

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, =) и в остальных случаях просто добавить это к формуле.

за внимание!)

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота