Basic - C karşılaştırması

Başlatan bunalmis, 07 Haziran 2011, 05:35:41

bymrz

Ben şahsen, şimdiye kadar yılardır basic kullanmış birisiyim... İçimden hep C ye geçmeyi arzu ederdim ama olmazdı. Sonunda geçen sene nasip oldu... Şu an Keil C51 kullanıyorum... Önceden basic' i savunurdum. Ama şimdi ikisini de kullanmış birisi olarak C den vazgeçmem herhalde...

Arkadaşların da dediği gibi, pointer, structure yapıları, fonksiyon yapıları, hem kullanış hem de vizibilite açısından mükemmel. İnsanın yazdıkça yazası geliyor kodları :)

Hadi bunu da geçtim... Bilmediğiniz bir konu. bilmediğiniz bir IC... En sağlam kaynak neresidir? Elbette üretici firmanın "Reference Design" ları ve "Application Note" ları... Üretici firmanın sitesine giriyorum bakıyorum hemen C kaynak kodları, hatta SDK(Software Development Kit) ları... Ayrı bir pdf'te benim için hazırladığı fonksiyonları nasıl kullanacağımı güzel güzel anlatmış...

Benim şimdiki tek beklentim Keil gibi derleyicilerin görsellik ve kullanım konusunda biraz daha ilerlemesi. IDE konusunda Visual Studio gibi bir şeyler bekliyorum açıkcası :)

CTRL+Space ' e bastığım da structure'ın elemanlarının seçilmek için alt alta sıralanmasını bekliyorum...  :)


z

Biraz da Basicde olmayan saga sola kaydirmaya bakalim.

Basic ile 8 bit degiskenin bitlerini 8 ayri degiskene yerlestiren program yazalim.

       DIM S[8]

                 A=137 ' olsun BUNU PARCALASIN

                 B=1;
                 FOR I=1 TO 8
                     IF (A AND B) <>0 THEN C=1 ELSE C=0
                     B=B+B;
                     S[I]=C
                 NEXT I

                 END

Ayni programi C de yazalim (bir suru yolu var yukaridaki mantigi aynen de kullanabilirsiniz)

void main()
{
char s[8];
char i,a,b;
               a=137;
               b=1;
               for(i=0;i<8;i++)
                   {
                      s[i]=((a&b) ? 1:0)       // ? operatorunun solundaki islem sonucu dogru ise   : nin solundakini,       
                      b<<=1                        // yanlis ise : nin sagindakini al demek
                   }
}


b=b<<1 demek b yi bir bit sola kaydir demek
b=b>>1 demek b yi bir bit saga kaydir demek
------------------------------------------------------------------------------------------------------------------------
C de her yapilan islemin dogru yada yanlis sonucu vardir.

ornegin

      if (a+b)  c=1;  // isleminde c=1 olabilmesi icin a+b sonucunun 0 dan farkli olmasi gerekir.
     
      if (c=(a+b))  d=1; //  c=a+b islemini yap; eger sonuc 0 dan farkliysa d=1 olsun demektir

sonucun 0 olmasi yanlis, sonucun 0 dan farkli cikmasi dogru anlamina da gelir.




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Veli B.

Üstadım,
Başta sizin ve bilgi/yorum/açıklama yazan bütün arkadaşların ellerine sağlık.
Sıkıntılı konulardan birisi de operatörlerin efektif kullanımı? Bu konuda birşeyler yazmayı düşünüyor musunuz?

z

#48
Ozel  komutlar icin (ornegin stringlerle oynamaya yarayan strcpy , sprintf, strcmp vs)  derleyicinin help menusune muracat edebilirsiniz.

Son olarak da structure ve union tanimlamarina deginip sizi C ile basbasa birakiyorum.
Ciplak C bu kadar. (while ve do ya siz bakarsiniz)

Standart veri tiplerinin disinda veri tipleri olusturmak icin struct deyimiden yarlaniyoruz.

Mesela A degiskeninin bir integer bir de karakter bileseni olsun.
A nin integer bilesenine 1234 hex degeri aktaralim, karakter bilesenine de 'Z' olsun diyebiliriz.

Bunun icin tanimlanmasi gereken structure;

struct Ozel
{
   int IntBileseni;
   char CharBileseni;
};

Boyle bir tanim ardindan mesela A degiskenine bu ozelligi atayalim.

struct Ozel A;

Artik A degiskenimizin icine deger atayabiliriz.

void main{
    A.IntBileseni=0x1234;
    A.CharBileseni='Z'

//  A nin CharBileseni  'X' mi diye bakmak istersek

    if (A.CharBileseni=='Z')
      {
          // Anin Char bileseni Z imis
      }
}


