Jump to page: 1 2
Thread overview
İlk programcığım (hesap makinesi)
Apr 22, 2012
hkntrt
Apr 22, 2012
Salih Dinçer
Apr 22, 2012
hkntrt
Apr 22, 2012
Salih Dinçer
Apr 22, 2012
hkntrt
Apr 22, 2012
Kadir Can
Apr 22, 2012
Salih Dinçer
Apr 22, 2012
hkntrt
Apr 23, 2012
zafer
Apr 24, 2012
Salih Dinçer
Apr 25, 2012
Salih Dinçer
April 22, 2012

Aslında daha az yeteneği olan birşey tasarlamıştım sonradan ne kadar öğrenmişim kendimi test edeyim diye kullanıcı isteği doğrultusunda tekrardan çalışabilmesi gibi özellikler ekledim bir ara iyice karıştı if'ler hangisi nerede başlıyor nerede bitiyor iyi ki scite yol gösteriyor :)

import std.stdio;

void main()
{
   int x;
   int y;
   int t;
   char z;
   int a = 1 ;

   while (a < 2 ) {

       writeln("1 = Toplama" );
       writeln("2 = Çıkarma" );
       writeln("3 = Çarpma" );
       writeln("4 = Bölme" );
       writeln("5 = Çık" );
       write("Yapmak istediğiniz işlemin numarasını giriniz : ");
       readf(" %s" , &t);

       if ( t == 5 ) {
           break ;
       }
       else if (t > 5) {
           writeln("Tanlımlı numaralar dışında giriş yaptınız.Tekrar denemek ister misiniz ?  (e / h)");
           readf(" %s" , &z);
           if (z == 'e') {
           continue;
           }
           else {
               break;
           }
       }

       if (t > 0 || t <= 4) {

           write("Işlem yapmak için ilk sayıyı giriniz : ");
           readf(" %s" , &x);

           write("Işlem yapmak için ikinci sayıyı giriniz : ");
           readf(" %s" , &y);

           if ( t == 1 ) {
               writeln( x , " + " , y , " = " , x+y );
           }
           else if (t == 2 ) {
               writeln( x , " - " , y , " = " , x-y );
           }
           else if ( t == 3 ) {
               writeln( x , " * " , y , " = " , x*y );
           }
           else if ( t == 4) {
               writeln( x , " / " , y , " = " , x/y );
           }
       }
       writeln("Başka işlem yapmak isityor musunuz ? (e / h)");
       readf(" %s" , &z);
       if ( z == 'e') {
           continue ;
       } else {
       break;
       }
   }
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Program zaten kısa ve az değişkeni olduğu için tek harf yeterli oluyor sanki :) Aslında o while meselesini düşünmedim değil ama bu seferlik böyle olsun biraz bilgisizlikten biraz tembellikten galiba fazla düşünmüyorum yazarken , ama alışkanlık olmaması açısından biraz daha özensem iyi olacak , Teşekkür ederim :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Neden sadece tek harften oluşan değişken isimleri kullanıyorsun? Belki bu geçici ve sık kullanılan sayılar için daha iyidir ama bir çok değişkeni daha çok harften oluşan sözcükler, üstelik Türkçe harfleri olanlar ile birlikte yazabilirsin. Bu şekilde kullanım, kendi başına daha çok açıklayıcı olacağı için her yere bilgi satırı ('// ...') koyman gerekmez. Örneğin: girilenSeçim

Bu arada a değişkeni gördüğüm kadarıyla döngü dışında hiç bir yerde kullanmamışsın. Bunun yerine sadece 'while('true')' yazabilirsin çünkü bu şekilde sonsuz döngü yapmanın bir sakıncası yok. Program içinde döngüden çıkma ve dolayısıyla sonlanma var. Ayrıca değişkenler başlangıçta ilklendiği için eğer eşitlediğin değeri kullanmıyorsan tanımlaman yeterli. Zaten dediğim gibi değişkene ihtiyaç yok gibi görünüyor ya, neyse...:)

Son olarak 'if()''leri çok daha az kullanabileceğini düşünüyorum ama şunu ''if' '('t > '0' || t <= '4'')'' özellikle daha basitleştirip başka bir mantık işleçini (operator) öğrenme fırsatın olabilir. Çünkü yukarısında 5 ve 5'den yukarısını sorguluyorsun. Öyleyse sadece 0'a eşit değilse demek yeterli olacak yani şöyle:

if (t)

Bir anda ne kadar basitleşti öyle değil mi...:)

Dip Not: Sanırım artık 'switch()' 'case''e geçme zamanın gelmiş, özellikle seçilen işleme göre yönlenen satırlarda...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Daha öğreneceğimiz çok şey var :) Fonksiyon olayını öğrensem işime çok yarayacak ama kitabın sırasını da bozmak istemiyorum :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Her ne kadar şu satırları sadeleştirmek mümkün olsa da içerdiği 'break' ve 'continue' deyimlerini öğrenmen için kesinlikle fazlalık değiller ama aynı işlemi fazladan tekrar etmek yerine işlev (function) oluşturmayı denemelisin:

: : :
"... ister misiniz ?  (e / h)");
           readf(" %s" , &z);
           if (z == 'e') {
           continue;
           }
           else {
               break;
           }

Farkettiysen yukarısı döngünün sonunda da tekrar ediyor. Bu tür durumlarda işlev oluşturmak gerekir. Eminim Ali hocam bunu yazacaktı ve benim ona yazacak bir şeyler bırakmalıydım. Ama sanırım ekleyecek çok bildiği olduğu için ben ne kadar yazsam da nafile...:)

