[Archiv!] Reine Mathematik, Physik, Chemie usw.: Gehirntrainingsprobleme, die in keiner Weise mit dem Handel zusammenhängen - Seite 234

 
Mathemat >>:

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

In C ist es sicher (und d ist ein Zeuge dafür), dass die Wahrheit des LAST-Ausdrucks überprüft wird.

 
2 Zyklen dekompilieren :)
 
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.

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

für den ersten Zyklus, b = c = 2800. (die Schleife wird "for(;0;)" sein) Aber die Schleife wird trotzdem einmal ausgeführt. Dann wird die Zahl a/5 oder 2000 in die Zelle f[2800] (b=2800) geschrieben. Nachdem b um eins erhöht wurde, wird b zu 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.

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

Konzentrieren wir uns stattdessen auf den internen Kreislauf. Also:

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

Beginnend mit b=c,

unter den Bedingungen

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

ausgeführt wird.

d*=b

Verstehen Sie vor allem die Bedingungen, denn sie sind alle Zuweisungsoperatoren.

 

MetaDriver писал(а) >>

// Eigentlich würde for(; g=c*2; ) in dieser Version viel besser aussehen: for( g=c*2; g !=0; )

Nein, so funktioniert das nicht. g=c*2 - sollte in jeder Schleife neu berechnet werden.

Nächste Version:

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;

}

 

Sie haben kein einziges Wenn, so funktioniert das nicht.

Noch einmal: Sie müssen die Bedingungen verstehen, das ist die Hauptsache. Ich habe keine Ahnung, wo ich dies im Lehrbuch finden kann.

 
Mathemat >>:

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

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

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

при условиях

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

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

Die Bedingung ist eine, alles andere wird nach außen hin umgeschrieben.

 
Mathemat >>:

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

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

Lesen Sie "Operator Komma". :)

 

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

Und wo werden alle bis auf den letzten verworfen?

Auch:

In der SI-Sprache ist eine Zuweisung auch ein Ausdruck, und der Wert eines solchen Ausdrucks ist der Wert, der zugewiesen wird.

Das ist es, was ich meine, viele Aufgaben sind Ausdrücke, die nach ihrem Stand, d.h. wahr/falsch, bewertet werden.

2 C-4: Ihre Interpretation des Operanden b-c in der allerersten Schleife als Zuweisung ist mir nicht klar.

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

In diesem Zusammenhang ist der zweite Platz der letzte. Die formale Definition ist rekursiv, d. h. der zweite Operator kann zusammengesetzt sein (und wieder ein Komma enthalten).

Grund der Beschwerde: