27 Ocak 2018 Cumartesi

Programcılık nasıl öğreniliyor?

HackerRank adlı sitenin 39 bin programcı üzerinde yaptığı araştırmaya göre;
Programcıların %74'ü  programcılık ile ilgili yeni çıkan diller, araçlar, frameworkler, eklentiler vb. bilgileri kendileri öğreniyor.
Programcıların %25'i araba kullanmayı öğrenmeden önce kodlamayı öğrenmiş.
İngiltere'deki programcıların %11'i programcılığa 5 ile 10 yaşlarında başlamış.
Programcılar başta youtube olmak üzere video dersleri, eğitim ile ilgili websitelerini ve problem çözmek için StackOverflow tarzı siteleri tercih ediyor.
Programcıların sadece %60'ı kitaplara başvuruyormuş.

 

24 Ocak 2018 Çarşamba

Java form üzerinde klavyeden kontrol


Java da form üzerinde nesnelerin harekitini sağlamak için öncelikle formun koordinat sistemini bilmemiz gerekli. Sol üst köşe x,y olarak 0,0 noktasıdır. Sağ alt köşe ise maksimum x,y noktasıdır. Nesneyi sağa hareket ettirmek için x++, sola ise x-- kullanılmalıdır. Y ekseninde ise durum biraz farklıdır, yukarı giderken y ekseninde 0'a gidilmektedir, dolayısı ile yukarı hareket y-- ile gerçekleşir, aşağı ise y++ ile gerçekleşir.
Jframe x,y koordinat sistemi
Program için kullanabileceğiniz resim dosyaları;

 
 Şimdi label nesnesini ok tuşları ile hareket ettiren kodlara bakalım;

addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
                   x = (int) tank.getBounds().getX();
                   y = (int) tank.getBounds().getY();
                   if(x<677) x += 5;
                   tank.setIcon(new ImageIcon(imgr));
                   tank.setBounds(x, y, 103, 50);
                   yon[sayac] = 1;
                   for(int i=sayac+1;i<100;i++) yon[i]=1;
                }
               
                if(e.getKeyCode()==KeyEvent.VK_LEFT) {
                       x = (int) tank.getBounds().getX();
                       y = (int) tank.getBounds().getY();
                       if(x>0) x -= 5;
                       tank.setIcon(new ImageIcon(imgl));
                       tank.setBounds(x, y, 103, 50);
                       yon[sayac] = 2;
                       for(int i=sayac+1;i<100;i++) yon[i]=2;
                    }
               
                if(e.getKeyCode()==KeyEvent.VK_UP) {
                       x = (int) tank.getBounds().getX();
                       y = (int) tank.getBounds().getY();
                       if(y>0) y -= 5;
                       tank.setIcon(new ImageIcon(imgu));
                       tank.setBounds(x, y, 50, 103);
                       yon[sayac] = 3;
                       for(int i=sayac+1;i<100;i++) yon[i]=3;
                    }               

                if(e.getKeyCode()==KeyEvent.VK_DOWN) {
                       x = (int) tank.getBounds().getX();
                       y = (int) tank.getBounds().getY();
                       if(y<355) y += 5;
                       tank.setIcon(new ImageIcon(imgd));
                       tank.setBounds(x, y, 50, 103);
                       yon[sayac] = 4;
                       for(int i=sayac+1;i<100;i++) yon[i]=4;
                    }

Burada e.getKeyCode bize basılan tuşun ASCII kodunu getirir, eğer tuş VK_RIGHT ise sağ ok tuşuna basılmış demektir. Her 4 tuş için label nesnesinin x ve y değeri alınmış ve üzerine + veya - yapılarak hareket sağlanmıştır. Tankın ateş etmesi için ise bir label dizisi, yön dizisi, ve timertask dizisi tanımlanmıştır. Aslında burada tank mermisi tam bir nesnedir, kendisine ait bir yönü ve zamanı vardır.

