Гриша любит сериалы. Особенно ему нравятся те сериалы, в которых в любой момент можно узнать, на какой по счету серии он сейчас находится и сколько
в целом серий имеется в этом сериале. Обычно где-нибудь в углу экрана находится надпись, например
«10/100», которая означает, что сейчас Гриша находится на 10 серии, а всего в сериале 100 серий.
На днях Гриша начал смотреть новый сериал, но оказалось, что разработчик для вывода на экран надписи с номерами серий использовал шрифт, которого нет на Гришином компьютере. Шрифт автоматически заменился на какой-то другой, в котором не поддерживается символ
«/».
Теперь два числа, которые должны были быть разделены, слились в одно, и Гришу это невероятно
расстраивает. Он подумал о том, что можно попробовать самому угадывать место, в котором должен
стоять символ «/», но потом понял, что в некоторых случаях подходящих вариантов может быть
несколько. Например, если на экране написано «1234», это может означать как то, что он находится
на 1 уровне из 234, так и то, что он находится на 12 уровне из 34.
Ему стало интересно, а сколько всего существует подставить символ «/» в надпись
на экране так, чтобы надпись была корректной, то есть чтобы слева и справа от символа были
корректные числа без лидирующих нулей и при этом левое число не превосходило правое Грише ответить на этот вопрос.
from tkinter import *
from tkinter import messagebox as mg
n = int(input("Уведіть скільки виготовляє робітник за день"))
k = int(input("Скільки днів працяє робітник"))
if n*k < 150:
root = Tk()
root.geometry("100x100")
c = Canvas(width=100, height=100, bg='red')
c.pack()
mg.showinfo(title=None, message="Робітник не виконав норму")
root.mainloop()
else:
root = Tk()
root.geometry("100x100")
c = Canvas(width=100, height=100, bg='green')
c.pack()
mg.showinfo(title=None, message="Робітник виконав норму")
root.mainloop()
Объяснение:
Вот такая программа позволяет инвертировать нечётные биты во введённом 16-ти разрядном числе (тип word).
Если что, счёт битов я брал начиная с нуля. Поэтому, младший бит (нулевой) считается чётным. Если вдруг у вас там принято считать биты начиная с единицы, то младший будет нечётным, и тогда в строке где b := 2; надо поставить единицу вместо двух.
Также, я сделал отображение всех 16 разрядов введённого числа, и числа которое получилось после инверсии битов (то есть, число выводится в двоичном виде, начиная со старших разрядов). Это сделано для удобства проверки работы программы.
После проверки лучше удалить эти две строки (они выделены жирным шрифтом), ведь в задании не сказано выводить числа в двоичном виде.
var
a, b, n: word;
begin
write('Введите целое неотрицательное число: a= ');
readln(a);
b:=32768;for n:=15 downto 0 do begin write((a mod(b*2))div b);b:=b div 2;end;writeln();
b := 2;
for n := 0 to 7 do
begin
if (a mod (b * 2)) div b = 0
then a := a + b
else a := a - b;
b := b * 4;
end;
b:=32768;for n:=15 downto 0 do begin write((a mod(b*2))div b);b:=b div 2;end;writeln();
writeln('После инверсии нечётных битов: a= ', a);
end.