Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для ReinDeer
19 / 19 / 9
Регистрация: 15.09.2014
Сообщений: 127

Геометрическая прогрессия из цифр в числе

31.10.2014, 17:36. Показов 2104. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция проверки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int IfGeometry(int x){
    x=abs(x);
    if ((x%10)==0)
        return 0;
    if ((x/10)%10==0)
        return 0;
    if (x<100)
        return 1;
    double index=( x % 10 ) / ( ( x / 10 ) % 10 );
    x/=10;
    while (x>=10){
        if (x%10==0)
            return 0;
        if(( x % 10 ) / ( ( x / 10 ) % 10 ) != index)
            return 0;
        x/=10;
    }
    return 1;
}
Например на 873 дает положительный результат, чего не должно быть.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2014, 17:36
Ответы с готовыми решениями:

геометрическая прогрессия
Составить программу, которая считает члены геометрической прогрессии (N), начальный элемент 2 а квоциент 0,2! Показывает 4 знака после...

Геометрическая прогрессия
Помогите написать программу, которая вычисляет сумму элементов геометрической прогрессии, используя исключения

Геометрическая прогрессия
Геометрическая прогрессия У вас есть действительное число и натуральное число n. Вычислить 1 +a + a2 +...+ без использования формулы...

13
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
31.10.2014, 17:43
А что должна проверять функция? Является ли число геометрической прогрессией из его цифр?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
31.10.2014, 17:43
Что эта функция должна делать?
0
 Аватар для ReinDeer
19 / 19 / 9
Регистрация: 15.09.2014
Сообщений: 127
31.10.2014, 18:05  [ТС]
Toshkarik, nmcf, да, например числа 1248, 8421, 139, 111, 222.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
31.10.2014, 18:19
Чего то не пойму. Как с помощью прогрессии получить число 111 из его цифр?
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
31.10.2014, 19:07
Множитель равен 1, тогда все цифры одинаковые.
Насчет проверки - не проще ли проверять отношение первой цифры ко второй, потом сравнивать его с отношением второй к третьей и т. д. Как только отношения будут отличаться (не совпадать), делаем вывод, что из цифр не получается прогрессия, иначе заключаем, что является. Не забудь проверку "крайних ситуаций" - число состоит из одной цифры или содержит хотя бы один ноль.
0
 Аватар для ReinDeer
19 / 19 / 9
Регистрация: 15.09.2014
Сообщений: 127
31.10.2014, 19:10  [ТС]
Toshkarik, 111 - это и есть геометрическая прогрессия, коэффициентом "1" и первым элементом "1".

Добавлено через 1 минуту
gunslinger, понятия не имею, как легче и быстрее выводить старшие цифры, чем младшие. Крайние случаи учел.
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
31.10.2014, 19:13
P.S.: только отношение должно быть не int (у ТС так получается, см. преобразование типов), а double или float.
Порядок проверки значения не имеет, как тебе удобнее, хоть с начала, хоть с конца.
0
 Аватар для ReinDeer
19 / 19 / 9
Регистрация: 15.09.2014
Сообщений: 127
31.10.2014, 19:16  [ТС]
gunslinger, если под отношением, ты подразумеваешь коэффициент, то он у меня вещественный.
Но, делю и вычисляю остаток там через целочисленную десятку.
p.s Посмотри уже, пожалуйста, код)
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
31.10.2014, 20:43
Функция возвращает 0, если цифры числа не образую геом. прогрессию (есть учет "крайних" случаев), иначе получаем коэффициент (множитель) прогрессии.
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
double IfGeometry (int x)
{
  x=abs(x);
  int temp = x%10, temp2 = x;
  double index = 0, index2 = ((x / 10) % 10) * 1.0 / (x % 10);
  if (x/10 == 0)  // если число состоит из одной цифры
    return 0;
  else
  {
    while (temp2 / 10 > 0)
    {
      temp2 /= 10;
      index = (temp2 % 10) * 1.0 / temp;
      if (index == 0)
        break;
      if (index2 != index)
      {
        index = 0;
        break;
      }
      temp = temp2 % 10;
      index2 = index;
    }
//  Если нужно, получаем обратное значение index, т.е. 1/index
//  (когда рассматриваем число слева направо)
//  иначе просмотр шел справа налево
//  if (index != 0)
//    index = 1/index;
    return index;
  }
}
Добавлено через 7 минут
У меня двузначное число может являться содержащим цифры в геом. прогрессии. Если нужно начинать с трехзначных, то в 6-ой строке замени 10 на 100.
1
 Аватар для ReinDeer
19 / 19 / 9
Регистрация: 15.09.2014
Сообщений: 127
31.10.2014, 21:36  [ТС]
gunslinger, я тут почитал про арифметику с вещественными числами.
C++
1
double index=(double)( x % 10 ) / ( ( x / 10 ) % 10 ); // Добавил у себя (double)
Но она работает в точности как у тебя. 873 теперь дает 0, а вот 931 и 842 тоже 0.
Что характерно, до моего изменения, с индексом меньше единицы вычисляло нормально, но и подтверждал всякие 873.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
31.10.2014, 21:46
del (ерунду написал)
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
31.10.2014, 21:54
Я правильно понимаю, что вы сравниваете значения плавающего типа?
Цитата Сообщение от gunslinger Посмотреть сообщение
double index = 0, index2
........
if (index2 != index)
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
31.10.2014, 23:19
ReinDeer, у тебя сначала получается целое число, а потом ты его приводишь к double (возможно, теряя дробную часть - поправьте, если не прав, но скорее прав), я же сразу привожу к double перед делением (умножая на 1.0). Написал же, прочитай про преобразование типов.
_Ivana, да. Компилятор позволяет (Builder XE5). Если в этом сложность, можно сравнивать модуль разности этих двух значений с малым числом.

Добавлено через 20 минут
Уточнение - там, где я написал про double и 1.0, скорее всего возможно [нужное подчеркнуть] получаем float (потом присваивая значение переменной типа double), но это влияет лишь на точность (в данном случае это не критично). Важно то, что вместо целочисленного значения на выходе имеет вещественное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2014, 23:19
Помогаю со студенческими работами здесь

Геометрическая прогрессия
Задача: Дано N десятоков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. Проверку оформить в виде...

Геометрическая прогрессия
Нужно найти сумму членов геом. прогрессии, знаменатель не должен = 1.При запуске выбивает &quot;выражение перед скобками вероятного вызова...

Геометрическая прогрессия из 3х чисел
Ввести 3 числа, определить можно ли сложить геометрическую прогрессию

Рекурсия и геометрическая прогрессия в C
Даны первый член и знаменатель геометрической прогрессии. Описать рекурсивную функцию вычисления n-го члена прогрессии. Вычислить значение...

Геометрическая прогрессия.
Здравствуйте все, у меня есть вопрос касающий матем. прогрессий. В арифмитической прогрессии можно узнать d (коффициент) зная любых...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru