C# – Challenges | Longest Word

Merhaba, bugün bahsedeceğim örnek kod, konularına tam anlamıyla hakim olduğum bir kod değil fakat bazı araştırmalar ve okumalar yaparak belli bir yere kadar ilerleme kaydettim ve bu kodu yazabildim. Bir sıkıntımız daha var ki, bu kodu yazmayı ve araştırmalarımı 8 Aralık 2019 Pazar günü tamamlamama rağmen yazısını bugün yani 26 Ocak 2020 Pazar günü yazabiliyorum. Açıkçası kodun ayrıntılarını maalesef unutmuşum. Şimdi sizlere anladığım ve hatırladığım kadarını aktarmaya çalışacağım.

Challenge Türü: Easy

Detaylar

Kodumuz

  • 2. satırda System.Linq kütüphanesi kullanılmalı. Kullanılmazsa 13. satırdaki, dizi elemanlarının büyükten küçüğe doğru sıralanması için kullandığımız OrderByDescending kodu çalışmaz. LINQ sorgusu hafızadaki (veya bir veri kaynağındaki) veri kümesinden program içinde SQL gibi sorgulama yaparak, seçilen verilerden oluşan yeni bir liste elde etmemizi sağlar. Linq hakkında daha fazla detay için bakabilirdiniz -> http://yazilim.cevapsitesi.com/Makaleler/5/linq-language-integrated-query-dile-entegre-edilmis-sorgu-nedir
  • 9. satırda kullandığım ayrac dizisini, yani bölmek istediğim cümledeki sözcükleri birbirinden ayıracak olan sembolleri ve boşluklarları tek tek kendim yazmak durumundayım. Buna maalesef alternatif bir çözüm bulamadım. Sıkıntı şu ki, benim orada tüm karakterleri yazmam mümküd değil ve benim yazmadığım bir sembol ile karşılaşılırsa kelimeleri ayrıması mümkün olmayacak. Örneğin kod ekrandan merhaba%okuyucu şeklinde bir girdi alsın. Bu yadığım kodda % sembolü bir ayraç olarak ifade edilmediği için buradaki merhaba ve okuyucu kelimeleri seçilemeyecek. Bunun yerine merhaba%okuyucu yu tek bir kelime olarak alacak. Bu satırdaki kod hatalı değil fakat eksiktir.
  • 10. satırda bir önceki yazımda da bahsettiğim .Split ifadesi yer alıyor. .Split() ifadesinde parantez içine yazdığımız şeyler bizim ayraçlarımız/bölücülerimiz oluyor. Kodumuz parantez içinde ne varsa, istenileni o ifadeyi gördüğü zamanlarda bölerek bir dizi haline getiriyor.
  • 13. satırda OrderByDescerding kodu sayesinde dizimizin elemanlarını büyükten küçüğe sıralayabiliyoruz. (Bu arada büyükten küçüğe, uzundan kısaya için Descending; küçükten büyüğe, kısadan uzuna için Ascending kullanılır.)

Kodun Çıktısı

Hatalar

  • Hatalı kodda 10. satır, ana kodda 13. satırda olan First() ifadesinin neden yazıldığına tam olarak hakim değilim fakat ortadan kaldırdığımızda aşağıdaki gibi bir hata veriyor. Anladığım kadarıyla En büyükten en küçüğe(en uzundan en kısaya) doğru sıraladığımız sözcük dizimizde tek bir elemanı seçip döndürmemiz geremiyor, bu da en uzun sözcük olan dizinin ilk eleman olduğu için First() ifadesi kullanılıyor. (asaba Last() gibi (dizinin son elemanı) ifadeler de var mı, kullanılıyor mu?)
hatalı kodun çıktısı böyle

C# – Challenges | First Factorial

Challenge Türü: Easy

Detaylar

Kodumuz

Kodun Çıktısı

