русский
Germany.ruForen → Архив Досок→ Programmierung

знатокам С#

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