- •Содержание
- •Предисловие
- •1. Общие методические указания
- •2. Рабочая программа и методические указания к темам курса
- •2.1 Типы данных
- •2.2.1 Операторы управления
- •If (выражание) оператор_1;
- •2.2.2 Операторы ввода-вывода
- •Контрольные вопросы
- •2.3 Массивы и указатели
- •2.3.1 Указатели
- •2.3.2 Массивы
- •Контрольные вопросы
- •2.4 Типы данных, определяемые пользователем
- •2.4.1 Структуры
- •2.4.2 Перечисления
- •2.4.3 Структуры с битовыми полями
- •2.4.4 Объединение (смесь)
- •Контрольные вопросы
- •2.5 Функции
- •2.5.1 Общие сведения о функциях
- •Способы передачи параметров функции
- •2.5.2 Рекурсивные функции
- •2.5.3 Перегрузка функций
- •2.5.4 Шаблоны функций
- •Контрольные вопросы
- •3. Перечень лабораторных работ
- •Список литературы
- •Давыдов, в.Г. Программирование и основы алгоритмизации [Текст]: учеб. Пособие/ в.Г. Давыдов – м: Высшая школа, 2003. – 447с.: ил.: 22 см. – Библиогр.: с. 442. – 3000 экз. - isbn 5-060-04432-7.
2.5.4 Шаблоны функций
Многие алгоритмы не зависят от типов данных, с которыми они работают (классический пример – сортировка). Естественно желание параметризовать алгоритм таким образом, чтобы его можно было использовать для различных типов данных.
В С++ есть мощное средство параметризации – шаблоны. Существуют шаблоны функций и шаблоны классов. С помощью шаблона функции можно определить алгоритм, который будет применяться к данным различных типов, а конкретный тип данных передается функции в виде параметра на этапе компиляции. Компилятор автоматически генерирует правильный код, соответствующий переданному типу. Таким образом, создается функция, которая автоматически перегружает сама себя и при этом не содержит накладных расходов, связанных с параметризацией.
Формат простейшей функции – шаблона:
template <class Тype>
тип имя_функции (type param1, type param2)
{
// тело функции
}
Вместо слова Type может использоваться произвольное имя. В общем случае шаблон функции может содержать несколько параметров, каждый из которых может быть не только типом, но и просто переменной, например:
template <class A, class B, int i> void f(){. . .}
Например, функция сортировки методом Шелла в виде шаблона может выглядеть так:
// Пример родовой функции или шаблона сортировки методом Шелла
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
const int n=10;
// Это шаблон функции сортировки методом Шелла
template <class T> void chelsort(T arr[],int col)
// сортировка методом Шелла
{int h[] = {9,5,3,1};
for(int i=0,deapazon=h[0]; i<4; deapazon=h[++i])
{ for(int i=deapazon; i < col; i++)
for(int j=i-deapazon;j>=0&&arr[j]>arr[j+deapazon];
j-=deapazon)
{ T temp = arr[j];
arr[j] = arr[j+deapazon];
arr[j+deapazon] = temp;
}
}
}
int main(void)
{ int arr[n], i,col=n;
float arr1[n];
randomize();
// формирование массива целых чисел
for(i=0; i<n; i++)
arr[i]= rand() % 100;
chelsort(arr,col);
for(i=0; i<n; i++)
cout<<arr[i]<<'\n';
// формирование массива вещественных чисел
for(i=0; i<n; i++)
arr1[i]= rand()/ 100.;
chelsort(arr1,col);
for(i=0; i<n; i++)
cout<<arr1[i]<<'\n';
getchar();
return 0;
}
Если шаблонные функции определены в заголовочном файле, то в программе достаточно указать только прототипы этих функций. Компилятор ищет шаблон функции, совпадающий по типу возвращаемого значения, количеству формальных параметров и типу тех формальных параметров, которые определены.
Контрольные вопросы
1. Основные правила составления функций.
2. Объяснить назначение оператора return.
3. Какие типы функций поддерживаются языком C++?
4. Место расположения функции по отношению к основной программе.
5. Какие типы формальных и фактических параметров поддерживаются языком C++?
3. Перечень лабораторных работ
Лабораторные работы проводятся на ПК с использованием средств TurboС V3.0 или BuilderC++ V5.0 (или V6.0).
При подготовке к лабораторной работе необходимо ознакомиться с материалами лекций, начитанных по теме лабораторной работы, а также с предложенной литературой. Список предлагаемой литературы представлен в конце данного методического пособия.
Тематика лабораторных работ охватывает основные моменты разработки оптимальных алгоритмов решения поставленных задач и программирования средствами языка С++, помогает студентам освоить приемы работы с массивами, структурами, функциями, файлами и строками. Тематика лабораторных работ указана в таблице 4.
Таблица 4.
№ п/п |
№ раздела дисциплины |
Наименование лабораторных работ |
Кол-во часов
|
1 |
1-7 |
Вычисление суммы бесконечного ряда с заданной точностью |
4 |
2 |
8 |
Решение задач с использованием массивов |
5 |
3 |
10 |
Решение задач с использованием структур |
6 |
4 |
11 |
Решение задач с использованием функций |
2 |
Для успешного выполнения лабораторных работ разработаны методические указания, которые можно взять в библиотеке факультета АИТ. В указаниях даются теоретические сведения по рассматриваемой теме и примеры программ для данного класса задач. Все программы снабжены комментариями и подробными объяснениями. Для выполнения лабораторных работ разработаны тридцать вариантов индивидуальных заданий. Вариант задания выдается преподавателем в начале семестра или перед выполнением каждой лабораторной работы.
Для закрепления изученного материала и самопроверки студентами полученных знаний в каждой лабораторной работе дается перечень контрольных вопросов.
Общие требования к отчетам по лабораторным работам таков: отчет должен содержать:
- титульный лист,
- название лабораторной работы,
- цель и задание,
- текст программы (или несколько текстов программ), снабженный комментариями,
результаты работы программы.
Дополнительные требования к отчету по каждой лабораторной работе и варианты индивидуальных заданий приведены в методических указаниях по выполнению лабораторных работ по данному курсу.