Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2020, 13:35   #1
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию Оператор For!

Код:
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int num;

            int i;

            int factor;

            bool isprime;

            for (num = 2; num < 20; num++)
            {

                isprime = true;

                factor = 0;


                for (i = 2; i <= num / 2; i++)
                {

                    if ((num % i) == 0)
                    {

                        isprime = false;

                        factor = i;
                    }
                }


            if (isprime)
               Console.WriteLine(num + " — простое число.");

            else
               Console.WriteLine("Наибольший множитель числа " + num + " равен " + factor);
            }
        }
    }
}
2 — простое число

3 — простое число

Наибольший множитель числа 4 равен 2

5 — простое число

Наибольший множитель числа 6 равен 3

7 — простое число

Наибольший множитель числа 8 равен 4

Наибольший множитель числа 9 равен 3

Наибольший множитель числа 10 равен 5

11 — простое число

Наибольший множитель числа 12 равен 6

13 — простое число

Наибольший множитель числа 14 равен 7

Наибольший множитель числа 15 равен 5

Наибольший множитель числа 16 равен 8

17 — простое число

Наибольший множитель числа 18 равен 9

19 — простое число




Привет всем!
Подскажите почему просходит слудующее! а именно....
Как получается результат:
>>> Наибольший множитель числа 9 равен 3
Как ?? переменной "factor" может быть присвоенно значение 3 если до этого оно было 4????
bITA666 вне форума Ответить с цитированием
Старый 06.12.2020, 14:00   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,572
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Как ?? переменной "factor" может быть присвоенно значение 3 если до этого оно было 4????
А почему не может? Переменной присваивается значение i - factor = i;
Вот чему равно i, тому и будет равно factor. При этом никакой зависимости от предыдущего значения нет.
Arigato вне форума Ответить с цитированием
Старый 06.12.2020, 14:58   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
А почему не может? Переменной присваивается значение i - factor = i;
Вот чему равно i, тому и будет равно factor. При этом никакой зависимости от предыдущего значения нет.
Все равно не понятно, непонятно и то что 9/2 не делится нацело а соответственно условие не может выполниться.
bITA666 вне форума Ответить с цитированием
Старый 06.12.2020, 15:14   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,311
По умолчанию

Это замечание только к алгоритму поиска делителей.
Код:
for (i = 2; i <= num / 2; i++)
{
   if ((num % i) == 0)
   {
      isprime = false;
      factor = i;
   }
}
Обрати внимание на следующий момент:
В этом коде проверяется делимость числа и ищется наибольший делитель (он же и множитель).
При этом параметр цикла i изменяется от 2 до num/2.
Можно искать множитель и до квадратного корня из числа.
При этом, после получения первого делителя мы попадаем в тело условного оператора, где
устанавливаем флажок, который сигнализирует что число составное.
Затем можно вычислить наибольший множитель так factor = num / i,
и покинуть цикл командой break.
В этом случае будет меньше циклов.
Пример. Если число равно 36, то поиск делителей надо вести до 18 (как в примере).
С другой стороны поиск можно вести до 6 (sqrt(36) = 6).
Первый делитель будет 2.
Т.о. Число составное, а наибольший множитель - 36 / 2 = 18.

PS:
9 / 2 = 4 - если делитель и делимое целого типа, то выполняется целочисленное деление. Тут в разных языках по разному.
В некоторых используются два слэша: a // b - Python или оператор div (a div b) - Pascal.

9 % 2 = 1 - это остаток от целочисленного деления.
Но 9 % 3 = 0 - остаток равен нулю и мы попадаем в тело условного оператора.
Как-то так, ...

Последний раз редактировалось ViktorR; 06.12.2020 в 15:20.
ViktorR вне форума Ответить с цитированием
Старый 06.12.2020, 16:44   #5
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Это замечание только к алгоритму поиска делителей.
Код:
for (i = 2; i <= num / 2; i++)
{
   if ((num % i) == 0)
   {
      isprime = false;
      factor = i;
   }
}
Обрати внимание на следующий момент:
В этом коде проверяется делимость числа и ищется наибольший делитель (он же и множитель).
При этом параметр цикла i изменяется от 2 до num/2.
Можно искать множитель и до квадратного корня из числа.
При этом, после получения первого делителя мы попадаем в тело условного оператора, где
устанавливаем флажок, который сигнализирует что число составное.
Затем можно вычислить наибольший множитель так factor = num / i,
и покинуть цикл командой break.
В этом случае будет меньше циклов.
Пример. Если число равно 36, то поиск делителей надо вести до 18 (как в примере).
С другой стороны поиск можно вести до 6 (sqrt(36) = 6).
Первый делитель будет 2.
Т.о. Число составное, а наибольший множитель - 36 / 2 = 18.

PS:
9 / 2 = 4 - если делитель и делимое целого типа, то выполняется целочисленное деление. Тут в разных языках по разному.
В некоторых используются два слэша: a // b - Python или оператор div (a div b) - Pascal.

9 % 2 = 1 - это остаток от целочисленного деления.
Но 9 % 3 = 0 - остаток равен нулю и мы попадаем в тело условного оператора.

Но разве i в цикле for не изменятся? после того как найден наибольший множитель числа
num 4 равен 2 - 2 это же i который и является factor
num 6 равен 3 - 3 это i
num 8 равен 4 - 4 это i
слудующий идет num 9 равнен i 5
num9/2 = 4.5 если даже .5 мы отбросим будет целоцисленное 4
(4%5) == 0)
Или i не увеличевается при i++?
bITA666 вне форума Ответить с цитированием
Старый 06.12.2020, 18:44   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,572
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Но разве i в цикле for не изменятся?
Изменяется от 2 до num / 2 с шагом 1.
Arigato вне форума Ответить с цитированием
Старый 06.12.2020, 21:58   #7
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Изменяется от 2 до num / 2 с шагом 1.
Тогда почему Наибольший множитель числа 9 равен 3 а не 5?
Ведь i = 5; а значит num(9)/2;
if num(4.5)%i(5) == 0)

что я не так понял?
что такое необычное с примером:
Наибольший множитель числа 9 равен 3
и
Наибольший множитель числа 15 равен 5
bITA666 вне форума Ответить с цитированием
Старый 06.12.2020, 23:06   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,572
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Тогда почему Наибольший множитель числа 9 равен 3 а не 5?
Потому что 9 на 5 не делится.
Arigato вне форума Ответить с цитированием
Старый 06.12.2020, 23:23   #9
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Потому что 9 на 5 не делится.
Я так понимаю что это особенность деления в компиляторе?
bITA666 вне форума Ответить с цитированием
Старый 07.12.2020, 00:43   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Это особенность математики. 5 не является делителем числа 9.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный оператор,оператор цикла и массив Klark73 Microsoft Office Excel 1 19.12.2011 17:09
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24