
- •Введение.
- •Глава 1. Основы языка Си.
- •Алфавит.
- •1.2. Основные конструкции Си.
- •1.3.2. Ввод.
- •1.4. Базовые типы данных Языка Си.
- •1.4.1. Идентификаторы.
- •1.4.2. Типизированные константы.
- •1.4.3. Переменные.
- •1.4.3.1. Целые типы.
- •1.4.3.2. Вещественные типы.
- •1.4.3.3. Символьные типы.
- •1.4.4. Тип данных строка.
- •1.4.5. Структуры.
- •1.4.5.1. Массивы.
- •1.4.5.2. Записи.
- •1.4.6. Область видимости и время жизни переменных.
- •1.5. Основные операторы.
- •1.6. Препроцессор.
- •1.7. Программы. Функции.
- •1.8. Указатели.
- •1.9. Указатели и функции.
- •1.10. Файлы.
- •1.11. Дополнительные функции Си.
- •1.11.1. Функции преобразования.
- •1.11.2. Преобразования символьных строк: atoi(), atof().
- •1.11.3. Функции, работающие со строками.
- •1.12. Особенности программирования на языке Си.
- •1.12.1. Модули. Многомодульное программирование.
- •1.12.2. Модели памяти.
- •1.12.3 Программирование в dos и Windows
- •1.12.4 Использование языка ассемблера в программах на Си.
- •Глава 2. Примеры использования языка Си.
- •2.1. Сортировка.
- •2.2. Рекурсивные алгоритмы.
- •2.3. Задача Ханойские башни.
- •3.2.1. Классы.
- •3.2.2. Перегрузка функций.
- •3.2.3. Конструкторы.
- •3.2.4. Деструкторы.
- •3.2.5. Конструкторы с параметрами.
- •3.2.6. Введение в наследование.
- •3.2.7.Виртуальные функции.
- •3.2.8. Указатели на объекты.
- •4.2. Компоненты vcl. Свойства, события, методы.
- •В отличие от свойств методы не видны в окне инспектора объектов.
- •4.2.1.Типы компонент
- •4.2.2. Иерархия классов vcl
- •4.4.Визуальные компоненты (vcl).
- •4.5. Программы, управление событиями, исключения.
- •4.6.Стратегия отладки Windows-программ.
- •4.7.Использование компонент vcl в разработке программ.
- •4.8.Графические компоненты.
- •4.9.Мультимедиа.
- •4.10.Спрайтовая графика.
- •4.11. Объектная технология ole2.
- •4.12.Библиотеки dll.
- •4.13.Разработка визуальных компонент.
- •4.14. Введение в программирование cgi.
- •4.15. Программирование баз данных.
- •4.16. Пакеты.
- •Заключение.
- •Литература:
- •Глава 1. Основы языка Си. 4с.
- •Глава 2. Примеры использования языка Си. 48c.
Глава 2. Примеры использования языка Си.
2.1. Сортировка.
Практически каждый алгоритм сортировки можно разбить на три части:
- сравнение, определяющее упорядоченность пары элементов;
- перестановку, меняющую местами пару элементов;
- собственно сортирующий алгоритм, который осуществляет сравнение и перестановку элементов до тех пор, пока все элементы множества не будут упорядочены.
М е т о д п у з ы р ь к а ( обменная сортировкой с выбором).
Идея этого метода отражена в его названии. Самые легкие элементы массива "всплывают" наверх, самые "тяжелые" - тонут. Алгоритмически это можно. Реализуется так - будем просматривать весь массив "снизу вверх" и менять стоящие рядом элементы в том случае, если "нижний" элемент меньше, чем "верхний". Таким образом, мы вытолкнем наверх самый "легкий" элемент всего массива. Теперь повторим всю операцию для оставшихся неотсортированными N-1 элементов (т.е. для тех, которые лежат "ниже" первого).
#include <stdio.h>
#define swap(a,b) { int tmp; tmp=a; a=b; b=tmp; }
main()
{
int a[10], dim=10;
int i, j;
for (i=0;i<dim;i++)
{
printf("Элемент\n");
scanf("%d",&a[i]);
}
printf("Было\n");
for (i=0;i<dim; i++)
printf("%d\n",a[i]);
/* Проход массива "вниз", начиная с нулевого элемента */
for (i = 0; i < dim; i++)
/* Проход массива "вверх", начиная с последнего до i-го элемента */
for (j = dim-1; j > i; j--)
/* Сравнение двух соседних элементов и их обмен */
if(a[j-1] > a[j]) swap(a[j-1], a[j]);
printf("Стало\n");
for (i=0;i<dim; i++)
printf("%d\n",a[i]);
}
С о р т и р о в к а в ы б о р о м.
На этот раз при просмотре массива мы будем искать наименьший элемент, сравнивая его с первым. Если такой элемент найден, поменяем его местами с первым. Затем повторим эту операцию, но начнем не с первого элемента, а со второго. И будем продолжать подобным образом, пока не рассортируем весь массив.
#include <stdio.h>
#define swap(a,b) { int tmp; tmp=a; a=b; b=tmp; }
main()
{
int a[10], dim=10;
int i, j, k;
for (i=0;i<dim;i++)
{
printf("Элемент\n");
scanf("%d",&a[i]);
}
printf("Было\n");
for (i=0;i<dim; i++)
printf("%d\n",a[i]);
/* Проход массива, начиная с 0-го до предпоследнего элемента */
for (i = 0; i < dim-1; i++)
{
/* Проход массива, начиная с (i+1)-го до последнего элемента */
for (k = i, j = i+1; j < dim; j++)
if(a[j] < a[k]) k = j; /* Поиск наименьшего k-го эл-та */ swap(a[k], a[i]); /* Перемещение наименьшего "вверх" */
}
printf("Стало\n");
for (i=0;i<dim; i++)
printf("%d\n",a[i]);
}
М е т о д Ш е л л а.
Этот метод предложил Donald Lewis Shell в 1959 г. Основная идея алгоритма заключается в том, чтобы вначале устранить массовый беспорядок в массиве, сравнивая далеко стоящие друг от друга элементы. Как видно, интервал между сравниваемыми элементами (gap) постепенно уменьшается до единицы. Это означает, что на поздних стадиях сортировка сводится просто к перестановкам соседних элементов (если, конечно, такие перестановки являются необходимыми).
#include<stdio.h>
#define swap(a,b) { int tmp; tmp=a; a=b; b=tmp; }
main()
{
int a[10], dim=10;
int i, j, gap;
for (i=0;i<dim;i++)
{
printf("Элемент\n");
scanf("%d",&a[i]);
}
printf("Было\n");
for (i=0;i<dim; i++)
printf("%d\n",a[i]);
for (gap = dim/2; gap > 0; gap/=2) /* Выбор интервала */
for (i = gap;i < dim; i++) /* Проход массива */
/* Сравнение пар, отстоящих на gap друг от друга */
for (j = i-gap; j >= 0 && a[j] > a[j+gap]; j -= gap) swap(a[j], a[j+gap]);
printf("Стало\n");
for (i=0;i<dim; i++)
printf("%d\n",a[i]);
}