Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: z - 07 Haziran 2011, 05:35:41

Başlık: Basic - C karşılaştırması
Gönderen: z - 07 Haziran 2011, 05:35:41
C yuksek duzeyli diller icinde en hizlisi deniyor. Peki hic dusundunuz mu C nin hizi ve avantaji nereden gelmektedir?

Basic dili C ile kapisabilirmi?

Tartisma baslatmak uzere bir kac ornek vermek istiyorum.  (Evet istenirse Basic ile C kapisabilir.)

A=B+C islemi  Basicde A=A+B:  C de ise A=A+B; seklinde yazilir.

Basicde for dongusu   for a=0 to 9   C de ise  for (a=0; a<10; i++) seklinde yaziliyor

C nin for dongusunun Basicdeki gibi tek duze olmayisi elbette avantajlidir. (Fakat C nin esnek for komutunun cok benzeri istenirse  Basic komut setine de eklenebilir.)

y=Sin(x+z*w) islemi  basicde  y=sin(x+z*w) :  C de ise  y=sin(x+z*w);  seklide yazilir.
Eger isterseniz ara degiskenlerle a=z*v: a=x+a: y=Sin(a) islemi yaparak kod isletim suresini uzatabilirsiniz.

Gorulecegi uzere temel fonksiyonlarda ciddi hic bir fark yok.

Fark, bu islemlere karsi gelen makine kodlarinin olusturulusunda. C nin hizli kosamasinin sebebi, makine kodlarinin sade olusudur.

(Bir kadinin arabadan inip bankamatikten kart ile para cekip geri arabasina binip gitmesi ile ilgili anlatim bir zamanlar maillerle ordan oraya dolasiyordu. Basicdeki kod isletimi bu anlatima cok benzer.)

Bir de pointer islemlerine bakalim.

Ornegin

16 bitlik integer verilere ulasan bir pointerimiz olsun.

Basic de pointer ile verilere ulasmaya kalksaydik

Ornegin Adr komutu ile basic de adres alabilelim.

Bu durumda 10 adet integer verilere ulasirken

P=Adr(Var1);

for i=0 to 9
oku=Peek(P)
P=P+2
next i seklinde yazilabilir.

C de ise

P=&Var1

for (i=0; i<10; i++) 
{
   oku:=*P
   P++;
}

seklinde olacaktir.

mukayese edersek basicdeki yuksek duzeyli ve yavas sayilabilecek P = P  + 2 islemine karsilik C nin P++ avantaji vardir.

Eger istenirse sadece syntax degistirilmek uzere  C derleyici uzerinde yapilacak modifikasyonla C derleyicisi Basic derleyicine donusturulebilir.

Bu durumda birisi Basic digeri C olan fakat hizlari ve kod karmasasi ayni iki dil karsimiza cikar.

Peki budurumda nerede kaldi C nin Basicden daha hizli oldugu?

Herhangi bir dil derleyicisi adam gibi yazilirsa C mis Basicmis farketmez.

Fakat ne yapilirsa yapilsin hic biri asm kadar basina buyruk yapilamaz.

Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 07 Haziran 2011, 10:50:53
Alıntı yapılan: bunalmis - 07 Haziran 2011, 05:35:41
C yuksek duzeyli diller icinde en hizlisi deniyor. Peki hic dusundunuz mu C nin hizi ve avantaji nereden gelmektedir?

Basic dili C ile kapisabilirmi?

Tartisma baslatmak uzere bir kac ornek vermek istiyorum.  (Evet istenirse Basic ile C kapisabilir.)

A=B+C islemi  Basicde A=A+B:  C de ise A=A+B; seklinde yazilir.

Basicde for dongusu   for a=0 to 9   C de ise  for (a=0; a<10; i++) seklinde yaziliyor

C nin for dongusunun Basicdeki gibi tek duze olmayisi elbette avantajlidir. (Fakat C nin esnek for komutunun cok benzeri istenirse  Basic komut setine de eklenebilir.)

y=Sin(x+z*w) islemi  basicde  y=sin(x+z*w) :  C de ise  y=sin(x+z*w);  seklide yazilir.
Eger isterseniz ara degiskenlerle a=z*v: a=x+a: y=Sin(a) islemi yaparak kod isletim suresini uzatabilirsiniz.

Gorulecegi uzere temel fonksiyonlarda ciddi hic bir fark yok.

Fark, bu islemlere karsi gelen makine kodlarinin olusturulusunda. C nin hizli kosamasinin sebebi, makine kodlarinin sade olusudur.

(Bir kadinin arabadan inip bankamatikten kart ile para cekip geri arabasina binip gitmesi ile ilgili anlatim bir zamanlar maillerle ordan oraya dolasiyordu. Basicdeki kod isletimi bu anlatima cok benzer.)

Bir de pointer islemlerine bakalim.

Ornegin

16 bitlik integer verilere ulasan bir pointerimiz olsun.

Basic de pointer ile verilere ulasmaya kalksaydik

Ornegin Adr komutu ile basic de adres alabilelim.

Bu durumda 10 adet integer verilere ulasirken

P=Adr(Var1);

for i=0 to 9
oku=Peek(P)
P=P+2
next i seklinde yazilabilir.

C de ise

P=&Var1

for (i=0; i<10; i++) 
{
   oku:=*P
   P++;
}

seklinde olacaktir.

mukayese edersek basicdeki yuksek duzeyli ve yavas sayilabilecek P = P  + 2 islemine karsilik C nin P++ avantaji vardir.

Eger istenirse sadece syntax degistirilmek uzere  C derleyici uzerinde yapilacak modifikasyonla C derleyicisi Basic derleyicine donusturulebilir.

Bu durumda birisi Basic digeri C olan fakat hizlari ve kod karmasasi ayni iki dil karsimiza cikar.

Peki budurumda nerede kaldi C nin Basicden daha hizli oldugu?

Herhangi bir dil derleyicisi adam gibi yazilirsa C mis Basicmis farketmez.

Fakat ne yapilirsa yapilsin hic biri asm kadar basina buyruk yapilamaz.

Merhaba,

4 işlem uygulamalarıyla diller karşılaştırılmaz, önce C'nin derin kısımlarını araştırırsan(embedded düzeyde ) örneğin structer, structer pointer, structer array, linked list, union  ve bunların kombinasyonları gibi ve C'de bu karmaşık yapının assembly'li çözümüne, ozaman aradığın farkı bulacaksın.

Asm hızlı evet ama o durumda biz yavaşız değil mi? Tercih meselesi tabii, keil, iar, hitech gibi profesyonel derleyici kullanıyorsan genellikle ASM mi C mi demene gerek kalmaz.

Ama kısmen sana hak veriyorum, C içindeki for, while, if vs gibi "temel" kavramları hangi derleyici ile yazarsan yaz benzer sonuçlar üretebilir. Ama yukarıda yazdığım gibi program yazmayı çok kolaylaştıran  yapılar var ve profesyonel C derleyicileri bu yapılar için asm'ye çok yakın değerler üretiyorlar ve bunu asm'de yazmaya kalksak günleri alır ve denenmemiş oluyor (bug çıkması muhtemel).






Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 07 Haziran 2011, 11:23:52
Biraz olaya ilgisiz taraftan bakmışsınız.

Yazıma dikkat etseniz karşılaştırmamın, karmaşık komutların olup olmaması değil de hızlı kod koşturma ve sade makine kodu  üretme odaklı olacağını görecesiniz.

4 matematiksel işlemden biri olan bölme bile, iki dilin hız açısından karşılaştırılması açısından fazlasıyla yeterlidir. Özellikle de işlemcinin bit uzunluğunun bir kaç katı uzunlukta bölme işlemi hız karşılaştırması açısından ideal bir test programıdır.

Çarpma, bölme, toplama ve çıkarma esasına dayanan trigonometrik fonksiyonlarla yapılacak hız karşılaştırmasında, C Basic sonuçları bariz farklılıklar gösterir.

Fakat bu, C nin gücünden değil, Basic derleyiciyi yazanların beceriksizliğinden kaynaklanır.

Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 07 Haziran 2011, 11:40:32
Alıntı yapılan: bunalmis - 07 Haziran 2011, 11:23:52
Biraz olaya ilgisiz taraftan bakmışsınız.

Yazıma dikkat etseniz karşılaştırmamın, karmaşık komutların olup olmaması değil de hızlı kod koşturma ve sade makine kodu  üretme odaklı olacağını görecesiniz.

4 matematiksel işlemden biri olan bölme bile, iki dilin hız açısından karşılaştırılması açısından fazlasıyla yeterlidir. Özellikle de işlemcinin bit uzunluğunun bir kaç katı uzunlukta bölme işlemi hız karşılaştırması açısından ideal bir test programıdır.

Çarpma, bölme, toplama ve çıkarma esasına dayanan trigonometrik fonksiyonlarla yapılacak hız karşılaştırmasında, C Basic sonuçları bariz farklılıklar gösterir.

Fakat bu, C nin gücünden değil, Basic derleyiciyi yazanların beceriksizliğinden kaynaklanır.

Merhaba,

Bende sizin bahsettiğiniz gibi hızdan bahsediyorum, o yapıları basicte kurun ve sonra hız karşılaştırması yapın. Hem işlemci çalışma hızı hemde kullanıcı program yazma hızını birlikte test edebilirsiniz. Dört işlemlerde ki hız karşılaştırmaları ise derleyiciye göre değişir, dile göre değil. Mesela atıyorum X basic programı keil'in kullandığı bölme algoritmasını kullanıyorsa, derleme sonucu oluşan kod yaklaşık aynı çıkacaktır.

Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 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.
Bu hız farkı, C derleyicilerin çok az geçici register kullanarak fonksiyonlar arası veri transferinde zaman kaybını azaltacak kodlar üretmesinden kaynaklanır. (Bakınız bankamatikten para çeken kadın olayına)

İşte başından beri gelmek istediğim nokta da burası.

Basic derleyici C ye benzer şekilde bu manüplasyonları yaparsa özellikle de basic makinası gibi yapıdan uzaklaşırsa iki dilin birbirinden tek farkı,
nerede ise komut dizilimlerin birinde ; diğerinin ise : ile sonlanması kadar küçük olacaktır.

Eğer structer yapıları gibi yapılardan dolayı C güçlüdür derseniz buna katılırım. Fakat bu kısım şu anki tartışmada bizi hiç ilgilendirmiyor.

Örneğin tartışmayı 16F serisi işlemcilere kod üreten C ve Basic derleyici olarak ele alırsak zaten bunlar C derleyiciler için bile havada kalır.

Bu tip basit işlemcilere kod üreten C derleyicinin stacktaki manüplasyon şansı elinden alındığı halde Basic derleyicilerden açık ara hızlı çalışan kod üretir. Bu dediğiniz gibi dilin değil de derleyicinin başarısı.

Demek istediğim gelmek istediğim konu da burası. C derleyicisi yazan ekip iyi bir Basic derleyicisi de yazmış olsalar  Bizlerin C iyidir Basic  yavaştır tartışması yapmasına  bile gerek kalmaz.

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.)

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.

Başlık: Ynt: C Basic ve digerleri
Gönderen: muhittin_kaplan - 07 Haziran 2011, 14:14:46
Bunalmış hocam.
Burada dilden değil de derleyiciden bahsetmek gerek sizinde söylediğiniz gibi. iyi bir Basic derleyicisi iyi bir kod üretir. bunun dille pek alakası yoktur.(dilden kasıt syntax) bazı örnekler verebilirim.
Gömülü sistem için (18F) üretilmiş bir Swordfish compiler var. adamlar oldukça iddalılar. CCS (eğer C olarak kabul edersek) den daha optime kod ürettiğini söylüyorlar.Bknz http://www.sfcompiler.co.uk/wiki/pmwiki.php?n=SwordfishUser.Comparison (http://www.sfcompiler.co.uk/wiki/pmwiki.php?n=SwordfishUser.Comparison)
Geçelim Pc boyutuna
daha önceden VBasic de(6.0)
A=a+1 yazardık
artık
A+=1
yazabiliyoruz. ama bu demek değildirki C# kadar (neredeyse sondaki noktalı virgül eksik) optimize edilnmis kodlar üretsin.

Benim öngörüm yakın tarihte dil kavramı kalmayacak. Bknz Flowcode http://www.matrixmultimedia.com/flowcode.php (http://www.matrixmultimedia.com/flowcode.php)
Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 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.


     

Başlık: Ynt: C Basic ve digerleri
Gönderen: muhittin_kaplan - 07 Haziran 2011, 14:44:04
Swordfish i inceleyiniz. Dedikleriniz mevcut Ozaman Basic, C mi oluyor ?
Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 07 Haziran 2011, 15:39:13
Alıntı yapılan: muhittin_kaplan - 07 Haziran 2011, 14:44:04
Swordfish i inceleyiniz. Dedikleriniz mevcut Ozaman Basic, C mi oluyor ?

Hayır basic, C olmuyor, bu programa " basic++" denir, C'de ansi c denilen bir kavram vardır ansi c yapısına uygun tüm C derleyicileri hepsini birbirinde derleyebilirsin. Bu swordfish'i başka basic derleyicilerde derleyebilirsen o zaman dediğin olur.
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 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.
Başlık: Ynt: C Basic ve digerleri
Gönderen: Erol YILMAZ - 07 Haziran 2011, 18:38:06
Proje küçük olunca Basic ile yazmanın avantajı nedir ?
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 07 Haziran 2011, 19:09:26
Basic'in avantajı nedir? Tamam söyleyeceğim fakat önce sen söyle. C nin dezavantajı nedir?
Başlık: Ynt: C Basic ve digerleri
Gönderen: Erol YILMAZ - 07 Haziran 2011, 19:17:19
C'nin dezavantajı olarak <küçük projelerde> Orta seviyeli olmasından kaynaklanan,
daha fazla kod yazma ihtiyacı olabilir. Bu da küçük projelerde anlamlı bi dezavantaj olabilir.

Basic pek kullanmadım, gördüğüm kadarı ile yüksek seviyeli bir dil,
Basit projeyi hızlıca bitirmek için az sayıda kodla bile birşeyler yapılabiliyor...
Mcu donanımı bazında olanlarla ilgilenmek yerine direkt hedefe odaklanılabiliyor.
tabi bu avantaj mı sağlıyor ?  bence hayır,
Çünkü Multitasking yapabilecek kadar tecrubeye sahip olmadıktan sonra Basic in
sağladığı yüksek seviyeli fonksiyon ve komut serisi ancak küçük bir mutluluk sağlayabilir.

Kısa olmayan süredir C kodu yazanlar da birçok şeyi <genellikle> pratikleştirmiş oluyor.
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 07 Haziran 2011, 20:29:47
Kendi değerlendirmeme göre C nin tek dezavantajı var. Öğreninceye kadar  zor bir dil.

Basic ise okunduğunda sanki ingilizce konuşuluyormuş gibi kelime dizilişine sahip. Çok küçük yaştakiler bile kolayca öğrenebiliyor.
Bence Basic'in en büyük avantajı bu.

Bu arada Multitasking illa C için yapılır diye bir şey yok.
Başlık: Ynt: C Basic ve digerleri
Gönderen: Erol YILMAZ - 07 Haziran 2011, 21:13:50
Multitasking BASIC ile yapılamaz demedim ki,
Bunu yapıncaya kadar dedim...
Başlık: Ynt: C Basic ve digerleri
Gönderen: muhittin_kaplan - 07 Haziran 2011, 21:18:13
Tekrar dan sorma gereği duydum. Derleyicimi yoksa dilmi tartışıyoruz ?
Başlık: Ynt: C Basic ve digerleri
Gönderen: erkan614 - 07 Haziran 2011, 23:22:29
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
Başlık: Ynt: C Basic ve digerleri
Gönderen: ilhan_mkp - 07 Haziran 2011, 23:41:57
ü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
Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 08 Haziran 2011, 09:51:09
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

Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 10:24:20
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...

Başlık: Ynt: C Basic ve digerleri
Gönderen: Veli B. - 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.


Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 13:02:02
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....

Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 13:57:00
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.
Başlık: Ynt: C Basic ve digerleri
Gönderen: erkan614 - 08 Haziran 2011, 14:10:29
hocam duaları almaya başladınız sağ taraftaki yazıcınızın sevap sayıcısı=c ise c=c+1
Başlık: Ynt: C Basic ve digerleri
Gönderen: a.zorba - 08 Haziran 2011, 14:23:54
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.


Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 08 Haziran 2011, 14:55:27
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
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 15:32:38
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.

Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 15:40:58
Arada bir tepki vermenizi bekliyorum.

Anlatim sekli kotu yada iyi, anliyoruz, anlamiyouz, fazla laf kalabaligi ediyorsun vs vs.
Başlık: Ynt: C Basic ve digerleri
Gönderen: Veli B. - 08 Haziran 2011, 15:52:55
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.
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 16:01:21
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.

Başlık: Ynt: C Basic ve digerleri
Gönderen: Analyzer - 08 Haziran 2011, 16:05:25
Selam,

Ben de TC++ 3.0 ile C++ öğrenenlerdenim. O zamanlar Windows 98 ve Ms-Dos vardı. İkisi de tarih oldu tabi. Ancak ben de OOP arayüzlerine ve mcu'larda C dilini öğrenmeye karşıyım, kullanmaya değil tabi.

Analyzer
Başlık: Ynt: C Basic ve digerleri
Gönderen: MC_Skywalker - 08 Haziran 2011, 16:06:54
Turbo C++ 3.0 msdos 6.22 üzerinde ilk C öğrenme çablarım geldi aklıma

şu adresten download edebilirsiniz
http://www.bestfreewaredownload.com/freeware/t-free-turbo-c--freeware-flggsdpz.html

Şu adrestende 64bit vista win 7 üzerine nasıl kuracağınız hakkında bilgi alabilirsiniz
http://blog.bestsoftware4download.com/2010/02/how-to-install-turbo-c-on-windows-7-64bit/
Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 08 Haziran 2011, 16:07:18
Alıntı yapılan: bunalmis - 08 Haziran 2011, 15:40:58
Arada bir tepki vermenizi bekliyorum.

Anlatim sekli kotu yada iyi, anliyoruz, anlamiyouz, fazla laf kalabaligi ediyorsun vs vs.


void hesapla(void)
{
int a,b;

    b=a;
}

void main(void)
{
     int a,b;

     a=1;
     hesapla();
}

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



Gözüme çarpan bir yanlışı düzelteyim.

Hesapla fonksiyonu içindeki a,b değişkenlerine lokal değişken denir, statik değişken denmez. Statik değişken tanımlamak için "static" keyword'u kullanmak zorundasın. Static ile local değişken arasında şöyle bir fark vardır.

local değişken : fonksiyon içinde kullanılır ve fonksiyondan çıkarken kullanım dışı yapılır yani tekrar hesapla fonksiyonuna erişildiğinde içeriği korunmaz.
static değişkende ise sadece o fonk. içinde kullanılır ve içeriği silinmez.

örnek:


void hesapla(void)
{
static int a=0;  // static bir değişkendir, ilk değeri sıfır yapılır, daha sonraki çağırmalarda a içine 0 atılmaz
int b;            // local değişken,
// default olarak b=0'dır, her çağırmada 0 atılır
  a=a+1;      // her hesapla fonk. çağırıldığında 1 artar
  b=a;          // b=a olur

}                 // b değişkeni yok edilir, a değişkeni ve içeriği korunur



Başlık: Ynt: C Basic ve digerleri
Gönderen: Analyzer - 08 Haziran 2011, 16:28:47
Selam,

@eemkutay :

