[Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей - страница 234
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А вот дальше непонятка. В первой шапке (внешнем цикле) условие d=0 как-то напрягает. Это ж всегда true?
Да в С наверняка (и d тому свидетель) в for проверяется истинность ПОСЛЕДНЕГО выражения.
Цикл выполняется до тех пор, пока выражение b - c оценивается как true. Что такое true в Си? Кажись, любой не нуль. Значит, цикл увеличения b от нуля и заполнения массива f[] выполняется до тех пор, пока b не сравняется с с, т.е. до 2800. Массив f[] заполняется одинаковыми числами 10000/5 = 2000.
Пока не сильно ошибся?
http://www.languagec.info/oper_for.php:
for ( выражение 1 ; выражение 2 ; выражение 3 ) тело
Выражение 1 обычно используется для установления начального значения переменных, управляющих циклом. Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла.
Схема выполнения оператора for:
1. Вычисляется выражение 1.
2. Вычисляется выражение 2.
3. Если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.
Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.
Давай лучше на внутреннем цикле сосредоточимся. Итак:
Начиная с b=c,
при условиях
выполняется
Особо надо понять условия, т.к. это все операторы присваивания.
MetaDriver писал(а) >>
// собсно говоря for( ; g=c*2; ) гораздо лучше будет смотреться в такой редакции: for(g=c*2; g!=0; )
Не, так не пойдёт. g=c*2 - должно пересчитываться в каждом цикле.
Следующаяя версия:
У тебя нет ни одного if, так не пойдет.
Еще раз, нужно разобраться в условиях, это главное. Я никак не пойму, где это найти в учебнике.
http://www.languagec.info/oper_for.php:
Давай лучше на внутреннем цикле сосредоточимся. Итак:
Начиная с b=c,
при условиях
d+=f[b]*a,f[b]=d%--g,d/=g--,--b
выполняетсяОсобо надо понять условия, т.к. это все операторы присваивания.
Условие одно, все остальное переписываем наружу.
У тебя нет ни одного if, так не пойдет.
Еще раз, нужно разобраться в условиях, это главное. Я никак не пойму, где это найти в учебнике.
Читай "оператор запятая". :)
Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда. Отметим, что запятая может использоваться также как символ разделитель, поэтому необходимо по контексту различать, запятую, используемую в качестве разделителя или знака операции.
И где ж там отбрасывание всех окромя последнего?
Еще:
В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается.
Вот я шо и говорю, шо куча присваиваний - это выражения, оцениваемые в соответствии с местом, где стоят, т.е. true/false.
2 C-4: Твоя интерпретация операнда b-c в самом первом цикле как присваивания мне не понятна.
Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда. Отметим, что запятая может использоваться также как символ разделитель, поэтому необходимо по контексту различать, запятую, используемую в качестве разделителя или знака операции.
В данном контексте второй = последний. Формальное определение рекурсивно, т.е. второй оператор может быть составной (и содержать опять же запятую).