Решение модуля 1.9 Введение в программирование C++

Модуль 1.9 (Функции и рекурсия)  в данном модуле будет изучена функция — это части программы, которые можно повторно вызывать с разными параметрами, чтобы не писать много раз одно и то же. 
Ниже представлены примеры задач с решением на C++ на тему Функции и рекурсия.

Напишите функцию min(a, b), вычисляющую минимум двух чисел. Затем напишите функцию min4(a, b, c, d), вычисляющую минимум 4 чисел с помощью функции min. Считайте четыре целых числа и выведите их минимум.

#include <iostream>

using namespace std;

int min(int a, int b) {
	int min;
	(a > b) ? min = b : min = a;
	return min;
}

int min4(int a, int b, int c, int d) {
	int minim;
	(min(a,b) > min(c,d)) ? minim = min(c, d) : minim = min(a, b);
	return minim;
}

int main()
{
	int a, b, c, d;
	cin >> a >> b >> c >> d;
	cout << min4(a,b,c,d);
	return 0;
}

Даны четыре действительных числа: x1, y1, x2, y2. Напишите функцию distance(x1, y1, x2, y2), вычисляющую расстояние между точкой (x1. y1) и (x2, y2). Считайте четыре действительных числа и выведите результат работы этой функции.

#include <iostream>
#include <cmath>

using namespace std;

float distance(float a, float b, float c, float d) {
	float result;
	result = sqrt(pow((c-a), 2) + pow((d-b), 2));
	return result;
}

int main()
{
	float a, b, c, d;
	cin >> a >> b >> c >> d;
	cout << distance(a,b,c,d);
	return 0;
}

Даны два действительных числа x и y. Проверьте, принадлежит ли точка с координатами (x, y) заштрихованному квадрату (включая его границу). Если точка принадлежит квадрату, выведите слово YES, иначе выведите слово NO. На рисунке сетка проведена с шагом 1.

Решение модуля 1.9 Введение в программирование C++

Решение должно содержать функцию IsPointInSquare(x, y), возвращающую true, если точка принадлежит квадрату и false, если не принадлежит. Основная программа должна считать координаты точки, вызвать функцию IsPointInSquare и в зависимости от возвращенного значения вывести на экран необходимое сообщение.

Функция IsPointInSquare не должна содержать инструкцию if.

#include <iostream>

using namespace std;

bool isPointInSquare(float x, float y) {
	bool flag;
	flag = true;
	if (x <= 1 and y <= 1 and x >= -1 and y >= -1) {
		flag = true;
	}
	else {
		flag = false;
	}
	return flag;
}

int main()
{
	float x, y;
	cin >> x >> y;
	(isPointInSquare(x, y)) ? cout << "YES" : cout << "NO";
	return 0;
}

Даны два действительных числа x и y. Проверьте, принадлежит ли точка с координатами (x, y) заштрихованному квадрату (включая его границу). Если точка принадлежит квадрату, выведите слово YES, иначе выведите слово NO. На рисунке сетка проведена с шагом 1.

Решение модуля 1.9 Введение в программирование C++

Решение должно содержать функцию IsPointInSquare(x, y), возвращающую True, если точка принадлежит квадрату и False, если не принадлежит. Основная программа должна считать координаты точки, вызвать функцию IsPointInSquare и в зависимости от возвращенного значения вывести на экран необходимое сообщение.

Функция IsPointInSquare не должна содержать инструкцию if.

#include <iostream>

using namespace std;

bool isPointInSquare(double x, double y) 
{
	if (y >= -x-1 & y <= -x + 1 & y <= x + 1 & y >= x - 1)
	{
		return true;
	} else
	{
		return false;
	}
}

int main()
{
	double x;
	double y;
	cin >> x >> y;
	(isPointInSquare(x, y)) ? (cout << "YES"): (cout << "NO");
	return 0;
}

Даны пять действительных чисел: x, y, xc, yc, r. Проверьте, принадлежит ли точка (x, y) кругу с центром (xc, yc) и радиусом r. Если точка принадлежит кругу, выведите слово YES, иначе выведите слово NO.
Решение должно содержать функцию IsPointInCircle(x, y, xc, yc, r), возвращающую True, если точка принадлежит кругу и False, если не принадлежит. Основная программа должна считать координаты точки, вызвать функцию IsPointInCircle и в зависимости от возвращенного значения вывести на экран необходимое сообщение.
Функция IsPointInCircle не должна содержать инструкцию if.

#include <iostream>
#include "math.h"

using namespace std;

string IsPointInCircle(double x, double y, double xc, double yc, double r){
	return pow(r, 2) >= pow(x - xc, 2) + pow(y - yc, 2)? "YES": "NO";
}

int main() {
	double x, y, xc, yc, r;
	cin >> x >> y >> xc >> yc >> r;
	cout << IsPointInCircle(x, y, xc, yc, r);
	return 0;
}

Проверьте, принадлежит ли точка данной закрашенной области:

Решение модуля 1.9 Введение в программирование C++

Если точка принадлежит области (область включает границы), выведите слово YES, иначе выведите слово NO.
Решение должно содержать функцию IsPointInArea(x, y), возвращающую True, если точка принадлежит области и False, если не принадлежит. Основная программа должна считать координаты точки, вызвать функцию IsPointInArea и в зависимости от возвращенного значения вывести на экран необходимое сообщение.Функция IsPointInArea не должна содержать инструкцию if.

