Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 4
1

Найти наибольший общий делитель 8 чисел

02.03.2013, 17:40. Показов 1547. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Господа! Я не в состоянии написать программу сам, так как не понимаю как записать это на машинном языке. Полистав форум, я вижу, что большинство вопросов - "я не хочу, сделайте за меня!". Алгоритм у меня есть, но я не могу сделать его на СИ. Помогите пожалуйста!
Нужно написать программу:
Дано 8 натуральных чисел. Найти наибольший общий делитель. Процедуру нахождения вынести в функцию. Очень болит голова, пожалуйста выручите меня!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2013, 17:40
Ответы с готовыми решениями:

Найти наибольший общий делитель трех чисел
Даны два натуральных числа A и B. Требуется найти их наибольший общий делитель (НОД). Входные...

Задано n натуральных чисел (n >10) найти наибольший общий делитель
Помогите написать программу, используя подпрограммы: задано n натуральных чисел (n >10) ,найти...

Найти наибольший общий делитель для заданной последовательности чисел
Дано натуральное число n и натуральные числа a1, a2, ..., an. Найти наиболее больший общий делитель...

Найти наибольший общий делитель для 10 заданных натуральных чисел
Найти наибольший общий делитель для 10 заданных натуральных чисел.

8
7 / 7 / 2
Регистрация: 02.03.2013
Сообщений: 69
02.03.2013, 17:42 2
Так в чем вопрос/тема?
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 4
02.03.2013, 17:55  [ТС] 3
Цитата Сообщение от Korhall Посмотреть сообщение
Так в чем вопрос/тема?
Не получается написать правильно работающую программу: Дано 8 натуральных чисел. Найти наибольший общий делитель. Процедуру нахождения вынести в функцию.

Вот что получилось у меня...
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
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
extern const int n=8;
using namespace std;
int NOD (int mas[n])
{
   int i,z;
   float del;
   for(i=0;i<N;i++) 
   {
    del=mas[i]%i;
    if (del==0) 
   {
   z=i;
   }
   else cout<<"НОД нет";
   }
return z;
}
 
int main()
{
  int mas[n]={16,46,36,68,10,12,14,98};
  int i;
   cout<<"Дано 8 натуральных чисел. Найти Наибольший Общий делитель";
   
     cout<<"НОД="<<NOD(mas));
  _getch();
}
0
7 / 7 / 2
Регистрация: 02.03.2013
Сообщений: 69
02.03.2013, 18:08 4
Так, первое:
C
1
int NOD (mas[n])
Должно быть
C
1
int NOD (int mas[n])
Т.к. в функции все равно надо указывать тип передаваемых данных.

Добавлено через 3 минуты
C
1
retrun z;
return написан неправильно.

Дальше:
C
1
 cout<<"НОД="<<NOD(mas));
вторая скобка не нужна:
C
1
 cout<<"НОД="<<NOD(mas);
Добавлено через 1 минуту
Может я и ошибаюсь, но меня очень смущает эта строка:
C
1
 for(i=0;)
Ты чего ей добиться хотел?
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 4
02.03.2013, 18:15  [ТС] 5
Исправил. У меня вертится в голове идея.. Нужно найти минимальный элемент в массиве и найти его наибольшее делимое. и все остальные числа делить на это число. Если остаток от деления ноль, то это число и есть НОД. Если остаток от деления не 0, то это число уменьшаем, и процесс деления начинается заново с первой ячейки массива. и этот цикл повторяем до тех пор пока в остатке от деления не будет получен 0. Если число равно 1 (в любом случае придем сюда... как я понял) то напечатаем, что общего делителя не существует (он равен 1).. На бумаге написал,а в машинном виде не хватает сил написать...
0
7 / 7 / 2
Регистрация: 02.03.2013
Сообщений: 69
02.03.2013, 18:21 6
Давай попробуем словами:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int NOD (mas[n]) //это функция определения НОД
{
   int i,z; // инициализируем переменные типа int
   float del; // инициализируем переменную типа float
   for(i=0;) // смысл в цикле если он состоит из одной операции???
   {
    del=mas[i]%i;  // i=0 тогда del = 1-й элемент массива/0. А это ошибка в принципе.
    if (del==0) 
   {
   z=i;
   }
   else cout<<"НОД нет";
   }
retrun z;
}
В общем - проблема в цикле. Даже если ты доработаешь условия для for, то все равно работать не будет, т.к. каждый элемент массива будет делиться на его порядковый номер.

