Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
1

Найти НОД четырех натуральных чисел

18.02.2017, 22:04. Просмотров 514. Ответов 26
Метки нет (Все метки)

Ввести в память машины одномерный целочисленный массив, размер
произвольный (возможность выбора). Предусмотреть два варианта ввода:
с клавиатуры и генерацией случайных значений.

Ввести в память машины с клавиатуры четыре натуральных числа и найти их наибольший общий делитель. Ввод данных, манипуляции с данными, вывод данных произвести через отдельные пользовательские функции.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2017, 22:04
Ответы с готовыми решениями:

Найти НОД (наибольший общий делитель) массива натуральных чисел
Найти НОД (наибольший общий делитель) массива натуральных чисел. Спасибо за...

Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида
Найти наибольший общий делитель (НОД) двух введенных натуральных чисел,...

Вычисление НОД ряда натуральных чисел
Даны натуральные числа m, n1,...,nm (m>=2). Вычислить НОД (n1,...,nm),...

Подправить код. НОД двух натуральных чисел
#include "stdafx.h" #include <iostream> using namespace std; int...

Вычисление нок и нод переменных натуральных чисел
Здравствуйте. Искал подобную тему по форуму, но там все либо на 2 числа либо на...

26
Байт
Эксперт C
19209 / 12334 / 2604
Регистрация: 24.12.2010
Сообщений: 25,355
18.02.2017, 22:13 2
Tatsiana245, Для двух чисел НОД сможете найти?
А дальше: НОД(a,b,c) = НОД(НОД(a,b),c) и так далее
0
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
18.02.2017, 22:17  [ТС] 3
А как в одной программе предусмотреть ввод с клавиатуры и генерацией случайных чисел?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
18.02.2017, 22:35 4
Цитата Сообщение от Tatsiana245 Посмотреть сообщение
А как в одной программе предусмотреть ввод с клавиатуры и генерацией случайных чисел?
Реализовать пользовательские функции. В одной реализовать ввод с клавиатуры, а в другой - генерацию случайных чисел.
0
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
18.02.2017, 22:40  [ТС] 5
А как бы это выглядело в коде, ввод с клавиатуры по данной задаче? Если можно...
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
18.02.2017, 22:58 6
Tatsiana245, сейчас изображу.

Добавлено через 11 минут
Tatsiana245, вот так, например:
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
#include <iostream>
#include <vector>
 
unsigned int get_arr_size_from_user()
{
    std::cout << "Enter your array size: ";
    unsigned int arr_size;
    std::cin >> arr_size;
    return arr_size;
}
 
template <typename T>
void fill_by_user( T & arr )
{
    for ( auto & elem : arr )
    {
        std::cout << "Enter a value: ";
        std::cin >> elem;
    }
}
 
template <typename T1, typename T2>
void show( const T1 & message, const T2 & arr )
{
    std::cout << message;
    for ( const auto & elem : arr )
        std::cout << elem << " ";
    std::cout << "\n";
}
 
int main()
{
    std::vector<int> ivec( get_arr_size_from_user() );
    fill_by_user( ivec );
    show( "\nThis is your array: ", ivec );
}
1
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
18.02.2017, 23:15  [ТС] 7
Спасибо, большое. С этой директивой я еще не знакома #include <vector>, как тогда в этот код подставить вычисления наибольшего общего делителя? У меня не получается...
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
18.02.2017, 23:30 8
Цитата Сообщение от Tatsiana245 Посмотреть сообщение
я еще не знакома #include <vector>
Вот. И что бы я ни написал, я рискую получить в ответ "а мы такое ещё не проходили". То есть, я буду Вам предлагать решения, а Вы будете их раз за разом отвергать. Так не пойдёт.
Как же быть? А вот как: может нам начать с начала? Может сперва Вы скажете, какие инструменты допускается использовать при решении Вашей задачи? Это называется "сформулировать техзадание".
1
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
18.02.2017, 23:41 9
Tatsiana245, вот так пойдёт?
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
#include <iostream>
 
unsigned int get_arr_size_from_user()
{
    std::cout << "Enter your array size: ";
    unsigned int arr_size;
    std::cin >> arr_size;
    return arr_size;
}
 
void fill_by_user( int * arr, unsigned int arr_size )
{
    for ( unsigned int i = 0; i < arr_size; ++i )
    {
        std::cout << "Enter a value: ";
        std::cin >> arr[i];
    }
}
 
void show( const char * message, int * arr, unsigned int arr_size )
{
    std::cout << message;
    for ( unsigned int i = 0; i < arr_size; ++i )
        std::cout << arr[i] << " ";
    std::cout << "\n";
}
 
int main()
{
    unsigned int arr_size = get_arr_size_from_user();
 
    int * arr = new int[arr_size];
    fill_by_user( arr, arr_size );
    show( "\nThis is your array: ", arr, arr_size );
    delete [] arr;
}
0
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
18.02.2017, 23:42  [ТС] 10
Формулировка проблемы:Ввести в память машины с клавиатуры четыре натуральных числа и найти их наибольший общий делитель.
Список средств для решения задачи:
Ввод данных, манипуляции с данными, вывод данных произвести через отдельные пользовательские функции. Можно через указатели, динамически выделенную память (new,delete), шаблоны, функции. Реализовать на языке С++.

0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
18.02.2017, 23:46 11
Tatsiana245, хотя вот так чуть-чуть покрасивше будет:
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
#include <iostream>
 
unsigned int get_number_from_user( const char * message )
{
    std::cout << message;
    unsigned int arr_size;
    std::cin >> arr_size;
    return arr_size;
}
 
