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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2020, 17:58   #1
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
Печаль Применение двух переменных в цикле For.

Код:
using System;
class Comma{
    static void Main()
{
        int i, j;
        int smallest, largest;
        int num;

        num = 100;
        smallest = largest = 1;
        
        for(i = 2, j = num/2; (i <= num/2) & ( j >= 2) i++, j --)
        }
            if ((smallest == 1) & (( num & i )  == 0))
            smallest = i;

            if ((largest == 1) & (( num & j ) == 0 ))
            largest =j; 
       }
       Console.WriteLine("Наибольший множитель" + largest);
       Console.WriteLine("Наименьший множитель" + smallest);
   }

}
Подскажите пожалуйста как выполняется этот цикл?
С оператором for я знаком и примерно представляю как он выполнется.

Подскажите пожалуйста, Инициализация j = num/2. В переменную j инициализируется значение 100 или 50?

Мне непонятно условие в цикле (i <= num/2) & ( j >= 2).
2 <= 100(50)/2 & 100(50) >= 2
Как это условие можно прочитать?: два меньше/равно 100(50) & 100(50) больше/равно 2

Если я не прав, подскажите как правильно и легко это понять условие.
bITA666 вне форума Ответить с цитированием
Старый 15.12.2020, 18:03   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
С оператором for я знаком и примерно представляю как он выполнется.
Не похоже

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Инициализация j = num/2. В переменную j инициализируется значение 100 или 50?
100/2 = ... 100 или 50?

Цитата:
Сообщение от bITA666 Посмотреть сообщение
2 <= 100(50)/2 & 100(50) >= 2
Мало того, что скобки опустили, так еще и переписали неправильно.

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Если я не прав, подскажите как правильно и легко это понять условие.
Как и любое другое: (i <= 100/2) & ( j >= 2)

Кстати, точку с запятой в for пропустили.
FrosyaZZ вне форума Ответить с цитированием
Старый 15.12.2020, 21:10   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Не похоже


100/2 = ... 100 или 50?


Мало того, что скобки опустили, так еще и переписали неправильно.


Как и любое другое: (i <= 100/2) & ( j >= 2)

Кстати, точку с запятой в for пропустили.
(i <= 100/2) & ( j >= 2);
В этом условии i и j является True.
Почему тогда сначала выполняется условие J а не i?
bITA666 вне форума Ответить с цитированием
Старый 16.12.2020, 00:18   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

bITA666
1. Мне видится, что в коде есть пропуск. Что-то не дописано.
Тело цикла не может начинаться с закрывающейся фигурной скобки.

2. (i <= 100/2) & ( j >= 2);
Цитата:
В этом условии i и j является True.
Почему тогда сначала выполняется условие J а не i?
Нет. В этом условии i и j числа целого типа.
Левое выражение проверяется. Если i будет меньше или равно (не больше) 100/2 (это 50), то значение этого выражения получится True, а иначе - False.
Проверяется правое выражение. Если j будет больше или равно (не меньше) 2 , то значение этого выражения будет True, а иначе False.
Над полученными значениями выполняется битовая операция AND (И). Если одно из выражений будет False, то и результат будет False.

В этом примере i нарастает, а j - убывает.
( num & i ) == 0) Тут выполняется побитовая операция между num и i. Как только все единичные биты числа i попадут на нулевые биты числа num условие станет True и значение i сохранится.
На следующих шагах цикла это условие всегда будет False, поскольку первое выражение не будет равно 1.
Аналогично и для второго условного оператора.

PS: Как помнится, оптимизатор проверит первое условие. Если получится False, то второе условие даже не проверяется.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.12.2020, 12:17   #5
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Тело цикла не может начинаться с закрывающейся фигурной скобки.
Банальная описка.

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Над полученными значениями выполняется битовая операция AND (И).
Логическая

Цитата:
Сообщение от ViktorR Посмотреть сообщение
PS: Как помнится, оптимизатор проверит первое условие. Если получится False, то второе условие даже не проверяется.
Нет. Это С#. Для такого поведения нужна &&
FrosyaZZ вне форума Ответить с цитированием
Старый 16.12.2020, 12:36   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

FrosyaZZ
Цитата:
Логическая
Ну прям совсем путаюсь.
В примере написан один амперсанд.
И тут, вроде, как и у меня.
https://ru.wikipedia.org/wiki/%D0%9E...%D0%B8_C%2B%2B
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.12.2020, 12:40   #7
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Еще раз это C#.
& - logical AND
Цитата:
The & operator evaluates both operands even if the left-hand operand evaluates to false, so that the operation result is false regardless of the value of the right-hand operand.
&& - conditional logical AND
Цитата:
The result of x && y is true if both x and y evaluate to true. Otherwise, the result is false. If x evaluates to false, y is not evaluated.
FrosyaZZ вне форума Ответить с цитированием
Старый 16.12.2020, 14:26   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Вкусил.
Видимо что-то от Си осталось у меня.
Не думал, что так поменяют.
Над числами: a & b - битовая И, а над boolean - логическая И
Будем знать ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Применение DataGridViewComboBoxColumn в двух связанных таблицах jon1989 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 03.04.2017 09:32
Применение статических переменных RAFA91 Общие вопросы C/C++ 5 08.05.2015 23:08
функции двух переменных cote Помощь студентам 1 04.05.2012 20:46
Задавать имена переменных в цикле Shouldercannon Общие вопросы Delphi 3 26.07.2010 21:24
Инициализация нескольких переменных в цикле for AxenicX Помощь студентам 1 17.11.2009 00:30