Demişsiniz ki int b; ile lokal tanımlandığında b=0 olur default olarak. Bundan emin misiniz? Basic'de değişken kullanılmadan önce içeriğine sıfır yazılır ancak C++ de değişken tanımlandığında pointer'ında ne değer varsa o değeri alır. Bu nedenle biz değişken içeriğini kullanımından önce değiştiririz. Hatta derleyici de uyarı verir, bu değişkenin içeriğini değiştirin diye.

Analyzer
Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 08 Haziran 2011, 16:45:31
Alıntı yapılan: Analyzer - 08 Haziran 2011, 16:28:47
Selam,

@eemkutay :

Demişsiniz ki int b; ile lokal tanımlandığında b=0 olur default olarak. Bundan emin misiniz? Basic'de değişken kullanılmadan önce içeriğine sıfır yazılır ancak C++ de değişken tanımlandığında pointer'ında ne değer varsa o değeri alır. Bu nedenle biz değişken içeriğini kullanımından önce değiştiririz. Hatta derleyici de uyarı verir, bu değişkenin içeriğini değiştirin diye.

Analyzer

Merhaba Analyzer,

Doğru haklısın, local değişken içeriği bilinmeyen bir değer alır. local değişken içine mutlaka birşeyler yazmak gerekir.


Başlık: Ynt: C Basic ve digerleri
Gönderen: controller - 08 Haziran 2011, 17:17:29
static in bir diğer kullanım amacı ise, kullanıldığı global değişkenin veya fonksiyonun sadece o modülde tanımlı olmasını sağlamaktır. yani static öneki ile tanımladığınız global değişkenler veya fonksiyonlar absürd bir tanımla "local global" olur.
Başlık: Ynt: C Basic ve digerleri
Gönderen: erkan614 - 08 Haziran 2011, 17:39:59
takıldığım 1. nokta static yerine local elimesi o değişken için daha anlamlı geldi ok
2.si  ise peki hesapla() fonksyonuna main'den a, c ve d değerlerinide göndermek istersek bunları global yapmadan nasıl göndericez
Başlık: Ynt: C Basic ve digerleri
Gönderen: JKramer - 08 Haziran 2011, 17:56:17
Çözüm-3 diyebiliriz: http://www.cplusplus.com/doc/tutorial/functions2/

Örnek program ve çıkış değerleri mevcut. Kabaca, fonksiyona değişkenleri değil değişkenlerin bir çeşit adresini gönderiyoruz. Fonksiyon içerisinde yaptığımız değişiklikler, ilgili adresteki değişkenlere yansıyor.

Ek: Daha rahat anlamak için pointer konusuna bakabilirsiniz: http://www.cplusplus.com/doc/tutorial/pointers/
Başlık: Ynt: C Basic ve digerleri
Gönderen: Veli B. - 08 Haziran 2011, 18:15:32
Arkadaşlar, konu başlığı ile alakası kalmadı. Mod arkadaşlardan birisi bu konuyu ayırıp sabit başlık haline getirebilir mi?

Bir diğer nokta ise; C derken C++ karışmaya başladı. Bence C++ ı unutun. Sadece C hakkında bilgiler ve açıklamalar olmalı. Yoksa  Class, object, polymorphism, inheritance gibi konulara da girmek gerekecek. Bir de çok karışık gitmek doğru değil kanımca. Baştan başlıyarak Bunalmış Üstadığın izlediği yol gibi sıfırdan başlayarak almak daha doğru diye düşünüyorum. Dediğim gibi pedagojik açıdan bakmak lazım ve niyetli olanların gözünü korkutmamalı. Nette gördüğüm en büyük hata bu idi. Arada konular eksik ama 3. konuda pointerdan bahsedilmiş ama daha dizileri bilmiyorum ki!

Bu arada, benim öğrendiğim 2 kaynak aşağı da.

http://www.cagataycebi.com/programming/index.html (http://www.cagataycebi.com/programming/index.html)
http://www1.gantep.edu.tr/~bingul/c/index.php (http://www1.gantep.edu.tr/~bingul/c/index.php)
Başlık: Ynt: C Basic ve digerleri
Gönderen: Erol YILMAZ - 08 Haziran 2011, 18:39:07
Basic ile C arasındaki temel farklardan birisini söyleyeyim.

C öncesi dillerin nerede ise tümü,
İşi yazılım olmayan insanlar için geliştirilmiş dillerdir.
C ise yazılımcı insanlar için tasarlanmış bir dildir.

Kaynakçasını aratmayın bu sözün bi yerde okudum :)
Başlık: Ynt: C Basic ve digerleri
Gönderen: SpeedyX - 08 Haziran 2011, 18:40:04
Alıntı yapılan: eemkutay - 08 Haziran 2011, 16:45:31
Alıntı yapılan: Analyzer - 08 Haziran 2011, 16:28:47
Selam,

@eemkutay :

Demişsiniz ki int b; ile lokal tanımlandığında b=0 olur default olarak. Bundan emin misiniz? Basic'de değişken kullanılmadan önce içeriğine sıfır yazılır ancak C++ de değişken tanımlandığında pointer'ında ne değer varsa o değeri alır. Bu nedenle biz değişken içeriğini kullanımından önce değiştiririz. Hatta derleyici de uyarı verir, bu değişkenin içeriğini değiştirin diye.

Analyzer

Merhaba Analyzer,

Doğru haklısın, local değişken içeriği bilinmeyen bir değer alır. local değişken içine mutlaka birşeyler yazmak gerekir.

Biraz daha açıklayıcı yazacak olursak;
Lokal değişkenin adresi RAM de bir bölgeye denk gelir ve eğer o fonksiyon haricinde derleyici o RAM bölgesini başka bir iş için kullanmıyorsa doğal olarak lokal değişkenin değeri de değişmeyecektir. Kesinlikle değerinin değişmemesi isteniyorsa önüne "static" kelimesi eklenir ve değişken bir çeşit global değişkene dönüşür. İstisnai durumlar hariç lokal değişkenlere ilk değer atanmalıdır, çünkü C derleyicileri minimum değişken kullanmayı amaçladıkları için büyük ihtimalle o RAM bölgesini diğer fonksiyonların lokal değişkenleri için kullanacaklardır. İstisnai dediğim durumlarda da zaten değişken lokal olmaktan çıkmaktadır.

Ayrıca;
Alıntı YapThe Ten Commandments of C Style
A remedial course for caps criminals 1

    Woe be to those errant scribes who ignore capitalization in the writing of the C program, and a plague of frogs on those who turn off the switch of capitalization.

    Thou shalt not capitalize statements such as the "if" or the "for".

    CONSTANTS shall be shouted to the multitudes in all caps, from every rooftop and steeple, as they are the unchanging firmament and change not through all time, and woe be to those that confuse them with variables.

    Those Types and Structures which are user defined shall be presented with the first letter capitalized, as they are the high born, lest they be confused with the lesser variables, nor with the shouted CONSTANTS.

    Variables shall be lower case, even as they start a sentence, for they are the low and common peasant workers doing the everyday drudgery of programming work, and must not be confused with the high-born Structures, nor with the ever-stable firmament of CONSTANTS.

    Brothers have come to blows o'er the use of long variable names, with many favoring the internal capitalization, thus the use of

    long int numberOfPeopleInHell;

    whereas others have countered with heated words that the proper way would be

    long int number_of_people_in_hell;

    Woe be to those who use either name, for it is likely not unique in the first six to eight letters, making some compilers gnash their teeth, while the true scope of the number of people in hell would vastly exceed the capacity of the long int, causing the dreaded plague which infecteth, locketh-up and rebooteth all computers from the lowly PIC to the mighty Cray.

    While much blood has been shed over the issue of the curly brace, and many are the programmers that have argued that opening curly braces should go on their own line, while others have protested with sword-in-hand that they must go on the same line as the statement, and many have come to blows over this, the closing curly brace shall be indented to the same level as the opening function.

    Thou shalt not comment the obvious. Those rapscallions and heathens who penned the line:

    i++; /* Add one to i */

    shall be forever banned from the inner circle of C, though their resume grow long and their accomplishments and finished code stretch out before them like a lake of ASCII text. Likewise, any code which is not obvious, or obfuscates and bebothers the user, shall be extensively commented so as to make clear the intent of the programmer.

    Thou shalt comment the author, date, and revision of each C program, and lo, other comments shall be brief, descriptive, to the point, yet clear as the purest mountain spring water in their explanation and clarification of the code. Each function shall have as its companion a description of its function, its inputs and outputs, as each dog has its day and each actor his moment on the stage. Thou shalt document the purpose of each and every I/O pin in an embedded processor, and for each variable, data member or Structure there shall be a comment which shall illuminate and enlighten the reader of the program as to its use.

    Thou shalt properly indent programs, each subservient function being indented one level more than its master.
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 18:54:17
Statik ve Lokal karmasasi icin ozur.

Lokal degiskenimiz dogrudan ramin stack alaninda tutulur.
static on eki ile statik hale getirdigimizde bu degisken de global degisken gibi ramda tutulmaya baslanir. Fakat diger fonksiyonlar erisemez.

Sadece 2 dersde

main fonksiyonunun anlami,
Lokal degisken, Statik degisken, Global degisken,
Degisken tanimlama,
fonksiyon tanimlama,
fonksiyona parametre gonderme,
fonksiyondan return degeri alma,

gibi temel taslari ogrendik.

Simdi degisken tiplerine bakalim.

karakterlerle yada isaretli byte tipi verilerle ugrasmak icin char 
integer isaretli sayilarla degerlerle ugrasmak icin int
isaretsiz integer sayilarla ugrasmak icin unsigned int

Ornek olarak asagidaki main fonksiyonu girisindeki degisken tanimlamalarina bakalim

void main(void)
{
unsigned int a;
int b=1;
char c;
unsigned char d[5]={'D','E','R','S',0x00}
int sayilar[10];
.....
.....

unsigned integer tipinda a degiskenimiz var. Bu durumda a=0....65535 araliginda deger alabilecek.
int b tipinde degiskenimiz main satirina girer girmez 1 degerini almis. -32768..+32767 araliginda deger alabilecek
signed char tipinde c degiskenimizle -128..+127 araliginda deger alabilecek
char tipinde c degiskenimizle 0..255 araliginda deger alabilecek
unsigned char tipinde d degiskenimiz bir karakter array ve icine DERS kelimesi yazilmis.
int tipinde 10 tane eleman yerlestirilebilen array'imiz var

(String tipi verilerle simdilik calismayacagiz.)

Artik denemeler yapabilecek konuma geldik. Yapacagimiz islemlerin sonuclarini ekranda gorebilmek icin (PC de Borland TC 3.00 ile calistigimizi varsayiyorum) printf komutunu detaylandirmadan kisaca ogrenelim.

printf("%d",a);     a sayisini decimal formatta print et.
printf("%d\n",a);  a sayisini decimal formatta print et ardindan satir atlat.
printf("%4x",a);   a sayisini hexadecimal formatta print et.
printf("Sonuc:%d\n",a);  Sonuc: 123 benzeri olsun.
printf("Sonuc1:%d   Sonuc2:%d\n",a,b);  Sonuc1: 123  Sonuc2:456  benzeri olsun.
printf("Merhaba");

Yukaridaki printf orneklerini inceleyerek komutu kavrayabilirsiniz.

a=a+1;
b=b-1;
c=a/b;
d=a*d;

4 isleme ait ornekler.

a=a+1; yerine a++;
a=a-1; yerine a--;

a=a+2 yerine  a+=2;

yazabilirsiniz.

printf komutunu kullanabilmek icin programin tepesine
#include <stdio.h>

yazmamiz gerekir.

Bu satir stdio.h dosyasinin programimiza dahil edilmesini saglar. Aksi halde printf komutu calistirilamaz.

Kendi kendinize denemeler yapmak icin lazim olacak ilave iki komut if karsilastirmasi ve for dongusu olacak.

Daha once and or xor not mantiksal islemlerine bakalim.

a=0x10; //   10 Hex sayisina karsi gelir.

void main()
{
int a,b,c;

     a=0x01; b=0x02;

     c=a|b;  // c= a or b
     c=a&b; // c= a and b
     c=a^b; // c= a xor b
     c=~a;   // c= not a
}

if karsilastirmasi

Basicdeki ornegimiz if a=10 then print "a esittir 10"   C deki ornegimiz if (a==10) printf("a esittir 10");

Basicdeki ornegimiz if a<>10 then print "a esitdeğil 10"   C deki ornegimiz if (a!=10) printf("a esit değil 10");

if (a=1) and (b<>2) then x=1    if ((a==1) && (B!=2))  x=1;

if (a=1) or (b<>2) then x=1    if ((a==1) || (B!=2))  x=1;

if (a==1)
  {
//  a=1 ise burdaki komutlar calistirilir.
  }
else
  {
// a<>1 ise burdakiler calisir
  }


Gelelim for dongusune

for i=0 to 9 step 2   for (i=0;i<10;i=i+2)

Eger Basicde program yazabiliyorsaniz bu dersden itibaren C ile  basit denemeler yapabileceginizden eminim.

Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 08 Haziran 2011, 19:19:40
Alıntı yapılan: SpeedyX - 08 Haziran 2011, 18:40:04
Alıntı yapılan: eemkutay - 08 Haziran 2011, 16:45:31
Alıntı yapılan: Analyzer - 08 Haziran 2011, 16:28:47
Selam,

@eemkutay :

Demişsiniz ki int b; ile lokal tanımlandığında b=0 olur default olarak. Bundan emin misiniz? Basic'de değişken kullanılmadan önce içeriğine sıfır yazılır ancak C++ de değişken tanımlandığında pointer'ında ne değer varsa o değeri alır. Bu nedenle biz değişken içeriğini kullanımından önce değiştiririz. Hatta derleyici de uyarı verir, bu değişkenin içeriğini değiştirin diye.

Analyzer

Merhaba Analyzer,

Doğru haklısın, local değişken içeriği bilinmeyen bir değer alır. local değişken içine mutlaka birşeyler yazmak gerekir.

Biraz daha açıklayıcı yazacak olursak;
Lokal değişkenin adresi RAM de bir bölgeye denk gelir ve eğer o fonksiyon haricinde derleyici o RAM bölgesini başka bir iş için kullanmıyorsa doğal olarak lokal değişkenin değeri de değişmeyecektir. Kesinlikle değerinin değişmemesi isteniyorsa önüne "static" kelimesi eklenir ve değişken bir çeşit global değişkene dönüşür. İstisnai durumlar hariç lokal değişkenlere ilk değer atanmalıdır, çünkü C derleyicileri minimum değişken kullanmayı amaçladıkları için büyük ihtimalle o RAM bölgesini diğer fonksiyonların lokal değişkenleri için kullanacaklardır. İstisnai dediğim durumlarda da zaten değişken lokal olmaktan çıkmaktadır.


Buna dinamik adresleme işlemi denir. Dinamik adreslemede, küçük programlarda bahsettiğin gibi aynı register, aynı değişken için atanabilir ama program büyüdükçe / değiştikçe aynı register aynı değişken için atanması garanti değildir. Yoksa local değişken tanımı olmazdı.
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 19:58:39
Simdi de pointer kavramina bakalim.

pontere neden ihtiyac varla baslayalim.

Asagidaki gibi bir fonksiyon dusunelim.

void hesapla(int a, int b)
{
int x,y,z,w;
    x=a+b;
    y=a-b;
    z=a*b;
    w=a/b;     
}

peki hesaplanan x,y,z,w degerlerini cagiran fonksiyona nasil iletebiliriz?  (malesef int int int int hesapla(int a, int b) yazamiyoruz)

Cozum 1. Global degisken kullanmak

int x,y,z,w;

void Hesapla(int a,b)
{
    x=a+b;
    y=a-b;
    z=a*b;
    w=a/b;     
}

Cozum 2

void Hesapla(int a, int b, int* x, int* y, int* z, int* w)
{
    *x=a+b;
    *y=a-b;
    *z=a*b;
    *w=a/b;     
}

Burada int *x,  gelen veri, x degiskeninin degeri değil adresidir demek.

*X = a+b; demek a+b islemini yap ve sonucu adresi verilen alana yaz demek.

Peki bu fonksiyonu cagirirken nasil adres verecegiz?

main void()  // burada parantez icine void yazacaksak yazmayabilme serbestligimiz var
{
int a,b,c,d;

        Hesapla (4, 5, &a, &b, &c, &d);) // Buradaki &a, a degiskeninin adresinin sayisal degeri demektir.
}


