Программа, которая находит первое автоморфное число справа от заданного.

Автоморфным называется число, которое равно последним цифрам своего квадрата, например 25 (25 * 25 = 625).

#include <iostream>

#include <iomanip>

#include <math.h>

#include <conio.h>

#include <windows.h>

using namespace std;

bool Automorfnoe(long n)

{

long copy = n; // Берем копию числа n

long m = 1; /* Сделаем число m, которое равно степени 10, причем степень равна количеству цифр проверяемого числа n, например для 25 число m = 100 */

do

{

m *= 10;

copy /= 10;

} while(copy);

if ((n*n % m) == n) /* Берем остаток от деления квадрата числа n на m и получаем число, состоящее из последние цифр квадрата n, количество которых равно количеству цифр исходного числа, сравниваем полученное число c n и возвращаем ис­тину, если числа равны */

return true;

else return false;

}

int main()

{

if(SetConsoleCP(1251)==0

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

do

{

long m;

cout<< "Задайте целое число ";

cin>> m;

// Поиск автоморфного числа n, лежащего справа от заданного числа m:

long n = m+1; // Берем первое число

bool flag = true;

while (!Automorfnoe(n)) // пока число не автоморфное

{

n++; // переходим к следующему числу

if (n > 1e5) { flag = FALSE; break;}

/* прерываем поиск, если число стало слишком большим, чтобы ограничить время выполнения программы и не выйти за допустимый диапазон чисел */

}

if (flag) // флажок, равный true, означает, что число найдено

cout<< "Автоморфное число справа - " << n << " : " << n <<" в квадрате = " << n * n << endl;

else cout<< "Число не найдено \n";

} while (_getch() != 27);

return 0;

}

5. Программа находит точки пересечения линий y= ax+b и y = c/x +d

(программа иллюстрирует перегрузку имени функции)

Для нахождения точек пересечения решим систему:

Программа, которая находит первое автоморфное число справа от заданного. - student2.ru Программа, которая находит первое автоморфное число справа от заданного. - student2.ru Программа, которая находит первое автоморфное число справа от заданного. - student2.ru Программа, которая находит первое автоморфное число справа от заданного. - student2.ru Программа, которая находит первое автоморфное число справа от заданного. - student2.ru Программа, которая находит первое автоморфное число справа от заданного. - student2.ru

Если a не равно 0, решаем квадратное уравнение, в противном случае – линейное.

#include <iostream>

#include <iomanip>

#include <math.h>

#include <conio.h>

#include <windows.h>

using namespace std;

/* Определим две функции Root(корень), одну для решения квадратного уравнения, а другую – для линейного: */

void Root(double a, double b, double c, double& x1, double& x2, byte& k);

void Root(double a, double b, double& x, byte& k);

// Результаты работы функции объявлены как ссылки

int main()

{

if(SetConsoleCP(1251)==0)

//проверка правильности установки кодировки символов для ввода

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

double a, b, c, d;

double x1, y1, x2, y2;

byte k; // количество корней

do

{

cout<< "Задайте a b c d ";

cin>> a >> b >> c >> d;

if (a) // Если а не равно 0, решаем квадратное уравнение

Root(a, b-d, -c, x1, x2, k);

// передаем функции коэффициенты уравнения и получаем корни и количество корней

else // иначе решаем линейное уравнение:

Root(b-d, -c, x1, k);

// в зависимости от полученного значения k выводим ответ:

switch(k)

{

case 3: cout<< "Линии совпадают \n"; break;

case 2: y1 = a*x1 + b; y2 = a*x2 + b;

cout<<"Линии пересекаются в 2 точках: " <<setprecision(2)<< x1 << ',' << y1 << " и " << x2 << ',' << y2 << endl; break;

case 1: y1 = a*x1+ b;

cout<<"Линии имеют одну общую точку "<<setprecision(2)<< x1 << ',' << y1 << endl; break;

default: cout<<"Линии не пересекаются\n";

}

} while (_getch() != 27);

return 0;

}

// Подпрограмма для решения квадратного уравнения

void Root(double a, double b, double c, double& x1, double& x2, byte& k)

{

double d = b*b - 4*a*c;

if (d > 0)

{

k = 2;

x1 = (-b + sqrt(d)) / (2*a);

x2 = (-b - sqrt(d)) / (2*a);

if ( x1==0 || x2 == 0 ) k = 1;

// Исключаем нулевое значение x

if ( x1 == 0) x1 = x2; /* Если ненулевой корень один, то он будет храниться в x1 */

}

else if (d == 0)

{

x1 = -b / (2*a);

k = 1;

if (x1 == 0) k = 0;

}

else k = 0;

}

// Подпрограмма для решения линейного уравнения

void Root(double a, double b, double& x, byte& k)

{

if (a)

{

k = 1;

x = -b / a;

if (x == 0) k = 0;

}

else if (b) k = 0;

else k = 3;

}

Наши рекомендации