IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Найти наибольший общий делитель всех элементов массива, Помогите найти ошибку
Shmaniche
сообщение 27.05.2012 8:13
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Помогите найти ошибку в коде.


#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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 1.06.2012 13:21
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Цитата
Может вам и форум этот не нужен? Зачем вы вообще здесь тусуетесь? Зачем он таким профи?

Если ты спрашиваеш,то спрашивай,а слова "догадайтесь сами" может произнести учитель ,давший своим студентам неполное решение. Увы,но вам пока что в роли учителя не выступать. И да вы не поняли,о чем я вам писал.Окей распишу поподробней.

// 1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
#include <time.h>
const int N=5;

int NOD_Function(int a, int b); // Объявляем функцию вычисления НОД.


int NOD_Function(int a, int b)
{
if (b==0) // Если второе число равно 0.
{return a; } // Вернуть значение первого.
else // Иначе
{ return NOD_Function(b, a%b); } // Вернуть значение функции НОД, используя рекурретность.
}

int main()
{
int mass[N]={4, -4, 8, 16, 32}; // Объявляем массив.
int i, g, h, x, temp, NOD;
bool minus,flag;
NOD=mass[0];
/* 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]);
}

for(i=1; i<N; i++)
{
NOD=NOD_Function(NOD, mass[i]);
}
printf("\n \n NOD = %d. \n", NOD);
}


Я предположил,что вы использовали предыдущие наработки.Вот что получилось.

Кстати, на будущее, выкладываете полный код,потому что гадать, что у вас "скрывается за занавесом" никто не станет.
Как вам видно массив у нас 4, -4, 8, 16, 32 // Объявляем массив.
В ответе мы получаем число -4, что есть неверно.Надеюсь понятно почему??
Тоже самое мы получим при 4, 2, 8, -2, 32, в результате -2

Сообщение отредактировано: Krjuger - 1.06.2012 13:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Shmaniche   Найти наибольший общий делитель всех элементов массива   27.05.2012 8:13
Shmaniche   У кого-неибудь есть какие-нибудь мысли?   30.05.2012 19:56
IUnknown   Debugger + пошаговый проход по программе тебе помо...   30.05.2012 19:59
Shmaniche   Debugger + пошаговый проход по программе тебе пом...   31.05.2012 8:11
-Федосеев Павел-   Прикольно! Ты пытаешься взять "на слабо...   31.05.2012 11:13
Krjuger   Поверь,человек, которого ты пытаешся взять ...   31.05.2012 12:52
Shmaniche   Поверь,человек, которого ты пытаешся взять ...   31.05.2012 13:07
Игорь   Кстати, программа твоя работает, вроде бы, правиль...   31.05.2012 14:31
Shmaniche   Игорь, твой код тоже не работает, ошибка в цикле d...   31.05.2012 15:43
Krjuger   Форум создан,чтобы помогать учиться, а не делать в...   31.05.2012 16:11
Игорь   Ты уж извини, но это твой код (цикл по крайней ме...   31.05.2012 16:50
Shmaniche   Krjuger, учится говоришь? Так для этого существуют...   31.05.2012 18:05
Krjuger   Ну чтож, это уже похоже на правду, но есть один ма...   31.05.2012 18:23
Shmaniche   Ну чтож, это уже похоже на правду, но есть один м...   31.05.2012 18:49
Krjuger   Что за такое страшное условие.Прям в дрож бросает....   31.05.2012 20:25
Федосеев Павел   Я бы реализовал всю программу следующим образом: а...   31.05.2012 20:50
Shmaniche   Krjuger, твоя проверка на фурычит. А вот решение П...   1.06.2012 5:54
Krjuger   Да,я закрывающую скобку не туда поставил.Да и вооб...   1.06.2012 10:43
Shmaniche   Есть вариант проще: int NOD_Function(int a, int ...   1.06.2012 10:51
Krjuger   Ты в загадки с нами играешь что ли?Нам все равно ...   1.06.2012 12:00
Shmaniche   Ты в загадки с нами играешь что ли?Нам все равно ...   1.06.2012 12:12
Krjuger   Если ты спрашиваеш,то спрашивай,а слова "до...   1.06.2012 13:21
Shmaniche   Если ты спрашиваеш,то спрашивай,а слова "дог...   1.06.2012 14:00
Krjuger   Может я не знаю русского языка,но "догадайте...   1.06.2012 14:31
Shmaniche   Вы попросили помощи,вам помогли,затем вы создали ...   1.06.2012 14:51


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 23:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"