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

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

muhittin_kaplan

Tekrar dan sorma gereği duydum. Derleyicimi yoksa dilmi tartışıyoruz ?

erkan614

benim bildiğim basic seviyesi seviyeden sayılmaz ama çok çabuk öğrendim başlangıcı okadar basit ki hemen üstüne birşeyler ekleyerek geliştiriyorsunuz kendinizi çok rahat çift satır 7segment pid ısıkontrol rölesi tasarlayabilirsiniz
ama c de bunu başaramadım bazı ezberleri var galiba void main nedir olsa ne olur olmasa nolur hala anlamış değilim yukarda bahsedilen basicteki for döngüsü ile cdeki döngünün ifade şekli farkı anlatır sanırım
basic bana basit kelimesini çağrıştırıyor.
aslında temel dil basic olup c de olan ek-komplike komutlarıda içeren ve istenildiğinde her noktaya asm gibi inebileceğimiz bir dil geliştirilse keşke ve derleyicisie çok stabil kodlar üretse

ilhan_mkp

üstat benim bildiğim proton asmyede iner çok profsyonel olmaya gerek yok c ile nal toplamaniz işten bile değil önemli olan iin tozunu yutmak

CLR

Alıntı yapılan: bunalmis - 07 Haziran 2011, 17:07:57
Alıntı yapılan: eemkutay - 07 Haziran 2011, 14:39:30

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Basic ve C aynı 4 math algoritmasını kullanansa bile trigonometrik hesaplamalarda C nin daha hızlı olacağını söyleyebilrim.

Aynı matematik algoritmasını kullanılarsa çok fark olmaz. Zaten yazınızın ilerleyen kısımlarında sizde aynısını söylüyorsunuz.

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Elektronikçilerin büyük veri öbekleri üzerinde işlem yapacak programlar yazmaları, structure, array, link list uygulamalarına bulaşmalarını biraz meslekten uzaklaşma olarak görüyorum. (Bırakın bu işleri elektronik eğitimi almış olanlar değil de bilgisayar eğitimi almış olanlar yapsın.)

Kesinlikle katılmıyorum, derleyicinin asm olarak arkada ne yaptınığı biliyorsan işini kolaylaştıran herşeyi kullanman avantajınadır.  Özellikle büyük projelerde bir gereksinimdir. Mesela bende illa asm  olsun diyen elektronikçilerin gelişime kapalı olduklarını düşünüyorum, hep yerlerinde sayarlar, ilerleme kaydedemezler. Millet koptu gidiyor, 1MB flash hafızalı işlemciler var, mükemmel kod optimizasyonu yapan derleyiciler var,
işlemci donanımları bile C'de program yazmaya uygun, siz hala illa asm olsun, C derleyicilerinden daha çok kod optimazyona çalışmak gibi gereksiz işlerle uğraşıyorsunuz.

Aslında mantık basit, 100 satır bir program yazacağıma aynı işlemi 10 satırda yazarım biter.  Burada C dilinin ve profesyonel derleyicinin gücünü kullanırım.

Alıntı yapılan: bunalmis - 07 Haziran 2011, 13:08:11
Dolayısı ile C nin bu tip uygulamalar için gereken pointer, structure vs işlemlerini tıraşlayalım ve Basice denk gelen halini tartışalım.

Zaten C'nin  temel yapı taşı olan pointer, structer, union'ları çıkarırsan C'de basic olur.
   

Bu durumda küçük projeler için C diye tutturmanın anlamı yok değilmi?

Proje Basicle 50 satırda bitiyorsa Basici dayayıp geçmek lazım.

Merhaba,
Benim anlatmak istediğim programı kısa yoldan yazalım gitsin anlamında değil ne demek istediğimi anladın aslında ama asm'den uzaklaşmayı kolaycılık görüyorsun. İsteyen istediği dili veya derleyiciyi kullansın ama bana göre basic , "swordfish gibi standart dışı diller"  ("basic++" veya "modifiyeli basic" veya "C benzeşimli basic"'te diyebiliriz) veya ansi C programlama formatı dışında kendi programlama formatlarını kullanan derleyiciler bile aşağıdaki şartları sağlamaz.  C'den daha iyisi var, oda C++'dır ama onuda büyük ve karmaşık projelerde keil, iar gibi profesyonel derleyicilerde kullanmak daha matıklı olur, yoksa küçük ve orta büyüklükteki projelerde aşağıdaki şartlardan bazılarını sağlamaz.

1) program yazma hızı : C ile akıcı şekilde program yazılabilir
2) program işletim hızı : çok küçük projeler olmadıktan sonra en iyisi C, çok küçük projeler için asm en iyisi
3) verimlilik : pointer, structer vs. özellikler sayesinde en kısa zamanda en verimli kodu yazabilirsin
4) okunabilirlik : C'nin block yapı şeklinde olmasından dolayı okunabilirliği kolaydır
5) taşınabilirlik : yazdığın programı şimdiki ve gelecekte çıkacak tüm işlemcilerde kullanabilme
6) modülerlik : Eskiden yazdığın bir program parçasını veya fonksiyonunu yeni projelerine dahil etme

Knowledge and Experience are Power

z

Asm den uzaklasmak mi?

Alıntı YapZaten C'nin  temel yapı taşı olan pointer, structer, union'ları çıkarırsan C'de basic olur.

Bunu dedigin icin zaten basindan beri bunu savundugum icin  kucuk projelerde BASIC i dayayalim gitsin demistim.

Basic ile C nin tek farki programin goruntusunun deseni ve daha onemlisi parametre aktariminda birinin tercihen stacki digerinin ise global alani kullanmasi.

Simdi  C bilenler yazdiklarima anlam veremiyor olabilir. Ben ise C bilmeyenlerin tarafindan olaya bakiyorum.

C bilen birinin Basic ile isi ne tabiki...

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

Veli B.

Kusuruma bakmayın, konuyu biraz alakasız görünecek şekilde blüyorum ama;

Alıntı yapılan: bunalmis - 08 Haziran 2011, 10:24:20
...
Simdi  C bilenler yazdiklarima anlam veremiyor olabilir. Ben ise C bilmeyenlerin tarafindan olaya bakiyorum.

C bilen birinin Basic ile isi ne tabiki...

Üstadım bu ifadenizden sonra; herkes için MCU tabanında kullanılabilecek makale/ders serisi, sanıyorum ki sektör adına, bu ülke için en büyük iyilik olacaktır. C öğreniyorum diyebilecek seviyedeyim ve tecrübelerin/püf noktalarının inanılmaz faydası olacağından eminim. C nin üstadları böyle bir çalışma yapmayı düşünmez mi acaba? Sıfırdan başlayarak böyle bir seri sanıyorum yıllar boyunca hayır duası sağlar.



z

C ustadları varken bana söz düşmez. Fakat bir dil bilip te C öğrenmekte zorlananların halini benden iyisi bilemez.

Uzun zaman önce, programlarımı, sadece bildiğim iki dil olan asm ve Basic ile yürütürken C öğrenmek istememe rağmen C yapısı zor gelmiş kendi kendime de öğrenme yolunu seçmemeyerek her defasında ertelemiştim.

Taaaki bir arkadaşımla sohbet edip bana 10 dakikalık küçük kurs vermesi ve ardından da sorularımı cevaplayana dek.

Eger Basic biliyor ve C' ye geçmeyi düşünüyorsanız size seve seve çok küçük bir kurs (yazı) düzenleyebilirim.

Yeterki Basic bilin. Derdiniz C olsun. Eğer Basic de bilmiyorsanız yazacağım yazı, Basicle mukayese temelli olacağından işinize yaramaz.

O halde hemen başlayayım....

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

z

Konuyu baslatma amacim bu degildi ama Katana'yi kirmayayim.

Şimdi  Basic le mukayese edeceğim de hangi Basic ile sorusu muamma. Bir Basic'deki yapı bir diğer Basic'dekine uymayabilir.
Genede Basic Basic'dir Benim Basic kurallarimla  ilgili yazacaklarıma itiraz etmeden kabul ederseniz dallanmaya gerek kalmaz.


Basic de programımız, ilk satırdan itibaren işletilir.
C de programımız void main(void) benzeri kisacasi main yazan bolgeden itibaren.

Soyle de dusunebilirsiniz.

Basicde Main satiri 1. satirdir.
Eger kodlarimiz 1. satirdan itibaren degil de etiketi Basla olan satirdan itibaren baslasin istersek

ilk satira goto Basla yazariz.

C de boyle bir seye gerek yok.

void main(void)
{
}

gibi bir satiri programin neresine yazarsaniz yazin Programin baslayacagi yer
iste bu main olan satirin oldugu bolgedir. Bolgedir dedim satir demedim. Neden satir demiyorum sonra anlayacaksiniz.

Basic de Komut sonlarini : ile sonlandiririz.

C de komut sonlarini ; ile sonlandiririz.