if(e.getKeyCode()==KeyEvent.VK_SPACE) {
                       ldizi[sayac] = new JLabel(""); 
                       ldizi[sayac].setIcon(new ImageIcon(imgt));
                      
                      
                       if(yon[sayac]==1) {
                           tx[sayac] = (int) (tank.getBounds().getX() + 100);
                           ty[sayac] = (int) (tank.getBounds().getY() + 18);
                       }
                       else if(yon[sayac]==2) {
                           tx[sayac] = (int) (tank.getBounds().getX());
                           ty[sayac] = (int) (tank.getBounds().getY() + 18);      
                       }
                       else if(yon[sayac]==3) {
                           tx[sayac] = (int) (tank.getBounds().getX() + 18);
                           ty[sayac] = (int) (tank.getBounds().getY());      
                       }
                       else if(yon[sayac]==4) {
                           tx[sayac] = (int) (tank.getBounds().getX() + 18);
                           ty[sayac] = (int) (tank.getBounds().getY() + 100);      
                       }
                      
                       ldizi[sayac].setBounds(tx[sayac], ty[sayac], 15, 15);
                       contentPane.add(ldizi[sayac]);                      
                       ldizi[sayac].repaint();      
                      
                      
                       hareket(sayac,yon[sayac]);
                      
                       sayac++;
                     
                    }               
            }
        });

Mermiyi hareket ettiren timer fonksiyonu ise;

static void hareket(int sayac,int yon) {
        tdizi[sayac] = new TimerTask() {  
           
            @Override
            public void run() {
                tx[sayac] = (int) ldizi[sayac].getBounds().getX();
                ty[sayac] = (int) ldizi[sayac].getBounds().getY();
               
                if(yon==1) tx[sayac]++;
                else if(yon==2) tx[sayac]--;
                else if(yon==3) ty[sayac]--;
                else if(yon==4) ty[sayac]++;
               
                ldizi[sayac].setBounds(tx[sayac], ty[sayac], 15, 15);
            }
          };
          myTimer.schedule(tdizi[sayac],0,3);
    }

Bu işlemleri anlatan video dersler aşağıdadır;

21 Ocak 2018 Pazar

Base64 Kodlama

Binary verileri karakter dizilerine döndüren kodlama şeklidir. Başta http olmak üzere email metinleri de bu kodlama ile kodlanarak karşı tarafa iletilirler. Başlangıçta PEM - Privacy-enhanced Electronic Mail olarak adlanrılmasına rağmen zamanla Base64 adını almıştır. Günümüzde web tabanlı otomasyonlarda resim benzeri medyalar Base64 kullanılarak kodlanır ve o şekilde saklanırlar. Temel çalışma mantığı 8 bitlik verilerin 6 bitlik karakter cetveline dönüştürülmesidir. ASCII karakterlerin kodlanması için 7bit=128 karakter kullanılırken Base64 de 6 bit kullanılır. Sayılar, büyük harfler ve küçük harflerden oluşan dönüşüm tablosu mevcuttur. Bunun yanısıra + ve - karakterleri de tabloya eklenir.
Base64 dönüşüm tablosu

Programlama esnasında bu tablo;
char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

olarak tanımlanabilir. Peki alınan veriler nasıl kodlanır. Diyelim ki sayısal olarak üç tane veri alınmış olsun; 155, 162 ve 233. Bu sayıların 8 bitlik binary karşılıkları aşağıdaki gibidir;

155 -> 10011011
162 -> 10100010
233 -> 11101001

Şimdi bu binary rakamları yanyana ekleyelim;
100110111010001011101001

elimizde 24 bitlik bit karakter dizisi oluşmuş oldu. Base64 de 64 karakter olduğu için 6 bitlik sayılarla ifade edilebilirler. Dolayısı ile yukarıdaki 24 biti 6şar bitlik verilere bölceğiz;
100110 -> 38
111010 -> 58
001011 -> 11
101001 -> 41

Bölme işleminden sonra her bir 6 biti tekrar 10 luk tabana çevirelim. Elde ettiğimiz rakamlar Base64 dönüşüm tablosundan alınacak;
38 -> m
58 -> 6
11 -> L
41 -> p

bu şekilde sayısal kodlama tamamlanacaktır. Base64 dönüşümünde eğer 6 bitlik bölümlerde sayısal veri yetmiyorsa sonu 0 ile doldurulur. Son karakter 0 ile bitiyorsa 65. karakter olarak = işareti eklenir.

Algoritma Soruları 040 - İki dizideki tek ve çift rakamları toplama

Seviye : Orta

