Bir Sayinin Rakamlari

Not : Açıklama genel olarak yapılmıştır ama kodlama için pascal kullanılmıştır.

Programlamanın daha başındayım. Ancak yazmaya çalıştığım programlarda sık karşılaştığım bir sorun girilen bir sayinin rakamlarını tek tek ele almak ve onların üzerinde işlem yapmak. Mesela kullanıcıdan bir sayi alacak ve bu sayinin sağdan ve soldan aynı okunup okunmadıgına (simetrik,polindromic olup olmadığına) bakacaksiniz. Farklı çözümleri olsa da yeni başlayanlar için rakamları tek tek ele alıp karşılaştırmak ilk akla gelen çözüm olabilir.

Bir başka durum bir kaç gündür uğraşıyorum. Mastermind in sayi ile yapılanı için kullanmak gerekebilir. O zaman kullanicidan bir sayi almak gerektiginde rakamları tek tek kullanıcıdan almak yerine sayıyı tek parça olarak alalım ve biz rakamlara ayıralım. Nasıl yapabiliriz?

Uzun matematik işlemleri sonucunda bulabilirsiniz tabi. Modlar ile divler ile birbirinden çıkarmalar felan. Çünkü zamanında ben de yapmıştım :) Ama girilen sayının kaç basamaklı olduğunu bilmiyoruz o zaman ne olacak? Bu divler modlar kac sıfırlı sayılara kadar devam edecek? Basamak sayısını bilmiyorsak programın kendisi buna karar vermiyorsa ne olacak? Önce basamak sayısını bulmamız gerekecek.

İki yol ile bulabiliriz.

  1. Önce girilen sayıyı string tipe dönüştürüp length fonksiyonunu kullanabiliriz.
  2. Onun haricinde bir repeat-until döngüsüyle;
    • 10 dan küçükse 1 basamak, değilse basamak sayisi ve degerini artır
    • 100 den küçükse basamak sayısı 2 olur

gibi devam ederiz. Eğer sayının rakamlarını tek tek elde etmek istiyorsak sayının basamak sayısına göre en büyük basamak değerine ihtiyacımız olacak. Mesela sayi 123 ise basamak değeri 100 den başlayacagız ve 10 a bölerek diğer basamak değerlerine ulaşacağız. Neden bunu anlatıyorum direkt kodu yazmıyorum? Üsteki iki yoldan birini seçmemiz gerekiyor; eğer length fonksiyonu ile bulmak istersek önce değişken türünü değiştiregiz sonra bu uzunluktaki değer için maksimum basamak değerini hesaplayacagız. Ama repeat döngüsü kullanırsak iki işlemi tek seferde yapmış olacagız.

Length fonksiyonu ile olan kısmı sadece basamak sayısını bulmanız gerekiyorsa kullanırsanız sonuca daha çabuk gidersiniz.

Yeter artık kodlarımıza bakalım değil mi ? :)

rakamlaribul

Kodların içerisinde fazlaca kalabalık yapacak şekilde açıklamalar var. Daha iyi bir yönteminiz veya yöntemden haberiniz olabilir. Yorumunuzda belirtebilirsiniz.