Basicde ayni satira birden fazla kod yazmayacaksak en saga: koymak zorunda degiliz.
C de her komutun sonuna ; koymak zorundayiz.

Ornegin

Basic de A=A+1: B=B+1 Burada A=A+1 sonunda : sart, fakat B=B+1 sonunda : sart degil
C de a=a+1; b=b+1; Burada ; kullanmak sart

C de isimlendirmelerde kucuk harf tercih edilir. Basic de ise genellikle buyuk harf.
Fakat bu sadece bir tercih, zorunluluk degil.

Basicde herhangi bir satirin isletilmesini istemiyorsak satirin basina REM yada ' yazariz.
C herhangi bir satirin isletilmesini istemiyorsak satirin basina // yazariz.

Alt alta 3 satiri iptal edelim.

REM Basicde burasi iptal edilen 1.satir
REM Basicde burasi iptal edilen 2.satir
REM Basicde burasi iptal edilen 3.satir

// C de burasi iptal edilen 1.satir
// C de burasi iptal edilen 2.satir
// C de burasi iptal edilen 3.satir

Asagida C nin bir kolayligi var. /*  ve */ arasinda ne var ne yok hepsi iptal olunur.

/*
C de burasi iptal edilen 1.satir
C de burasi iptal edilen 2.satir
C de burasi iptal edilen 3.satir
*/

Simdilik  bukadar. Bu yazi gibi en fazla 3 yazi daha yazarsam tum BASIC kullanicilari artik C ile yazmaya baslayabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

erkan614

hocam duaları almaya başladınız sağ taraftaki yazıcınızın sevap sayıcısı=c ise c=c+1

a.zorba

Alıntı yapılan: bunalmis - 08 Haziran 2011, 13:57:00

Simdilik  bukadar. Bu yazi gibi en fazla 3 yazi daha yazarsam tum BASIC kullanicilari artik C ile yazmaya baslayabilir.

  hocam dört göz ile bekliyorum.


Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

CLR

Alıntı yapılan: katana - 08 Haziran 2011, 12:47:30
Kusuruma bakmayın, konuyu biraz alakasız görünecek şekilde blüyorum ama;

Alıntı yapılan: bunalmis - 08 Haziran 2011, 10:24:20
...
Simdi  C bilenler yazdiklarima anlam veremiyor olabilir. Ben ise C bilmeyenlerin tarafindan olaya bakiyorum.

C bilen birinin Basic ile isi ne tabiki...

Üstadım bu ifadenizden sonra; herkes için MCU tabanında kullanılabilecek makale/ders serisi, sanıyorum ki sektör adına, bu ülke için en büyük iyilik olacaktır. C öğreniyorum diyebilecek seviyedeyim ve tecrübelerin/püf noktalarının inanılmaz faydası olacağından eminim. C nin üstadları böyle bir çalışma yapmayı düşünmez mi acaba? Sıfırdan başlayarak böyle bir seri sanıyorum yıllar boyunca hayır duası sağlar.

Merhaba

C öğrenecekler için türkçe ve oldukça iyi bir internet sitesi adresi vereyim. Buradan adım adım takip edin, rahatlıkla orta seviyede C programı yazabilirsiniz. Ayrıca yazdığınız programları devc++'da derleyip çalıştırabilirsiniz.

http://www1.gantep.edu.tr/~bingul/c/index.php
Knowledge and Experience are Power

z

#26
Yukaridaki bilgicikler cok fazla değil. Bunlari anlamadan bu yaziya gecmeyin.

Basicde array tanimlamalari haric hic bir degisken tanimlamasi yapmadan programi paldir kuldur yazmaya baslayabilirsiniz. Gerci bu, kullanilan Basic e gore degisiklik gosterse de bosverin dedigim gibi olsun.

Ornegin Basicde daha ilk satira A=A+1 yazabilirsiniz.

C de muhakkak kullanilacak degiskenler tek tek tanimlanmalidir.

Burada onemli bir noktaya geldik. C de degiskenler nasil tanimlanir?

Ayrintiya girmeden Global degiskenler ve Lokal degiskenler seklinde 2 degisken tanimlama sansimiz oldugunu kabul edin.

Bu konuyu izah etmekte zorlanacagim cunku C de fonksiyon denen kavramdan henuz haberdar değiliz.
Fakat global degiskenleri hemen aciklayayim.

Basic de A=A+1 gibi bir satir yazdigimizda A ve B global iki ayri  degiskendir.
Hangi satirda yada Gosubla gidilen hangi alt satirda A ve B derseniz deyin hep ayni A ve B degiskeninden bahsedilir.

