Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > НОД


Автор: plushevyi 27.12.2007, 15:23
Объясните пожалуйста, каким образом можно написать программу, которая определит и выведит на экран НОД(a; b), без использования в коде функции...
Если не трудно, то выложите код... просто мучаюсь с данным заданием уже 3 дня, с использованием функции, программа работает... smile 

Автор: GrayCardinal 27.12.2007, 15:30
plushevyi,
НОД расшифруйте плиз...

Автор: plushevyi 27.12.2007, 16:04
НОД-наибольший общий делитель, например, есть числа 12 и 6 - их НОД равен 6, или 33 и 6 - их НОД равен 3.

Как я понимаю, берутся два числа: a и b, далее вычисляем:
a=33
b=6

if (a>b) a=33-6=27;
if (a>b) a=27-6=21;
if (a>b) a=21-6=15;
if (a>b) a=15-6=9;
if (a>b) a=9-6=3; на этом этапе a<b, поэтому b-a: 9-6=3 => НОД=3

Но как написать код без использования функции я не понимаю, объясните пожалуйста...

Автор: archimed7592 27.12.2007, 16:28
Цитата(plushevyi @  27.12.2007,  15:23 Найти цитируемый пост)
без использования в коде функции...

Без использования какой ф-ции?

Автор: plushevyi 27.12.2007, 16:34
Цитата(archimed7592 @ 27.12.2007,  16:28)
Цитата(plushevyi @  27.12.2007,  15:23 Найти цитируемый пост)
без использования в коде функции...

Без использования какой ф-ции?

Вот код с функцией:


Код

#include <iostream>
//#include <cmath>
using namespace std;

int gfc(int a,int b);

int main()
{
int a=0, b=0;
while(1){
    
cout <<"Введите число";
cin >>a;
if(a==0) break;

cout << "Введите второе число";
cin >>b;
cout <<"НОД = "<< gfc(a,b)<<endl;
}
return 0;
}
int gfc(int a, int b){
    if (a%b==0) return b;
    else return gfc(b, a%b);}


Автор: archimed7592 27.12.2007, 17:03
Цитата(plushevyi @  27.12.2007,  15:23 Найти цитируемый пост)
Если не трудно, то выложите код

Здесь помогают разобраться. Если не хочешь разбираться, то тебе здесь вряд ли помогут.

Цитата(plushevyi @  27.12.2007,  15:23 Найти цитируемый пост)
просто мучаюсь с данным заданием уже 3 дня

С чем мучаешься? Что пробовал делать? Что получалось в итоге? Этот код ты писал сам?

Автор: susanin 18.1.2008, 22:29
plushevyi , в  своем примере
Цитата(plushevyi @  27.12.2007,  16:34 Найти цитируемый пост)
Вот код с функцией:

вы приводите код с рекурсивной функцией нахождения НОД. если словами

Цитата(plushevyi @  27.12.2007,  15:23 Найти цитируемый пост)
без использования в коде функции...

вы хотели сказать, что требуется найти НОД без использования именно рекурсивной функции, то предлагаю следующий код
Код

int nod(int a, int b)
{
    if(a<b)
    {
        for(int i=a;i>0;i--)
            if(a%i==0)
            {
                if(b%i==0)
                    return i;
            }
    }
    else
        for(int i=b;i>0;i--)
            if(b%i==0)
            {
                if(a%i==0)
                    return i;
            } 
}

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)