Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 3
1
.NET 4.x

Не могу разобраться в примере, данном в книге Герберт Шилдт С# 4.0

19.07.2012, 01:45. Показов 1999. Ответов 5
Метки нет (Все метки)

Новичок в программирование, изучаю С#, посоветовали книгу Герберт Шилдт С# 4.0. Задание таково, "Выявит простые числа от 2 до 20", всегда сначала переписываю код программы в Visual Studio 2010, а потом начинаю разбираться, но в этом случае не понимаю как это все реализовано! Объясните пожалуйста!Спасибо!
using System;

1) class ProstoeChislo
2) {
3) static void Main()
4) {
5) int num;
6) int i;
7) int factor;
8) bool isprime;
9)
10) for (num = 2; num < 20; num++)
11) {
12) isprime = true;
13) factor = 0;
14) for (i = 2; i <= num / 2; i++)
15) {
16) if ((num % i) == 0)
17) {
18) isprime = false;
19) factor = i;
20) }
21) }
22)
23) if (isprime)
24) Console.WriteLine(num + " - простое число");
25) else
26) Console.WriteLine("Наибольший множитель числа " + num + " равен " + factor);
}

}
}

В 10 строчке понятно, задаем цикл for, переменная num служит как раз для выяснения простых чисел в пределах от 2 до 20. Вот не могу понять, зачем в 12 строке мы ставим переменную логического типа данных в true? Начнем с 14 строки, допустим цикл выше который, for запустился, переменная num имеет значение равным 2. Идем в цикл for на 14 строке, здесь присваиваем "инициализация" i=2; далее "условие" , под сомнением, будет действовать пока i<=num/i(если num=2, а i=2 то получается 1 , не понятно), далее инкремент, здесь ясно! Далее переходим к 16 строке, если остаток от деления num на i будет равен 2, то (а он у нас ведь равен 0), то переменная isprime=false и переменной factor присваивается значение переменной i.В 23 строке, разве isprime не должно быть true, чтобы оператор if сработал.? Но он переходит именно на на этот оператор. Цикл закончился, начался новый, num=3, i=3 все также, это простое число как и 2, тока что такое у нас получилось в 14 строке, где "условие" i<=num/2 (если num стал 3 то получается 3/2 не могу сообразить или я не прав). Далее заново, num 4; i=4; и что же в 14 строке, где "условие" получаем i<=4/2 (=2). Я дальше не могу понять что происходит! Разъясните пожалуйста, и особенно с переменной isprime.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2012, 01:45
Ответы с готовыми решениями:

Герберт Шилдт и C# 6.0
Добрый день. Кто знает, работает Шилдт над новой книгой C# 6.0 или нет? Албахари мне не очень...

Исходники программ с книги Герберт Шилдт - C# 4.0. Полное руководство
Где скачать исходники программ с книги Герберт Шилдт - C# 4.0. Полное руководство ? Самое...

C++ и Герберт Шилдт
Здравствуйте. Вот сижу я, выбираю себе книгу для изучения плюсов и вижу, что почему-то все дико...

Герберт Шилдт, С++ Шаг за шагом
Приветствую всех! Я чайник в С++, и заказал себе книгу Герберт Шилдт, С++ Шаг за шагом. Стоило...

5
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
19.07.2012, 02:21 2
Потому как в конце идет проверка, что если єто переменная тру - то тогда num- простое число.
Вот изначально оно задется как тру(как бы делаем утверждение что любое число простое) - но потом , после проверки, если выяснилось что оно не простое - то меняем его на фалсе.но при каждом новом числе оно снова будет тру - а фолсе станет только при выполнении условия.
1
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
12.10.2013, 11:00 3
Тоже дошел до этого примера. Я не могу врубиться почему в 14 строке, где 2-й оператор for, используется условие (i <= num / 2), а именно почему мы делим на 2? Почему нельзя перебрать множители числа num используя ( i <= num-1) и все??
Спасибо.
0
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
12.10.2013, 11:59 4
Ну как объяснить бы. Минимальное число для проверки простоты будет 2 .
Например у нас есть число 10, для проверки простоты мы первым делом разделим его на 2.
А двойка в условие стоит чтобы , не повторяться :50 *2 = 2*50; То есть в случае num=10;
список делителей будет от 1 до 5 ,а на 6 делить нет смысла.А вообще вместо деления на двойку используется
корень квадратный числа.
1
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
12.10.2013, 17:40 5
Кажется понял. Т.е. смысл в том, что незачем тратить время на перебор всех возможных вариантов делителя числа, а достаточно прогнать его до половины, если оно уже делится на 2 (кроме самой 2-ки, конечно), то оно уже не простое?
0
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
12.10.2013, 20:36 6
Да. Просто число ,то число которое делится только на себя и один без остатка
0
12.10.2013, 20:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2013, 20:36

Пример из книги Герберт Шилдт
Пример: Пример использования объединения для побайтного вывода значения типа double в двоичном...

msdn Vs Герберт Шилдт и другие книги
Почему существует книга Герберта Шилдта и другие книги по общему руководству если есть msdn? И...

Герберт Шилдт Программирование на C и C для Windows 95
Доброго времени суток! Срочно ищу эту книгу, нашедшему просьба скинуть ее мне в любом электронном...

Какие книги стоит купить после "Герберт Шилдт С++ для начинающих"?
Почти дочитал данную книгу, многое узнал. Планирую изучать язык и дальше. Какую книгу желательно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru