1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Найти наибольший общий делитель всех элементов массива, Помогите найти ошибку
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #define N 5 int main() { /* int mass[N]; */ int mass[N]={2, 4, 8, 16, 32}; // Объявляем массив. int i, g, h, x, temp, NOD; /* srand(unsigned(time(NULL))); // Запуск генератора случайных чисел. */ printf("\n Massiv iz 5 elementov: \n"); for(i=0; i<N; i++) { /* mass[i]=rand()%10+1; */ printf("\n Mass[%d] = %d. ", i, mass[i]); }
if(mass[0]<mass[i]) // Если первый элемент массива меньше второго, тогда... { g=mass[i]; h=mass[0]; } // запомининаем след. элемент в перем-ой g, а первый в перем-ой h. if(mass[0]>mass[i]) // Если первый элемент массива больше второго, тогда... { g=mass[0]; h=mass[i]; } // запомининаем первый элемент в перем-ой g, а след. в перем-ой h.
do // выполнять до тех пор... { if(g%h == 0) // если большее число делится на меньшее без остатка, тогда... { NOD=h; } // меньшее число и есть НОД. else // Иначе. { temp=h; h=g%h; // Второе станет остатком от деления. g=temp; // А первое число вторым, значения которого записываем во временную переменную. NOD=h; } // Пока НОДом будет второе число. } while(g%h!=0); // ...пока остаток от деления g и h элементов не перестанет быть равным 0.
if (NOD != 1) // Если НОД не равен 1... { printf("\n \n NOD = %d. \n", NOD); } // Выводим результат на экран. else { printf("\n \n Chisla ne imeut obschih deliteley \n"); } // Числа не имеют общих делителей.
getch(); return 0; }
Программа выдает, что общих делителей не найдено, хотя здесь НОД = 2. Генератор случайных чисел временно отключил, чтобы проверить программу на конкретных числах.
Интересно, что когда я уменьшаю массив до 3 элементов и ввожу 2, 4, 8, то НОД находится верно (НОД=2).
Сообщение отредактировано: Shmaniche - 27.05.2012 10:14