İki farklı integer dizisi içindeki tek rakamları ayrı, çift rakamları ayrı toplayarak üçüncü diziye aktaran programı yazınız?

Açıklama : Diziler 20'şer elemanlı 0 ile 10 arasında rastgele rakamlardan üretilsin. A dizisinin ilk tek elemanı B'nin ilk tek elemanı ile toplanacak C dizisine aktarılacak.

A = {3,6,8,5,0,3..................}
B = {2,2,5,0,4,3..................}

c = {8,8,............}

A dizisinde ilk tek rakam 3 B'de ise 5 olduğu için toplanarak C'ye aktarılacak. Bu şekilde A'daki tüm tekler B'deki teklerle aynı şekilde çiftlerle toplanaram C'ye aktarılacak. C dizisi tamamen dinamik olarak oluşturulacak.

20 Ocak 2018 Cumartesi

Diziler ve ArrayList arasındaki 8 fark

1. Dinamik boyut
Diziler sabit boyutludur, her ne kadar çalışma zamanında yeniden boyut verilebilsede boyutnu tahmin edemeyeceğiniz veri yapılarında kullanılamazlar. ArrayList ise içine eleman eklendikçe boyutunu günceller.

2. Performans
ArrayList barındırdığı veriler için her seferinde boyutunu günceller özellikle milyonlarca veri içeren setlerde dizilere göre daha yavaş çalışırlar.



3. Değişkenler
ArrayList sadece nesne(object) türünde veri tutabilirler. Diziler ise int, float, double gibi basit tipleri tutabilirler. Tabi ki her seferinde tür dönüşümü yapmaya gerek yoktur çünkü java kendisi basit tipleri nesneye çevirir. Aşağıdaki  kod sorunsuz çalışır,
ArrayList  arraylistobject = new ArrayList();
arraylistobject.add(23); 

Arka planda yapılan işlem ise aslında şudur;
arraylistobject.add( new Integer(23)); 

4. Size ve Length komutları
Dizilerde uzunluk length komutu ile yapılırken, ArrayList'de size komutu kullanılır. 

5. Çok boyutluluk
Diziler çok boyutlu tanımlabilir [][] köşeli parantez ile istediğiniz boyutta veri kümesi tutabilirsiniz. ArrayList ise tek boyutludur fakat içerisinde farklı türlerde veriyi saklayabilir.

6. Eleman ekleme
Dizilerde araya, başa veya sona eleman eklemek zordur. Arraylist de ise add komutu vb komutlarla verileri istediğiniz gibi yer değiştirebilirsiniz.

7. İterasyon
Foreach döngüsü ile arraylist elemanlarını çağırmak çok daha kolaydır. Dinamik yapısı sayesinde önceden kestirilemeyen veri boyutlarında oldukça kullanışlıdır.

8. Çoklu tür
ArrayList String, Integer, Char vb bir çok türü saklayabildiği gibi nesneleri de saklamanıza ve nesnelere ait basit türde verileri saklamanıza da yardımcı olur. 

 

Basit Oyun Haritası Yapımı


Rastgele yerleşimli oyun haritası (map) oluşturmak için başlangıç niteliğinde bir ders.

Kodlama için kullanabileceğiniz assetler aşağıdadır.

 
Öncelikle boşlukları O, engelleri X ve düşmanları ise E olarak kodlayalım. İstenen sayıda engel ve düşman birimini ekleyecek olan sınıfımız ve fonksiyonun kodu aşağıdaki gibidir.

public class hrt {   
    public static char[][] haritaYap(int x,int e){
        char[][] dizi = new char[8][8];
       
        int i,j,xsayac,esayac,rast,kalan,bolum;
        Random r = new Random();
       
        for(i=0;i<8;i++) {
            for(j=0;j<8;j++) {
                dizi[i][j]='O';
            }
        }
               
        xsayac = 0;
        do {
            rast = r.nextInt(64); //36 üretmiş olsun
            kalan = rast % 8; // kalan = 4 sütun olacak
            rast = rast - kalan; // rast 32
            bolum = rast / 8; // bolum  = 4 olacak satır olacak
           
            if(dizi[bolum][kalan]=='O') {
                dizi[bolum][kalan]='X';
                xsayac++;
            }
           
        }while(xsayac<x);       
       
        esayac = 0;
        do {
            rast = r.nextInt(64); //36 üretmiş olsun
            kalan = rast % 8; // kalan = 4 sütun olacak
            rast = rast - kalan; // rast 32
            bolum = rast / 8; // bolum  = 4 olacak satır olacak
           
            if(dizi[bolum][kalan]=='O') {
                dizi[bolum][kalan]='E';
                esayac++;
            }
           
        }while(esayac<e);
       
       
        return dizi;
    }  

}

