Содержание
- 2. Функция main() – это относительная точка входа в программу, а не абсолютная (перед вызовом функции, в
- 3. Посмотрим на задания из лабораторной 6 (повторение материала 1-го семестра)
- 4. Дано целое число N>0. Найти сумму: N2 +(N+1)2 + (N+2)2 +…+(2N)2 Чтобы избежать целочисленного переполнения, вычислять
- 5. Многофайловая программа Многофайловая программа – это возможность следования принципу абстракции. При создании большой системы хорошо бы
- 6. Многофайловая компиляция Раздельной компиляции способствует механизм precompiled headers (прикомпайл хэдэр) – предварительно собранные заголовки. Технология предназначена
- 7. Многофайловая компиляция prog.pch – файл precompiled headers для проекта prog stdafx.obj – файл предварительно скомпилированных типов
- 8. Многофайловая компиляция При создании нового проекта в Visual Studio с помощью мастера wizard (вэжэд) создаётся два
- 9. 6.3. ***Выполнить задание с использованием шаблонов функций и динамических массивов Для заданного k (целого и вещественного
- 10. 6.3. ***Выполнить задание с использованием шаблонов функций и динамических массивов template T ** mem_ar (size_t n
- 11. int **ar int *ar[n] int ar[n] [m] template T ** mem_ar ( size_t n, size_t m
- 12. template void zapol(T** mas, T k) { for (size_t i = 0; i for (size_t j
- 13. template T ** mem_ar ( ) { T** ar = new T*[n]; //выделяется память под массив
- 14. template void mem_ar1 (T**& ar, size_t n, size_t m ) { ar = new T*[n]; //выделяется
- 16. Скачать презентацию
Функция main() – это относительная точка входа в программу, а не
Функция main() – это относительная точка входа в программу, а не
Точка входа – одна.
Точки выхода:
по закрывающей скобке main() - корректное завершение программы
по инструкции return
по функции exit()
по функции abort() - аварийное завершение (немедленное завершение, открытые файлы не закрываются, буферы потоков не очищаются, atexit() не обрабатывается,…)
Посмотрим на задания из лабораторной 6
(повторение материала 1-го семестра)
Посмотрим на задания из лабораторной 6
(повторение материала 1-го семестра)
Дано целое число N>0. Найти сумму: N2 +(N+1)2 + (N+2)2 +…+(2N)2
Чтобы
Дано целое число N>0. Найти сумму: N2 +(N+1)2 + (N+2)2 +…+(2N)2
Чтобы
Дано натуральное n. Получить все натуральные числа, меньшие n, взаимно простые с ним.
6.1. ** Выполнить задание с использованием функций и циклов
6.2. ***Выполнить задание с использованием функций и массивов
Реализовать задание с использованием функций (ввод матрицы, вывод матрицы, вычисление суммы) и цикла for для вычисления суммы. Изменение индексов задавать в заголовке цикла.
Организовать проект в виде двух заголовочных и двух программных файлов. Выполнить многофайловую компиляцию. Тестирование проводить на целочисленной матрице 5-го порядка, все элементы которой равны 1.
Многофайловая программа
Многофайловая программа – это возможность следования принципу абстракции. При создании
Многофайловая программа
Многофайловая программа – это возможность следования принципу абстракции. При создании
Многофайловая программа – это возможность разрабатывать программу нескольким программистам одновременно (кто-то делает графику, кто-то – смысловую начинку и пр.).
Многофайловая программа – это возможность раздельной компиляции модулей: модули (исходные файлы .cpp ) можно компилировать раздельно, что позволяет проверить компилируемость модуля отдельно и увеличить скорость повторной компиляции (если изменялся только один, например, файл, то не компилировать заново остальные). За счет этого происходит увеличение быстродействия при компиляции больших проектов.
Многофайловая компиляция
Раздельной компиляции способствует механизм precompiled headers (прикомпайл хэдэр) – предварительно
Многофайловая компиляция
Раздельной компиляции способствует механизм precompiled headers (прикомпайл хэдэр) – предварительно
Если посмотреть в проекте *.cpp файлы, то можно заметить, что во многие включаются одни и те же наборы заголовочных файлов. Это приводит к тому, что препроцессор в компиляторе вновь и вновь выполняет идентичную работу (читает одни и те же файлы, вставляет их друг в друга) – происходит дублирование одних и тех же операций. Можно существенно сократить объем работы, которую должен проделать препроцессор при компиляции проекта, если заранее препроцессировать группу файлов и затем просто подставлять готовый фрагмент текста.
Препроцессирование – процесс, на вход которого подаётся текстовый файл, во время работы препроцессора исходный текстовый файл видоизменяется, в том числе, удаляются из текста все комментарии, и только изменённый текстовый файл в дальнейшем попадает на компиляцию. Команды препроцессора (директивы) начинаются с символа #, который должен первым непробельным символом в строке (например, #include и #define).
Многофайловая компиляция
prog.pch – файл precompiled headers для проекта prog
stdafx.obj – файл
Многофайловая компиляция
prog.pch – файл precompiled headers для проекта prog
stdafx.obj – файл
prog1.cpp func1.cpp stdafx1.cpp получены в результате работы препроцессора, хранятся временно, только при компиляции
Многофайловая компиляция
При создании нового проекта в Visual Studio с помощью мастера
Многофайловая компиляция
При создании нового проекта в Visual Studio с помощью мастера
для всех *.cpp файлов включается «использование precompiled headers» : Project ? Properties ? Configuration Properties ? C/C++ ? «Precompiled Header»: «Use (/Yu)»;
для файла stdafx.cpp для параметра «Precompiled Header» выставляется значение «создание precompiled headers»: «Create (/Yc)»).
Для ускорения повторной компиляции в stdafx.h нужно включить заголовочные файлы, которые будут заранее препроцессироваться.
А во все файлы *.cpp следует добавить #include "stdafx.h" и удалить из них заголовки, которые уже включаются с помощью stdafx.h.
В файле stdafx.cpp содержится одна единственная строка: #include "stdafx.h". После компиляции stdafx.cpp возникает файл *.pch, который уже содержит precompiled headers, а имя файла обычно совпадает с названием проекта.
Заголовочный файл «stdafx.h» должен включаться в *.cpp файл самым первым! Иначе возникнут ошибки компиляции.
Все файлы, включающие «stdafx.h», зависят от его содержимого. Изменение в одном файле, включенном в «stdafx.h», может повлечь полную перекомпиляцию всего проекта.
6.3. ***Выполнить задание с использованием шаблонов функций и динамических массивов
Для
6.3. ***Выполнить задание с использованием шаблонов функций и динамических массивов
Для
6.3. ***Выполнить задание с использованием шаблонов функций и динамических массивов
template
6.3. ***Выполнить задание с использованием шаблонов функций и динамических массивов
template
T ** mem_ar (size_t n , size_t m); // шаблон выделения памяти матрице
template < class T , size_t n , size_t m>
void zapol (T**, T k); // шаблон заполнения матрицы, k – значение для заполнения
template < class T , size_t n, size_t m >
void vyvod_ar (T**); // шаблон вывода матрицы
int main() cout << "2" << endl; 1-ый способ задания параметров шаблона 2-ой способ задания параметров шаблона
{
const size_t n=5;
cout << "1" << endl;
int k = n;
int** mas = mem_ar
zapol
vyvod_ar
double k1 = n;
double** mas1 = mem_ar
zapol
vyvod_ar
system ("pause");
return 0;
}
int **ar int *ar[n] int ar[n] [m]
template
T
int **ar int *ar[n] int ar[n] [m]
template
T
{
T** ar = new T*[n]; //выделяется память под массив указателей
if (ar == NULL)
{ cout << "ar == 0 " << endl; _getch(); exit(-1); } //проверка!!! выделения памяти
// Функция exit (code) завершает работу программы
//аргумент code указывает статус завершения
// «неуспешное» завершение – отличное от нуля значение или EXIT_FAILURE
for ( size_t i = 0; i < n; i++)
{
ar[i] = new T [m]; // цикл выделения памяти под строку массива
if (ar[i] == NULL)
{ cout << "ar[i]==0" << endl; _getch(); exit (-2); }
//обратить внимание на проверку выделения памяти!!!
}
return ar;
}
template < class T, size_t n, size_t m >
void zapol(T**
template < class T, size_t n, size_t m >
void zapol(T**
{
for (size_t i = 0; i < n; i++)
for (size_t j = 0; j < m; j++)
if ( i != j ) mas[i][j] = 0;
else mas[i][j] = (k-i)/n;
}
template
void vyvod_ar(T **mas)
{
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < m; j++)
cout << setw(7) << mas[i][j];
cout << endl;
}
}
template
T ** mem_ar
template
T ** mem_ar
{
T** ar = new T*[n]; //выделяется память под массив указателей на строки
if (ar == NULL)
{ cout << "ar == 0 " << endl; _getch(); exit(-1); } //проверка!!! выделения памяти
// Функция exit (code), завершает работу программы
//аргумент code указывает статус завершения
//аварийное завершение – отличное от нуля значение или EXIT_FAILURE
for ( size_t i = 0; i < n; i++)
{
ar[i] = new T [m]; // цикл выделения памяти под строку массива
if (ar[i] == NULL) { cout << "ar[i]==0" << endl; _getch(); exit (-2); }
//обратить внимание на проверку выделения памяти!!!
}
return ar;
}
template int** mas = mem_ar 2-ой способ задания параметров шаблона
T ** mem_ar ( );
template
void mem_ar1 (T**& ar, size_t n, size_t
template
void mem_ar1 (T**& ar, size_t n, size_t
{
ar = new T*[n]; //выделяется память под массив указателей на строки
if (ar == NULL)
{ cout << "ar == 0 " << endl; _getch(); exit(-1); } //проверка!!! выделения памяти
// Функция exit (code), завершает работу программы
//аргумент code указывает статус завершения
//аварийное завершение – отличное от нуля значение или EXIT_FAILURE
for ( size_t i = 0; i < n; i++)
{
ar[i] = new T [m]; // цикл выделения памяти под строку массива
if (ar[i] == NULL) { cout << "ar[i]==0" << endl; _getch(); exit (-2); }
//обратить внимание на проверку выделения памяти!!!
}
return ar;
}
template < class T >
void mem_ar1 (T**&, size_t n, size_t m );
int** mas; Функция выделения памяти матрице, 2-ой способ
mem_ar1