Решение модуля 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

13 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Arp1t21
Arp1t21
29 дней назад

АХХАХАХАХАХАХ Я **** Я СЮДА НАПИСАЛ ОТВЕТЫ С 1.8 МОДУЛЯ ААХАХХАХХАХАХАХ

Последний раз редактировалось 29 дней назад Arp1t21 ем
Arp1t21
Arp1t21
29 дней назад

13.
#include <iostream>
using namespace std;
int main()
{
 int n, m;
 cin >> n >> m;
 int a[100][100] = {0};
 int c = 1, k = 0, x_s = 1, y_s = 0, x = 0, y = 0;
 for (int c = 1; c <= n*m; c++)
 {
  a[y][x] = c;
  x += x_s;
  y += y_s;
  if (x < 0 || y<0 || x>m-1 || y>n-1 || a[y][x] != 0)
  {
   x -= x_s;
   y -= y_s;
   k++;
   if (k == 4)
   {
    k = 0;
   }
   if (k == 0)
   {
    x_s = 1;
    y_s = 0;
   }
   if (k == 1)
   {
    x_s = 0;
    y_s = 1;
   }
   if (k == 2)
   {
    x_s = -1;
    y_s = 0;
   }
   if (k == 3)
   {
    x_s = 0;
    y_s = -1;
   }
   x += x_s;
   y += y_s;
  }
 }
  cout<<» «;
    for(int i = 1; i <= n; i++){
      for(int j = 1; j <= m; j++){
        std::cout.width(4); std::cout << a[i-1][j-1];
      }
      cout<<endl;
    }
  return 0;
}

Arp1t21
Arp1t21
29 дней назад

12.
#include <bits/stdc++.h>
using namespace std;
int main(){
   int n, m;
   cin >> n >> m;
   int a[n][m], num = 1;
   for(int i = 0; i < n; i++){
      if(i % 2 == 0)
         for(int j = 0; j < m; j++){
            if(j % 2 == 0){
               a[i][j] = num;
               num++;
            }
            else
               a[i][j] = 0;
         }
      else
         for(int j = 0; j < m; j++){
            if(j % 2 == 1){
               a[i][j] = num;
               num++;
            }
            else
               a[i][j] = 0;
         }
   }
   for(int i = 0; i < n; i++){
      for(int j = 0; j < m; j++)
         cout << setw(4) << a[i][j];
      cout << endl;
   }
   return 0;
}

Arp1t21
Arp1t21
29 дней назад

11.
#include <iostream>
#include <iomanip>

using namespace std;

int main() {
int n, m;
cin >> n >> m;
int arr[n][m];

int num = 1;
for (int diag = 0; diag < n + m — 1; diag++) {
for (int i = max(0, diag — m + 1); i <= min(diag, n — 1); i++) {
int j = diag — i;
arr[i][j] = num++;
}
}

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << setw(4) << arr[i][j];
}
cout << endl;
}

return 0;
}

Arp1t21
Arp1t21
29 дней назад

10.
#include <iostream>
using namespace std;
#include <climits>
int main() {
int n, m , kdase=0;
  cin >> n >> m;
  int egorkrid[n][m];
 
  for (int i = 0;i < n;i++){
    for (int j = 0;j < m;j++){kdase++;
    if (i % 2 == 0){egorkrid[i][j]=kdase;}else {egorkrid[i][m-j-1]=kdase;}}
   
  }
  for (int i = 0;i < n;i++){
    for (int j = 0;j < m;j++){
      if (egorkrid[i][j] > 0 and egorkrid[i][j] < 10){cout << »  «;}
      if (egorkrid[i][j] > 9 and egorkrid[i][j] < 100){cout << » «;}
      if (egorkrid[i][j] > 99 and egorkrid[i][j] < 1000){cout << » «;}
      cout << egorkrid[i][j];
       
       
   }
  cout << endl;
  }

 return 0;
}
//m = 4
  //j  0 1 2 3
 //m-j-1 3 2 1 0

Arp1t21
Arp1t21
29 дней назад

9.
#include <bits/stdc++.h>
using namespace std;
int main() {
 int n,m;
  cin>>n>>m;  
  int a[n][m];
  for (int i=0;i<n;i++){
    for (int j=0;j<m;j++){
      cin>>a[i][j];
    }                                                      
  }                                                    
  for (int i=0;i<m;i++){
    for (int j=n-1;j>=0;j—){
      cout<<a[j][i]<<» «;
    }
    cout<<endl;
  }
 return 0;
}

Arp1t21
Arp1t21
29 дней назад

8.
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <vector>
using namespace std;
int MinDivisor(int n) {
   int p = 2, k = n;
   while (p * p <= n) {
      if (n % p == 0) {
         k = p;
         break;
      }
      p = p + 1;   
   }
   return k;
}
int main() {
   int n;
   cin >> n;
   cout << MinDivisor(n);
   return 0;
}

Последний раз редактировалось 29 дней назад Arp1t21 ем
Arp1t21
Arp1t21
29 дней назад

7.
#include <iostream>
double power(double a, int n) {
  if (n == 0) {
    return 1;
  } else if (n > 0) {
    return a * power(a, n — 1);
  } else {
    return 1 / (a * power(a, -n — 1));
  }
}
int main() {
  double a;
  int n;
  std::cin >> a >> n;
  std::cout << power(a, n) << std::endl;
  return 0;
}
 

Последний раз редактировалось 29 дней назад Arp1t21 ем
Arp1t21
Arp1t21
29 дней назад

5.
#include <iostream>
#include <cmath>

bool IsPointInCircle(double x, double y, double xc, double yc, double r) {
// Расстояние от точки (x, y) до центра круга (xc, yc)
double distance = std::sqrt(std::pow(x — xc, 2) + std::pow(y — yc, 2));
// Возвращаем результат сравнения расстояния с радиусом
return distance <= r;
}

int main() {
double x, y, xc, yc, r;
std::cin >> x >> y >> xc >> yc >> r;

if (IsPointInCircle(x, y, xc, yc, r)) {
std::cout << «YES» << std::endl;
} else {
std::cout << «NO» << std::endl;
}

return 0;
}

Последний раз редактировалось 29 дней назад Arp1t21 ем
Arp1t21
Arp1t21
29 дней назад

1.
#include <bits/stdc++.h>
using namespace std;
int main() {
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  cout << min(min(a, b), min(c, d));
  return 0;
}

Последний раз редактировалось 29 дней назад Arp1t21 ем
Юрий
Юрий
3 месяцев назад

задание 3
Функция IsPointInSquare не должна содержать инструкцию if.
в приведенном решение функция содержит if, что является не верным решением

#include <iostream>
using namespace std;
bool isPointInSquare(double x, double y){
  return x*x<=1 && y*y<=1;
}
int main() {
  double x,y;
  cin >> x >> y;
  isPointInSquare(x,y)?cout << «YES» :cout << «NO»;
 return 0;
}

Andrew
Andrew
7 месяцев назад

#include <iostream>

int fib(int n) {
  if (n <= 2) {
    return 1;
  }
  return fib(n — 1) + fib(n — 2);
}

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

  std::cout << fib(n) << std::endl;

  return 0;
}

Мухриддин
Мухриддин
2 лет назад

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

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