Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




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

 

#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

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

 

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

 

Если 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;

}





Поделиться с друзьями:


Дата добавления: 2016-11-24; Мы поможем в написании ваших работ!; просмотров: 707 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинайте делать все, что вы можете сделать – и даже то, о чем можете хотя бы мечтать. В смелости гений, сила и магия. © Иоганн Вольфганг Гете
==> читать все изречения...

2361 - | 2150 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.