2008-08-06 15 views
16

BODMAS nedir ve neden programlamada yararlıdır?"BODMAS" terimi ne anlama geliyor?

+0

[C ve C++ 'da işleç önceliği) (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – foxy

+0

Genellikle dört + -/üzerindeki işlem sırasını göstermek için beyaz boşluk kullanıyorum * işlemler, bunun gibi: a + b * c Diğer tüm operatörler için, işlem sırasını netleştirmek için parantezler kullanıyorum. –

+0

Bugün BODMAS'ı daha önce hiç görmedim. PEMDAS (Parens, Exponents, Çarpma, Bölme, Toplama, Çıkarma) öğrendim. – FishBasketGordo

cevap

21

http://www.easymaths.com/What_on_earth_is_Bodmas.htm:

sen 2 + 3 x 5'e cevabı ne düşünüyorsunuz?

Bu (2 + 3) x 5 = 5 x 5 = 25 mi?

veya 2 + (3 x 5) = 2 + 15 = 17?

BODMAS imdadına ve her zaman doğru cevap almak o kadar takip etmeye bize kuralları verebilir: (

(B) raketleri (O) order (D) ivision (M) ürem esi (A) Ayrıca bu yöntem S) ubtraction

BODMAS göre, çarpma daima bu nedenle 17 aslında BODMAS göre doğru cevaptır ve ayrıca 2 + 3 x 5 yazarsanız sizin hesap verecek cevap olacak, ilaveten önce yapılmalıdır.

Neden programlamada kullanışlıdır? Hiçbir fikrim yok, ama sanırım bazı parantezlerden kurtulabiliyorsunuz? Ben oldukça defansif programcı değilim, bu yüzden benim hatları şöyle olabilir:

result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER; 

BODMAS ile bu biraz daha net yapabilirsiniz:

result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER; 

Ben hala ilk varyasyonu kullanacak düşünüyorum - daha fazla parantez, ama bu şekilde başka bir kuralı öğrenmek zorunda değilim ve bunu unutmadan daha az riskle karşılaşıyorum ve hata ayıklama hatalarının çok zor olmasına neden oluyorsunuz?

Sadece bu kısımda tahmin et.

Mike Stone DÜZENLEME: Gaius olarak düzeltildi matematik "My Dear Teyze Sally bağışlayın lütfen" (ortaokulda) Bunun başka versiyonu oldu dışarı

+1

Dürüst olmak gerekirse, sözde optimize edilmiş versiyondan ziyade "bracketty" stiliniz var. Belki de sadece ben varım, ama ben buluyorum sonuç = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER; Zihinsel olarak ayrıştırmak için daha kolay ... – ZombieSheep

8

işaret ediyor.

  • Parantez
  • Üslü
  • Çarpma
  • Lig
  • eklenmesi
  • Çıkarma

anımsatıcı cihaz Bugün okulda yararlı ve programlamada hala faydalı oldu. gibi bir ifadede işlemleri,

4
I (Kanada'da) ilkokulda öğrendik

o BEDMAS olarak sevk edildi:

B raket
e xponents
D ivision
M ürem esi
bir Ayrıca bu yöntem
S Sadece dünyanın bu gelenler için ubtraction

. ..

+0

Benzer şekilde burada yeni zelanda. 'Üsler', genel olarak 'Emir' olarak adlandırılandan daha mantıklı. –

1

Ben zaten kaç yaşında BODMAS anımsatıcı programlama için geçerli gerçekten emin değilim. Diller arasındaki operasyonların düzenlenmesi konusunda bir garanti yoktur ve birçoğu standart işlemleri bu sıraya göre sürdürürken, hepsi değil. Ve sonra, operasyonların düzeninin gerçekten anlamlı olmadığı bazı diller var (örneğin Lisp lehçeleri). Eğer standart düzeni unutup ya her şey için parantez kullanın (örneğin, (a * b) + c) ya da özel olarak çalışmak her dil için sipariş öğrendikleri takdirde şekilde, programlama için muhtemelen daha çok işinize.

5

@Michael Stum's answer'u düzenleme gücüm yok, ancak bu doğru değil. O Onlar eşdeğer değildir

(i + 4) - (a + b) 

(i + 4 - a + b) 

için azaltır. Ben bütün ifadesi için alabileceğiniz en iyi azalma

((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER; 

veya

(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER; 
0

O özellikle küçük tablolar halinde ifadeleri bölme optimizasyonu için daha iyiydi C/C++ içinde okumuştum olduğu; bunun yerine bir satırda derece karmaşık ifadeler yazma, sen değişkenlere parçaları önbelleğe ve adımda her birini, o zaman ilerledikçe onları kurmak. Eğer değişkenler vardı nerede boşluk etkilememelidir ancak derleyici biraz yardımcı olabilir böylece

optimizasyon rutinleri yerlerde kayıtlarını kullanacaktır.