Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые / Язык программирования Сpp 25.09.11.doc
Скачиваний:
110
Добавлен:
10.05.2015
Размер:
10.13 Mб
Скачать

6.3 Демонстрационные программы

Очень часто шаблоны функций встречаются в задачах сортировки массивов. В одной задаче это может быть массив целых чисел, в другой массив символов или строк и т.п. Алгоритмов сортировки разработано достаточно много. Одним из алгоритмов такого рода, который используется для сортировки небольших массивов с числом элементов до 1000, является метод пузырьковой сортировки. Рассмотрим этот метод на примере целых чисел, которые нужно отсортировать по возрастанию. Метод состоит в сравнении соседних чисел. Если последующее число меньше предыдущего, то числа меняются местами. Если нет, то сравнивается следующее число и т.д. После нескольких проходов удается расставить числа в соответствии с заданными требованиями.

Для массива с десятью целыми числами фрагмент кода, реализующий этот алгоритм выглядит так:

int a[]={10,9,8,7,6,5,4,3,2,1};

const int MAX=sizeof(a)/sizeof(a[0]);

for (int j=0; j<MAX-1; j++)

fot (int k=j+1; MAX-1; k++)

if(a[j]>a[k])Swap(a[j],a[k]);

Функция Swap(a[j],a[k])осуществляет обмен элементов массива.

Сейчас мы рассмотрим практический пример шаблона функции, предназначенной для сортировки. В ней использован оператор sizeof, который возвращает длину в байтах следующей за ним переменной или типа. Если он стоит перед типом, то тип заключается в круглые скобки. Если перед переменной то круглые скобки необязательны. Например,

int I;

cout<<sizeof(int);

cout<<sizeof i;

Кроме того, мы используем функцию strcmp()

Итак, вот код шаблона

#define SIZEOF (array) sizeof(array)/ sizeof(array[0])

Задачи.

1. Напишите функцию min(), возвращающую меньший из двух своих аргументов. Например,min(3,4)должна возвратить3, аmin(‘c’,’a’)возвратитьа.

2. Напишите код функции find().Эта функция ищет объект в массиве . Она возвращает индекс найденного объекта если его удалось найти или -1, если заданный объект не найден. Пример для объекта типа int.

int find(int object, int *list, int size){...}

Параметр size задает количество элементов массива.

7.1 Обработка исключений

Когда программист пишет код, то ему кажется, что он предусмотрел все. Но когда этот код начинает работать как программа, выясняется, что дискета с необходимым файлом не вставлена в дисковод, или, что еще хуже, данне в файле повреждены. Другой пример. Все знают, что на нуль делить нельзя. Однако часто ли вы при выполнении деления проверяли знаменатель на его равенство нулю? Да мало ли еще подобных ситуаций встречается при работе с копьютером. Такие необычные ситуации у программистов встречаются нередко.

Возможно, что вы никогда не задумывались над тем, что операционной системе компьютера постоянно приходится решать задачи связанные с возникновением необычных ситуаций, и она решает их достаточно успешно. Каким образом операционной системе удается выходить из подобных ситуаций? Ответ простой - дело в том, что такие ситуации заранее предусмотрены. Они называются особыми или исключительными. Как только возникает исключительная ситуация устройство сигнализирует о том, что произошло нечто необычное. Это действие называется генерацией исключения (throwing an exception). После чего операционная система распознает тип ситуации и переходит к её обработке, т.е. к выполнению определенной инструкции заранее подготовленной разработчиками операционной системы. Например, всем приходилось указывать файл на дискете, в то время как дискета уже была снята с дисковода, но никогда после этого копьютер не выполнял команды на считывание или запись. Этого не происходит именно потому о чем мы сейчас сказали.

Приступая к написанию программы каждый человек надеется, что все события происходящие во время ее выполнения будут именно такими как он предполагает. Например, если программа обращается к файлу, то такой файл существует, если программа обращается к элементу массива, то такой элемент существует (хотя в C++ легко выйти за границу массива), и т.д. Очень часто такие предположения оказываются неверными, и тогда результат выполнения программы будет непредсказуем. Возможно, что вступит в действие обработчик событий операционной системы, как, например, часто бывает при делении на ноль, и программа аварийно завершится, но возможны и другие результаты, иногда связанные с потерей информации, зацикливанием и другими неприятными последствиями. Для того, чтобы избежать такого рода неприятностей в С++ существует понятие исключения (exception). Исключение это состояние, которое достигается программой при её выполнении. Такое состояние может быть вызвано как возникновением непредвиденной ситуации, так и заранее предусмотренными действиями программиста.