Simdi de union tanimlamasina bakalim.

Bunun icin bir ornek yapacagim.

struct Ozel_Integer{
   char H;
   char L;
};

// Burada yaptigim, adlari H ve L olan char tipinde 2 tane bilesenden olusan, Ozel_Integer adini verdigim  char bir degisken tanimlamak oldu.


union Ister16_Ister8_8 {
   int Bir_Kerede_16_Bit_Yukle;
   struct Ozel_Integer Sekiz_Bit_Yukle;
};

// Burada yaptigim ise Bir kerede 16 bit deger yuklenebilen integer tipinde ve adini Bir_Kerede_16_Bit_Yukle koydugum degisken ile;
// Daha once tanimladigim Ozel_Integer adindaki structurla ayni yapidaki  Sekiz_Bit_Yukle degiskenimi ayni adrese oturtmak oldu.
// Bu ozellige de Ister16_Ister8_8 adini verdim.

union Ister16_Ister8_8   Ozel_Degiskenime;

// Burada ise adini Ozel_Degiskenime koydugum bir degisken tanimlamak ve buna da Ister16_Ister8_8 adini koydugum union ozelligi vermek oldu.

void main (void)
{
   Ozel_Degiskenime.Bir_Kerede_16_Bit_Yukle=0x7890;
   Ozel_Degiskenime.Sekiz_Bit_Yukle.H=0x12;
   Ozel_Degiskenime.Sekiz_Bit_Yukle.L=0x34;
}


Son olarak bir uyari

main satirinin en sonuna sonsuz dongu koymayi unutmayin. Aksi takdirde C elinizden kacar gider.
Cunku buranin BASIC'deki RETURN'a karsilik geldigini soylemistim.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Son yazınız güzel olmuş. Aslında C zor değil, adam gibi günde 3 saat çalışan 10 günde temel olarak öğrenir, rahatlıkla işlemciyede program yazabilir ama bu çoğu insana zor gelir. 
Knowledge and Experience are Power

z

Kendi basina ogrenmek isteyen icin C asinda zor bir dil. (C bildiginiz icin su anda boyle diyorsunuz.)

Kisiye bir sekilde C ye giris yapmasini saglayacak bir arkadas (ogretmen) bu kisinin ufkunu bir anda acabilir.

Benim dilim asm ve C yi sevmesem de, daha once Basic ile calisan ancak  C den urken arkadaslarin bu yazi dizisi ardindan C de bir seyler yapmaya basladigini bilmek beni cok memnun eder.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

Bilmeyene C ile başlangıç zor ama PIC için CCS ile başlangıç kolay.

z

Alıntı yapılan: Allegro - 09 Haziran 2011, 01:12:29
Bilmeyene C ile başlangıç zor ama PIC için CCS ile başlangıç kolay.

ARM icin ?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: katana - 08 Haziran 2011, 23:33:09
Sıkıntılı konulardan birisi de operatörlerin efektif kullanımı? Bu konuda birşeyler yazmayı düşünüyor musunuz?

Operatorlerin efektif kullanimi ile tam olarak neden bahsettiginizi anlamadim.

Soruyu anladigim sekliyle tum diller icin gecerli olmak uzere cevaplarsam olay operatorleri iyi tanimaktan ziyade 2 li sayi sisteminin inceliklerini iyi bilmekten geciyor.

Temel kural: Carpma ve bolmeden sakin. Bunun yerine kaydir topla/cikarta yonel.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMG81

#54
Bende yıllarca ASM ile yardırdım  ;D
VisualBasic vasıtası ile basic öğrendim. Ayrıca Basic ile bikaç işte Pic te programladım.

Şimdi Yeni yeni C öğreniyorum Hatta birkaç basit ama endüstriyel ortamda çalışacak ürünlere C ile program yazdım. Artık Asm ve Basic e ihtiyaç duymuyorum. Buradan da yeni şeyler öğrendim. Bu sebeple Bunalmış a teşekkür ederim.

Hepsini kullanan birisi olarak yorumlarım şöyle olabilir;

C çok sembolleri olan. Biraz ezber ve hatırlama gerektiren Fakat çok profesyönel ve Her yerde kullanılan bir dil.

Basic İnglizce kitap okur yada yazar gibi çalışılınan bir dil.

Asm Mükemmel güzel ve hızlı, Mükemmel yorucu bir dil  ;D (Tavsiye ETMİYORUM!)

Bu aralar Visual C ile uğraşmaktayım, İşlemci programlama olayındada kendi kütüphanelerimi oluşturma .h uzantılı dosyalar yapma vb. şeyler üzerinde çalışıyorum.