BASIC de


GOSUB MAIN ' Burasi basic programimizin ilk baslayacagi satir
END

MAIN:
A=1
GOSUB HESAPLA
PRINT B
RETURN

HESAPLA:
B=A
RETURN


gibi bir program parcasi dusunelim.

Buradaki A ve B Global iki degiskendir.

C de ayni islemi su sekilde yazariz. (Diyelimki A ve B 16 bit integer degisken)

//Burasi C programimizin en tepesi


int a;  // a degiskeni integerdir.
int b;  // b degiskeni integerdir.
// int a,b;   istersek boyle de yazarark a ve b nin integer oldugunu bildirebilirdik.

void hesapla(void)
{
    b=a;
}

void main(void)
{
     a=1;
     hesapla();
     prnt(a);
}


Yukaridaki C program ile hemen ustundeki Basic program   bire bir aynidir.

Dikkat ederseniz

int a,b; seklinde tanimi main ve hesapla bolgesinin disinda tanimladik.
Bu a ve b degiskenlerinin programin her yerinden okunup degistirilebilecegi anlamina gelir. Iste bu tip degiskenlere global degisken deriz.


Basicde Hesaplama ve MAIN alt programini GOSUB ile cagirmistik.

Hesapla ve MAIN rutininin sonunda da RETURN komutu var.

BASIC'de GOSUB ile cagirdigimiz program parcasinin C deki adina  fonksiyon diyoruz.

void hesapla(void)   // Burasi Basic deki.HESAPLA: etiketine karsilik geliyor.

{  fonksiyonun basladigini gosteriyor.
} RETURN  un ta kendisi.

/*-----------------------------------------------------------------------------------------------------------------------------------------------------

Bu asamada Global degisken nedir, fonksiyon nedir, main satiri nedir cok iyi bildiginizi varsayiyorum

-----------------------------------------------------------------------------------------------------------------------------------------------------*/

Gelelim statik degiskenlere.

C programin tepesinde int a,b;   seklinde bir tanim yaparak a ve b nin integer tipinde global degiskenler oldugunu
derleyiciye bildirmistik.

Simdi bu satiri silip main ve hesapla fonksiyonlarinin icine kopyalayalim.




void hesapla(void)
{
int a,b;

    b=a;
}

void main(void)
{
int a,b;

     a=1;
     hesapla();
}


Iste buradaki a ve b artik lokal iki degisken haline geldi. Fakat artik maindeki a ile hesapladaki a ayni a değil.
Isimleri ayni gorunuyor ama hic alakalari yok.

BASIC de bunun bildigim kadariyla karsiligi yok.

Yukaridaki programda main fonksiyonu a=1 yapip hesapla() ile hesapla rutinini cagirdiginda hesapla rutinindeki a tanimsiz bir degerdir.
Cunku bu a ya herhangi bir atama yapilmamistir.

Su anda statik olarak tanimlanmis degiskenlerin sadece icinde bulundugu fonksiyondaki program satirlari tarafindan kullanilabildigini anlamis olduk.

Peki main fonksiyonundaki  a degerini hesapla fonksiyonuna  nasil aktaracagiz?

Iste bu soru void olarak yazilmis ve su ana kadar anlatilmamis kelimeninin ne anlama geldigini de cevap verecek.
Malesef lokal degisken tanimini anlatabilmek icin bu voide el atip aciklamak zorundayim.

void hesapla(void)
{
   b=a;
}

yesil voidi kaldiriyorum ve yerine int x yaziyorum

void hesapla(int x).

boyle yazdiktan sonra artik bu fonksiyonu hesapla() olarak değil hesapla(12) yada hesapla(a) gibi cagirmak zorunda kaliriz

hesapla(12) demek hesapla fonksiyonuna int 12 degerini gonder demektir.

peki 12 sayisinin int oldugunu nerden anladim? Hemen fonksiyonun yazildigi satira bakalim.
void hesapla(int x) yaziyor. parantez icinde int x yaziyor. iste buradaki int den  dolayi 12 sayisinin int oldugunu anladik.

eger hesapla(a) demis olsaydik bu durumda hesapla fonksiyonuna a'nin degeri gidecekti.

Simdi main ve hesapla fonsiyonlarini asagidaki gibi yaziyorum.

void hesapla(int x)
{
int a,b;
    b=x;
}

void main()
{
int a,b;

a=1;
hesapla(a);
prnt(b)
}



