[Arşiv] Ticaretle ilgisi olmayan saf matematik, fizik, kimya vb. beyin jimnastiği bulmacaları - sayfa 234

 
2 döngünün ayrıştırılması :)
 
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.

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

ilk döngüde, b = c = 2800. (döngü bu "for(;0;)" gibi olacaktır) Ama döngü yine de bir kez yürütülecektir. Daha sonra f[2800] hücresine a/5 veya 2000 yazılacak (b=2800) b'den sonra b bir artacak, b 2801 olacaktır.
 

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.

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

İç döngüye odaklanalım. Böyle:

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

b=c'den başlayarak,

koşullar altında

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

gerçekleştirilen

d*=b

Koşulları anlamak özellikle gereklidir, çünkü bunların hepsi atama operatörleridir .

 

MetaDriver писал(а) >>

// aslında için ( ; g = c * 2 ; ) bu baskıda çok daha iyi görünecek: için ( g = c * 2 ; g != 0 ; )

Hayır, bu işe yaramayacak. g = c * 2 - her döngüde yeniden hesaplanmalıdır.

Sonraki sürüm:

 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;

}

 

Eğer hiç yok, bu yüzden işe yaramayacak.

Bir kez daha, koşulları anlamanız gerekiyor, ana şey bu. Bunu öğreticide nerede bulacağımı bulamıyorum.

 
Mathemat >> :

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

İç döngüye odaklanalım. Böyle:

b=c'den başlayarak,

koşullar altında

d+=f[b]*a,f[b]=d%--g,d/=g--, --b
gerçekleştirilen

Koşulları anlamak özellikle gereklidir, çünkü hepsi atama operatörleridir.

Tek bir koşul var, diğer her şeyi dışa doğru yeniden yazıyoruz.

 
Mathemat >> :

Eğer hiç yok, bu yüzden işe yaramayacak.

Bir kez daha, koşulları anlamanız gerekiyor, ana şey bu. Öğreticide nerede bulacağımı bulamıyorum.

"Virgül operatörünü" okuyun. :)

 

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

Ve sonuncusu hariç her şeyin reddi nerede?

Daha:

C dilinde atama aynı zamanda bir ifadedir ve böyle bir ifadenin değeri atanan değerdir.

Burada bir takım ödevlerin bulundukları yere göre değerlendirilen ifadeler olduğunu söylüyorum, yani. doğru yanlış.

2 C-4: İlk döngüdeki bc işlenenini bir atama olarak yorumlamanız benim için net değil.

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

Bu bağlamda, ikinci = son. Resmi tanım özyinelemelidir, yani. ikinci operatör bileşik olabilir (ve yine bir virgül içerebilir).

 

Bu yüzden işlenen ve işlemi karıştırmayın! bizim durumumuzda

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

dördü de işlemdir, işlenen değil!

MetaDriver , biri dışındaki tüm koşulların atılmasının isteneceğine inanmıyorum. O kadar basit değil, bu bir Pi. Ve genel olarak, özyinelemesiyle beynimin tozunu aldı ...

Bu arada, işte ilk döngü ve gerekli hata ayıklama bilgilerinin çıktısıyla birlikte e derleyicisinin kimde olduğunu kontrol edebilirsiniz. C-4 , döngünün yalnızca 1 kez yürütüleceğini söylüyor (ve neden 1 kez yürütülecek?), Ama bana öyle geliyor ki birçok kez.