Mesela şu GOTO olayları var galiba? Ben hiç kullanmıyorum ama işe yarar olduğu kesin. Eski BASIC gibi basit dillerde olan bu özelliğin böyle gelişmiş bir dilde olması şaşırtıcı değil mi? Belki işlev yerine yukarıda bahsettiğimi bu şekilde yapabilirsin. Değil mi Ali hocam?

Bir de ana işlevimiz olan 'main()' işlevi içinde de işlev meydana getirebiliyorsun. C'de gerektiği gibi öncesinde oluşturman veya tanımlayıp sonrasında oluşturman gerekmiyor. Ali hocam daha iyi açıklayacaktır; D aşağıdan itibaren kodlara adres tanımladığı için istediğin yerde işlev oluşturabiliyorsun.

Yine Ali hocam daha iyi bilecektir; işlev içinde meydana getirilen işlevlerde (sanırım) bir öncelik söz konusu. Yani yukarıda yazdığım gibi aşağı/yukarı mevzusunda bir hassasiyet var. Bir kere başıma gelmişti ama unutmuşum...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Bu tarz seçimli işlemler için enum, final switch yapısı çok avantajlı oluyor.Bu ilk programınız, kodlarınız gayet iyi ama bundan sonraki programlarda dikkate almanızı tavsiye ederim.
@Salih;
goto kullanımı çok tavsiye edilen bir şey değil.Nedeni de dallanmaların belirli bir zaman sonra kodu spagetti haline getirmesi. break continue kullanmaya çalışmak en azından daha sistemli gibi görünüyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Parmaklarına sağlık Ali hocam...

Özetle nesne yönelimli programlama (OOP)'da;

  • break
  • continue
  • goto

Belki bu listenin en başına 'asm{..}' kümesini de eklemeliyiz? Gönlüm sık sık assembly komutları ile pratik çözümleri kullanmayı arzulasa da işletim sistemi farklılıklarından dolayı ve henüz o kapasiteye erişemediğim için satır arası assembly kullanmayı erteliyorum...:)

Hocam peki bizim gibi yeni yetişmekte olan programcılara bol bol ne kullanmayı önerirsiniz?

Örneğin 'try{..} catch{..}' kümelerini mi?

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 23, 2012

@acehreli böyle bir kitap ve böyle bir ortam oluşturduğunuz için teşekkürü bir borç bilirim.Dersler çok güzel hazırlanmış belki de ingilizceden sonra D Dili'nin en iyi anlatıldığı dil türkçedir. Derslere ve foruma emeği geçen herkese teşekkür ederim :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

hkntrt, öncelikle program çok güzel olmuş. Özellikle yeni olduğun için aslında söylenecek hiçbir şey yok ama hep daha iyisini soruşturuyoruz.

goto programın işleyişini kopuk noktalara atlattığı için önerilmez. Buna rağmen, C'de kaynak yönetimi için bilinen en iyi yöntemdir. Öte yandan, nesnelerin kurulma satırlarını atlayabildiği için C++'ta hatalara neden olur; aynı nedenden D'de bu tür hatalara izin verilmez.

Bütün bu uyarılara rağmen, D, C ve C++'taki bir sıkıntıyı döngü etiketleri ve switch etiketleri ile giderir. Üstelik goto'yu bir de case'ten case'e atlamak için kullanmaya başladılar. O da C ve C++'ın case'lerle ilgili hatalarını giderir ama bir yandan da goto'yu daha bir bir yasallaştırır. :)

Hatırlatmak için:

http://ddili.org/ders/d/etiketler.html

Bütün bunların yanında, break ve continue'yu da ne yazık ki goto'nun zararlı kabul edilen kullanımlarıyla aynı kefeye koymanızı öneririm çünkü break ve continue'da program işleyişini kopuk noktalara götürür.

Çoğu durumda break yerine anlamlı bool değişkenler tanımlanabilir. while(birDurum) gibi kullanılır ve birDurum döngü içinde false yapıldığında break gibi olur.

continue için de döngünün en sonunda bir if denetimi kullanılabilir. if(birDurum)'a girilmemişse döngü zaten continue gibi devam eder.

Buna rağmen break ve continue'yu kullanıyoruz ama bazı programcıların olabildiğince azaltmaya çalıştıklarını söylemek istedim. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 23, 2012

Alıntı (Salih Dinçer):

>

Gönlüm sık sık assembly komutları ile pratik çözümleri kullanmayı arzulasa da işletim sistemi farklılıklarından dolayı ve henüz o kapasiteye erişemediğim için satır arası assembly kullanmayı erteliyorum...:)

Hiç olmazsa D assembly komutlarını standartlaştırmıştır. C ve C++'ta derleyiciye bağlıdır.

Alıntı:

>

Hocam peki bizim gibi yeni yetişmekte olan programcılara bol bol ne kullanmayı önerirsiniz?

Öyle sorunca aklıma gelmiyor. Herhalde "yapmayın" gibi ilkeler "yapın" gibi ilkelerden daha fazla. :)

Alıntı:

>

Örneğin 'try{..} catch{..}' kümelerini mi?

try-catch'i hiç öyle genelleyemeyiz. Zaten fazla kullanılsa yarardan çok dert getirir. Şu bölümde şöyle demişim:

http://ddili.org/ders/d/hatalar.html

"try-catch deyimini ancak ve ancak atılan bir hata ile ilgili özel işlemler yapmanız gereken veya yapabildiğiniz durumlarda kullanın. Başka durumlarda hatalara karışmayın. Hataları, onları yakalamaya çalışan işlevlere bırakın."

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2