Вы находитесь на странице: 1из 4

Задания к самостоятельной работе

1. Напишите программу, которая использует шаблон функции


maximum для поиска максимального из трех целых чисел, трех чисел с
плавающей запятой и трех символов.
#include <iostream>

using namespace std;

template <class T>


T maximum( T n,T m, T l);

int main() {
int a, b, c;
double d, e, f;
char g, h, i;
cout<<"Enter 3 integers,raional numbers and 3 symbols
consequently"<<endl;
cin >> a >> b >> c;
cin >> d >> e >> f;
cin >> g >> h >> i;
cout <<"Max of integers = " << maximum(a, b, c) << endl;
cout <<"Max of rational numbers = " << maximum(d, e, f) << endl;
cout <<"Max of symbols = "<<maximum(g, h, i) << endl;
}
template <class T>
T maximum(T n, T m, T l) {
T maxel;
maxel = max(n,max(m,l));
return maxel;
}
2. Напишите программу, которая использует шаблон функции по
имени min для определения наименьшего из трех аргументов. Проверьте
программу, используя пары целых чисел, символов и чисел с плавающей
запятой.
#include <iostream>

using namespace std;

template <class T>


T minimum( T n,T m, T l);

int main() {
int a, b, c;
double d, e, f;
char g, h, i;
cout<<"Enter 3 integers,raional numbers and 3 symbols
consequently"<<endl;
cin >> a >> b >> c;
cin >> d >> e >> f;
cin >> g >> h >> i;
cout <<"Min of integers = "<< minimum(a, b, c) << endl;
cout <<"Min of rational numbers = " << minimum(d, e, f) << endl;
cout <<"Min of symbols = " << minimum(g, h, i) << endl;
}
template <class T>
T minimum(T n, T m, T l) {
T minel;
minel = min(n,min(m,l));
return minel;
}
3. Определите, содержат ли следующие фрагменты программы
ошибки. Для каждой ошибки укажите, как она может быть исправлена.
Замечание: в некоторых фрагментах ошибки могут отсутствовать.
a) template < class A >
int sum ( int numl , int num2, int num3 )
{ return numl + num2 + num3; )
 Неправильное прсивоение во второй
строчке оно должно быть типа ‘A’ :
Template < class A >
A sum (A num1,A num2,A num 3){
return num1+num2+num3
}
Плюс скобка в конце поставлена
неправильно.
b) void printResults ( int x, int y )
{ cout « "Сумма равна " « x + у « ' \n' ;
return x + y; }
 Тип void не подразумевает возвращение каких либо
данных, следственно “return” тут не нужен :
void printResults ( int x, int y ){
cout « "Сумма равна " « x + у « ' \n' ≪x+y≪

c) template < class A>


A product ( A numl, A num2, A num3 )
{ return numl * num2 * num3; }
 Ошибок не вижу
d) double cube ( int ) ;
int cube ( int );
 Вводимые значения у двух функций одинаковые, при
перегрузке функции они должны быть разного типа

4. Ряд Фибонначи состоит из чисел, каждое из которых является


суммой двух предыдущих(1, 1, 2, 3, 5, 8, 13, …). Найти n-ный элемент ряда,
используя рекурсию.
#include <iostream>

using namespace std;

int fib(int number);

int main()
{
int n;
cin>>n;
int ind;
for (int i=1; i <= n; i++){
fib(i);
ind = fib(i);
}
cout<<ind;
return 0;
}
int fib(int number){
if (number == 0)
return 0;
if (number == 1)
return 1;
return fib(number-1) + fib(number-2);
}

5. Наибольший общий делитель (НОД) двух целых чисел х и у —


это наибольшее целое, на которое без остатка делится каждое из двух
чисел. Напишите рекурсивную функцию nod, которая возвращает
наибольший общий делитель чисел х и у. НОД для х и у опреде ляется
рекурсивно следующим образом: если у равно 0, то nod(x, у) возвращает х; в
противном случае nod(x, у) равняется nod(y, х % у), где % — это операция
вычисления остатка.
#include <iostream>

using namespace std;


int NOD(int x, int y);

int main(){
int a, b;
cin>>a>>b;
cout<<NOD(a,b);
return 0;
}
int NOD(int x, int y){
if (y == 0)
return x;
else
return NOD(y, x%y);
}