Добавлено через 4 минуты
Цитата Сообщение от Atettion Посмотреть сообщение
Нужно найти минимальный элемент в массиве и найти его наибольшее делимое. и все остальные числа делить на это число. Если остаток от деления ноль, то это число и есть НОД. Если остаток от деления не 0, то это число уменьшаем, и процесс деления начинается заново с первой ячейки массива. и этот цикл повторяем до тех пор пока в остатке от деления не будет получен 0. Если число равно 1 (в любом случае придем сюда... как я понял) то напечатаем, что общего делителя не существует (он равен 1).. На бумаге написал,а в машинном виде не хватает сил написать...
Ну, вроде верно.
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 4
02.03.2013, 18:51  [ТС] 7
Я передумал реализовывать ту идею, она показалась мне очень заморочной (исходя из моего состояния), подумал и решил написать так:
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
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <locale>
#include <iostream>
using namespace std;
 
long int NOD(long int m, long int n)// Объявляем функцию с именем NOD, в нее передаем из главной программы m и n
{
    long int nod;// объявляем типом длинное целое возвращаемое значение (длинное - так, на всякий случай.).
     if ((n%m)==0) nod=m; //Если остаток от деления 
     else nod=NOD(n,m%n);//
    return nod;//Возвращаем в main значение НОД
}
 
int main()
{
 long int mas[8];//объявляем массив из 8 ячеек.
 int i,x;//объявляем переменные - х для ввода числа, i для оператора цикла
    cout<<"\nВведите 8 натуральных чисел\n";
    for (i=0;i<8;i++)//Цикл - от 0 до 8
        {
            cin>>x;//Ввод Х
            mas[i]=x;//присваиваем массиву значение этого Х
        }
    int k=mas[0];//объявляем переменную и присваиваем ей 0 ячейку массива
    for (i=1;i<8;i++)// Цикл передачи в функцию NOD
        {
            k=NOD(k,mas[i]);//передаем 0 элемент массива в функцию, вместе с ним передаем все остальные.
        }
    cout<<"NOD="<<k;//Печатаем k, то есть НОД
_getch();
}
Тестировал. Работает.. Верно. Прокомментирую строки, может не у одного меня такой вопрос возникнет.. как найти 8.. а у меня получается и более.. То есть как найти НОД N чисел..
to Korhall
Как Вы считаете, правильная реализация? У меня бывает что и на здоровую голову трачу около 5 часов на простецкое задание... например переставить столбцы матрицы по какой-нибудь диагонале или что-то в этом роде.. смешно конечно, но бывает и такое..
0
7 / 7 / 2
Регистрация: 02.03.2013
Сообщений: 69
02.03.2013, 19:04 8
находим минимальное число:
C
1
2
3
4
5
6
min=mas[0];
for (i=0; i<=8; i++)
{
 if mas[i]<min
 min=mas[i];
}
Добавлено через 1 минуту
Вроде считает правильно.

Добавлено через 3 минуты
А вот это:
C
1
2
cin>>x;//Ввод Х
            mas[i]=x;//присваиваем массиву значение этого Х
не будет проще
C
1
cin>>mas[i];
???
0
vua72
02.03.2013, 19:17     Найти наибольший общий делитель 8 чисел
  #9

Не по теме:

Цитата Сообщение от Atettion Посмотреть сообщение
Тестировал. Работает.. Верно. Прокомментирую строки, может не у одного меня такой вопрос возникнет.. как найти 8.. а у меня получается и более.. То есть как найти НОД N чисел..
Ну так этот подход самый очевидный

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2013, 19:17

Найти наибольший общий делитель двух натуральных чисел, алгоритм Евклида
Ребята, не могу понять, как сформулировать функцию мейн. Нужно найти наибольший общий делитель двух...

Нужно найти наибольший общий делитель двух чисел использованием алгоритма Евклида
Дано натуральние числа a, b, c. Получить наибольший общий делитель этих чисел. Для определения НОД...

Найти наибольший общий делитель чисел M и N. Используйте теорему Эйлера: Если M делится на N, то НОД (N, M)=N,
решить нужно с функциями пользователя на языке си. вот, я около этого... помогите, будьте бобры...

Найти наибольший общий делитель
Найти наибольший общий делитель


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru