- •Понятие алгоритма. Свойства алгоритмов. Основные этапы решения задач
- •1. Формулировка задачи
- •2. Математическая постановка задачи
- •3. Разработка алгоритма
- •4. Написание текста и ввод программы
- •5. Выполнение программы. Поиск и устранение синтаксических ошибок
- •6. Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы (загрузочного модуля).
- •Структуры и формы написания программы
- •Внутреннее представление данных
- •Классы памяти
- •Обмен данными через внешние переменные
- •Статические переменные
- •Стандартный ввод/вывод данных через потоки
- •Ввод данных
- •Вывод данных
- •Специфические операции
- •Операции присваивания
- •Некоторые нетрадиционные (унарные) операции
- •Условные выражения
- •Операция условия ?:
- •Выражения (в том числе и условные). Порядок выполнения операций в выражении. Таблица приоритетов.
- •Условный оператор if и его применение при программировании. Сокращенная форма оператора if
- •Полная форма оператора if
- •Множественный выбор else-if
- •Оператор выбора switch и его применение при программировании.
- •Циклические вычислительные процессы
- •Оператор цикла while и его применение при программировании. Цикл while – цикл с предусловием.
- •Оператор цикла do while и его применение при программировании. Цикл do while – цикл с постусловием
- •Оператор цикла for и его применение при программировании. Цикл for – цикл с предусловием
- •Операторы break, goto, continue их применение при программировании. Операторы передачи управления
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Вложенные циклы.
- •Указатели и адреса: описание, инициализация и операции с указателями. Применение указателей при программировании.
- •Статические строки
- •Динамические строки
- •Стандартный цикл обработки строки
- •Одномерные числовые массивы
- •Статические массивы
- •Динамические массивы
- •Динамические матрицы
- •Циклы перебора матрицы
- •Программирование с использованием функций пользователя. Принципы построения функций.
- •Механизм вывода функции
- •Передача значения простого аргумента в функцию. Способы передачи простых данных в функцию
- •Передача в функцию значения аргумента
- •Рекурсивная функция
- •Передача функции в другую функцию через указатель. Параметр функции. Указатель на функцию.
- •Перегрузка функций.
- •Функции с параметрами по умолчанию
- •Шаблоны функций.
- •Формат функции шаблона
- •Механизм шаблона
- •Особенности проекта с функциями-шаблонами
Механизм шаблона
Опираясь на вызов функции, компилятор по умолчанию определяет значение параметризованного типа Type.
В тексте функции слово Type везде заменяется на int, получается один экземпляр функции.
Опираясь на второй вызов, Type заменяется на double – получился второй экземпляр функции.
Каждый экземпляр компилируется, происходит сборка и выполнение всей программы.
// Процесс создания экземпляра функции называется инстанцирование.
Пример 2: явное задание типа.
Если параметризована локальная переменная, то её тип не виден из вызова функции, и назначить конкретный тип мы должны явно при вызове функции.
//Если имя параметризованного типа не участвует в параметрах, его конкретное значение не может быть определено по умолчанию из вызова функции и должно быть задано явным образом.
#include <iostream>
using namespace std;
template<class Type1, class Type2, class Type3>
void func(Type2 x, Type3 y)
{
Type1 z;
…
}
void main(void)
{
func<int>(“Hello”,3.14);
или
func<int,char*,double>(“Hello”,3.14);
…
}
Особенности проекта с функциями-шаблонами
Функции шаблоны должны быть физически в одном файле вместе с вызывающей функцией(main).
Это достигается одним из двух способов:
1) функции-шаблоны помещаем в файл cpp и подключаем файл #include “шаблон.cpp” к вызывающей функции.
Прототипы функции не пишутся.
2) тексты функции шаблонов пишут в .h файл, оформленный обычным образом и подключают его директивой include к вызывающей функции.
Пример: Написать функцию-шаблон для вывода двумерного массива на экран.
shablon.h:
#ifndef SHABLON_H
#define SHABLON_H
#include<iostream>
using namespace std;
#include <iomanip>
template <class T>
void OutMas(T*p,int n,int m)
{
int i,j;
for (i=0; i<n;i++)
{
for (j=0; j<m;j++)
cout << setw(5) << *(p+i*m+j);
cout << endl;
}
return;
}
#endif
main.cpp:
#include<iostream>
using namespace std;
#include "shablon.h"
int main (void)
{
int A[2][3]= {1,2,3,4,5,6};
double B[3][3] = {1.5,2.6,3.7,4.8};
cout << "\n Целый массив:\n";
OutMas(A[0],2,3);
cout << "\n Дробный массив:\n";
OutMas(B[0],3,3);
return 0;
}