void fill_by_user( int * arr, const unsigned int arr_size )
{
    for ( unsigned int i = 0; i < arr_size; ++i )
    {
        std::cout << "Enter a value of " << i + 1 << " element: ";
        std::cin >> arr[i];
    }
}
 
void show( const char * message, const int * const arr, const unsigned int arr_size )
{
    std::cout << message;
    for ( unsigned int i = 0; i < arr_size; ++i )
        std::cout << arr[i] << " ";
    std::cout << "\n";
}
 
int main()
{
    unsigned int arr_size = get_number_from_user( "Enter your array size: " );
 
    int * arr = new int[arr_size];
    fill_by_user( arr, arr_size );
    show( "\nThis is your array: ", arr, arr_size );
    delete [] arr;
}
Добавлено через 2 минуты
Tatsiana245, сойдёт? Или выделение и освобождение памяти под массив тоже в пользовательских функциях надо сделать?
0
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
18.02.2017, 23:51  [ТС] 12
Очень здорово,все работает!!! Спасибо,большое. Только я запуталась, как найти наибольший общий делитель? Не подскажите по вашему коду?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
18.02.2017, 23:53 13
Tatsiana245, добавьте функцию нахождения НОД. Напишите её самостоятельно. Хоть что-то Вы должны сделать сами. Не можете, так хоть поиском по форуму воспользуйтесь. Тема миллион раз поднималась уже.
0
Байт
18.02.2017, 23:57
  #14

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Tatsiana245, добавьте функцию нахождения НОД. Напишите её самостоятельно. Хоть что-то Вы должны сделать сами. Не можете, так хоть поиском по форуму воспользуйтесь. Тема миллион раз поднималась уже.
А я то грешным делом подумал, что ваши терпение и доброта также безграничны, как ваш интеллект...:):drink:

0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
19.02.2017, 00:01 15
Цитата Сообщение от gru74ik Посмотреть сообщение
добавьте функцию нахождения НОД. Напишите её самостоятельно. Хоть что-то Вы должны сделать сами
Tatsiana245, вот вместо комментария // TODO в 37-й строке напишите код Вашей функции нахождения НОД:
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
#include <iostream>
 
unsigned int get_number_from_user( const char * message )
{
    std::cout << message;
    unsigned int arr_size;
    std::cin >> arr_size;
    return arr_size;
}
 
void fill_by_user( int * arr, const unsigned int arr_size )
{
    for ( unsigned int i = 0; i < arr_size; ++i )
    {
        std::cout << "Enter a value of " << i + 1 << " element: ";
        std::cin >> arr[i];
    }
}
 
void show( const char * message, const int * const arr, const unsigned int arr_size )
{
    std::cout << message;
    for ( unsigned int i = 0; i < arr_size; ++i )
        std::cout << arr[i] << " ";
    std::cout << "\n";
}
 
void show( const char * message, const int number )
{
    std::cout << message << number;
}
 
int find_greatest_common_divisor( const int * const arr, const unsigned int arr_size )
{
    int greatest_common_divisor = 0;
    
    // TODO: implement this function
    
    return greatest_common_divisor;
}
 
int main()
{
    unsigned int arr_size = get_number_from_user( "Enter your array size: " );
 
    int * arr = new int[arr_size];
    fill_by_user( arr, arr_size );
    show( "\nThis is your array: ", arr, arr_size );
    show( "\nGreatest common divisor: ", find_greatest_common_divisor( arr, arr_size ) );
    delete [] arr;
}
0
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
19.02.2017, 00:03  [ТС] 16
Ок, сейчас попробую, спасибо!!!!
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
19.02.2017, 00:07 17
Tatsiana245, возможно, Вам помешает константность переденного в функцию массива (а если быть точным - указателя на первый элемент массива). Если да, измените первый аргумент в функции find_greatest_common_divisor, убрав ключевое слово const:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// вместо такого варианта:
int find_greatest_common_divisor( const int * const arr, const unsigned int arr_size )
{
    int greatest_common_divisor = 0;
    
    // TODO: implement this function
    
    return greatest_common_divisor;
}
 
// сделайте так:
int find_greatest_common_divisor( int * arr, const unsigned int arr_size )
{
    int greatest_common_divisor = 0;
    
    // TODO: implement this function
    
    return greatest_common_divisor;
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
19.02.2017, 00:12 18
Всё, я пошёл спать. Сил больше моих нет. Клюю носом. Рискую сломать или нос или клавиатуру. Или и то, и другое. Всё завтра
0
Tatsiana245
1 / 1 / 0
Регистрация: 03.01.2017
Сообщений: 95
19.02.2017, 13:18  [ТС] 19
Ок, спасибо Вам, огромное, я все еще разбираюсь...

Добавлено через 13 часов 1 минуту
Для двух чисел я нашла Нод , а вот для четырех, что - то не получается, помогите, кто может.
0
Байт
Эксперт C
19209 / 12334 / 2604
Регистрация: 24.12.2010
Сообщений: 25,355
19.02.2017, 13:22 20
Цитата Сообщение от Tatsiana245 Посмотреть сообщение
Для двух чисел я нашла Нод
А для трех?
0
19.02.2017, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2017, 13:22

Вычисление НОД двух натуральных чисел (рекурсия)
День добрый, помогите пожалуйста поправить данную прогу, надо бы избавиться от...

Нод для двух натуральных чисел с циклом for
#include&lt;iostream&gt; #include&lt;windows.h&gt; using namespace std; int main() { ...

Нод для 2-х заданных натуральных чисел с циклом while
привет,всем)помогите,пожалуйста, с программой #include&lt;iostream&gt;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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