Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Belfegor
Ghost
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 526
#1

Как проверить является ли число точным квадратом? - C++

23.02.2013, 19:43. Просмотров 3742. Ответов 18
Метки нет (Все метки)

как проверить является ли число точным квадратом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 19:43     Как проверить является ли число точным квадратом?
Посмотрите здесь:
Проверить является ли введенное число точным квадратом C++
Проверить, является ли какой-либо член последовательности точным квадратом C++
C++ Выяснить, является ли натуральное число N точным квадратом
C++ Как проверить является данное число квадратом целого числа?
Проверить, является ли целое число трёхзначным, является ли оно квадратом C++
Написать функцию, которая будет проверять является ли аргумент точным квадратом C++
C++ Проверить, является ли матрица магическим квадратом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
23.02.2013, 20:08     Как проверить является ли число точным квадратом? #2
Цитата Сообщение от Belfegor Посмотреть сообщение
как проверить является ли число точным квадратом?
точный квадрат - это число корень которого целое число..следовательно извлекаем корень и от него отнимаем значение округлённого корня например корень из N =2.7 округляем получится 3 затем 2.7 - 3 =0.3 получается если разность не округлённого корня и округлённого равно 0 то число является точным квадратом

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cmath>
#include <locale>
using namespace std;
int main() {
setlocale(LC_ALL, "Rus");
double ch;
cout<<"Ââåäèòå ÷èñëî: ";
cin>>ch;
ch=(sqrt(ch)-ceil(sqrt(ch)));
if(ch==0) {
                     cout<<"Òî÷Г*ûé ГЄГўГ*äðГ*ГІ";
                     }
else {
     cout<<"ГЌГҐ òî÷Г*ûé ГЄГўГ*äðГ*ГІ";
}
}
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
23.02.2013, 20:27     Как проверить является ли число точным квадратом? #3
Плавающие числа представлены в компьютере с некоторой погрешностью, да еще само извлечение корня даст некоторую погрешность, поэтому вряд ли такой алгоритм скажет "да" для достаточно большого квадрата целого числа. Возьмем, например 81. Хотя я не пробовал, но буду удивлен, если данная программа скажет, что это точный квадрат. Я предлагаю так: после извлечения квадрата и округления преобразовать в целый тип, возвести в квадрат и сравнить с исходным целым числом. Если совпадает, значит точный квадрат.
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
23.02.2013, 20:35     Как проверить является ли число точным квадратом? #4
Цитата Сообщение от palva Посмотреть сообщение
поэтому вряд ли такой алгоритм скажет "да" для достаточно большого квадрата целого числа.
возводил 4-значные числа в квадрат вводил в программу - РАботает!

число 1653 в квадрате = 2732409 - показывает Точный квадрат, 2732409.001 - уже не точный
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
23.02.2013, 20:44     Как проверить является ли число точным квадратом? #5
Хулиган, Согласен. Здесь целые числа, и мои опасения беспочвенны. Хотя во всех учебниках и пишут, что сравнение плавающих чисел на равенство/неравенство некорректно.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
23.02.2013, 20:46     Как проверить является ли число точным квадратом? #6
Точность чисел в формате double 15-16 десятичных значащих цифр.
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
23.02.2013, 20:52     Как проверить является ли число точным квадратом? #7
Здесь не точность важна. Чтобы результативно сравнить числа на равенство, они должны быть представлены с абсолютной точностью. А для плавающих чисел такое бывает в исключительных случаях. Целое значение это один из таких случаев. А вот возможность double представлять целые числа с бОльшей абсолютной величиной, чем int здесь является преимуществом.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
23.02.2013, 21:07     Как проверить является ли число точным квадратом? #8
palva, ничто не мешает сравнивать разность чисел.
Если сравнивать разность чисел и ставить условие >= (<=) 0.0000000001, например, то как вы думаете, какой первый точный квадрат должен быть ошибочен?

(я этого не знаю, но полагаю достаточно большое число). Число легко округляется на число с погрешностью лучшей чем 0.000000001
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
23.02.2013, 21:22     Как проверить является ли число точным квадратом? #9
Цитата Сообщение от daslex Посмотреть сообщение
ничто не мешает сравнивать разность чисел.
Я зарекся так делать. Однажды я так сделал и моя программа на некоторых процессорах стала вылетать по так называемому переполнению снизу (это была машина IBM360) На IBM PC такого поведения сопроцессора не предусмотрено, но когда-то при вычитании очень близких но неравных чисел, если получался машинный ноль, то программа останавливалась. Еще называлось исчезновение точности.
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
23.02.2013, 21:38     Как проверить является ли число точным квадратом? #10
Цитата Сообщение от daslex Посмотреть сообщение
palva, ничто не мешает сравнивать разность чисел.
Ух, мешает. palva абсолютно прав. Сравнение вещественных чисел вообще - целое искусство и имеет мнооожество вариаций. На чисметах в свое замучился постигать эти тайны.
daslex
23.02.2013, 21:43
  #11

Не по теме:

palva,
ITcrusader,

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

palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
23.02.2013, 22:37     Как проверить является ли число точным квадратом? #12
Цитата Сообщение от daslex Посмотреть сообщение
Я правильно понял?
А я даже не понял что вы спросили. Я знаю что процессор может вычесть два числа и получить разность, может сравнить два числа и определить, которое из них больше. Может быть, современные процессоры могут еще что-то экзотическое...
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
23.02.2013, 22:42     Как проверить является ли число точным квадратом? #13
самый быстрый способ - хранить массив точных квадратов всех чисел в нужном диапазоне и использовать двоичный поиск по массиву.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <stdint.h>
const uint16_t squares[] = {
    0, 1, 4, 9,
    16, 25, 36, 49,
    64, 81, 100, 121,
    144, 169, 196, 225,
    256, 289, 324, 361,
    400, 441, 484, 529,
    576, 625, 676, 729,
    784, 841, 900, 961,
    1024, 1089, 1156, 1225,
    1296, 1369, 1444, 1521,
    1600, 1681, 1764, 1849,
    1936, 2025, 2116, 2209,
    2304, 2401, 2500, 2601,
    2704, 2809, 2916, 3025,
    3136, 3249, 3364, 3481,
    3600, 3721, 3844, 3969,
    4096, 4225, 4356, 4489,
    4624, 4761, 4900, 5041,
    5184, 5329, 5476, 5625,
    5776, 5929, 6084, 6241,
    6400, 6561, 6724, 6889,
    7056, 7225, 7396, 7569,
    7744, 7921, 8100, 8281,
    8464, 8649, 8836, 9025,
    9216, 9409, 9604, 9801,
    10000, 10201, 10404, 10609,
    10816, 11025, 11236, 11449,
    11664, 11881, 12100, 12321,
    12544, 12769, 12996, 13225,
    13456, 13689, 13924, 14161,
    14400, 14641, 14884, 15129,
    15376, 15625, 15876, 16129,
    16384, 16641, 16900, 17161,
    17424, 17689, 17956, 18225,
    18496, 18769, 19044, 19321,
    19600, 19881, 20164, 20449,
    20736, 21025, 21316, 21609,
    21904, 22201, 22500, 22801,
    23104, 23409, 23716, 24025,
    24336, 24649, 24964, 25281,
    25600, 25921, 26244, 26569,
    26896, 27225, 27556, 27889,
    28224, 28561, 28900, 29241,
    29584, 29929, 30276, 30625,
    30976, 31329, 31684, 32041,
    32400, 32761, 33124, 33489,
    33856, 34225, 34596, 34969,
    35344, 35721, 36100, 36481,
    36864, 37249, 37636, 38025,
    38416, 38809, 39204, 39601,
    40000, 40401, 40804, 41209,
    41616, 42025, 42436, 42849,
    43264, 43681, 44100, 44521,
    44944, 45369, 45796, 46225,
    46656, 47089, 47524, 47961,
    48400, 48841, 49284, 49729,
    50176, 50625, 51076, 51529,
    51984, 52441, 52900, 53361,
    53824, 54289, 54756, 55225,
    55696, 56169, 56644, 57121,
    57600, 58081, 58564, 59049,
    59536, 60025, 60516, 61009,
    61504, 62001, 62500, 63001,
    63504, 64009, 64516, 65025
};
inline bool is_square(uint16_t x) {
    const uint16_t *p = squares;
 
    if (p[128] <= x) p += 128;
    if (p[ 64] <= x) p +=  64;
    if (p[ 32] <= x) p +=  32;
    if (p[ 16] <= x) p +=  16;
    if (p[  8] <= x) p +=   8;
    if (p[  4] <= x) p +=   4;
    if (p[  2] <= x) p +=   2;
    if (p[  1] <= x) p +=   1;
 
    return (p[0] == x);
}
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
23.02.2013, 22:46     Как проверить является ли число точным квадратом? #14
palva, троллим уже?

Что тут не понятного
C++
1
2
if (a-b==0)  //Проверка с числом
if (fabs(a-b)>eps) //Проверка на разность с допустимой погрешностью
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2013, 23:23     Как проверить является ли число точным квадратом?
Еще ссылки по теме:
Проверить, является ли матрица, записанная в файле, магическим квадратом C++
C++ Программа, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа
Как проверить является ли число простым C++
C++ Дано натуральное число n. Выяснить, является ли оно полным квадратом
Найти ближайшее справа число, которое является квадратом натурального числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
23.02.2013, 23:23     Как проверить является ли число точным квадратом? #15
Kuzia domovenok, вот так тоже быстро
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    __int64 a=156438768;
    __int64 s,t;
    a = a*a; 
//    a = a*a+1;
// Проверка числа a на точный квадрат
    s=a/2;
    for(;;) {
        t=(s + a/s)/2;
        if (t==s) break;
        s=t;
    }
    if(s*s==a) cout << "Square\n";
    else cout << "Not square\n";
    return 0;
}
Yandex
Объявления
23.02.2013, 23:23     Как проверить является ли число точным квадратом?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru