Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Alexander Borzunov
Описание декоратора для автоматической оптимизации алгоритмов с помощью быстрого возведения матриц в степень в Python.
Смотрите подробнее:
GitHub: https://github.com/borzunov/cpmoptimize
Хабрахабр: http://habrahabr.ru/post/236689/
Python Package Index: https://pypi.python.org/pypi/cpmoptimize
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Alexander Borzunov
Описание декоратора для автоматической оптимизации алгоритмов с помощью быстрого возведения матриц в степень в Python.
Смотрите подробнее:
GitHub: https://github.com/borzunov/cpmoptimize
Хабрахабр: http://habrahabr.ru/post/236689/
Python Package Index: https://pypi.python.org/pypi/cpmoptimize
2. Основные понятия
Командой повторения или циклом называется такая
форма организации действий, при которой одна и та же
последовательность действий повторяется до тех пор, пока
сохраняется значение некоторого логического выражения.
При изменении значения логического выражения на
противоположное повторения прекращаются (цикл
завершается).
3. Для организации цикла необходимо выполнить
следующие действия:
• перед началом цикла задать начальное значение
параметра;
• внутри цикла изменять параметр цикла с помощью
оператора присваивания;
• проверять условие повторения или окончания цикла;
• управлять циклом, т.е. переходить к его началу, если
он не закончен, или выходить из цикла в противном
случае.
4. Разновидности циклических
алгоритмов
Циклы с заданным Итерационные циклы
числом повторений
Имеется управляющий Число повторений цикла
параметр, изменяющийся с заранее не известно.
постоянным шагом в Реализуется операторами
определенном диапазоне цикла-пока и цикла-до.
значений. Реализуется
всеми типами операторов
цикла.
5. Цикл с параметром
В цикле с известным числом повторений параметр
изменяется в заданном диапазоне.
Если в цикле изменяется простая переменная, то она
является параметром цикла; если в цикле изменяется
переменная с индексом, то индекс этой переменной
является параметром цикла.
1) For <параметр цикла> := <Выражение1> To
<Выражение2> Do <оператор>;
По возрастанию параметра.
2) For <параметр цикла> := <Выражение1> Downto
<Выражение2> Do <оператор>;
По убыванию параметра.
6. Задача
Дано натуральное n, действительное x. Вычислить
Разработаем алгоритм решения задачи:
1) ввести данные - количество слагаемых n и число x;
2) присвоить переменной, в которой будем хранить степени
sin x, значение 1; S := 0;
3) присвоить параметру цикла значение 1;
4) если значение параметра цикла меньше n, перейти к
следующему пункту, иначе к п. 9;
5) вычислить очередную степень sin x;
6) добавить вычисленное значение к сумме;
7) увеличить параметр цикла на 1;
8) перейти к п.4;
9) вывести на печать сумму S;
10) конец.
7. Программа
Program Summa;
Var S, X, Pr : Real;
N, I : Integer;
Begin
Write('Введите число слагаемых и x: ');
ReadLn(N, X);
Pr := 1;
{в этой переменной хранятся последовательные степени sin(x)}
S := 0;
For I := 1 To N Do
Begin
Pr := Pr * Sin(X); {Очередная степень Sin(x)}
S := S + Pr
End;
WriteLn('Сумма равна ', S : 7 : 4)
End.
8. Итерационные циклы
По сравнению с циклом с параметром итерационные
циклы являются универсальными. Для организации
итерационных циклов используются операторы цикла с
предусловием while и цикла с постусловием repeat..until.
Эти операторы не задают закон изменения параметра
цикла, поэтому необходимо перед циклом задавать начальное
значение параметра с помощью оператора присваивания, а
внутри цикла изменять текущее значение этого параметра.
10. Для оператора цикла с предусловием проверяется
значение логического выражения, если оно имеет значение
True, то операторы, входящие в цикл, выполняются, в
противном случае осуществляется выполнение
оператора, следующего за циклом.
Цикл с постусловием выполняется хотя бы один раз.
Затем проверяется значение логического выражения, если
оно False, то операторы, входящие в цикл, выполняются, в
противном случае осуществляется выход из цикла.
Входить в цикл можно только через его начало, т.е.
нельзя входить внутрь цикла с помощью управляющего
оператора, т.к. в этом случае параметр цикла не определен.
11. Задача
Возвести число a, введенное с клавиатуры, в степень n.
Задачу будем выполнять за n+1 шаг.
Например, возведем число 2 в степень 3 (23).
0 шаг: 20=1
1 шаг: 21=20*2 (1*2)
2 шаг: 22=21*2 (2*2)
3 шаг: 23=22*2 (4*2)
12. Программа
Program Stp;
Var P: Real; {результат очередного шага}
N: Integer; {показатель степени}
i: Integer; {счетчик числа шагов}
A: Real; {основание степени}
Begin
Write('Введите основание степени: ');
ReadLn(A);
Write('Введите показатель степени: ');
ReadLn(N);
i:=0; {0-й шаг}
P := 1; {2 в нулевой степени =1}
while i<abs(N) do {показатель может быть
отрицательным, поэтому используем для анализа его
абсолютную величину. Если показатель N=0, то в тело цикла
не попадаем ни разу, т.к. 0-й шаг уже сделан}
13. begin
i:=i+1;
P:=P*A {получаем результат i-го шага}
End;
If N<0 then {если показатель N – отрицательный,}
P:=1/P; {то результат должен иметь обратную величину}
Writeln(‘Результат =‘,P:6:3);
readln;
End.
14. Задача
Определить число и сумму цифр для любого
натурального числа, не превосходящего maxint
(32767), а также вывести запись числа в обратном
порядке, опуская незначимые нули в его начале.
15. Программа
Program Zifra;
Var k,s,n: Integer;
a: longint;
Begin
Write('Введите натуральное число <= ‘, maxint,’:’);
ReadLn(n);
k:=0; a:=0; s:=0;
repeat
k:=k+1;
s:=s+n mod 10;
a:=a*10+n mod 10;
n:=n div 10
until n:=0;
writeln (‘Число цифр: ‘, k, ‘, сумма цифр: ‘,s);
writeln(‘Запись в обратном порядке: ‘,a); readln;
End.
16. Задание
1. Назовите отличия итерационных циклов и цикла с
параметром.
2. Могут ли параметр цикла, его начальное и конечное
значения в цикле с параметром в языке Pascal быть разных
типов? Обоснуйте ответ.
3. Придумайте случаи, когда в программе будут
использоваться циклы.
4. Написать 2 варианта программы вычисления N!
(используя цикл с параметром и цикл с предусловием).
5. Написать программу, которая подсчитывает произведение
целых чисел, введенных с клавиатуры. Произведение
подсчитывается до тех пор, пока вводятся числа в
интервале от -10 до +10. используйте цикл с
постусловием.
17. Источники
• Семакин И.Г. Информатика и ИКТ. Профильный уровень: учебник для
11 класса/ И.Г.Семакин, Е.К.Хеннер, Л.В.Шестакова.– М.: БИНОМ.
Лаборатория знаний, 2012.
• Рапаков Г.Г.. Ржеуцкая С.Ю. Turbo Pascal для студентов и школьников.
– СПб.: БХВ-Петербург, 2005.
• Ушаков Д.М., Юркова Т.А. Паскаль для школьников. – СПб.: Питер.
2007. – 256с.