Задача:
Написать функцию, которая получает оценку студента по 100 бальной системе и возвращает оценку в 12 бальной системе. (95-100 -> 12, 90-94 -> 11, 85-89 -> 10, 75-85 ->9, 65-74 -> 8, 60 – 64 -> 7, 55-59 -> 6, 50-54 -> 5, 40-49 ->4, 30-39 ->3, 20-29 -> 2, 10-19 -> 1, 0–9 - > 0)
Решение:
#include
#include
#include
#include
#include
using namespace std;
int transform(int a);
void main()
{
int rate;
setlocale (LC_CTYPE,"rus");
cout<<"Введите оценку по 100-бальной шкале: ";
cin>>rate;
cout<}
int transform(int a)
{
int x;
if (a>=95)
x=12;
else
if (a>=90)
x=11;
else
if (a>=85)
x=10;
else
if (a>=75)
x=9;
else
if (a>=65)
x=8;
else
if (a>=60)
x=7;
else
if (a>=55)
x=6;
else
if (a>=50)
x=5;
else
if (a>=40)
x=4;
else
if (a>=30)
x=3;
else
if (a>=20)
x=2;
else
if (a>=10)
x=1;
else
x=0;
return x;
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите оценку по 100-бальной шкале: 78
9
Для продолжения нажмите любую клавишу . . .
Задача2:
Написать функцию, которая принимает целое число и возвращает истину, если число является простым, в противном случае – ложь. Проверить, являются ли простыми N введенных с клавиатуры целых чисел. Число N также задается пользователем с клавиатуры
Решение:
#include
#include
#include
#include
#include
using namespace std;
bool div(int);
void main()
{
int rate;
setlocale (LC_CTYPE,"rus");
cout<<"Введите число: ";
cin>>rate;
cout<}
bool div(int num)
{int i, cf=0;
bool x;
for (i=1;i {
if(i!=1&&i!=num&&num%i==0)
{cf++;}
}
if(cf>0)
x=0;
else
x=1;
return x;
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите число: 13
1
Для продолжения нажмите любую клавишу . . .
Задача3:
Написать функцию, которая принимает длину линии из звездочек и рисует вертикальную или горизонтальную линию (расположение линии также задается в качестве параметра функции).
Решение:
#include
#include
#include
#include
#include
using namespace std;
void stars(int, int);
void main()
{
int rate, orint;
setlocale (LC_CTYPE,"rus");
cout<<"Введите длинну: ";
cin>>rate;
cout<<"Введите ориентацию, 0 - горизонтально, 1 - вертикально: ";
cin>>orint;
stars(rate,orint);
}
void stars(int num, int or)
{
int i;
for (i=1;i<=num;i++)
{
if(or==0)
{cout<<"*";}
else
{cout<<"*\n";}
}
cout<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите длинну: 5
Введите ориентацию, 0 - горизонтально, 1 - вертикально: 1
*
*
*
*
*
Для продолжения нажмите любую клавишу . . .
Задача4:
Используя функцию, написанную в задании 3, напишите функцию, которая рисует прямоугольник из звездочек шириной и высотой, заданной пользователем. Ширина и высота задаются в качестве параметров функции.
Решение:
#include
#include
#include
#include
#include
using namespace std;
void stars(int, int);
void main()
{
int rate, orint;
setlocale (LC_CTYPE,"rus");
cout<<"Введите длинну: ";
cin>>rate;
cout<<"Введите ширину: ";
cin>>orint;
stars(rate,orint);
}
void stars(int num, int or)
{
int i, j;
for (i=1;i<=num;i++)
{
if(i==1||i==num)
{
for (j=1;j<=or;j++)
cout<<"*";
}
else
{
for(j=1;j<=or;j++)
{
if(j==1||j==or)
{cout<<"*";}
else
{cout<<" ";}
}
}
cout<}
cout<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите длинну: 6
Введите ширину: 5
*****
* *
* *
* *
* *
*****
Для продолжения нажмите любую клавишу . . .
Урок 8. C/C++ Функции часть 2. Перегрузка функций. Шаблоны. Рекурсия.
Перегруженная функция - это совокупность функций с одинаковым именем, которые отличаются типами данных и/или количеством принимаемых параметров.
Сделаем функции которые возводят в квадрат переданное значение
Например:
#include
#include
using namespace std;
int sq(int x)
{
return x*x;
}
double sq(double x)
{
return x*x;
}
int sq(int x, int sx)
{
int tmp=x;
for(int i=0;ix*=tmp;
return x;
}
double sq(double x, int sx)
{
double tmp=x;
for(int i=0;ix*=tmp;
return x;
}
void main()
{
setlocale (LC_CTYPE,"rus");
int num, n;
double dnum;
cout<<"Введите целое число для возведения в степень\n";
cin>>num;
cout<<"Квадрт = "<cout<<"Введите вещественное число для возведения в степень\n";
cin>>dnum;
cout<<"Квадрт = "<cout<<"Введите целое число и степень\n";
cin>>num>>n;
cout<<"В степени = "<cout<<"Введите вещественное число и степень\n";
cin>>dnum>>n;
cout<<"В степени = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Введите целое число для возведения в степень
2
Квадрт = 4
Введите вещественное число для возведения в степень
2.5
Квадрт = 6.25
Введите целое число и степень
2 5
В степени = 64
Введите вещественное число и степень
2.5 5
В степени = 244.141
Для продолжения нажмите любую клавишу . . .
Как мы видим в программе выше, все функции имеют одинаковое имя, однако различаются типами и количеством принимаемых параметров, это удобно если мы производим схожие действия над различными типами данных при этом не нужно называть каждую функцию уникальным именем, достаточно передать ей соответствующий тип данных и компилятор сам выберет соответствующую функцию.
Шаблон функции - позволяет запрограммировать нужный нам алгоритм при этом не отталкиваясь от какого-то типа данных, то есть мы создаем функцию, которой все равно работать с типом double или int.
Синтаксис:
template
DataType>
DataType sq(DataType x)
{
return x*x;
}
Сделаем функции которые возводят в квадрат переданное значение как в примере выше, только с использованием шаблонов
Например:
#include
#include
using namespace std;
template
DataType sq(DataType x)
{
return x*x;
}
template
DataType sq(DataType x, int sx)
{
int tmp=x;
for(int i=0;ix*=tmp;
return x;
}
void main()
{
setlocale (LC_CTYPE,"rus");
int num, n;
double dnum;
cout<<"Введите целое число для возведения в степень\n";
cin>>num;
cout<<"Квадрт = "<cout<<"Введите вещественное число для возведения в степень\n";
cin>>dnum;
cout<<"Квадрт = "<cout<<"Введите целое число и степень\n";
cin>>num>>n;
cout<<"В степени = "<cout<<"Введите вещественное число и степень\n";
cin>>dnum>>n;
cout<<"В степени = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Введите целое число для возведения в степень
2
Квадрт = 4
Введите вещественное число для возведения в степень
2.5
Квадрт = 6.25
Введите целое число и степень
2 5
В степени = 64
Введите вещественное число и степень
2.5 5
В степени = 244.141
Для продолжения нажмите любую клавишу . . .
Рекурсивной - называется функция, которая вызывает саму себя, как косвенно(из другой функции), так и напрямую. При составлении рекурсивного вызова нужно определить базовую задачу, т.е. простейший вариант задачи на который можно сразу же дать ответ, например сколько будет x в степени 1, сразу понятно что это будет просто x, также следует учесть и вариант x в 0 степени - это 1. Все мы с вами решили базовые задачи для возведения числа в степень. Теперь займемся рекурсивным вызовом - итак задача - возвести x в степень y, итак нам известен ответ на задачу, когда y=1 и y=0. При рекурсивном вызове нам нужно изменять переменную y так, чтобы она стала равна 1. Мы будем отнимать от y по 1 и в тоже время умножать на x, x*функция(x, y-1) - она будет вызываться до тех пор пока y==1 - сработает условие базовой задачи. Ниже можете просмотреть пример этой задачи.
Сделаем рекурсивную функцию которая вычисляет x в степени y
Например:
#include
#include
using namespace std;
int sq(int x, int y)
{
if(y==0)
return 1;
if(y==1)
return x;
else
return x*sq(x, y-1);
}
void main()
{
setlocale (LC_CTYPE,"rus");
int num, n;
double dnum;
cout<<"Введите целое число и степень\n";
cin>>num>>n;
cout<<"В степени = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Введите целое число и степень
2 4
В степени = 16
Для продолжения нажмите любую клавишу .
Задача:
Написать функцию, которая рекурсивно вычисляет сумму чисел в заданном диапазоне.
Решение:
#include
#include
using namespace std;
int arif(int , int);
void main()
{
int a,b;
setlocale (LC_CTYPE,"rus");
cout<<"Введите диапазон от и до"<cin>>a>>b;
if(a{cout<<"Сумма чисел диапазона от "<else
{cout<<"Сумма чисел диапазона от "<}
int arif(int n1, int n2)
{
if(n1==n2)
{return n2;}
return n1+arif(n1+1,n2);
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите диапазон от и до
32 23
Сумма чисел диапазона от 23 до 32 = 275
Для продолжения нажмите любую клавишу . . .
Задача2:
Написать шаблон функции для поиска среднего арифметического значений массива.
Решение:
#include
#include
using namespace std;
template double mid(A ar[], int N);
template void key(A ar[], int N);
void main()
{
const int N=10;
int t[N];
double t2[N];
setlocale (LC_CTYPE,"rus");
key(t,N);
cout<<"Среднее :"<key(t2,N);
cout<<"Среднее :"<}
template double mid(A ar[], int N)
{
A sm=0;
for (int i=0; ism+=ar[i];
return sm/N;
}
template void key(A ar[], int N)
{
cout<<"Введите "<for (int i=0; icin>>ar[i];
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите 10 значений
1 2 3 4 5 6 7 8 9 10
Среднее :5
Введите 10 значений
1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 10.10
Среднее :5.96
Для продолжения нажмите любую клавишу . . .
Задача3:
Написать перегруженные шаблоны функций для нахождения корней линейного (a*x + b = 0) и квадратного (a*x2+b*x + c = 0) уравнений. Замечание: в функции передаются коэффициенты уравнений.
Решение:
#include
#include
#include
using namespace std;
template double lin(A a, A b);
template void sq(B a, B b, B c);
void main()
{
double a,b,c;
setlocale (LC_CTYPE,"rus");
cout<<"Введите коэффициенты a и b для линейной функции a*x+b=0 :"<cin>>a>>b;
cout<<"x = "<cout<<"Введите коэффициенты a, b и c для квадратной функции a*x+b+с=0 :"<cin>>a>>b>>c;
sq(a,b,c);
}
template double lin(A a, A b)
{
return -b/a;
}
template void sq(B a, B b, B c)
{
double d,x1,x2;
d=b*b-4*a*c;
if(d<0)
{cout<<"корней нет";}
else
if(d==0)
{x1=-b/2*a;
cout<<"x1 = "<}
else
{x1=(-b-sqrt(d))/2*a;
x2=(-b+sqrt(d))/2*a;
cout<<"x1 = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите коэффициенты a и b для линейной функции a*x+b=0 :
1 2
x = -2
Введите коэффициенты a, b и c для квадратной функции a*x+b+с=0 :
1 9 -36
x1 = -12
x2 = 3
Для продолжения нажмите любую клавишу . . .
Достарыңызбен бөлісу: |