İlgili bölümün video anlatımı;
 

Bu aşamadan sonra form ekranı hazırlayan kodlara bakalım.

package harita;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.JPasswordField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class frm1 extends JFrame {

    private JPanel contentPane;
    private JTextField txt_x;
    private JTextField txt_e;
   
    static JLabel[][] ldizi = new JLabel[8][8];

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    frm1 frame = new frm1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public frm1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 901, 522);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);       
       
        Image imgo = new ImageIcon(this.getClass().getResource("/o.png")).getImage();
        Image imgx = new ImageIcon(this.getClass().getResource("/x.png")).getImage();
        Image imge = new ImageIcon(this.getClass().getResource("/e.png")).getImage();
       
        txt_x = new JTextField();
        txt_x.setBounds(562, 32, 89, 22);
        contentPane.add(txt_x);
        txt_x.setColumns(10);
       
        txt_e = new JTextField();
        txt_e.setBounds(680, 32, 89, 22);
        contentPane.add(txt_e);
        txt_e.setColumns(10);
       
        JTextPane textPane = new JTextPane();
        textPane.setBounds(547, 124, 230, 204);
        contentPane.add(textPane);
       
        int i,j;
        for(i=0;i<8;i++) {
            for(j=0;j<8;j++) {
                ldizi[i][j] = new JLabel("");
                contentPane.remove(ldizi[i][j]);
                contentPane.revalidate();
                contentPane.repaint();
            }}
       
        JButton btnNewButton = new JButton("Olu\u015Ftur");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int x,en;
                x = Integer.parseInt(txt_x.getText());
                en = Integer.parseInt(txt_e.getText());
               
                char[][] dizi = hrt.haritaYap(x, en);
               
                textPane.setText("");
               
                int i,j;
               
                for(i=0;i<8;i++) {
                    for(j=0;j<8;j++) {
                        textPane.setText(textPane.getText()+dizi[i][j] + "  ");                       
                    }
                    textPane.setText(textPane.getText()+"\n");
                }       
               
               
               
                for(i=0;i<8;i++) {
                    for(j=0;j<8;j++) {
                                               
                        if(dizi[i][j]=='O')    ldizi[i][j].setIcon(new ImageIcon(imgo));
                        else if(dizi[i][j]=='X') ldizi[i][j].setIcon(new ImageIcon(imgx));
                        else if(dizi[i][j]=='E') ldizi[i][j].setIcon(new ImageIcon(imge));
                        ldizi[i][j].setBounds(i*50, j*50, 50, 50);
                        contentPane.add(ldizi[i][j]);
                        ldizi[i][j].repaint();
                    }                   
                }
               
               
               
            }
        });
        btnNewButton.setBounds(616, 75, 97, 25);
        contentPane.add(btnNewButton);
       
       
       
        JLabel lblNewLabel = new JLabel("Engel");
        lblNewLabel.setBounds(584, 13, 56, 16);
        contentPane.add(lblNewLabel);
       
        JLabel lblNewLabel_1 = new JLabel("D\u00FC\u015Fman");
        lblNewLabel_1.setBounds(696, 13, 56, 16);
        contentPane.add(lblNewLabel_1);
       
    }
}


ilgili bölümüm video anlatımı

13 Ocak 2018 Cumartesi

Algoritma dersine yeni başlayanlar için basitten zora sorular?


1. Aşağıdaki terimleri açıklayınız?
     -Int
     -Float
     -String
     -Char

2. Aşağıdaki satırda ne yapılmaktadır?
     int sayi;
     sayi = 5;

3. Aşağıdaki satırda yapılan işlem 2. sorudaki işlemle aynı mıdır?
     int sayi = 5;

4. Aşağıda satırda ne yapılmıştır?
     String isim = "ALİ";

