- •Программирование на языке Си
- •2001 Г.
- •Оглавление
- •Литература
- •Инициализация графики
- •Игровые программы
- •Шаблоны линий Шаблоны закраски
- •Интерпретатор строки
- •Блок схема графической программы
- •Нахождение минимума и максимума функции
- •Оцифровка
- •Вывод графика
- •Сканирование значений точек
- •Решение систем нелинейных уравнений
- •Метод Ньютона
- •Работа со спрайтами
- •Пример вывода картинки
- •Метод деления пополам
- •Метод секущих
- •Решение нелинейных уравнений
- •Программа “летающая тарелка”
- •Часть 4 Основные математические алгоритмы Решение системы линейных уравнений
- •Двоичный сдвиг
- •Улучшение программы упаковки
- •Поиск файлов
- •Компьютерная анимация
- •Программа движения объекта (человек)
- •Программа движения человечка
- •Программа движения винтовой лестницы
- •Упаковщик файлов
- •Позиционирование по файлу
- •Программа анализа файла
- •Демонстрационная программа количества видео страниц
- •Винтовая лестница
- •Простейшие системы шифрования Шифр Цезаря
- •Шифр Виженера
- •Шейкерная сортировка
- •Сравнение методов сортировок
- •Программа Винтовая лестница
- •Сортировка
- •Сортировка методом прямого включения
- •Сортировка с помощью простого выбора
- •Сортировка с помощью прямого обмена Метод "пузырька"
Винтовая лестница
Программа должна имитировать вид возникающий при подъеме по винтовой лестнице. Необходимо изобразить четверть круга ступенек. Координаты вычисляются через функции sin(...) и cos(...). Скорость можно значительно поднять, если не вычислять их каждый раз заново, а запомнить в массиве. Причем достаточно помнить таблицу только одной функции, на интервале [0..pi/2]. Другую всегда можно получить sin(x)=cos(pi-x).
- 23 -
Простейшие системы шифрования Шифр Цезаря
Шифр Цезаря один из наиболее древних известных нам систем шифрования. В эпоху расцвета Рима, чтобы управлять наместниками в многочисленных провинциях, шифрованная связь для римских органов власти стала жизненно необходимой. Изобретение шифра связано с именем Юлия Цезаря. В этом шифре каждая буква шифровки заменяется определенной по счету от нее в алфавите. Например, послание сенату VENI VIDI VICI, то есть ПРИШЕЛ УВИДЕЛ ПОБЕДИЛ, сделанное самим Юлием Цезарем после однодневной войны с понтийским царем Фарнаком, выглядело бы шифровкой SBKF SFAF SFZF, если выбрать смещение в четыре буквы.
Алгоритм шифрования:
Прочитать строку st. Определить ее длинуn=strlen(st).
for(i=0;i<n;i++)
{ st[i]+=Key ; if(st[i]>’я’) st[i]=st[i]-‘я’+’A’ ; }
Шифр Виженера
Более надежный шифр замены создан дипломатом XVI века Блезом Виженером, который развивал и совершенствовал криптографические системы. Шифр Виженера является модификацией шифра Цезаря. Для каждого символа сообщения используется различная величина смещения. В качестве ключа удобно использовать простое для запоминания слово. Внешне криптограмма выглядит похожей на шифр Цезаря, но смещение задается для каждой буквы сообщения номером в алфавите соответствующей буквы ключа. Если ключ короче сообщения, то его повторяют циклически. Например:
сообщение СОВЕРШЕННО СЕКРЕТНО
ключ ПРИВЕТ
шифровка БЯЛИЦЛХЮЦС ДХЫЩИШАЮ
Алгоритм шифрования:
Задать ключ Key, определить его длинуn_key.
Прочитать строку st. Определить ее длинуn=strlen(st). j=0 ;
for(i=0;i<n;i++)
{
st[i]+=Key[j] ; j++ ;
if(j>n_key) j=0 ;
if(st[i]>’я’) st[i]=st[i]-‘я’+’A’ ;
}
- 22 -
Шейкерная сортировка
В основе алгоритма сортировка по методу пузырька с переменным направлением просмотра.
<Флаг перестановки>=1
while(<Флаг перестановки>)
{
<Флаг перестановки>=0
for(i=1;i<N;i++)
<Сравнениеa[i-1] <a[i]>если требуется перестановка:
{
<Перестановка местамиa[i] иa[i-1]>
<Флаг перестановки>=1
}
for(i=N-1;i>0;i--)
<Сравнениеa[i] >a[i-1]>если требуется перестановка:
{
<Перестановка местамиa[i] иa[i-1]>
<Флаг перестановки>=1
}
}
Пример:
0: 37 76 23 98 35 40
1а: 34 23 76 35 40 98
1б: 23 34 35 40 76 98
На проходе 1а числа с меньшим весом выталкиваются в перед, на проходе 1б числа с большим весом опускаются в конец массива. Сортировка идет значительно быстрее.