![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Новичок
Джуниор
Регистрация: 27.11.2012
Сообщений: 13
|
![]()
Наконец-то разобрался и отредактировал код, чтоб был более читабельным.
Проблема не решена: программа работает, но кроме простых чисел показывает и некоторые непростые. Первый пример - число 15. |
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
Неработающий код приведите, пожалуйста. Тот, который в заглавном (исправленном) сообщении, по-прежнему несёт в себе бредовую конструкцию 10>i<Chislo1.
|
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
так проблема у Вас в том, что Вы плохо представляете, какие делители могут быть у числа!
что за 10>i<Chislo1 ?! Это ни в какие ворота не лезет. хотя бы уж так: Код:
ну и ещё. число 2 является простым.... Я не вижу, чтобы у Вас в коде это учитывалось! p.s. не понимаю, откуда у Вас такая неприязнь к чужим решениям! Проще взять хорошее чужое решение и разобраться в нём, переварить его, сделать его своим и использовать в дальнейшем.. ![]() |
![]() |
![]() |
![]() |
#14 |
Новичок
Джуниор
Регистрация: 27.11.2012
Сообщений: 13
|
![]()
Поправил: бредовую конструкцию "10>i<Chislo1" заменил на "10>i&&i<Chislo1". Еще одна поправка: код рабочий, но с описанной ранее особенностью.
Теперь о делителях: а почему я не могу во вложенном цикле перебирать делители от 1-цы до 9-ки до того момента, пока делитель не станет равен или 9-ти или самому числу? По поводу чужих решений: самое простое запомнить чужой вариант. В безвыходных ситуациях - это, конечно, лучший вариант, НО: я пытаюсь разобраться в своих ошибках, а это, на мой взгляд - лучший способ обучения. Сам разобраться не смог - попросил помощи. Некоторые нюансы на будущее учту - как в случае с конструкцией "10>i<Chislo1" . За это спасибо. |
![]() |
![]() |
![]() |
#15 |
Новичок
Джуниор
Регистрация: 27.11.2012
Сообщений: 13
|
![]()
Еще пометка: і - это и есть делитель в моем коде.
Кроме того, Ваше замечание по поводу 2-ки абсолютно справедливо, однако для исправления этой погрешности мне не потребуется много времени. Главная задача - убрать числа типа 15. Последний раз редактировалось Eshiru; 27.11.2012 в 15:09. |
![]() |
![]() |
![]() |
#16 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Давайте разберёмся. Вы делители будете перебирать от 2 до 9 или до числа ???!! Если до самого числа, то при чём здесь "до 9" ?!! Если до 9-ки, то это НЕВЕРНО! Вот в этом недопонимании, имхо, и заключена Ваша проблема... кроме того, нет смысла перебирать делители до самого числа. Это не ошибка, это избычточно! Если не нашёлся делитель на диапазоне от 2 до КореньКвадратныйИзЧисла (включительно) - то дальше он уже ТОЧНО НЕ НАЙДЁТСЯ! Смысла в переборе нет никакого! Хотя и результаты это не испортит. Просто дольше будет программа "впустую" перебирать числа... p.s. переменная ostatok вам тоже не нужна, прямо в if - сравнивайте значение: if ( chislo1 % i == 0 ) ... // число не простое!; |
|
![]() |
![]() |
![]() |
#17 |
Новичок
Джуниор
Регистрация: 27.11.2012
Сообщений: 13
|
![]()
Да, да, да, Сергей, программу я именно так и реализовываю, как говорю. И переменную ostatok я тоже не использовал, а делал как Вы пишете - путем условия if. Я много вариантов перебрал, но нужного результата не достиг. Сюда запостил последнюю из реализаций, поэтому так.
Ваш вопрос: "Вы делители будете перебирать от 2 до 9 или до числа ???!!" Ответ: до самого числа перебирать делитель смысла нет, и это я понял. Поэтому поставил условие 10>i&&i<Chislo1. Это условие предполагает, что если число меньше 10, то делитель будет перебираться до этого числа. Если число больше или равно 10, то перебирает до 9-ти. При этом условие if (Ostatok==0) {break;} предполагает, что как только оно найдет делитель, на который число делится без остатка, Chislo1 изменится на единицу, а делитель дальше не перебирается (даже если он до 9-ти не добрался). Т.е., я так предполагаю, что после оператора break внутренний цикл заканчивается и во внешнем цикле должно сработать Chislo1++. По моей задумке, если нашелся делитель, на который число делится без остатка, то дальше делители не перебираются, а изменяется Chislo1. Именно такая реализация продиктована тем, что я не знаю Вашей аксиомы: "Если не нашёлся делитель на диапазоне от 2 до КореньКвадратныйИзЧисла (включительно) - то дальше он уже ТОЧНО НЕ НАЙДЁТСЯ!" Т.е. теперь уже знаю, но неужели нельзя реализовать программу БЕЗ этого знания, что я и попытался сделать? И еще: СПАСИБО за участие. |
![]() |
![]() |
![]() |
#18 |
Новичок
Джуниор
Регистрация: 27.11.2012
Сообщений: 13
|
![]()
Сергей, переписать программу при помощи Вашей подсказки "Если не нашёлся делитель на диапазоне от 2 до КореньКвадратныйИзЧисла (включительно) - то дальше он уже ТОЧНО НЕ НАЙДЁТСЯ!" - две минуты. И я уже понимаю, что она будет правильно работать.
Однако прошу раскритиковать мой предыдущий пост. ПОЧЕМУ так нельзя? |
![]() |
![]() |
![]() |
#19 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
извините, я не понял ваших рассуждений... Какая разница, меньше число 10 или нет?! От этого что-то меняется?! Вам нужно искать делители. числа. Если они есть (от 2 и до чего-угодно), значит число НЕ ПРОСТОЕ.
Откуда у Вас возникла (ошибочная) идея, проверять числа меньше 10 и больше десяти по разным алгоритмам?! Вот в этом и есть ваш основной "косяк"! Всё остальное уже детали... (например, я не знаю C и не понимаю, как Вы опеределяете, Break'ом закончился цикл или просто все числа перебраны?! я бы для этого завёл дополнительную переменную. и перед тем, как сделать Break изменял бы эту переменную. а после цикла проверял эту переменную и по ней определял - вышли мы из цикла по break (а значит, число не простое), или цикл дошёл до самого последнего делителя и ни разу число не было кратно, а значит, число простое! ферштейн? |
![]() |
![]() |
![]() |
#20 |
Новичок
Джуниор
Регистрация: 27.11.2012
Сообщений: 13
|
![]()
Спасибо, вроде ферштейн, но над программой еще покумекаю (именно исходя из своих рассуждений, с Вашими - понятно, что получится). Если выйдет - дам окончательный вариант.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача о нахождении простых чисел в матрице | alexamazzing | Помощь студентам | 1 | 26.10.2012 02:11 |
Вывод на экран N простых чисел. | Renge | Помощь студентам | 2 | 13.09.2011 18:53 |
задача по массивам // Delphi //код прилагается | Makotya | Помощь студентам | 2 | 20.05.2009 22:04 |
Вывод простых чисел. | MAKEDON | Помощь студентам | 1 | 10.03.2009 16:55 |
Где ошибка в моем коде? | artemavd | БД в Delphi | 12 | 22.09.2008 14:28 |