-------------------------------------------------------------------------------

pointeri anlamak icin bir baska ornek

void main()
{
int a,b;        //  a ve b integer iki degisken
int* p          //  p,  integer degiskenlerin adresini saklayabilen bir degisken, yani bir pointer

       p=&a    //   a degiskeninin adresini p ye yukledik
       a=1;     //   a=1 yaptik
       b=*p;   //  p degiskenindeki adresdeki veriyi b ye yazdik. (b=a oldu)
}

Pointer denen sey de bundan ibaret.

O halde bir fonksiyondan istedigimiz kadar sonuc geri dondurebiliriz. Daha dogrusu, bir fonksiyondan, istedigimiz kadar degiskenin icine deger yazmasini isteyebiliriz.


Gordugunuz gibi ortalikta bir tane bile global degisken yok.

Basic de tum degiskenler global degisken




Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 20:21:48
Basic deki global degiskenlerin zarari ne? Neden C de de global degiskenleri dayayip gecmiyoruz? Adresmis pointermis kendimizi sikintiya sokuyoruz?

Global degisken rama yapistimi suluk gibi kalan bir degiskendir. Yani ramdan yer tirtiklar.

x=a+b;
y=a-b;
z=a*b;
w=a/b;

hesaplandiktan ve kullanildiktan sonra artik x,y,z,w nin ramda yer kaplamasinin anlami yok.

Bunlar uzun programlarda hissedilir sekilde ramda yer kaybina neden olurlar. Bu nedenle de global degisken kullanimi pek tercih edilmez.
Fakat mikrolar artik buyuk ram kapasitelerine sahip olduklarindan bu konuya cok da dikkat etmeyebilirsiniz.

Eger

x=a+b;
y=a-b;
z=a*b;
w=a/b;

hesaplanan x,y,z,w sonuclari,  pek cok fonksiyonda girdi olarak kullanilacaksa bunlarin global olmasinda fayda vardir. Aksi takdirde
fonksiyon cagirimlarinda zirt pirt bunlarin adreslerinin fonksiyona gonderilmesi gerekir ki bu da bu kez romdan kaybetmek anlamina gelir.

Goruldugu gibi C de BASIC teki basit yapidan adim adim uzaklasiyoruz.

Bu detaylar kotumu? Elbette hayir.....


Başlık: Ynt: C Basic ve digerleri
Gönderen: bymrz - 08 Haziran 2011, 20:32:01
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...  :)

Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 08 Haziran 2011, 21:07:43
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.




Başlık: Ynt: C Basic ve digerleri
Gönderen: Veli B. - 08 Haziran 2011, 23:33:09
Ü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?
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 09 Haziran 2011, 00:21:15
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.

Başlık: Ynt: C Basic ve digerleri
Gönderen: CLR - 09 Haziran 2011, 00:42:33
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. 
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 09 Haziran 2011, 01:02:16
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.
Başlık: Ynt: C Basic ve digerleri
Gönderen: Erol YILMAZ - 09 Haziran 2011, 01:12:29
Bilmeyene C ile başlangıç zor ama PIC için CCS ile başlangıç kolay.
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 09 Haziran 2011, 02:29:01
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 ?
Başlık: Ynt: C Basic ve digerleri
Gönderen: z - 09 Haziran 2011, 02:58:11
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.


Başlık: Ynt: C Basic ve digerleri
Gönderen: EMG81 - 09 Haziran 2011, 05:32:50
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.