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

Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor) - C++

Восстановить пароль Регистрация
 
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 56
30.12.2012, 16:08     Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor) #1
Надо написать две функции getAllDivisors и getLowestDivisor. Функция main должна вызывать функцию getAllDivisors, которая в свою очередь имеет цикл: функция getAllDivisors повторно вызывает функцию getLowestDivisor, каждый раз заменяя значение n результатом выражения n / i, где i - это найденный делитель. Если возвращается само число n, значит, число является простым и цикл должен быть прекращен. Если написать бесконечный цикл, то его надо будет прервать оператором break.


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
#include <iostream.h>
#include <conio.h>
#include <math.h>
 
void getDivisors(int n);
 
int main()
{
  int n;
  
  while(1)
  {
    cout << "Enter a number (0 to exit) and press ENTER: ";
    cin >> n;
    
    if(n == 0)
      break;
    else
    {
      getDivisors(n);
      cout << endl;
    } 
  }
  
  getch();
  return 0;
}
 
void getDivisors(int n)
{
  int i;
  double sqrtOfN = sqrt((double) n);
  
  for(i = 2; i <= sqrtOfN; i++)
    if(n % i == 0)
    {
      cout << i << ", ";
      getDivisors(n / i);
      return;
    }
    cout << n;  
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2012, 16:08     Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor)
Посмотрите здесь:

C++ написать прогу, выводящую таблицу умножения на экран. Прога должна содержать две функции.
нужно написать драйвер, который имеет две функции: startmyfunc() и stopmyfunc() C++
C++ Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов
C++ Дан массив целых чисел. Написать две функции ( количество положительных и отрицательных элементов)
C++ Выполнить задание, оформив его в виде шаблона функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
30.12.2012, 21:41     Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor) #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void getDivisors(int n)
{
  int i;
  double sqrtOfN = sqrt((double) n);
  
  for(i = 2; i <= sqrtOfN; i++)
    if(n % i == 0)
    {
      cout << i << ", ";
      getDivisors(n / i);
      return;
    }
    cout << n;  
}
у вас функция возвращает void а вы return пишите да и в теле цикла, у вас n никогда не выведет

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
void getDivisors(int n)
{
  for(int i = 2; i <= n; i++)
    if(n % i == 0){
      cout << i << ", ";
    }
 
}
Добавлено через 10 секунд
вот так будет правильней
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 56
30.12.2012, 23:25  [ТС]     Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor) #3
Данная прога должна вывести множители числа, например, если ввести число 20, то прога должна вывести такие множители: 2, 2, 5. Т.е. 2 * 2 * 5 = 20. Исходный код работает отлично. А число n выводит в том случае, если оно окажется простым. В проге используется рекурсивная функция, а мне надо сделать эту задачу обычным способом, без использования рекурсии.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
31.12.2012, 11:15     Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor) #4
C++
1
2
3
4
5
6
7
8
9
10
11
void getDivisors(int n)
{
  int i;
  for(i = 2; i <= n; i++)
    if(n % i == 0){
      cout << i << ", ";
      n/=i;
      i = 1;
    }
 
}
вот сформулировали более четко задание, вот вам результат
Yandex
Объявления
31.12.2012, 11:15     Как выполнить задание (написать две функции getAllDivisors и getLowestDivisor)
Ответ Создать тему
Опции темы

Текущее время: 16:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru