[Arquivo!] Pura matemática, física, química, etc.: problemas de treinamento do cérebro não relacionados ao comércio de qualquer forma - página 234

 
Mathemat >>:

А вот дальше непонятка. В первой шапке (внешнем цикле) условие d=0 как-то напрягает. Это ж всегда true?

Em C, com certeza (e d é uma testemunha disso), para verificar a verdade da ÚLTIMA expressão.

 
Descompilação 2 ciclos :)
 
int a=10000, b, c=2800, d, e, f[2801], g;
int main(void){
 for(; b- c;) f[ b++]= a/5;
 for(; d=0, g= c*2; c-=14,printf("%.4d", e+ d/ a), e= d% a)
 for( b= c; d+= f[ b]* a, f[ b]= d%-- g, d/= g--,-- b; d*= b);
}

Цикл выполняется до тех пор, пока выражение b - c оценивается как true. Что такое true в Си? Кажись, любой не нуль. Значит, цикл увеличения b от нуля и заполнения массива f[] выполняется до тех пор, пока b не сравняется с с, т.е. до 2800. Массив f[] заполняется одинаковыми числами 10000/5 = 2000.

Пока не сильно ошибся?

para o primeiro ciclo, b = c = 2800. (o laço será "for(;0;)") Mas o laço ainda será executado uma vez. Então, o número a/5 ou 2000 será escrito na célula f[2800] (b=2800). Após aumentos de b em um, b se tornará 2801.
 

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.

Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.

Vamos nos concentrar antes no ciclo interno. Portanto:

for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);

Começando com b=c,

sob as condições

d+=f[b]*a,f[b]=d%--g,d/=g--,--b

é executado.

d*=b

Entenda especialmente as condições, pois todos eles são operadores de missões.

 

MetaDriver писал(а) >>

// Na verdade falando para(; g=c*2; ) ficaria muito melhor nesta versão: for( g=c*2; g !=0; )

Não, não funciona dessa forma. g=c*2 - deve ser recalculado em cada laço.

Próxima versão:

while( g!= 0)
{
d=0;
b= c-1;
   while( b!=0)
{
b--;
d += f[ b] * a;
g
--;
 f[ b] = d % g;
 d /= g;
g--;
d*= b;
}
c-=14;
g= c*2:
 
printf("%.4d", e+ d/ a);
e= d% a;

}

 

Você não tem um único "se", não funciona assim.

Mais uma vez, você precisa entender as condições, isso é o principal. Não tenho idéia de onde encontrar isto no livro didático.

 
Mathemat >>:

http://www.languagec.info/oper_for.php:

Давай лучше на внутреннем цикле сосредоточимся. Итак:

Начиная с b=c,

при условиях

d+=f[b]*a,f[b]=d%--g,d/=g--,--b
выполняется

Особо надо понять условия, т.к. это все операторы присваивания.

A condição é uma só, todo o resto é reescrito para fora.

 
Mathemat >>:

У тебя нет ни одного if, так не пойдет.

Еще раз, нужно разобраться в условиях, это главное. Я никак не пойму, где это найти в учебнике.

Leia "vírgula do operador". :)

 

Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда. Отметим, что запятая может использоваться также как символ разделитель, поэтому необходимо по контексту различать, запятую, используемую в качестве разделителя или знака операции.

E onde está o descarte de todos, menos o último?

Também:

Na linguagem SI, uma atribuição é também uma expressão, e o valor de tal expressão é o valor que é atribuído.

É isso que estou dizendo, muitas tarefas são expressões, avaliadas de acordo com a sua posição, ou seja, verdadeiro/falso.

2 C-4: Sua interpretação do operando b-c na primeira etapa como uma tarefa não está clara para mim.

 
Mathemat >>:
Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда. Отметим, что запятая может использоваться также как символ разделитель, поэтому необходимо по контексту различать, запятую, используемую в качестве разделителя или знака операции.

Neste contexto, segundo = último. A definição formal é recursiva, ou seja, o segundo operador pode ser composto (e conter uma vírgula novamente).