void hesapla(int x) de neden int x yazdim da x yerine a yazmadim?
ne isterseniz yazabilirsiniz. ben x yazdim ve fonskiyon icinde de b=x dedim. siz int y yazin  b=y diyin.

Peki simdi a=1 ardindan hesapla(a) ile hesapla fonksiyonuna geldik b=x yaptik. Aslinda !!!! b = maindeki a degiskeni oldu. !!!!
ve } ile gerisin geriye mainde kaldigimiz yere geldik. Peki main fonksiyonundaki b degeri acaba hesapla fonksiyonunda bulunan yani b=a degerimi?

Tabiki hayir.

Cunku bunlar lokal degiskenler ve sadece icinde tanimlandiklari fonksiyon icinde anlam ifade ederler.
main fonksiyonundaki b degeri hesapla(a) isleminden hic etkilenmez.

ne yapabiliriz?

Cozum 1.

int b;

void hesapla(int x)
{
    b=x;
}

void main()
{
int a;

a=1;
hesapla(a);
prnt(b)
}[/color]

Bu cozum b degiskenini global yapma esasina dayanir.

Cozum 2.


int hesapla(int x)
{
    b=x;
    return(b);
}

void main()
{
int a,b;

a=1;
b=hesapla(a);
prnt(b)
}[/color]

Bu cozum de ise hesaplanin solunda kalan void kelimesini int yaparak yani fonskiyonun kendisini cagiran fonksiyona return degeri ile integer deger gonderecegini bildirme esasina dayanir.

Dikkat ederseniz main fonksiyonunda b=hesapla(a) ile hesapla fonksiyonunun geri gonderdigi return degerini yakalamis olduk.

Su anda void main(void) de voidlerin ne anlama geldigini

int hesapla(void) de void ve int in ne anlama geldigini

void hesapla(int x) de ne anlama geldigini int x de x in ne oldugunu anladiginizi saniyorum.

C deki return(XXX) degeri int func( deki int kismi ile alakalidir.

eger return olmayacaksa fonksiyon yazilimi da void func( seklinde donusur.

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

z

Arada bir tepki vermenizi bekliyorum.

Anlatim sekli kotu yada iyi, anliyoruz, anlamiyouz, fazla laf kalabaligi ediyorsun vs vs.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Veli B.

Bunalmış Üstadım;
Kırmadığınız için teşekkür ederim.

Kaynak çok ama bazı pedagojik sorunlar göz önüne alınmadığı için ciddi sorunlar oluşuyor. C ye başlarken nette bulamadığım bazı noktalar vardı ki beni bezdirmişti. Mantığım ezberci olmadığı için, Main neden bazen void ile yazılıyor, farklı tanımlar neden yapılıyor,
linker nasıl çalışıyor, IDE nasıl/hangisi kullanılmalı vb. bir çok noktayı nette bulamadığım için beni bezdirmişti. Muhtemelen yeni başlıkta bu konularda tartışılacak/konuşalacak ve yeni başlayan birisi için baş ucu kaynağı olacaktır. Elbette yeni başlayan/başlayacak arkadaşlar, muhtemelen operatörler de, yapılarda ve özellikle pointer kullanımında ciddi sıkıntı yaşayacak ve umarım bu link yardımcı olacaktır.

Tepki konusuna gelince sanırım biraz erken, kafalarda bazı noktalar oturdukça soruların ve yorumların gelmesini bekliyorum.  Anlatımınız çok güzel, olaya öğrenen gözünden bakıyorsunuz. Bu soru sayuısını azaltacaktır. 

Haklısınız, konunun bölünmesi hoş değil. İlerde bazı konularda istişare/ tartışma durumlaarı da oluşacaktır. Mod arkadaşlar sabit bir başlık açsalar ve ilgili mesajlar oraya taşınsa; hem bu konu bölünmez, hem de diğer konu kendi akışında başucu linki olarak kalır.

z

Eger C ye henuz giris yapiyorsaniz Borland TC 3.0 yuklemenizi oneririm. Simdiki isletim sistemlerinde calisir mi bilemem.

Bununla dogrudan PC uzerinde pratik yapabilirsiniz. C yi mikrolar uzerinde ogrenmek bence dogru degil. Programi derle flasa yukle vs vs
ayak bagi olacak cok sey var. TC ile pratik yaptiktan sonra mikrolarla calismaya gecebilirsiniz.

Sonuclari printf ile ekrana basip cok hizli yaz bozlar yaparak ogrendiklerinizi kendi kendinize test edebilirsiniz.

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