5. Bir önceki soruda neden " (çift tırmak) işareti kullanılmıştır?

6. Aşağıdaki tanımlama doğru mudur? Sebebini açıklayınız?
     int gökçe;

7. Aşağıdaki kod ne yapmaktadır? 
     int a = 5;
     int b = 7;
     if(a<b) System.out.println("a küçüktür b");

8. Aşağıdaki kod ne yapmaktadır?
     int a = 5;
     int b = 7;
     if(a<b) System.out.println("a küçüktür b");
     else if(b<a) System.out.println("b küçüktür a");
     else System.out.println("a eşittir b");

9. Aşağıdaki kod ne yapmaktadır? i değişkeninin döngünün her adımdaki değerini düşünün? i++ ifeadesi ne yapmaktadır?
    int i = 0;
    for(i=0;i<10;i++){
         System.out.println("algoritma");
    }

10. Aşağıdaki kod ne yapmaktadır? 9. sorudan farkı nedir?
    int i = 0;
    for(i=0;i<10;i++){
         System.out.println(i + "algoritma");
    }

11. Aşağıdaki kod ne yapmaktadır?
     int i = 0;
     int toplam = 0;
     for(i=0;i<10;i++){
         toplam = toplam + i;
     }
     System.out.println(toplam);

12. Bir önceki soru da toplam neden 0'a eşitlenmiştir? Yazdırma işlemi neden for döngüsünün dışında yazılmıştır? Döngü içerisinde yazılsaydı ne olurdu?

13. Aşağıdaki ifadeler aynı işi mi yapmaktadır?
    toplam = toplam + 5;
    toplam += 5;

14. Aşağıdaki kodlar ne yapmaktadır?
    a = 5 % 2;
    a = b % 2;

15. Bir sayının tek mi çift mi olduğunu nasıl anlarız? Kodlayınız.

16. Birden 100'e kadar sayılardan tek olanların toplamını bulan kodları yazınız?

17. Aşağıdaki kod ne yapmaktadır?
    int i;
    int toplam = 0;
    for(i=0;i<100;i=i+5){
         System.out.print(i + " + ");
         toplam += i;
    }
    System.out.println(toplam);

18. Aşağıdaki kodun çıktısı ne olur?
    int a,b;
    a = 5;
    b = 3;
    System.out.println(a % b);

19. Aşağıdaki kod ne yapmaktadır? ortalama değişkeni neden float olarak tanımlanmıştır?
    int a,b,c,d;
    float ortalama;
    a = 5;
    b = 11;
    c = 17;
    d = 13;
    ortalama = (float) (a+b+c+d) / 4;

20. Aşağıdaki kod da ne yapılmaktadır? Hesaplama öncesinde neden (float) yazılmıştır?
    int a, b;
    float c;
    a = 5;
    b = 8;
    c = (float) (a+b) / 2;

21. Yirmi sayının ortalamasını bulmak için ne yapmalıyız? a, b, c, d ...... diyerek 20 adet değişken mi tanımlamalıyız?

22. Aşağıda ne yapılmıştır?
    int[] dizi = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

23. Aşağıdaki kodun çıktısı nedir?
    int[] dizi = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    System.out.println(dizi[0]);
    System.out.println(dizi[1]);

24. Aşağıdaki kodun çıktısı nedir?
    int i = 5;
    int[] dizi = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    System.out.println(dizi[i]);
    System.out.println(dizi[i++]);
    System.out.println(dizi[i++]);

25. Aşağıdaki kodun çıktısı nedir?
    int i = 5;
    int j = 8;
    int[] dizi = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    System.out.println( dizi[i] + dizi[j] ) ;

26. Aşağıdaki kod ne yapmaktadır?
    int  i;
    int[] dizi = {5,8,13,21,34};
    for(i=0;i<=4;i++){
        System.out.println("Dizinin" + i + ". elemanı = " + dizi[i] );
    }

27. Bir önceki soruda döngü neden i<=4 olarak verilmiştir?

28. Dizi indis değeri neden 0'dan başlar?

29 . Yüz elemanlı bir dizinin en son elemanının indis değeri neden 99'dur?