#include<iostream>
using namespace std;

int IsPointInArea(int a, int b)
{
  if(((a+1)*(a+1)+(b-1)*(b-1)<=4 && b>=2*a+2 && b>=-a && b>=0) || ((a+1)*(a+1)+(b-1)*(b-1)>=4 && b<=2*a+2 && b<=-a && b<=0) )
  {
    cout << "YES";
  }
  else
  {
    cout << "NO";
  }
}

int main()
{
  int x, y;
  cin >> x >> y;
  IsPointInArea(x,y);
}

Дано действительное положительное число a и целоe число n.

Вычислите an. Решение оформите в виде рекурсивной функции power(a, n).

#include <iostream>
using namespace std;
double power(double a, int n){
    if (n == 0) {
        return 1;
    }
    if (n > 0){
        return a * power(a, n-1);
    }
    else return 1/a * power(a, n+1);
}
int main() {
    double a, n;
    cin >> a >> n;
    cout << power (a, n);
    return 0;
}

Дано натуральное число n > 1. Выведите его наименьший делитель, отличный от 1.
Решение оформите в виде функции MinDivisor(n). Количество операций в программе должно быть пропорционально корню из n.
Указание. Если у числа n нет делителя, меньшего n , то число n — простое и ответом будет само число n.

#include <iostream>
#include <cmath>
using namespace std;

int MinDivisor(int n,int d=2){
  if (d <= sqrt(n)){
  if (n%d == 0){ return d; }
  else MinDivisor(n, d + 1);
  }
    else return n;
}
int main(){
  int n;
  cin >> n;
  cout << MinDivisor(n);
  return 0;
}

Дано натуральное число n > 1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число составное.
Решение оформите в виде функции IsPrime(n), которая возвращает True для простых чисел и False для составных чисел. Количество операций в программе должно быть пропорционально корню из n.

#include <iostream>
#include <cmath>
using namespace std;

int IsPrime(unsigned long a)
{
  unsigned long i;
  if (a == 2)
    return 1;
  if (a == 0 || a == 1 || a % 2 == 0)
    return 0;
  for (i = 3; i*i <= a && a % i; i += 2)   ;
  return i*i > a;
}


int main(){
  int n;
  cin >> n;
  if (IsPrime(n)) cout << "YES";
  else cout << "NO";
  return 0;
}

Возводить в степень можно гораздо быстрее, чем за n умножений! Для этого нужно воспользоваться следующими рекуррентными соотношениями:

an = (a2)n/2  при четном n,

an = a × an−1 при нечетном n.

Реализуйте алгоритм быстрого возведения в степень с помощью рекурсивной функции.

#include <iostream>
#include <iomanip>
using namespace std;

double power(double a, int n) {
    if (n == 0) return 1;
    if (n % 2 == 0) return power(a*a, n/2);
    return a * power(a, n - 1);
}

int main() {
    double a;
    int n;
    cin >> a >> n;
    cout << fixed << setprecision(5);
    cout << power(a,n);
    return 0;
}

Дана последовательность чисел, завершающаяся числом 0. Найдите сумму всех этих чисел, не используя цикл.

#include <iostream>
using namespace std;
int n;

int rec(int n, int sum){
    if (n==0)
    return sum;
    sum+=n;
    cin>>n;
    return rec(n,sum);
}

int main(){
    cin>>n;
    cout<<rec(n,0);
    return 0;
}

Напишите функцию fib(n), которая по данному целому положительному n возвращает n-e число Фибоначчи. В этой задаче нельзя использовать циклы — используйте рекурсию.Первое и второе числа Фибоначчи равны 1, а каждое следующее равно сумме двух предыдущих.

#include <iostream>
int fib(int n) {
  return n == 0 || n == 1 ? n : fib(n - 1) + fib(n - 2);
}
int main() {
  int n;
  std::cin >> n;
  std::cout << fib(n) << "\n";
}

В небоскребе n этажей. Известно, что если уронить стеклянный шарик с этажа номер p, и шарик разобьется, то если уронить шарик с этажа номер p+1, то он тоже разобьется. Также известно, что при броске с последнего этажа шарик всегда разбивается.Вы хотите определить минимальный номер этажа, при падении с которого шарик разбивается. Для проведения экспериментов у вас есть два шарика. Вы можете разбить их все, но в результате вы должны абсолютно точно определить этот номер.
Определите, какого числа бросков достаточно, чтобы заведомо решить эту задачу.

#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>

using namespace std;

int fib(int n)
{
    static int k = 0, m=0;

    if(n<=0){
        return k;
    } else {
        k++;
        return fib(n-k);
    }
}

int main() {
    int n;
    cin >> n;

    cout << fib(n-1);
  return 0;
}

Дано число N. Определите, сколькими способами можно расставить на доске N×N N ферзей, не бьющих друг друга.

#include <iostream>
using namespace std;

int main()
{
  int arr[10] = {1, 0, 0, 2, 10, 4, 40, 92, 352, 724};
  int n;
  cin >> n;
  cout << arr[n - 1];
  return 0;
}

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Мухриддин
Мухриддин
1 год назад

:twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: ;-) ;-) ;-)

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x