30 Nisan 2020 Perşembe

OPPA Programlama Dili



     Türkçe tasarlanan OPPA karmaşıklıktan uzak, kullanıcının rahatlıkla kodlama yapabileceği bir programlama dilidir. Bu dilde değişkenlere atanan değerler ve fonksiyonlar tip tanımı olmadan tanımlanır. Komut satırlarını birbirinden ayırmak için alt satıra geçmek yeterlidir. Kullanıcıdan değer almak için değişkenin başına “!!”, bir değişkenin içindeki değeri ekrana yazmak için ise değişkenin başına “$” yazılır. Yazdırma işlemi tırnak işareti ile belirtilmelidir.
     Aşağıda görüldüğü gibi “Başla” ve “Bitir” kelimeleri arasında program yazılır. Fonksiyonlar ise programın başında (“Başla” komutundan önce) tanımlanır. Fonksiyon gövdesi de “Başla” ve “Dur” kelimeleri arasında yazılır. Bir değer döndürecek fonksiyonlarda “gönder” anahtar kelimesi ile değer ana programa gönderilebilir. Fonksiyon parametreli veya parametresiz olarak tanımlanabilir.
      Değişken adları “toplam” gibi sadece kelimeden oluşabileceği gibi “uzunluk21” gibi sayı da içerebilir. Ancak bir değişken adı sayı ile başlayamaz. Ayrıca anahtar kelimeler değişken adı olarak kullanılamaz.
     Diziler harf, kelime, rakam ve sayı tutabilir. Elemanlar birbirinden “,” ile ayrılır. Örneğin: “A(1,2,3)” dizisi gibi…
     Döngüler iki türlü tanımlanabilir. Eğer döngüde başlangıç ve bitiş değeri varsa ve artış veya azalış miktarı belli ise sınırlı döngü tanımlayabiliriz. Örneğin “Dön 10 ile 0 arası -2 adım” gibi tanımlanabilir. Bu örnekte görüldüğü gibi negatif verilen adım sayısı başlangıç değerinden adım sayısı kadar azalarak bitiş değerine ulaşmayı hedefler. Diğer döngü tanımında ise verilen mantıksal ifade şartı sağlandığı sürece döngü devam eder. Örneğin ”Dön (sayı<10) ise” şeklinde tanımlanır. Döngü bitiminde “Döngü sonu” ifadesi yazılarak döngünün bittiği belirtilir.
     Koşul ifadeleri parantez içinde belirtilen şartın gerçekleşmesi durumunda belirtilen komutları işletir. Koşul ifadelerinin tanımında bulunan “Değilse” ifadesi ise belirtilen şartların gerçekleşmemesi durumunda belirtilen komutları işletir. Örneğin “Eğer (not ==100) ise”… “Eğer sonu” ifadesi yazılarak koşul ifadesinin bittiği belirtilir.

OPPA Programlama Dilinin Sözdizimi Kuralları


<program> -> Başla  <komutlar> Bitir

<komutlar> -> <komut>  | <komut>  <komutlar>

<komut> -> <değer>=<ifade> | <eğer> | <döngüler> | yazdır “$<değer>” | oku !!<değer> |
 <gönder><değer>  | yazdır <fonksiyon> | <fonksiyon>| <dizi tanımla>|yazdır “<kelime>”

<ifade> -> <değer><işleç><değer> | <değer> | “<kelime>” | <sayı> | <fonksiyon> | 
                  <sayı><işleç> <sayı> | <değer><işleç><sayı> | <sayı><işleç><değer>

<değer> -> <kelime><işaretsiz sayı> |<kelime>

<eğer> -> Eğer (<mantıksal ifade>) ise  <komutlar>  Eğer sonu |
                 Eğer (<mantıksal ifade>) ise <komutlar> Değilse  <komutlar> Eğer sonu

<döngüler> -> <sınırlı döngü> | <döngü>

<sınırlı döngü> -> Dön <sayı> ile <sayı> arası <sayı> adım  <komutlar> Döngü sonu

<döngü> -> Dön (<mantıksal ifade>) ise  <komutlar> Döngü sonu

<dizi tanımla> -> <değer>(<sayı dizisi>) | <değer>(<kelime dizisi>)

<sayı dizisi> -> <sayı> | <sayı>,<sayı dizisi>

<kelime dizisi> -> “<kelime>” | “<kelime>”,<kelime dizisi>

<fonksiyon> -> <fonksiyon başı>  <fonksiyon gövdesi>

<fonksiyon başı> -> fonksiyon <değer> | fonksiyon <değer>(<parametreler>)

<fonksiyon gövdesi> -> Başla  <komutlar> Dur

<parametreler> -> <değer> | <değer>,<parametreler>

<mantıksal ifade> -> <değer><karşılaştırma işareti><değer> | <mantıksal ifade> ve
                              <mantıksal ifade> | <mantıksal ifade> veya <mantıksal ifade> |
                              <değer><karşılaştırma işareti><sayı>

<kelime>-> <harf>|<harf><kelime>

<harf> -> a | b | c | ç | d | e | f | g | ğ | h | ı | i | j | k | l | m | n | o | ö | p | r | s | ş | t | u | ü | v | y |               z | A | B | C | Ç | D | E | F | G | Ğ | H | I | İ | J | K | L | M | N | O | Ö | P | R | S | Ş | T | U |             Ü | V | Y | Z

<karşılaştırma işareti> -> == | != | < | > | <= | >=

<işleç> -> + | - | * | / | % | ** | //

<sayı> -> +<işaretsiz sayı> | -<işaretsiz sayı> |<işaretsiz sayı>

<işaretsiz sayı> -> <rakam> | <rakam > < işaretsiz sayı >

<rakam> ->0 | 1 |  2 | 3 | 4 | 5 | 6  | 7 | 8 | 9

<anahtar kelimeler> -> Başla | Bitir | Dön | ise | arası | Döngü sonu | Eğer | Değilse | Eğer sonu | ile | yazdır | oku | ve | veya | Dur | fonksiyon | gönder


OPPA ile Hipotenüs Hesaplama Programı


Fonksiyon hipHesapla(x,y)
                Başla
                xKare=x**2
                yKare=y**2
hipKare=xKare+yKare
hip=hipKare//2
gönder hip
Dur
Başla
                Yazdır “Üçgenin dik kenar uzunluklarını giriniz.”
                oku !!sayı1
oku !!sayı2
                hipotenüs=hipHesapla(sayı1, sayı2)
                yazdır “hipotenüs=$hipotenüs”
Bitir


3 Nisan 2020 Cuma

Kolay Maske Dikimi

  Evde koruyucu maske yapabilmek için evinizde bulunan herhangi bir materyalden faydalanabilirsiniz. Bu materyalleri doğru şekilde ve oranda kullanmak, sizi belirli oranda virüslerden ve virüsü çevreye yaymaktan koruyacaktır. Burada en önemli şey virüslerin çevreye yayılmaması olduğu için, el yapımı maskeleri daha çok virüsün yayılmasını önlemek amacıyla kullanabilirsiniz. Yapılan bir araştırmaya göre (buradan bakabilirsiniz) el yapımı maskeler ile cerrahi maskelerin virüsleri geçirme oranı aşağıdaki görselde bulunuyor. Bilim adamları 0.02 Bakteriyofaj MS2 parçacıklarını (koronavirüsten beş kat daha küçük) test etmişler. 
  


  Hangi kumaşı kullanmak isteyeceğinize bu tablo yardımıyla karar verebilirsiniz. Benim elimde kullanmadığım pamuk karışımlı bir T-shirt vardı ve onu kullandım.

  Öncelikle belirtmeliyim ki çok iyi dikiş diken birisi değilim ama maske kullanımı zorunlu hale geldiği ve devlet tarafından karşılanmadığı için günümüzde tek kullanımlık maskeye ulaşmak zorlaştı. Ben de kendi maskemi kendim diktim. Hiç yoktan iyidir diye düşünüyorum. Çift katlı maske dikmeyi tercih ettim. İsterseniz tek katlı da dikebilirsiniz ya da diğer katı için farklı bir kumaş kullanabilirsiniz.


Malzelmelerim :




  Maskeyi kulağa tutturmak için iki adet bağcık veya lastik gerekiyor. Ben uzun iki ip kullandım ve maskeyi diktikten sonra bağladım. 26x14 cm iki adet bez parçası (çift katlı maske olması için), iğne, iplik ve makas...


26x14 cm
26x14 cm bezi sola doğru ortadan ikiye katlayalım. Bu işlemleri isterseniz bezlerin ikisini üst üste koyarak, isterseniz de ayrı ayrı yapabilirsiniz :



   Bu sefer de aşağıdan yukarı doğru ikiye katlıyoruz. Elimizde dört katlı bir bez olacak.




  İşaretli yerlerden bezi keselim. Bu işlem maskenin yüzümüze oturması için gerekli.


Maskeye şeklini verdik sayılır. Elimizde iki adet aşağıdaki parçadan olmalı.