Hatalar

  • 10. satırda tanımladığımız result değişkeni for döngüsünün dışında tanımlanmalı (örn. 7. satırda) çünkü for döngüsünün amacı bu değeri her seferinde yeni elde ettiğimiz değeriyle değiştirerek i ile çarpmak. (Sistem, [result*i=result] 1*1=1 1*2=2 2*3=6 6*4=24 şeklinde işliyor)
  • Aynı zamanda bu tanımlanacak result değişkenine bir ilk değer ataması yapılmalı yoksa null değeri döndürür (bildiğim kadarıyla?) ve bu atanacak ilk değer 1 olmalı ki çarpım işlemi yapıldığında ilk olarak kendisini versin. Örneğin 0 değeri atanırsa bu result değişkeni sürekli 0 değeri olarak kalır çünkü 0 ile çarpılan her sayı yine 0 değerini verir.
  • 12. satırda kendi yaptığım bir hatayı koyuyorum. Hızlı bir şekilde yazarken i yerine 1 yazmıştım. Fakat for döngüsünün içerisinde i‘ yi tanımlamamızın sebebi onu döngüyü çevirmesi amacıyla kullanmak zaten. i yerine 1 yazdığımız zaman result değerini sürekli olarak 1 ile çarpmış ve hep aynı sonucu elde etmiş oluruz. Burada result değişkeninin değeri 1 olduğu için sonuç her zaman result*1=1 olur.
  • 15. satırda num değil de result değişkenini yazmalıyız çünkü biz FirstFactorial metodunda result değişkenini döndürüyoruz ve Main metoduna bu değişkeni yolluyoruz. num ise bizim parametremizdir. Yani Main metodundan aldığımız değişken.
  • 20. satırda, kullanıcıdan aldığımız değeri C# dilini kullanarak yazdığımız kodda ve Main metodundan aldığımız için string türünde alıyoruz ve bunu FirstFactorial metoduna yollarken, işlem yaptırmak için vs. integer türünde yolluyoruz. Bunun için de Convert.ToInt32 gibi bir dönüştürücü kullanmamız gerekir.

Wow – Code Worth Checking | Come Look Here

Coderbyte platformunda bu kodu yazarken faktöriyel kodlarını inceliyordum ve bir kullanıcının yazdığı şu koda denk geldim. Aslında inceleyince gayet basit bir mantıkla yazılmış ve daha kısa, pratik görünüyor. İncelemeye, öğrenmeye değer bir kod olduğunu düşünüyorum. Ufku genişletmek için farklı bir bakış açısı olur en azından.

C# – Challenges | First Reverse

Bugün “Challenges | … ” başlıklı bir seriye başlamayı düşünüyorum. Coderbyte isimli kodlama değerlendirme platformundaki meydan okumalar bu seride olacak. C# öğrendiğim için istenilen kodları C# dilinde yazacağım. Yeni diller öğrendikçe bu diller değişebilir. Bu serinin ilk uygulaması “First Reverse” isimli challenge. Bu cahllenge’ın temel mantığı dizi elemanlarını / ekrandan girilen değişkenleri ters sıra ile yazdırma. ASlında daha önceki yazımda olan bir kod fakat buna rağmen kodu yazaken zorluk çektim. Hala öğrenememişim…

Challenge Türü: Easy

Detaylar

Kodumuz

  • 9. satırda reverse değişkenine bir ilk atama yapmayı unuymamalıyız. ( Burada string a = String.Empty; , string a = Null; veya string a = “”; kullanabiliriz.
  • 11. satırda for föngüsünün içerisini mutlaka (int i = str.Length – 1; i >= 0; i–) şeklinde yazmalıyız. (int i = str.Length; i > 0; i–) veya (int i = 0; i <= str.Length -1; i++) şeklinde yazmamız yanlış olur.
  • 13. satırda a değikenine i yi ekleyip devam etmek değil de i nin dizi içerisinde ifade ettiği değişkenin değerini ekleyip atamayı unutmamalıyız. (yani a += i; yazmamalıyız.) Ayrıca a = str[i]; gibi bir hata da yapmamalıyız.

Kodun Çıktısı

Hatalar

  • 11. satırda döngüyü döndürmeye sağlayacak olan int i değişkenine 0 değerini verip artırarak ilerlemek istiyor olabiliriz fakat bunu yaparken int i değişkeni ile string reverse değişkenlerini kıyaslayamayız. Türleri eşit olmalı. for (int i = 0; i <= str.Length -1; i++) veya for ( int i = str.Length -1; i >= 0; i–) yazabiliriz.
  • 11. satırda veya mutlaka for ( int i = str.Length -1; i >= 0; i–) şeklinde yazmalıyız. for (int i = 0; i <= str.Length -1; i++) şeklinde yazdığımızda kodun çıktısı yukarıdaki gibi olur. İçindeki harfleri ters çevirip yeni bir dizi oluşturmasını istediğimiz diziyi ters çevirmez. Ayrıca for (int i = 0; i < str.Length; i++) şeklinde de yazmamalıyız. Bu şekilde de hata veriyor (idk why?).
  • 13. satırda for döngüsünün içinde i‘ nin değerini direkt olarak reverse isimi string değişkene ekleyemeyiz çünkü burada i değişkeni bizim değişkenimizin değerini etkilemek / değiştirmek için kullanılmıyor. i değişkeninin kullanılma amacı reverse isimli string değişkenini bir diziye dönüştürüp bu dizinin her bir elemanının sırasını temsil etmektir. bu sayede i. eleman şudur i+1. eleman şudur gibi dizinin elemanlarını tersten yazdırmamız mümkün olacaktır.