30. Aşağıdaki kod ne yapmaktadır?
    int  i;
    int toplam = 0;
    float ortalama;
    int[] dizi = {5,8,13,21,34,55,89};
    for(i=0;i<dizi.length; i++){
        toplam += dizi[i];
    }
    ortalama = (float) toplam / dizi.length;

31. Bir önceki soruda dizi.length ne iş yapmaktadır?

32. Dizi içindeki eleman sayısını elle yazmak yerine neden dizi.length kullanırız? 

33. Aşağıdaki tanımlama ile ne yapılmıştır?
    String isimler = {"ali", "beyhan", "cengiz", "deniz"};
    isimler[3] = isimler[0];

34. Aşağıdaki kodlar ne yapmaktadır?
    char[] harfler;
    String isim = "Fatih Sultan Mehmet";
    int i ;
    for(i=0;i<isim.length;i++){
           harfler[i] = isim.charAt(i);   
    }

35. Aşağıdaki kod ne yapmaktadır?
    Random r = new Random();
    int rastgele = r.nextInt();

36. Aşağıda kod ile ne yapılmıştır?
     Random r = new Random();
     int rastgele = r.nextInt(100);
     float rastgeleNoktali = r.nextFloat(); 

37. Aşağıdaki kod ne yapmaktadır?   
    Random r = new Random();
    int rastgele = r.nextInt();
    if (rastgele % 2 == 0) System.out.println(rastgele);

38. Aşağıdaki kod ne yapmaktadır?
    Random r = new Random();
    int[] dizi = new int[100];
    int i;
    for(i=0;i<100;i++){
         dizi[i] = r.nextInt(50)+50;
    }

39. Aşağıda üretilen random sayılar hangi aralıktadır?
     r.nextInt(1000) + 4000;

40. Yüz elemanlı bir diziyi 100 ile 120 arasında üretilmiş rastgele sayılarla doldurunuz?

41. Aşağıdaki dizinin eleman sayısı kaçtır?
    String isim = "yunus emre"
    char[] harfler = new char[isim.length()];

42. Aşağıdaki kod hatası nedir?
    int[] dizi = new dizi[9];

43. Aşağıdaki kod hatası nedir?
    int[] dizi = new int[10];
    int i;
    for(i=1;i<=10;i++){
         System.out.println(dizi[i]);   
    }

44. Aşağıdaki kodlar ne yapmaktadır?
    int a = (int) 'a';
    char c = (char)  97;

45. ASCII tablosu nedir?

46. Aşağıdaki kod ne yapmaktadır?
     Random r = new Random();
     int a, i;
     for(i=0;i<10;i++){
          a = r.nextInt(26) + 65;
          System.out.print((char) a );
    }

47. Yirmi elemanlı bir dizi tanımlayın ve içini 0-100 arasındaki sayılarla doldurun?

48. Bir önceki soruda dizideki tek ve çift eleman sayısını buldurun?

49. İsminizdeki harflerin ASCII kodlarını yanyana yazdıran programı yazınız?

50. Aşağıdaki kod ne yapmaktadır?
    String isim = "Alaeddin Kaykubat";
    int i,a;
    for(i=0;i<isim.length;i++){
         a = (int) isim.charAt(i);
         if(a%2==1) System.out.print(isim.charAt(i));
    }

51. Metotların (fonksiyonların) kullanım amacı nedir?

52. Aşağıdaki metot hangi türde parametreleri alıp hangi türde veri döndürmektedir?
     static int hesapla(int a, int b){
           return a+b;
     }

53. Kullanıcıdan vize ve final notlarını alan ortalamayı geri döndüren metotu yazınız? Metot ne türde veri alacak ve ne türde veri döndürecek?

54. Aşağıdaki kod ne yapmaktadır?
    static char karakterBul(int a){
         return (char) a;
}

55. Tüm metotlar değer döndürmek zorunda mıdır? 

56. Void kelimesi ne zaman kullanılır?

57. Aşağıdaki kod ne yapmaktadır?
     static void sadeceYaz(int a){
        System.out.println(a);
     }

58. Bir önceki soruda neden void kullanılmıştır?

59. Değer almayan ve değer döndürmeyen metotlar yazılabilir mi?

60. Aşağıdaki kod ne yapmaktadır?
    static void ekranaYaz(){
         System.out.println("Ne değer alırım, ne de değer döndürürüm, dünya bana güzel!");
    }

