CASE ve IF-THEN arasındaki fark nedir?

Başlatan Yasin, 20 Ocak 2017, 23:45:10

Yasin

Merhaba arkadaşlar.

IF-THEN komutları ile CASE komutu arasındaki fark nedir? Her iki komutla da aşağıdaki örnekte olduğu gibi aynı şeyleri yapabiliyorum:

   IF MENU_2=0 THEN
      ADIM_TSA=1
      ADIM_E=50
   ENDIF
   IF MENU_2=1 THEN
      ADIM_TSA=2
      ADIM_E=100
   ENDIF
   IF MENU_2=2 THEN
      ADIM_TSA=20
      ADIM_E=1
   ENDIF
   IF MENU_2=3 THEN
      ADIM_TSA=200
      ADIM_E=10
   ENDIF


   SELECT CASE MENU_2
      CASE 0
         ADIM_TSA=1
         ADIM_E=50
      CASE 1   
         ADIM_TSA=2
         ADIM_E=100
      CASE 2
         ADIM_TSA=20
         ADIM_E=1
      CASE 3
         ADIM_TSA=200
         ADIM_E=10
   END SELECT


Bilgi verirseniz sevinirim.

ete

#1
Aynı işi iki şekilde de yapabildiğine göre bir bir lerinin yerine kullanılabilirler.
Aralarında ki fark kodu incelediğinde birinin daha anlaşılabilir olduğu dur. Diğer önemli bir fark da derleme sonucunda bir yöntem diğerine göre daha fazla asm kodu harcar. Birini derle kaç word kullanmış sayfanın sağ alt köşesine bak. Sonra diğerini derle onada bak ve sonucu sen buraya yaz.

Pek çok komut bir bir birinin yerine kullanılabiliyor. Önemli olan hangisine daha aşinasın ve hangisi daha az hata ve kod ile o işi başarıyor seçimlerindeki kriter budur.

Sonucu yaz dedim ama ben yazayım daha iyi olacak. Select Case komutu if komutları ile çalışan kod'a nazaran 3 word daha fazla kod üretiyor. Dediğim gibi kullanıcı hangisine aşina ise onu kullanmalı. Ben çok fazla if kullanmayı seğmem. If komutları program akışını yavaşlatma eğilimindedirler. Bu nedenle bu tür durumlarda genelde Select Case tercih ederim.

Ete

ledanimasyon

 Hocam Merhaba;
Benim sıkıntım  PIC16f628A Analog değer okumada Port.A =0  bitinden değer okumak istiyorum fakat hata veriyor.Sıkıntı Nerede bulamadım.
Proğrama ADCIN komutunu yazınca hata veriyor.Anolag giriş ayarları nasıl olması lazım.

Hattuşa

Alıntı yapılan: ledanimasyon - 21 Ocak 2017, 11:31:20
Hocam Merhaba;
Benim sıkıntım  PIC16f628A Analog değer okumada Port.A =0  bitinden değer okumak istiyorum fakat hata veriyor.Sıkıntı Nerede bulamadım.
Proğrama ADCIN komutunu yazınca hata veriyor.Anolag giriş ayarları nasıl olması lazım.

ledanimasyon usta dikkatli inceleyin 16F628A yı zira onda ADC kanalı yok, dolayısıyle hata vermesi çok normal aynı kılıfta illa ADC kanalı lazımsa 16F88 kullanın

ledanimasyon

Peki 16f 628A da analog değer OKUYAMİYORmuyuz 4 adet AN girişi görülüyor baktığımda. Ben bir potansiyometrenin değerini mV olarak görmek istiyorum bunu bu entegre yapabilir mi.Nasıl okumam lazım.

ete

Bu entegrede 4 adet Komparatör girişi vardır ve bunlarda birer analog giriştir. Ancak senin bildiğin anlamda değil.
Komparatör girişlerine analog voltaj verirsin oda hangisinin yüksek olduğunu bulur ve ona göre çıkış verir.
Sana ADC/Analog giriş gerekiyor. Bu entegre ile bu işi yapamazsın. 16F88 veya 16F1827 gibi ADC girişleri olan entegreler kullanman gerekiyor.

Ete

Yasin

Alıntı yapılan: ete - 21 Ocak 2017, 08:04:13
Aynı işi iki şekilde de yapabildiğine göre bir bir lerinin yerine kullanılabilirler.
Aralarında ki fark kodu incelediğinde birinin daha anlaşılabilir olduğu dur. Diğer önemli bir fark da derleme sonucunda bir yöntem diğerine göre daha fazla asm kodu harcar. Birini derle kaç word kullanmış sayfanın sağ alt köşesine bak. Sonra diğerini derle onada bak ve sonucu sen buraya yaz.

Pek çok komut bir bir birinin yerine kullanılabiliyor. Önemli olan hangisine daha aşinasın ve hangisi daha az hata ve kod ile o işi başarıyor seçimlerindeki kriter budur.

Sonucu yaz dedim ama ben yazayım daha iyi olacak. Select Case komutu if komutları ile çalışan kod'a nazaran 3 word daha fazla kod üretiyor. Dediğim gibi kullanıcı hangisine aşina ise onu kullanmalı. Ben çok fazla if kullanmayı seğmem. If komutları program akışını yavaşlatma eğilimindedirler. Bu nedenle bu tür durumlarda genelde Select Case tercih ederim.

Ete

Dediğiniz gibi SELECT CASE daha fazla yer kaplıyor. Peki IF komutları neden program akışını yavaşlatırlar?

ledanimasyon

Ete hocam bilgilerinizden dolayi teşekkürler.

magic_gun

#8
B kodu

if zca > 150 then maintance ....

C kodu

if(  zca>150 )  ;
     {
         maintance
     }
asm kodu

       


        movf zca,w
        movwf test_c

        movlw .150
        subwf test_c,1
        btfsc status,c
        goto maintance


select case de durum 2 byte daha az olabilir derleyicinin optimizasyonuna gore ,,,,

evet if yavaslatır ,,, butun derleyiciler icin gecerlidir

hayal etemeden basaramazsınız
u cnt achieve w/out dreamin

ete

If neden yavaşlatır izah etmek zor ama dilim döndüğünce anlatayım.,
Her bir if, bir şart incelemesini gerektirir. 5 adetlik bir if satırı, programın 5 kere her bir satırda acaba şart yerine geliyormu diye bakmasını gerektirir.
Aynı işi select case ile yapınca yalnızca bir kere şarta bakıp sonraki 5 konumdan birisine şartsız gider program. Bu ise daha az vakit harcamasını gerektirir.
Başka bir örnek vereyim. 5 adet kulübe var. Birisine bir adam saklanmış ve sen onu arıyorsun.
If komutlarına göre ararsan acaba adam bu kulübedemi diye her birine sırası ile bakman gerekir.
Select ile bakarken sanki kulubelerin yanına geldiğinde birisine soruyormuş gibi hangisinde deyip cevaba göre direk o kulübeye gitmek gibi bir şey bu iş. Hangisini daha çabuk bitirirsin?
Umarım anlaşılmıştır neden olduğu.
Ete

Powered by EzPortal