Login
знатокам С#
NEW 12.04.09 21:39
Zuletzt geändert 13.04.09 16:11 (monstrello72)
Такой вопрос: я начал недавно изучать С# и вначале все шло вроде понятно(я изучаю его On-Line), но следующая программа(составленная авторами) должна выдавать простые числа от 1 до 100(2, 3, 5, 7, 11, 13, 17, 19, 23, и т.д.) , а она выдает все наборот (все составные числа). Подскажите пожалуйста как исправить эту программу???!!!!!! Заранее спсибо!!!
P.S. код в PDF формате -ниже
P.S. код в PDF формате -ниже
NEW 12.04.09 21:58
in Antwort monstrello72 12.04.09 21:39
Ты в самом начале устанавливаешь IsPrimeNumber на true и потом нигде это значение не изменяешь. Поэтому тебе выдаются все числа, у которых при делении в остатке иногда бывает 0.
ps. Ненужно делить на все числа от 1 до i-1, достаточно делить только на те, которые меньше квадратного корня из i.
ps. Ненужно делить на все числа от 1 до i-1, достаточно делить только на те, которые меньше квадратного корня из i.
NEW 12.04.09 22:16
in Antwort Кот Дивуар 12.04.09 21:58
Я новичек в этом деле. Я чего-то недопетрю причем здесь квадратные корни? Если тебе не трудно напиши пожалуйста код
NEW 12.04.09 22:28
in Antwort monstrello72 12.04.09 22:16
Про квадратные корни забудь, у тебя ошибка в другом. А именно в блоке if (i % j == 0). Посмотри внимательно, что твоя программа делает в этом случае.
NEW 12.04.09 22:38
in Antwort Кот Дивуар 12.04.09 22:28
я это понимаю!!!! А как сделать чтобы в этом месте опрелелялся остаток с запятыми, ведь тогда должно быть все правильно или...
NEW 12.04.09 22:48
in Antwort monstrello72 12.04.09 22:38, Zuletzt geändert 12.04.09 22:49 (Кот Дивуар)
Подсказка: в коде есть комментарий, который говорит о том, что сбрасывается флаг IsPrimeNumber, но отсутсвует оператор, который бы это делал.
NEW 12.04.09 22:54
in Antwort Кот Дивуар 12.04.09 22:48
Еще подсказка, но уже в целях оптимизации кода:
1. после строчки Console.WriteLine ЗА скобкой "}" вставь оператор break, тогда цикл будет прерываться сразу после того, как обнаружится, что число составное.
2. переменную j изменяй не от i-1 до 1, а от 1 до sqrt(i).
1. после строчки Console.WriteLine ЗА скобкой "}" вставь оператор break, тогда цикл будет прерываться сразу после того, как обнаружится, что число составное.
2. переменную j изменяй не от i-1 до 1, а от 1 до sqrt(i).
NEW 12.04.09 22:55
in Antwort Кот Дивуар 12.04.09 22:48
Ну не томи уже подскажи этот оператор , я же говорил : я новичек
NEW 12.04.09 23:04
in Antwort monstrello72 12.04.09 22:55
Это обычный оператор присваивания "=".
В самом начале цикла ты присваиваешь переменной IsPrimeNumber значение true. И потом это значение НИГДЕ не изменяешь. Понятно, что условие if(IsPrimeNumber == true) всегда оказывается верным.
Там похоже еще надо кое-что менять. Мне щас лень, если честно, соображать. Завтра может быть.
В самом начале цикла ты присваиваешь переменной IsPrimeNumber значение true. И потом это значение НИГДЕ не изменяешь. Понятно, что условие if(IsPrimeNumber == true) всегда оказывается верным.
Там похоже еще надо кое-что менять. Мне щас лень, если честно, соображать. Завтра может быть.
NEW 12.04.09 23:19
in Antwort Кот Дивуар 12.04.09 23:04
А завтра я могу только вечером... Ладно спасибо всеравно!!!Надеюсь до завтра!!!
NEW 13.04.09 12:11
in Antwort monstrello72 12.04.09 23:19, Nachricht gelöscht 13.04.09 12:13 (monstrello72)
NEW 13.04.09 22:08
in Antwort monstrello72 13.04.09 12:12
NEW 14.04.09 00:56
in Antwort monstrello72 13.04.09 22:08
NEW 14.04.09 02:43
in Antwort Кот Дивуар 14.04.09 00:56
Так должно вроде работать
------
Не, не будет... точнее - будет выдавать много лишнего или пропускать нужное.
Последняя проверка должна быть во внешнем цикле, работа с флажком - начинаться там же.
Лучшее, что можно посоветовать - найти описание самого алгоритма - решето Эратосфена. (?)
P.S. Тонкости - проверка только нечетных, проверка только простых в качестве делителей - опущены...
------
Не, не будет... точнее - будет выдавать много лишнего или пропускать нужное.
Последняя проверка должна быть во внешнем цикле, работа с флажком - начинаться там же.
Лучшее, что можно посоветовать - найти описание самого алгоритма - решето Эратосфена. (?)
P.S. Тонкости - проверка только нечетных, проверка только простых в качестве делителей - опущены...
NEW 14.04.09 10:20
in Antwort Murr 14.04.09 02:43
Точно какая-то странная бессистемная фигня получается. Ща исправим.
NEW 14.04.09 10:27
in Antwort Кот Дивуар 14.04.09 10:20
Скобку не туда поставил. После break; должно стоять две фигурных скобки, а одну из конца нужно стереть.
Проверять можно действительно только нечетные - изменить for(int i=100; i > 1; i--) на for(int i=101; i > 1; i = i - 2).
Проверять можно действительно только нечетные - изменить for(int i=100; i > 1; i--) на for(int i=101; i > 1; i = i - 2).
14.04.09 19:40
in Antwort Кот Дивуар 14.04.09 10:27, Zuletzt geändert 14.04.09 20:09 (monstrello72)
NEW 14.04.09 20:09
in Antwort monstrello72 14.04.09 19:40
Ты бы написал своими словами что именно ты пытаешься сделать.
Бо, сейчас сложно понять в чем твоя проблема - в непонимании
применяемого метода или в непонимании используемых конструкций
языка С#...
Бо, сейчас сложно понять в чем твоя проблема - в непонимании
применяемого метода или в непонимании используемых конструкций
языка С#...
NEW 14.04.09 20:25
in Antwort monstrello72 14.04.09 19:40
Ты почему-то упорно не хочешь написать IsPrimeNumber = false;
Вставь перед break эту строчку, после break две закрывающие фигурные скобки и в конце убери лишние.
Вставь перед break эту строчку, после break две закрывающие фигурные скобки и в конце убери лишние.