61. Recursive (özyinelemeli) metotlar nedir? Çalışma mantığı nasıldır?

62. Kendisine gönderilen sayının faktöriyelini bulan Recursive metot tanımlayınız?

63. Aşağıdaki kod ne yapmaktadır?
     Scanner scan = new Scanner(System.in);
     String isim;
     do{
          System.out.println("Bir isim giriniz:");
          isim = scan.nextLine();
          if(isim.equals("ali")) break;
     }

64. Break komutu döngülerde ve diğer kalıplarda ne iş yapar?

65. String ve char değişkenlerin farkı nedir?

devamı gelecek....

6 Ocak 2018 Cumartesi

İşlemcilerde Spectre ve Meltdown Açıkları

-Açık Intel, AMD ve ARM üreticilerinin tasarladığı tüm işlemcilerde mevcut.

-Dünya üzerindeki 1.5 milyar işlemciyi etkiliyor.

- Açıklar Google ve bazı Üniversitelerin güvenlik birimlerince tespit edildi.

-MeltDown açığı RAM'a direk ulaşımı sağlıyor bu yüzden gizli verilerin, banka hesapları, kullanıcı bilgilerinin basit bir keylogger ile çalınmasını sağlıyor.

-Spectre ile çalışan uygulamalardan veri çekilebiliyor. Özellikle browser üzerindeki veriler bu şekilde elde edilebilir.

-İşlemci üreticileri açık için yamalar ve firmwareler ile güncelleme yapmaya başladı.

- Açığın bulut sistemleri üzerinde kalıcı tahribatlara sebep olabileceği varsayılıyor.

Türkiye'de Üretilen Star Wars Oyuncakları

Star Wars filminin ilk serisi büyük popülerlik elde edince lisanslı oyuncakları da büyük bir pazar elde etmiş. 80'li yıllarda Türkiye'de de lisanssız oyuncaklar üretilmiş. Serinin adı küçük bir harf hilesi ile "Stars War" olarak adlandırılmış. "S" harfinin yeri değiştirilerek lisanstan kaçılmaya çalışılmış. Serinin genel Türkçe genel adı "UZAY savaşçıları" olarak adlandırılmış. 

Üst yazı "Stars War"

Seri o yıllarda Türkiye'de epey oyuncak satmış olmasına rağmen, asıl ününe 2000'li yıllardan sonra Amerikalı Star Wars oyuncakları kolleksiyoncularının keşfi ile ulaşıyor. Uzay serisi olarak adlandırdıkları çakma oyuncaklar şu an tanesi 350$ 'a alıcı buluyormuş. Oyuncaklardaki ayrıntıların az olması üretimin zamanın Türkiye'sinde gerçekleştirildiğini ortaya koyuyor. Tabi ki 80'lerde Çin yok daha üretimde.

Serinin en çok aranan parçası tabi ki Darth Vader, "Kara Lider" olarak Türkçeye çevrilmiş. 

  
Çok fazla benzemesede o şartlarda yinede güzel

Uzay serisinde üretilen bir oyuncak var ki zamanın şartlarını yine en güzel ortaya koyuyor. Imperial Gunner oyuncağının kartonunda oyuncağın önünde bir hesap makinası var. Uzay gemisinin kontrol panelini hesap makinasından yapmakta pratik zekanın zirvesi. Koleksiyoncuların yine gıpta ile baktığı bir oyuncak.
Imperial Gunner kartonu üzerindeki resimde hesap makinası uzay gemisinin kontrol paneli olarak düşünülmüş
Üretici nerdeyse tüm karakterlerin oyuncağını eldeki imkansızlıklarla üretmiş, ChewBecca bile seride mevcut. Renginin neden siyah olduğu konusu muallakta muhtemelen rengi tutturamadılar ve siyah ürettiler.
Neden siyah renkli olduğuna dair bir bilgi yok
Tüm imkansızlıklara rağmen girişimcinin elinden geleni yaptığı için saygı duymak gerekli. Şu an kolleksiyornerler tarafından "unique" eşsiz olarak adlandırılan bir seri olmuş sonuçta. Serinin diğer oyuncakları da aşağıda.














Yazının linki verilerek kullanılabilir.