- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
Деревья.
Математически дерево определяется как граф без циклов. Рекурсивно дерево – структура данных состоящая из конечного числа поддеревьев. Деревья бывают произвольные и бинарные. На картинке изображено бинарное дерево, т.е. из каждой вершины выходят два ребра (дуги). Можно
считать их как ориентированными так и не ориентированными.
корень
лист поддерево
Операции, определенные для деревьев:
1. Если дерево пустое, то создать.
2. Обход дерева, т.е. попасть в каждую вершину, так чтобы они не повторялись. Поиск в нем.
3. Вставка вершины (поддерева).
4. Удаление поддерева, если оно не пусто.
Пример обхода дерева в порядке КЛП ( корень- левое поддерево – правое поддерево).
Цифры определяют порядок обхода.
Очевидно, что осуществить такой обход довольно трудно. Это, как правило, рекурсивная функция.
Опишем структуру дерева.
struct tree
{ char inf [10] ;
tree * left ;
tree *right ;
}
Очень удобно осуществлять поиск в бинарном дереве, это на много быстрее, чем в любой другой структуре, особенно в массиве. Информация, хранящаяся в левом поддереве всегда меньше, чем в правом.
Наиболее распространены не бинарные – обыкновенные деревья, количество ребер из каждой вершины может быть довольно большим и в общем случае различным. Существуют математические алгоритмы преобразования любого произвольного дерева в бинарное.
С++ И ЕГО НОВЫЕ ВОЗМОЖНОСТИ.
ВВОД И ВЫВОД.
С++ предполагает другие возможности ввода-вывода через входной поток с именем сin, и выходной поток с именем cout.
#include<iostream.h>
main()
{ cout << “ введите n “ << endl ; // переход на следующую строку.
cin >> n ;
cout << “ результат =” << n*n ;
}
Можно перенаправить входной и выходной поток в файлы.
ПЕРЕГРУЗКА ФУНКЦИЙ.
Вспомним что такое функция и как с ней работать на простейшем примере, записав его с использованием перегрузки функций. Перегрузкой будем называть использование одного и того же имени для разных функций.
int max (int , int) ;
float max ( float , float) ;
main()
{ int m,n ;
float a, b ;
cin >> m>> n>>a >>b ;
cout << “максимальное целое “ << max(m, n) ;
cout << “максимальное вещественное “ << max(a, b) ;
}
int max ( int m, int n ) // функция определяющая наибольшее из 2 целых чисел.
{ if (m>=n) return m ;
else return n ;
}
float max ( float a, float b ) // функция определяющая наибольшее из 2 вещественных чисел.
{ if (a>=b) return a ;
else return b ;
}
Можно использовать перегрузку функций, когда выполняется одно и тоже действие для разного числа параметров, разного типа параметров.
Очень удобно использовать перегрузку, когда исходные данные задаются по разному.
…
gets (text) ;
// вызов функции, параметром которой является адрес строки.
cout << lst( text) ;
// вызов функции, параметром которой является строка заданная явно.
cout << lst( “ fjfhgjkkljll;;;njvh”) ;
…
int lst ( char *t)
{ for (i=0 ; *(t+i)!=’\0’ ; i++) ; return i ; }
int lst ( char tt[])
{ for (i=0 ; tt[i]!=’\0’ ; i++) ; return i ; }
Перегрузка функций очень активно используется при работе с классами.
УКАЗАНИЕ ПАРАМЕТРОВ ФУНКЦИИ ПО УМОЛЧАНИЮ.
На С++ можно задавать параметры функции, можно их не указывать, тогда будут использоваться параметры заданные по умолчанию.
Например:
int fun(int a=10, int b=5)
{ return a+b ; }
main()
{ int x=1 , y=2 ;
cout << fun() ; // распечатается 15
cout << fun(x) ; // распечатается 6
cout << fun(x , y) ; // распечатается 3
}
Примечание: опускать только первый параметр нельзя.
С++ обладает и многими другими интересными возможностями, о которых, по мере необходимости, можно узнать из литературы.
КЛАССЫ.
С++ дает возможность определять новые типы, так что их использование не будет отличаться от использования встроенных (стандартных) типов.
int a=10 , b=20 , c ;
c=a+b ;
cout << c ;
В этом примере описаны три переменные целого (стандартного) типа, над двумя из них производится операция сложения и печатается результат. Представьте себе, что на месте этих переменных матрицы и нам хочется произвести над ними аналогичные действия тоже в две строки. Это возможно, только эти строки будут представлять собой вызов подпрограмм, реализующих эти действия, что не так наглядно.
Давайте определим тип матрица и зададим на нем операцию сложения и операцию вывода, что и позволит работать с матрицами так же наглядно как с переменными. Создание нового типа представляет собой определение класса.
class cmatr /* заголовок класса
имя класса
дальше в скобках тело класса */
{
определение объектов, необходимых данных;
определение методов, необходимых функций над данными.
}
Начнем заполнение класса, не раскрывая пока его методы.
сlass cmatr { // объекты
float **m ; // адрес матрицы