Функции и перегрузка в языке C++
Закрепление знаний о функциях и перегрузке. Составление программ с функциями и перегрузкой. Использование нескольких функций с одним и тем же именем, но с разными списками параметров. Определение шаблона функции. Доступ к данным, организованным в файлы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 17.06.2024 |
Размер файла | 331,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Филиал федерального государственного автономного образовательного учреждения высшего образования
«Национальный исследовательский технологический университет «МИСИС» в городе Алмалык Республики Узбекистан
Лабораторная работа
по дисциплине: «ОПиА»
Функции и перегрузка в языке C++
Выполнил(а): Холхожаев Хусанхожа
Группы:1 З-22ГД
Принял: проф. Уринов Ш.Р.
Алмалык - 2024 год
Цель работы и содержание: закрепление знаний о функциях и перегрузке, составление программ с функциями и перегрузкой.
Ход работы:
Функция - это группа операторов, выполняющая законченное действие. К функции можно обратиться по имени, передать ей значения и получить из нее результат.
Формат простейшего заголовка (прототипа) функции:
тип имя ([список параметров]);
В квадратных скобках записано то, что может быть опущено. Например, заголовок функции main обычно имеет вид:
int main( );Примеры:
int sum(int a,int b) /* функция находит сумму двух значений */
{
return a + b; // тело функции
}Перегрузка функций.
Перегрузкой функций называется использование нескольких функций с одним и тем же именем, но с различными списками параметров. Перегруженные функции должны отличаться друг от друга либо типом хотя бы одного параметра, либо количеством параметров, либо и тем и другим одновременно.
Небольшие перегруженные функции удобно применять при отладке программ. Допустим, вам требуется промежуточная печать различного вида: в одном месте требуется выводить на экран структуру, в другом - пару целых величин с пояснениями или вещественный массив.
Шаблоны функций.
Шаблон функции определяется следующим образом:
template <class тип>
тип имя ([список параметров])
{
/* тело функции */
}
1. Пример решение задачи с помощью рекурсию. Напишите рекурсивную функцию для нахождения биномиальных коэффициентов (для заданного ? i ? j > 0 вычислите все ):
// Листинг программы:
#include <iostream>
#include <conio.h>
using namespace std;
int C(int m, int n)
{
if (m < 0 || n < 0 && n < m)
{ return 0; }
if (m == 0 || m == n)
{ return 1; }
return C(m, n - 1) + C(m - 1, n - 1);
}
int main()
{
int m, n;
cout << "Vvedite m: "; cin >> m;
cout << "Vvedite n: "; cin >> n;
cout << C(m,n) << endl;
_getch();
}
Результат:
2. Пример решение задачи с помощью рекурсию. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
// Листинг программы:
#include <Windows.h>
#include <iostream>
#include <cmath>
using namespace std;
double IntPow(double x, int n)
{ double r = 1;
for (int i = 0; i <= n; i++) { r *= x; }
return r;
}
double Integral(double a, double b, double x,int n)
{
if (n > 2) { return (-1 * ((IntPow(sin(x), n - 1) * cos(x)) / n) + ((n - 1) / n) * Integral(a, b, x, n - 2)); }
else if (n == 2) { return (x / 2) - (1 / 4) * sin(2 * x); }
else if (n == 1) { return -cos(x); }
}
int main()
{
SetConsoleOutputCP(1251); // Инициализация кириллица
int a, b, n, x;
cout << "Введите пределы интегрирования:" << endl;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "Введите степень: " << "n = "; cin >> n;
cout << "Введите x: " << "x = "; cin >> x;
cout << Integral(a, b, x, n);
return 0;
}
Индивидуальное задание № 1
Вариант № 8
Постановка задачи:
выполнить задание, оформив каждый пункт в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
Задача:
построить результат сглаживания заданной вещественной матрицы размером 10 на 10. В сглаженной матрице найти сумму модулей элементов, расположенных выше главной диагонали. Ввод и вывод данных в программе осуществить с помощью файла.
Примечание. Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы.
Листинг программы:
// Лабораторная работа № 7
// Индивидуальное задание № 1
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int sort_array(int ncol, int nrow);
int sort_array(int ncol, int nrow)
{
ifstream fin("input.txt",ios::in);
if (!fin)
{ cout << "Can't find input.txt" << endl; return 1; }
ofstream fout("output.txt");
if (!fout)
{ cout << "Write falure: check permission" <<endl; return 1; }
int k, l, k1, l1, counter, i, j;
double sum,sumdiag = 0;
double a[nrow][ncol];
cout << "Чтение данных из файла..." << endl;
for(i = 0; i < nrow; i++)
for(j = 0; j < ncol; j++)
fin >> a[i][j];
cout << "Обработка данных..." << endl;
counter = 0;sum = 0; l = 0; l1 = 0;
double m[nrow][ncol];
//calculate neighbour' sum & sum diagonalies
for(i = 0; i < nrow; i++)
for(j = 0; j < ncol; j++)
{ k = i -1; k1 = i + 1;
if (k<0) k++;
if (k1 > ncol- 1) k1--;
if ((j <= ncol - 1)&&(j >= ncol - i)) sumdiag = sumdiag+a[i][j];
for(k; k <= k1; k++)
{
l = j - 1; l1 = j + 1;
if (l < 0) l++;
if (l1 > ncol - 1) l1--;
for(l; l <= l1; l++)
if ((k == i) && (l == j)) continue;
else
{ sum = sum + a[k][l];
counter++; }
}
m[i][j] = (float) sum/counter;
sum = 0; counter = 0;
}
for(i = 0; i < nrow; i++)
{
fout << endl;
for(j = 0; j < ncol; j++)
fout << setw(5) << left << setprecision(3) << m[i][j] <<" ";
}
fout << endl;
fout << "Сумма эл-ов ниже главной диагонали: "
<< setw(5) << setprecision(9) << sumdiag << endl;
return 0;
}
int main()
{
setlocale(LC_ALL, "RUSSIAN");
const int nrow = 10;
const int ncol = 10;
if (!sort_array(ncol,nrow))
{ cout<<"Запись результатов обработки в файл..."<<endl;
cout<<"Обработка успешно закончена!"<<endl;
return 0; }
else
{ cout<<"Ошибка обработки данных!"<<endl;
return 1; }
}
Результаты работы программы:
Файл для входных данных: input.txt
18.23 19.11 20.42 21.23 32.20 43.34 32.66 45.44 66.23 23.45
15.02 78.36 22.31 23.00 21.10 87.39 73.18 89.43 61.57 56.56
18.23 19.11 20.42 21.23 32.20 43.34 32.66 45.44 66.23 23.45
15.02 78.36 22.31 23.00 21.10 87.39 73.18 89.43 61.57 56.56
18.23 19.11 20.42 21.23 32.20 43.34 32.66 45.44 66.23 23.45
15.02 78.36 22.31 23.00 21.10 87.39 73.18 89.43 61.57 56.56
18.23 19.11 20.42 21.23 32.20 43.34 32.66 45.44 66.23 23.45
15.02 78.36 22.31 23.00 21.10 87.39 73.18 89.43 61.57 56.56
18.23 19.11 20.42 21.23 32.20 43.34 32.66 45.44 66.23 23.45
15.02 78.36 22.31 23.00 21.10 87.39 73.18 89.43 61.57 56.56
Файл для выходных данных: output.txt
37.5 30.9 32.8 23.8 39.2 49.3 67.8 64.6 55.3 61.5
30.6 19.1 27.9 23.9 38 38.8 52.5 52.9 52 48.2
41.2 33.8 36 23.2 40.9 53.5 73.6 68.4 60.5 60.5
30.6 19.1 27.9 23.9 38 38.8 52.5 52.9 52 48.2
41.2 33.8 36 23.2 40.9 53.5 73.6 68.4 60.5 60.5
30.6 19.1 27.9 23.9 38 38.8 52.5 52.9 52 48.2
41.2 33.8 36 23.2 40.9 53.5 73.6 68.4 60.5 60.5
30.6 19.1 27.9 23.9 38 38.8 52.5 52.9 52 48.2
41.2 33.8 36 23.2 40.9 53.5 73.6 68.4 60.5 60.5
38.6 19 32.4 23.5 41.4 40.5 59.7 55.8 56.2 50.4
Сумма эл-ов ниже главной диагонали: 2343.13
Вывод программы на экран
Индивидуальное задание № 2
Вариант № 8
Постановка задачи:
выполнить задания согласно варианта индивидуального задания № 1 лабораторной работы № 7, оформив в виде функций законченные последовательности действий. Все необходимые данные для функций должны передаваться им в качестве параметров.
Использование глобальных переменных в функциях не допускается.2.2. Листинг программы:
// Лабораторная работа № 7
// Индивидуальное задание № 2
// Вариант № 8
// Задание: Считать текст из файла.
// Вывести на экран только предложения, состоящие из заданного количества слов
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int readfile(string fileName)
{
ifstream fin(fileName.c_str(),ios::in);
if (!fin)
{
cout << "Ошибка открытия файла" << endl;
return 1;
}
int nword;
cout << "Введите искомое число слов в предложении: ";
cin >> nword;
fin.seekg(0,ios::end);
int len = fin.tellg();
char *buf = new char [len + 1];
fin.seekg(0,ios::beg);
fin.read(buf,len);
buf[len] = '\0';
int l_beg = 0, i = 0, n = 0, j = 0;
bool exist;
exist = false;
while (buf[i])
{
if (buf[i] == '?') n++;
if (buf[i] == '.')
{
n++;
if (n == nword)
{
for(j = l_beg; j <= i; j++)
cout << buf[j];
exist = true;
cout << endl;
}
l_beg = i + 2;
i = i + 2;
n = 0;
}
i++;
}
if (!exist)
cout << "Таких предложений не найдено" << endl;
fin.close();
return 0;
}
int main()
{
setlocale( LC_ALL, "Russian" );
cout <<"\n"
<<"\t Лабораторная работа № 7\n \n"
<<"------------------------------------------\n"
<<"Задание: Считать текст из файла."
<<"Вывести на экран только предложения, \n"
<<"\t состоящие из заданного количества слов\n"
<<"-----------------------------------------\n";
string str;
cout << "Какой файл открыть ?";
cin >> str;
readfile(str);
return 0;
}
Результат работы программы:
Файл для входных данных: text.txt
Под файловой системой (ФС) будем понимать набор спецификаций, отвечающих за создание, уничтожение, организацию, а также управление доступом к именованным областям памяти (файлам). Как правило, все современные операционные системы имеют соответствующее ФС специфическое программное обеспечение, называемое системой управления файлами (СУФ).
Несмотря на то, что понятия "ФС" и "СУФ" в большинстве источников отождествляют, в некоторых ситуациях важно помнить их отличия. Термин "ФС" определяет, прежде всего, принципы доступа к данным, организованным в файлы, а термин "СУФ" следует употреблять по отношению к конкретной реализации ФС, то есть комплекс программных модулей, обеспечивающих работу с файлами в конкретной операционной системе.
В настоящее время количество ФС измеряется сотнями, причем по около 120-ти из них доступна документация в интернете. Среди этого числа автор выделяет 12 современных ФС, то есть ФС, получивших в настоящее время более широкое распространение.
Индивидуальное задание № 3
Вариант № 8
Постановка задачи:
дан вектор X из n вещественных чисел. Найти минимальный элемент вектора, используя вспомогательную рекурсивную функцию, находящую минимум среди последних элементов вектора X, начиная с n-гo.
Листинг программы:
// Лабораторная работа № 7
// Индивидуальное задание № 3
// Вариант № 8
#include <iostream>
#include <math.h>
using namespace std;
float sort_array(float array[], int size, int pos)
{float sort_array(float array[], int size, int pos)
{
float min = array[pos];
pos++;
for(int i = pos; i < 7; i++)
{
if (array[i] < min) min = array[i];
sort_array(array, size, pos);
}
return min;
}
int main()
{
setlocale( LC_ALL, "Russian" );
int size = 0;
cout << "Введите количество элементов вектора X: ";
cin >> size;
float *array = new float [size];
for(int i = 0; i < size; i++)
{
cout << "Введите " <<i<< " элемент вектора X: ";
cin >> array[i];
}
int pos = 0;
cout << "С какого элемента начать сортировку? ";
cin >> pos;
cout << endl;
cout << "Ввод данных закончен...\n";
cout << "Идет процесс сортировки...\n";
cout << "Минимальный элемент вектора X: "
<< sort_array(array,size,pos) << "\n";
float min = array[pos];
pos++;
for(int i = pos; i < 7; i++)
{
if (array[i] < min) min = array[i];
sort_array(array, size, pos);
}
return min;
}
int main()
{
setlocale( LC_ALL, "Russian" );
int size = 0;
cout << "Введите количество элементов вектора X: ";
cin >> size;
float *array = new float [size];
for(int i = 0; i < size; i++)
{
cout << "Введите " <<i<< " элемент вектора X: ";
cin >> array[i];
}
int pos = 0;
cout << "С какого элемента начать сортировку? ";
cin >> pos;
cout << endl;
cout << "Ввод данных закончен...\n";
cout << "Идет процесс сортировки...\n";
cout << "Минимальный элемент вектора X: "
<< sort_array(array,size,pos) << "\n";
return 0;
}
Результаты работы программы:
Вывод программы на экран
Содержание отчета и его форма.
Отчет по лабораторной работе должен состоять из:
1. Названия лабораторной работы.
2. Цели и содержания лабораторной работы.
3. Ответов на контрольные вопросы лабораторной работы.
4. Формулировки индивидуальных заданий и порядка их выполнения.
Отчет о выполнении лабораторной работы в письменном виде сдается преподавателю.
Вопросы для защиты работы
1. Что представляет собой функция в С++? Что нужно для ее использования?
2. Приведите пример заголовка функции.
3. Что включает в себя определение функции?
4. В чем отличие функции от других программных объектов?
5. Каким образом происходит вызов функции?
6. Охарактеризуйте существующие способы решения проблемы получения из подпрограммы признака ее аварийного завершения.
7. Каков механизм передачи параметров в функцию?
8. Способы передачи входных данных.
9. Что представляет собой средство С++, называемое значениями параметров по умолчанию?
10. Каким образом происходит передача в функцию имени функции?
11. Каким образом происходит передача одномерных массивов в функцию?
12. Каким образом происходит передача строк в функцию?
13. Каким образом происходит передача двумерных массивов в функцию?
14. Каким образом происходит передача структур в функцию?
15. Какая функция называется рекурсивной? Преимущества и недостатки рекурсии.
16. Что называется перегрузкой функций? Перечислите правила описания перегруженных функций.
17. Область применения шаблонов.
18. Что такое инстанцирование? Способы инстанцирования шаблона.
Методика и порядок выполнения работы.
Перед выполнением лабораторной работы каждый студент получает индивидуальное задание в соответствии с индивидуальным заданием лабораторной работы № 7. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.
Порядок выполнения работы:
1. Проработать примеры, приведенные в лабораторной работе.
2. Выполнить задания согласно варианта индивидуального задания №1 лабораторной работы №7, оформив каждый пункт задания в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
3. Выполнить задания согласно варианта индивидуального задания № 1 лабораторной работы № 7, оформив каждый пункт задания в виде шаблона функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
4. В соответствии с вариантом, используя прямую рекурсию, написать и выполнить программу. Номер варианта определяется по номеру студента по списку преподавателя.
Индивидуальное задание
Вариант:
1. Напечатать в обратном порядке последовательность чисел, признаком конца которой является 0.
2. Для n = 12 найти числа Фибоначчи. Числа Фибоначчи: F(0) = 1, F(1) = 1 F(n) = F(n ? 2) + F(n ? l)
3. Даны целые числа m и n, где 0 ? m ? n, вычислить, используя рекурсию, число сочетаний (n,m) по формуле: при 0 ? m ? n. Воспользовавшись формулой , можно проверить правильность результата.
4. Опишите рекурсивную функцию, которая по заданным вещественному x и целому п вычисляет величину xn согласно формуле:
5. Задана последовательность положительных чисел, признаком конца которых служит отрицательное число. Используя рекурсию, подсчитать количество чисел и их сумму.
6. Дан вектор X из n вещественных чисел. Найти минимальный элемент вектора, используя вспомогательную рекурсивную функцию, находящую минимум среди последних элементов вектора X, начиная с n-гo.
7. Напишите рекурсивную функцию для нахождения биномиальных коэффициентов (для заданного ? i ? j > 0 вычислите все ):
8. Напишите программу вычисления функции Аккермана для всех неотрицательных целых аргументов m и n:
9. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
10. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
11. Напишите рекурсивную функцию, которая вычисляет по следующей формуле:
здесь n = 0, 1, 2, . . .. За ответ принять приближение, для которого выполняется условие , где е = 0, 0001.12. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
13. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
14. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
15. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида
16. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
17. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
18. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
19. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
20. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
21. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
22. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
23. Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида:
программа перегрузка шаблон файл
Размещено на Allbest.ru
...Подобные документы
Понятия шаблонов функции и класса, правила описания на языке С++. Разработка и отлаживание в среде программирования программ, содержащих шаблоны функций и классов. Шаблон функции square, возвращающей квадрат переменной. Создание шаблона класса массива.
лабораторная работа [162,6 K], добавлен 25.05.2013Ознакомление с особенностями применения функций в языке Си++. Рассмотрение понятия прототипа, определение областей его применения. Изучение сущности автоматических, статистических и регистровых переменных, их использование при составлении программ.
лабораторная работа [24,0 K], добавлен 15.07.2010Описание структурного шаблона с именем ZNAK, содержащего элементы NAME, ZODIAC, BDAY. Операции со структурами в языке Си. Подключение графической библиотеки программы. Указатель как переменная, содержащая адрес некоторого объекта в памяти компьютера.
контрольная работа [342,9 K], добавлен 10.01.2012Использование математических функций для алгоритмизации задач и отладки программ. Операторы сравнения и логические функции; реализация циклического процесса. Организация и обработка данных при помощи массивов. Функции преобразования и работы со строками.
методичка [135,5 K], добавлен 24.10.2012Определение понятия подпрограммы и функции. Примеры стековых кадров. Параметры и возвращаемое значение функции. Переменное число принимаемых параметров. Время жизни и область видимости переменных. Ограничения на функции с переменным числом параметров.
презентация [83,4 K], добавлен 19.10.2014Описание работы ЭВМ при выполнении программы по указанной блок-схеме и исходным данным. Составление линейной программы на языке Basic в виде подпрограммы-функции для вычисления заданной величины. Разработка в ЭТ Excel макроса для указанной функции.
контрольная работа [765,6 K], добавлен 16.10.2011Понятие процедур и функций, их параметры, отличия и особенности спецификаций и тела. Вызов процедур и функций. Использование хранимых функций в SQL-операторах, уровни строгости для их вызова. Синтаксис удаления процедуры. Перегрузка модульных подпрограмм.
презентация [259,9 K], добавлен 14.02.2014Разработка линейной программы на языке С++. Разработка программ с разветвленной структурой. Составление по заданному варианту схемы алгоритма и программы вычисления тригонометрической функции с абсолютной погрешностью с использованием разложения в ряд.
лабораторная работа [1,2 M], добавлен 12.01.2011Рассмотрение особенностей объявления функций на языке СИ. Определение понятий аргументов функции и их переменных (локальных, регистровых, внешних, статических). Решение задачи программным методом: составление блок-схемы, описание функций main и sqr.
презентация [125,5 K], добавлен 26.07.2013Принципы разработки математических моделей, алгоритмов и программ. Составление программы вычисления функции с использованием нестандартных функций. Нахождение значения корней нелинейного уравнения по методу касательных. Программа для вычисления интеграла.
курсовая работа [568,3 K], добавлен 07.03.2015Компиляция программ на языке C/C++. Компиляция нескольких файлов. Библиотеки объектных файлов. Создание статической и динамической библиотеки. Функции работы. Создание динамической библиотеки для решения системы линейных уравнений.
курсовая работа [27,4 K], добавлен 07.08.2007Формулы как выражение состоящее из числовых величин, соединеных знаками арифметических операций. Аргументы функции Excel. Использование формул, функций и диаграмм в Excel. Ввод функций в рабочем листе. Создание, задание, размещение параметров диаграммы.
реферат [315,9 K], добавлен 08.11.2010Символьные типы данных, работа со строками, составление блок-схемы алгоритма и программы для работы с массивами. Организация программы с использованием процедур и функций. Процедуры и функции, использующиеся при обработке файлов; компонентные файлы.
контрольная работа [52,9 K], добавлен 03.10.2010Выполнение заданий на вычисление функции на указанном диапазоне и построение графика функции. Нахождение суммы числового ряда. Нахождение корней уравнения командой "Подбор параметра". Описание технологии работы со списками в электронной таблице Excel.
контрольная работа [35,3 K], добавлен 15.11.2010Основные программы обработки электронных таблиц. Основные финансовые функции Exel, их синтаксис и значение. Основная роль финансовой функции. Перечень финансовых функций. Определение срока платежа и процентной ставки. Механизм подбора параметров.
реферат [291,2 K], добавлен 03.07.2015Использование нестандартных функций и подпрограмм (процедур) для составления алгоритмов вычислений. Программы для вычисления значение корней нелинейного уравнения по методу половинного деления. Составление алгоритма операций над матрицами и интегралами.
курсовая работа [580,0 K], добавлен 23.08.2015Массив как пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Расположение в последовательных ячейках памяти, обозначение именем массива и индексом, инициализация. Передача одномерных и двумерных массивов в функцию.
лабораторная работа [32,6 K], добавлен 06.07.2009Подбор параметров линейной функции. Вычисление значения функции в заданных промежуточных точках с использованием математических пакетов. Исследование математической модели решения задачи. Составление программы для вычисления коэффициента корреляции.
курсовая работа [2,3 M], добавлен 21.10.2014Описание функций, использующихся в программах. Основы 32-битного программирования на языке Assembler для ОС WINDOWS. Использование функции invoke, которая позволяет намного сократить текст программы и делает приложения похожими на программы для "ЯВы".
курсовая работа [252,6 K], добавлен 20.02.2015Характеристика предприятия ТОО "Com Sales Group". Составление программ на языке программирования. Составление алгоритмов, разработка численных методов решения задач. Методы откладки программ. Анализ технологии машинной обработки экономической информации.
отчет по практике [1,3 M], добавлен 19.04.2016