6. сортировка кубиков ваня придумал новый алгоритм сортировки и сейчас тренируется на кубиках с цифрами, чтобы понять, как он работает. перед ним на столе лежат кубики с числами от 1 до 10 (на каждом кубике записано одно число), выложенные в таком порядке: 8 9 10 4 5 6 1 7 2 3 за одну операцию ваня берет несколько рядом стоящих кубиков как одну конструкцию, переворачивает и кладет на прежнее место. например, если бы кубики лежали в таком порядке: 1 2 3 4 5 6 7 8 9 10, а ваня взял бы кубики начиная с кубика с цифрой 4 и заканчивая кубиком с цифрой 9 и перевернул бы, то получилась бы такая последовательность: 1 2 3 9 8 7 6 5 4 10. то, что какие-то кубики после выполнения подобных операций окажутся лежащими вверх ногами, ваню не смущает. кроме того, ваня различает кубик с цифрой 6 и кубик с цифрой 9 (они разного цвета, поэтому невозможно одну цифру получить из другой при перевороте). ване понять, какое наименьшее количество таких операций потребуется, чтобы кубики стали лежать в порядке возрастания: 1 2 3 4 5 6 7 8 9 10. комментарий. если бы у него было всего 4 кубика и они лежали в таком порядке: 4 1 3 2, то наименьшее количество операций было бы равно двум: сначала переворачиваем кусок из первых двух кубиков слева, получаем 1 4 3 2, затем переворачиваем кусок из трех кубиков справа, получаем 1 2 3 4.
У мові програмування Object Pascal є кілька команд, які можуть реалізувати цикл. Одна з них - команда циклу з лічильником. Її доцільно використовувати в тих випадках, коли кількість повторень команд тіла циклу відома ще до початку виконання команди циклу. Загальний вигляд цієї команди такий:
for <ім’я змінної> := <вираз1> to <вираз2> do begin <команди тіла циклу> end;
Рядок for <ім’я змінної> := <вираз1> to <вираз2> do (англ. for - для, to - до, do - робити, виконувати) називають рядком заголовка команди циклу з лічильником. Змінну в рядку заголовка команди циклу з лічильником, що стоїть перед знаком присвоювання, називають лічильником циклу. Лічильник циклу, виразі і вираз2 мають набувати тільки цілих значень. Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.
Виконується команда циклу з лічильником так:
1) Надати лічильнику циклу і значення виразі.
2) Обчислити значення логічного виразу і J вираз2.
3) Якщо значення логічного виразу true, то виконати команди тіла циклу і перейти до виконання команди 4, якщо false - перейти до виконання команди, наступної за командою циклу.
4) Збільшити значення лічильника циклу на 1.
5) Перейти до виконання команди 2.
Для ілюстрації виконання команди циклу з лічильником розглянемо фрагмент проекту, в якому обчислюється сума 12 + 22 + 32 + 42.
var s, і: integer; begin s := 0;
for і := 1 to 4 do begin
s := s + i*i; end;
Labell.Caption := IntToStr (s); end;
Виконаємо цей фрагмент програми.
Команда Результат виконання
s := 0 s = 0
i := 1 i = 1
i <= 4 (1 <= 4) = true
s := s + i*i s = 0 + 1*1 = 1
i := i + 1 i = 2
i <= 4 (2 <= 4) = true
s := s + i*i s = 1 + 2*2 = 5
i := i + 1 i = 3
i <= 4 (3 <= 4) = true
s := s + i*i s = 5 + 3*3 = 14
i := i + 1 i = 4
i <= 4 (4 <= 4) = true
s := s + i*i s = 14 + 4*4 = 30
i := i + 1 i = 5
i <= 4 (5 <= 4) = false
Labell.Caption := IntToStr (s) Labell.Caption = 30
Звертаємо вашу увагу, що після закінчення виконання команди циклу з лічильником значення лічильника циклу (змінної і) на 1 більше, ніж значення вираз2, і це значення, за потреби, можна використовувати в наступних командах.
Існує різновид команди циклу з лічильником, у якому лічильник не збільшується на 1, а зменшується на 1:
For <ім’я змінної> := <вираз1> downto <вираз2> do begin
<команди тіла циклу> end; (англ. down to - униз до).
Цей цикл продовжує виконуватися, якщо значення лічильника циклу більше або дорівнює (не менше) значенню вираз2.
Загальний вигляд команди циклу з лічильником такий:
for <ім’я змінної> := <вираз1> to <вираз2> do begin
<команди тіла циклу> end;
Рядок for <ім’я змінної> := <вираз1> to <вираз2> do називають рядком заголовка команди циклу з лічильником. Змінну в рядку заголовка команди циклу з лічильником, що стоїть перед знаком присвоювання, називають лічильником циклу. Лічильник циклу, виразі і вираз2 мають набувати тільки цілих значень.
Составим программу:
for x in range(2):
for y in range(2):
for w in range(2):
for z in range(2):
if (((x<=y) and (y<=w))or(z==(x or y)))==False:
print(x,y,w,z)
Нам выдаются следующие значения:
х у w z
0 1 0 0 (a)
1 0 0 0 (b)
1 0 1 0 (c)
1 1 0 0 (d)
Мы видим,что одна из строчек не подходит под нашу таблицу. Это либо строчка (а), либо строчка (b),т.к. обе строчки с двумя единицами входят в таблицу.
Рассматривая таблицу видно,что в строчках с двумя единицами есть переменная(последний столбец) которая равна 1, и это х
В первом столбце у и тогда строчка (b) - лишняя
Делаем выводы,что второй столбец - w,а третий - z
ответ: y,w,z,x