İki bezin, ayrı parçalar halinde, V kısımlarını dikiyoruz. Yani sola doğru ikiye katlayıp pembe çizgilerden birleştireceğiz. Böylece maske, burnumuza ve çenemize oturacak.



  Dikişli kısımları dışta kalacak şekilde bezleri üst üste getirip alt ve üst kısımlarını dikelim. bağcıkların olduğu yerler açık kalacak çünkü dikişlerimizin görünmemesi için ters yüz edip bağcıkları öyle dikeceğiz.



   Bu şekilde diktikten sonra aşağıdaki gibi elimizi bezin yanındaki boşluktan sokup bezi ters çevirelim.

Bağcıkları yandaki boşluklara yerleştirdikten sonra bezin sağ ve sol kenarlarını dikelim.



  Maskemiz hazır! Ben bağcıkları aşağıdaki gibi bağlayıp düğüm kısmını maskenin içine sokuşturdum. 


1

2

3

  Peki bu maskeleri nasıl kullanacağız?

  Burada anlatmışlar. Ellerimiz temizken, kulağa taktığımız kısımdan takıp çıkartmalıyız. 
El yapımı bir maskeyi 3 saatten fazla takmamalıyız. 

  Ben dışarı çıkmak zorunda olduğumda eve gelene kadar maskeye dokunmuyorum. Hiç 3 saat veya daha fazla dışarıda kalmadım ama o konuda da yedek maske taşınabilir diye düşünüyorum. Eve gelince maskeyi yıkayıp kurutuyorum. Tekrar kullanmadan önce de ütülüyorum.  

  Son günlerde meşhur olan bir slogan var. Maske takarak, "sen beni koruyorsunben seni koruyorum."


30 Mart 2020 Pazartesi

CISC Mimarisi ve RISC Mimarisi Karşılaştırması




Komut Kümesi

  Bir bilgisayarın komut kümesi, programcının makineyi programlarken kullanabileceği ilkel emirleri veya makine komutlarının tamamının oluşturduğu kümeyi belirtir.

  İşlemci tasarımındaki komut seti mimarileri geçmiş tecrübeye dayanarak iki ekol üzerinde geliştirilmiştir. Bunlar RISC ve CISC mimarileridir.

RISC vs CISC 
  • RISC’te load/store komutları vardır, CISC’te bunlara ilave komutlar da vardır.
  • RISC’te komut uzunlukları sabittir, CISC’te komut uzunlukları sabit değildir.
  • RISC’te komutlar basittir, CISC’te komutlar karmaşıktır.
  • RISC’te program derlenince daha fazla komut olacağından CISC’e göre daha fazla alan kaplar.
  • RISC daha hızlıdır.
  • CISC’te daha fazla transistör kullanılır. Dolayısıyla daha geniş alan ihtiyacı vardır ve daha fazla iş çıkartır.
  • CISC’te eklemeler RISC’e göre daha az maliyet ile yapılır.
  • CISC’te geriye uyumluluk vardır.                                                 

9 Şubat 2020 Pazar

Hashing nedir?




 Gözümüzde canlandırmak için örnek vererek açıklamaya çalışayım. Mesela bir dosyamız var ve bu dosyada bir topluluğa üye olan insanların kayıtlarını tutacağız. Dosyaya kayıtları yerleştirirken ve dosyada arama yaparken kaydın dosyadaki konumuna ulaşmak için Hash fonksiyonu kullanıyoruz. Kayıt bilgileri içinden anahtar seçiyoruz. ID değerleri anahtarımız olsun. Daha sonra dosyanın boyutuna, anahtarların türüne göre fonksiyonumuzu belirliyoruz.

  Hash Fonksiyonunun amacı anahtarlardan ürettiği değerlerin olabildiğince eşsiz olması ve hızlı çalışmasıdır.

  Hash fonksiyonundan çıkan değerlere göre kayıtları dosyamıza yerleştiririz. Tabi her üretilen değer eşsiz olmayabilir. Yani fonksiyon bize birden fazla kayıt için aynı dosya konumunu verebilir. Bu durumda çakışmalar oluşur.

  Çakışmaları önlemek için "Packing Factor"ü azaltabiliriz.








   Çakışmaları daha karmaşık Hash fonksiyonu kullanarak azaltabiliriz.

   Çakışmaların çözümlenmesi için bağlantılı, bağlantısız, dinamik ve statik yaklaşımlar kullanılabilir. Fakat bağlantılı yaklaşımlar fazladan link bilgisi gerektirdiği için diğerlerinden daha fazla yer kaplar.