Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2021, 19:03   #1
123Ллла
Пользователь
 
Регистрация: 07.03.2021
Сообщений: 34
По умолчанию Поиск наибольшего общего делителя, C++ (желательно использовать циклы, условие)

Поиск наибольшего общего делителя (DBD) двух натуральных чисел a и b, называемый
Евклидово, словесное описание алгоритма. Напишите программу для решения этой проблемы.
Евклидов алгоритм:
1. Исходные данные - натуральные числа a и b.
2. Если числа равны, то любой из них является DBD, и никаких дальнейших действий не предпринимается, в противном случае предпринимаются дальнейшие действия.
действия.
3. Определите, какое число больше.
4. Разница между большим и меньшим числами становится значением большего числа.
5. Шаги алгоритма повторяются с шага 2.
Проверять. Когда a = 14, b = 4, ответ DBD = 2.
123Ллла вне форума Ответить с цитированием
Старый 13.06.2021, 20:14   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Дык осталось только словесное описание шагов алгоритма заменить операторами языка. Делов-то...
Вперёд и с песней!
digitalis вне форума Ответить с цитированием
Старый 13.06.2021, 20:15   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Что не получается? Один while с if.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.06.2021, 20:19   #4
123Ллла
Пользователь
 
Регистрация: 07.03.2021
Сообщений: 34
По умолчанию

BDA, код
123Ллла вне форума Ответить с цитированием
Старый 13.06.2021, 20:30   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Стесняюсь спросить: а хоть одну строчку кода в жизни написать довелось?
digitalis вне форума Ответить с цитированием
Старый 13.06.2021, 20:38   #6
123Ллла
Пользователь
 
Регистрация: 07.03.2021
Сообщений: 34
По умолчанию

digitalis, Довелось
123Ллла вне форума Ответить с цитированием
Старый 13.06.2021, 22:16   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

На основе 2 пункта напишите цикл while, на основе пунктов 3-4 напишите if.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 14.06.2021, 08:31   #8
123Ллла
Пользователь
 
Регистрация: 07.03.2021
Сообщений: 34
По умолчанию

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int a,b,DBD;
cout << "a: "; cin >> a;
cout << "b: "; cin >> b;
DBD = 0;
if (a==b)
{
DBD = b;
}
else if (a>b)
{
while (a>b)
{
a = a - b;
DBD = a;
}
}
else if (a<b)
{
while (a<b)
{
b = b - a;
DBD = b;
}
}
cout << "DBD =" << DBD << endl;
return 0;
}
Код близок к правде, но есть ошибки: например если ввести 14 и 10 ответ 4, вроде должен быть 2.
123Ллла вне форума Ответить с цитированием
Старый 14.06.2021, 09:37   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Хоть давно не писал на С, но вроде так:

Код:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int a,b,DBD;
cout << "a: "; cin >> a;
cout << "b: "; cin >> b;

while  (a!=b)
    {  if (a>b) a=a-b; else b=b-a; }
DBD=a;

cout << "DBD =" << DBD << endl;
return 0;
}
Краткость - сестра таланта, но мачеха гонорара ©
DBD никогда не бывает нулём, бо на 0 делить ниизя. И
Код:
DBD = 0;
здесь ни к чему не только по этой причине, но ещё и потому, что алгоритм выдаст значение DBD в любом случае.
Вот как мааленькая задачка наводит на большие размышления.

А ещё в древней Месопотамии было принято форматировать исходник для удобства чтения и обрамлять его тегами CODE, если постишь их в форум.

Кстати, задумался об вопрос: if...;else... считаются одним оператором и без {} в данном случае ничего страшного не произошло бы? Вопрос к знатокам, проверить не на чем, С++ у меня на компе отродясь не было.

Последний раз редактировалось digitalis; 14.06.2021 в 15:13.
digitalis вне форума Ответить с цитированием
Старый 15.06.2021, 08:04   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

digitalis,

в данном случае нормально, так как в ветках стоят одиночные выражения. Но лучше всегда ставить скобки, это читабельнее и безошибочнее

Код:
if (a>b) {a=a-b;}
else {b=b-a;}
Цитата:
Сообщение от digitalis Посмотреть сообщение
проверить не на чем, С++ у меня на компе отродясь не было.
онлайн можно проверить https://www.onlinegdb.com/

кстати, к слову об одном операторе, вот такой неприятный момент тоже нужно помнить (не понимаю, как разрабы его допустили и почему всё ещё не исправили)
Код:
#include <iostream>

int* GetSomePointer()
{
    return nullptr;
}

int main() 
{
    if(auto* p=GetSomePointer())
    {
        std::cout<<"ok";
        *p=1;
    }
    else
    {
        //сюрприз! Тут переменную тоже видно ))
        //(сегфолт по невнимательности)
        std::cout<<"о_О";
        *p=2;
    }
}
статический анализатор почему-то не определяет бяку
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA. Напишите процедуру на языке VBA, которая определяет сократимость дроби a/b (b≠0) . Вычисление наибольшего общего делителя (НОД) чисел a и b оформить в виде функции. Lizka Microsoft Office Excel 2 23.04.2017 11:07
Нахождения наибольшего общего делителя в виде подпрограммы Тина37 Паскаль, Turbo Pascal, PascalABC.NET 1 04.03.2013 16:48
Нахождение наибольшего общего делителяНахождение наибольшего общего делителя A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 27.04.2010 16:53
Нахождение наибольшего общего делителя fs444 Общие вопросы C/C++ 4 29.03.2010 19:07
нахождение наибольшего общего делителя и наименьшего общего кратного made in russia Помощь студентам 2 21.12.2008 23:36