Найти наибольший общий делитель всех элементов массива, Помогите найти ошибку |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Найти наибольший общий делитель всех элементов массива, Помогите найти ошибку |
Shmaniche |
27.05.2012 8:13
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Помогите найти ошибку в коде.
Программа выдает, что общих делителей не найдено, хотя здесь НОД = 2. Генератор случайных чисел временно отключил, чтобы проверить программу на конкретных числах. Интересно, что когда я уменьшаю массив до 3 элементов и ввожу 2, 4, 8, то НОД находится верно (НОД=2). Сообщение отредактировано: Shmaniche - 27.05.2012 10:14 |
Shmaniche |
30.05.2012 19:56
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
У кого-неибудь есть какие-нибудь мысли?
Сообщение отредактировано: Shmaniche - 30.05.2012 19:57 |
IUnknown |
30.05.2012 19:59
Сообщение
#3
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Debugger + пошаговый проход по программе тебе помогут найти ошибку. Второй раз помогать чтоб ты потом опять начал "править" чужое решение, причем не разобравшись в нем - желающих нет.
|
Shmaniche |
31.05.2012 8:11
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Debugger + пошаговый проход по программе тебе помогут найти ошибку. Второй раз помогать чтоб ты потом опять начал "править" чужое решение, причем не разобравшись в нем - желающих нет. Твой код не содержал одну проверку, я пытался ее добавить. Твой код целиком и полностью я менять не собирался, но затем мне предложили другой вариант решения, который мне показался интереснее. Признайся просто что не знаешь где ошибка в коде и все, зачем обязательно хохлиться? Сообщение отредактировано: Shmaniche - 31.05.2012 8:14 |
-Федосеев Павел- |
31.05.2012 11:13
Сообщение
#5
|
Гость |
Цитата Признайся просто что не знаешь где ошибка в коде и все, зачем обязательно хохлиться? Прикольно! Ты пытаешься взять "на слабо" вместо того, чтобы научиться пользоваться инструментом - пошаговым выполнением с наблюдением за состоянием переменных. |
Krjuger |
31.05.2012 12:52
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Поверь,человек, которого ты пытаешся взять "на слабо" уже не первый год программирует и не на одном языке.
Твоя задача не является чем то сверх трудным,более того я бы сказал она банальна. Здесь никто не обязан помогать вам, а вы еще и что то требуете. |
Shmaniche |
31.05.2012 13:07
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Поверь,человек, которого ты пытаешся взять "на слабо" уже не первый год программирует и не на одном языке. Твоя задача не является чем то сверх трудным,более того я бы сказал она банальна. Здесь никто не обязан помогать вам, а вы еще и что то требуете. Я этого человека не знаю и не могу сказать какой он в жизни профи, я лишь вижу, что он ничего конкретного по теме не сказал. Свою версию кода не привел и новичка в ошибку в коде мордой не тыкнул. Зачем вообще создан этот раздел форума, если не решать поставленые задачи? Чтобы супер-пупер-гуру в С++ в очередной раз показывали, что они на столько круты, что им лень лень написать две, три строки кода? Тем более когда задача такая банальная. Сообщение отредактировано: Shmaniche - 31.05.2012 13:09 |
Игорь |
31.05.2012 14:31
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 56 Пол: Мужской Репутация: 2 |
Кстати, программа твоя работает, вроде бы, правильно (правда не могу понять как именно). Код я немножко поправлял, но ничего серьёзного, так что перепроверь ещё раз.
|
Shmaniche |
31.05.2012 15:43
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Игорь, твой код тоже не работает, ошибка в цикле do while!
|
Krjuger |
31.05.2012 16:11
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Форум создан,чтобы помогать учиться, а не делать все за других.Хотите, чтобы вам сделали, все что захотите и при этом не прилагая никаких усилий, идите к фрилансерам, они вам за денежку все что угодно сделают.
Тебя уже несколько раз "мордой тыкали" в других темах, но результатов это не приносило. Со временем о любом человеке складывается определенное мнение. О вас складывается мнение, что вы считаете здесь всех обязанными вам помогать.Я вам давал наводки,как можно исправить вашу задачу, вы оставались глухи. Вам четко сказали, как можно выяснить и исправить ошибку,вы взбрыкнули,ваше право. Щас вам остается либо руками долго и муторно проверять,либо сидеть и ждать в надежде,что кто нибудь поможет. И чтобы внести ясность,программа, по хорошему, должна считать для любых наборов элементов,а не в строго упорядоченном виде,поэтому
Просто ужас какой то.А что произойдет, если mass[0] = mass[N-1] ??????? А ничего, что НОД ищется только для двух элементов????? для первого и последнего, а никак не для всех элементов массива.Вы взяли откуда то код, прикрутили массив и теперь кричите,что у вас не работает.То что вы скинули воообще не решает вашу задачу. |
Игорь |
31.05.2012 16:50
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 56 Пол: Мужской Репутация: 2 |
Цитата Игорь, твой код тоже не работает, ошибка в цикле do while! Ты уж извини, но это твой код (цикл по крайней мере). А вот код, который прокомментировал Krjuger, мой. Вообще могу предложить найти минимальный эллемент массива и с ним работать. |
Shmaniche |
31.05.2012 18:05
Сообщение
#12
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Krjuger, учится говоришь? Так для этого существуют учебники и задачники по С++. Зачем тогда этот форум?
Если я молчу на ваши наводки, это не значит что я не думаю и не ищу нужное решение. Пока вы тут пальцы от клаву терли, чтобы продемонстрировать, какой вы тут сУрьезный дядечка я сообразил одно такое. Может криво, но зато работает.
Думаю, как прикрутить генератор случайных чисел догадаетесь сами, раз такие умные. Сообщение отредактировано: Shmaniche - 31.05.2012 18:14 |
Krjuger |
31.05.2012 18:23
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Ну чтож, это уже похоже на правду, но есть один маленький недочет.
Сделайте,чтобы работало с отрицательными числами)А то как то непорядочно получается |
Shmaniche |
31.05.2012 18:49
Сообщение
#14
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Ну чтож, это уже похоже на правду, но есть один маленький недочет. Сделайте,чтобы работало с отрицательными числами)А то как то непорядочно получается Пока что не нашел как это можно сделать, но добавил проверку.
Однако, проверка не работает, если 0 выпадат дальше 1-ой позиции в массиве . Почему? Думаю! Сообщение отредактировано: Shmaniche - 31.05.2012 19:42 |
Krjuger |
31.05.2012 20:25
Сообщение
#15
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Что за такое страшное условие.Прям в дрож бросает.
if ((mass[i]<0) || (mass[i]==0)) Можно записать,как if (mass[i]<=0) Затем ты его явно не туда вставил,еесли ты хочешь,чтобы выводилось сообщение об ошибке,то надо вставлять сразу после начала первого цикла.
|
Федосеев Павел |
31.05.2012 20:50
Сообщение
#16
|
Бывалый Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: 8 |
Я бы реализовал всю программу следующим образом:
а) вынес расчёт НОД (GCD) в функцию б) последовательно обращался к этой функции int GCD(int a, int b) - не я придумал - честно "тиснул" из "http://e-maxx.ru/algo/euclid_algorithm" |
Shmaniche |
1.06.2012 5:54
Сообщение
#17
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Krjuger, твоя проверка на фурычит. А вот решение Павла довольно интересна , спасибо.
Сообщение отредактировано: Shmaniche - 1.06.2012 10:53 |
Krjuger |
1.06.2012 10:43
Сообщение
#18
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Да,я закрывающую скобку не туда поставил.Да и вообще с еще 1 флагом проще.
|
Shmaniche |
1.06.2012 10:51
Сообщение
#19
|
Пионер Группа: Пользователи Сообщений: 79 Пол: Мужской Репутация: 0 |
Есть вариант проще:
Думаю как применять эту функцию и как обойти случай, когда все элементы массива равны нулю - догадаетесь сами. Сообщение отредактировано: Shmaniche - 1.06.2012 10:53 |
Krjuger |
1.06.2012 12:00
Сообщение
#20
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Цитата Думаю как применять эту функцию и как обойти случай, когда все элементы массива равны нулю - догадаетесь сами. Ты в загадки с нами играешь что ли?Нам все равно и гадать нет нужны. То что ты сделал не сработает на тесте а=10 б=0,оно выдаст 10.Так что думай дальше. |
Текстовая версия | 28.09.2024 21:31 |