- •1.1. Элементы языка программирования
- •Основные правила записи программы:
- •1.2. Алфавит языка
- •1.3. Лексемы
- •1.4. Концепция данных
- •2.2. Операции
- •2.2.1. Арифметические операции
- •2.2.2. Операции присваивания
- •2.2.3. Операции отношения
- •2.2.4. Логические операции
- •2.2.5. Поразрядные операции
- •2.2.6. Вычисление выражений
- •3. Структурное программирование
- •3.1. Общая характеристика операторов
- •3.2. Оператор-выражение
- •3.3. Условный оператор
- •3.4. Составной оператор
- •3.5. Операторы для программирования циклов
- •3.5.1. Оператор цикла for
- •3.5.2. Оператор цикла while
- •3.5.3. Оператор цикла do while
- •3.5.4. Оператор break
- •3.5.5. Оператор continue
- •3.6. Оператор goto
- •3.7. Пустой оператор
- •3.8. Оператор switch
- •3.9. Оператор return
- •4. Массивы
- •4.1. Объявление массива
- •4.2. Обращение к элементам массива
- •4.3. Типовые алгоритмы работы с массивами
- •4.4. Многомерные массивы
- •5. Строки
- •5.1. Объявление строки
- •5.2. Посимвольная обработка строк
- •5.3. Ввод строк
- •5.4. Библиотечные функции для работы с текстом
- •6. Указатели
- •6.1. Объявление указателей
- •6.2. Операции над указателями
- •6.3. Связь между указателями и массивами
- •6.4. Функция strtok для выделения лексем из текста
- •6.5. Динамические массивы
- •7. Структуры и объединения
- •7.1. Объявление структуры
- •Компонент структуры может быть любого типа, кроме типа объявляемой структуры.
- •7.2. Операции над структурами
- •7.3. Объявление объединения
- •8. Модульное программирование
- •8.1. Нисходящее проектирование и программирование
- •8.2. Определение и вызов функции
- •8.3. Место определения функции в программе
- •8.4. Обмен данными между функциями
- •8.4.1. Использование глобальных переменных
- •8.4.2. Использование аппарата формальных и фактических параметров
- •8.4.3. Передача массивов в функцию
- •8.5. Перегрузка функции
- •8.6. Шаблон функции
- •8.7. Рекурсивные функции
- •8.8. Функции с параметрами по умолчанию
- •8.9. Передача в функцию другой функции
- •9. Работа с файлами
- •9.1. Текстовые и двоичные файлы
- •9.2. Объявление файловых переменных
- •9.3. Чтение текстового файла
- •9.4. Создание текстового файла
- •9.5. Изменение данных в текстовом файле
- •9.6. Вывод в двоичный файл
- •9.7. Чтение данных из двоичного файла
- •9.8. Изменение данных двоичного файла
- •9.9. Организация файла с произвольным доступом
- •10. Данные с динамической структурой
- •10.1. Линейный список
- •10.1.1. Специальные типы линейных списков
- •10.1.2. Реализация линейного списка с помощью массива
- •10.1.3. Реализация линейного списка с помощью связанного однонаправленного списка
- •10.1.4. Реализация линейного списка с помощью связанного двунаправленного списка
- •10.2. Деревья
- •10.2.1. Основная терминология
- •10.2.2. Реализация двоичных деревьев поиска Для реализации дерева поиска используются массивы и связанные указателями элементы [3, 4].
- •10.2.3. Сбалансированные деревья
- •Основные достоинства в-дерева:
- •10.3. Графы
- •10.3.1. Определения
- •10.3.2. Реализация графа с помощью списков смежности
- •10.3.3. Реализация графа с помощью матрицы смежности
- •10.3.4. Поиск кратчайших путей. Алгоритм Дейкстры
- •10.3.5. Матрица достижимости. Алгоритм Уоршалла
8.5. Перегрузка функции
Перегрузка функции – это использование в программе одного имени для обозначения разных функций.
Использование одного имени для обозначения разных функций, выполняющих сходные действия, делает программу более понятной и уменьшает сложность программирования. Например, можно в программе иметь несколько функций сортировки с одинаковыми именами sort, выполняющих сортировку массивов разных типов. Перегрузка функции ассоциирует одно имя со схожими действиями.
Чтобы перегрузить функцию, надо записать в программе все варианты одноименных функций, которые будут использоваться. Перегруженные функции должны отличаться друг от друга типом хотя бы одного формального параметра и (или) количеством параметров. Компилятор, анализируя аргументы функции в ее вызове, будет связывать вызов с конкретной перегруженной функцией. Иными словами: компилятор по контексту использования имени функции связывает вызов функции с нужным вариантом одноименной функции.
Пример программы удаления из двух массивов, массива целых чисел и массива строк, элементов с заданными значениями. Алгоритмы ввода, вывода и удаления элементов массивов оформлены в виде перегруженных функций.
#include <iostream.h>
#include <conio.h>
#include <string.h>
void input (int a[], int n); //ввод массива целых чисел
void input (char a[][81], int n); //ввод массива слов
void output (int a[], int n); //вывод массива целых чисел
void output (char a[][81], int n); //вывод массива слов
void del (int a[], int &n, int x); //удаление из массива чисел х
void del (char a[][81], &n, char x[]); //удаление из массива слов х
void main()
{
int c[100]; //массив чисел
char s[100][15]; //массив строк
int nc, ns; //количества чисел в массивах чисел и строк
int xc; //значение удаляемых чисел
char xs[15]; //значение удаляемых строк
cout<<”nc?”;
cin>>nc;
input(c,nc);
output(c,nc);
cout<<”xc?”; cin>>xc;
del (c,nc,xc);
output(c,nc);
cout<<”ns?”; cin>>ns;
input(s,ns);
output(s,ns);
cout<<”xs?”; cin>>xs;
del (s,ns,xs);
output(s,ns);
getch();
}
//Перегруженные функции
void input (int a[ ], int n)
{
cout<<”array int: “;
for int=0; i<n; i++)
cin>>a[i];
}
void input (char a[][15], int n)
{
cout<<”array string: “;
for int=0; i<n; i++)
cin>>a[i];
}
void output (int a[ ], int n)
{
if (n==0)
cout<<” array is empty”<<endl;
else
{
for (int i=0; i<n; i++)
cout<<a[I]<<’ ‘;
cout<<endl;
}
}
void output (char a[ ][15], int n)
{
if (n==0)
cout<<” array is empty”<<endl;
else
{
for (int i=0; i<n; i++)
cout<<a[I]<<’ ‘;
cout<<endl;
}
}
void del (int a[ ], int &n, int x)
{
int i, j;
j=0;
for (i=0; i<n; i++)
if (a[i]!=x)
{ a[j]=a[i]; j++;}
n=j;
}
void del (char a[ ][81], &n, char x[ ])
{
int i, j;
j=0;
for (i=0;i<n; i++)
if (strcmp(a[i],x)!=0)
{strcpy(a[j],a[i]); j++;}
n=j;
}
Пример программы вычисления площадей круга и прямоугольника. Алгоритмы вычисления площадей геометрических фигур оформлены в виде перегруженных функций. Перегруженные функции различаются количеством параметров.
#include <iostream.h>
#include <conio.h>
#include <math.h>
float area (float r); //вычисление площади круга
float area (float w, float h); //вычисление площади прямоугольника
void main()
{
cout<<”s1=”<< area(3,4)<<” s2=”<< area(5);
getch();
}
float area (float r)
{
return M_PI * r* r;
}
float area (float w, float h)
{
return w*h;
}