Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

знатокам С#

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