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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Найти наибольший общий делитель всех элементов массива, Помогите найти ошибку
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 9.05.2024 3:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name