Ovaller ve çubuklar olarak yazdırılan ikili değerlere göz atmak o kadar kolay değildir ... Buna yardımcı olmak için, sayıları özel ikili sunumda yazdıran bir işlev (veya bir program) yazmalısınız.
Bu nedenle, 3 ( 00000011) diyelim bir sayı almak ve bitleri kullanıcı tanımlı biçimde, örneğin boşlukla ayrılmış çiftlerle çıktılamak istiyorum:
00 00 00 11
veya diyelim ki, ters sırada ve bazı dekoratörler ile, örneğin:
11_00_00_00
Ayrıca, onları daha iyi ayırt etmek için '0' ve '1'i özel karakterler olarak gösterme olasılığı olmalıdır, örneğin:
XX oo oo oo
Bu yüzden zorluk, aşağıdaki spesifikasyonda hepsini yapan kodu yazmaktır.
Şartname
İşlev şu şekilde girdi alır: f (A, maske, sıfırlar, olanlar)
Parametreler:
A - giriş numarası - 0-255 aralığında herhangi bir (işaretsiz) tam sayı.
mask - çıktının yapısını tanımlayan bir dize parametresi.
sıfırlar - aynı uzunlukta bir dize, her bir çıkış yuvası için 'sıfır' glifleri tanımlar.
biri - aynı uzunlukta bir dize, her bir çıkış yuvası için 'bir' glif tanımlar.
Çıktı yapımı için kurallar:
Çıktının nasıl üretildiğini anlamak için bu görüntüye örnekle yakından bakın:
Bu nedenle, yalnızca maskedeki tek basamaklar ayrıştırılır ve A'nın karşılık gelen bitleriyle değiştirilir, diğer karakterler olduğu gibi bırakılır . Ayrıca, alınan bitin değeri 1 ise son çıkışta "X" olarak ve 0 ise "o" olarak görünür. Yukarıdaki örnekte, alınan dört bitin hepsi "1" dir, bu nedenle tüm yuvalarda "X" değerini görürüz.
Girdi numarası 128 olsaydı, mantıksal olarak, çıktı olur X foo bar ooo. "Sıfırlar" ve "olanlar" parametrelerindeki karakterler: yazdırılabilir ASCII karakterleri, her zaman maske ile karakter hizalandığını varsayar.
Notlar :
- Bitler 0 dizinlidir: 0. bit MSB'dir.
- Maske dizesinde 8,9 rakamlarına izin verilmediğini varsayın.
- Giriş Dizeleri yazdırılabilir ASCII karakterlerini içerir.
- 'Sıfırlar' ve 'olanlar' maske ile karakterizedir.
- Dilinizdeki özel karakterler / değiştiriciler için: giriş dizesinde görünmeyeceklerini varsayabiliriz.
Anlaşılır olması için daha fazla örneğe bakın.
Girdi -> Çıktı örnekleri
8 bitin tümünü ortak oval sıva notasyonunda bir boşluk sınırlayıcıyla ortak sırayla çıktılayın:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
Çıktı ters sırayla, tire ve glif gösterimi biçiminde:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
Bir çıktıda çeşitli gösterimler, örneğin paketlenmiş veriler için:
mask = "0 | 123 4567"
zeros= " --- ----"
ones = "X kkk ssss"
A= 15 -> | --- ssss
A= 16 -> | --k ----
A= 32 -> | -k- ----
A= 128 -> X | --- ----
A= 255 -> X | kkk ssss
Yinelenen desenler:
mask = "| 7 66 555 4444 |"
zeros= " . .. ... .... "
ones = " 0 00 000 0000 "
A= 0 -> | . .. ... .... |
A= 1 -> | 0 .. ... .... |
A= 2 -> | . 00 ... .... |
A= 3 -> | 0 00 ... .... |
A= 4 -> | . .. 000 .... |
Güncelleme
Kurallar biraz basitleştirilmiştir - program yalnızca bir sayı yazdırmalıdır (başlangıçta önerildiği gibi dizi / sayı listesi değil).
Atüm test durumlarında aynı olduğu için ne yaptığını anlamıyorum
