Найти НОК для заданных чисел - C (СИ)
Формулировка задачи:
При написании использовал итерационный вариант , дальше ввел массив, прошу помощи в исправлении. Буду благодарен. Я только начинаю программировать, если будут коварные ошибки, пожалуйста не агритесь
#include <stdio.h> int NOK (int a, int b) { int wtf=(a>b) ? a : b; for (int i=wtf; ; i++) if (!(i%a) && !(i%b)) return i; } void main () {int a[100]; int n,i; int k; printf("Vvedite kol-vo elementov n=%d\n",n); scanf("%d",&n); printf("Vvedite elementi massiva"); for (i<n) { printf("%d\n",a[i]); scanf("%d",a[i]); } printf("Massiv :"); for (i<n) { printf("%d\n",a[i]); } k=NOK(a[1],a[2]); for (n>i>3) { k=NOK(k,a[i]); } printf("Obshiy NOK vsex elementov=%d\n",k); }
Решение задачи: «Найти НОК для заданных чисел»
textual
Листинг программы
#include <stdio.h> //Реализация для 2 чисел long int nod (int x, int y) { return (x?nod(y%x,x):y); } long int nok (int x, int y) { return x*y/nod(x,y); } //и вернуть nok(x,y) void main () { const int n=5; int a[n]={24,36,144,48,72},i; //НОД для массива: long int nd=a[0]; for (i=1; i<n; i++) nd=nod((nd<a[i]?nd:a[i]),(nd<a[i]?a[i]:nd)); printf ("\nNOD=%ld",nd); //НОК для массива: long int nk=1; for (i=0; i<n; i++) nk=nok(nk,a[i]); printf ("\nNOK=%ld",nk); }
Объяснение кода листинга программы
Представленный код решает задачу нахождения наименьшего общего кратного (НОК) для массива целых чисел.
- Сначала определяется функция
nod
, которая находит НОД (наибольший общий делитель) для двух чисел. Она возвращает одно из этих чисел, т.е. если первое число не равно нулю, то возвращается второе число, а если первое число равно нулю, то возвращается второе число, уменьшенное на модуль (остаток от деления) на первое число. - Затем определяется функция
nok
, которая находит НОК для двух чисел. Она возвращает произведение этих чисел, деленное на НОД этих чисел. - В функции main определяется константа
n=5
, которая указывает размер массива. - Затем определяется массив
a[n]
, который содержит некоторые числа. - Далее, в цикле, находится НОД для массива
a
. Первое число в массивеa
устанавливается в качестве начального значения НОД. Затем, в цикле, для каждого числа в массивеa
, НОД обновляется в соответствии с номером текущего числа. Т.е. если текущее число меньше НОД, то НОД обновляется до текущего числа. Если текущее число больше или равно НОД, то НОД обновляется до остатка от деления текущего числа на НОД. - После нахождения НОД, в цикле, находится НОК для массива
a
. Первое число в массивеa
устанавливается в качестве начального значения НОК. Затем, в цикле, для каждого числа в массивеa
, НОК обновляется путем вызова функцииnok
с текущим числом и НОК. - Наконец, значения НОД и НОК выводятся на экран с помощью функции printf.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д