Bil ki, Allahû Teâlâ’yı tanımanın anahtarı, insanın kendi kendini tanımasıdır. Bunun hakikat olduğuna “Kendini tanıyan, Rabbini tanır.” hadîsi ile “Gerçeği anlayıncaya kadar varlığımızın belgelerini onlara hem dış dünyada, hem de kendi içlerinde göstereceğiz.” (Fussilat Sûresi, âyet: 53) âyet-i kerimesi kuvvetli ve doğru delildir.
İnsana, kendi nefsinden daha yakın birşey yoktur. Kendini bilmeyen, Allah’ı nasıl bilebilir? Eğer kendimi tanımıyorum diye iddia ediyorsan delilsiz iddia makbul değildir. Eğer delilin, zahir (görünen) âzalarından yüzünü, başını; bâtın ahvalinden ise, acıktığını, susadığını bilmek ve kızgınlık zamanlarında bir kimseden intikâm almak, şehvetin galebe çaldığı zaman evlenmek ise, bu türlü tasarruf bütün hayvanlarda da vardır. O halde bu çeşit kendini bilmek, Allahû Teâlâ’yı tanımaya anahtar olamaz. Öyle ise, önce kendi hakikatini, dünya yolculuğuna nereden gelip nereye gideceğini bilip ondan sonra niçin yaratıldığını, dünyaya ne yapmak için geldiğini, saadet ve bedbahtlığın (kötülük) hangi işlerde olduğunu düşüneceksin…
Ogrenciler tablosu olsun iki tane prosedur yazılmış olsun. OgrenciEkle, OgrenciListele. Biri öğrenci eklemek için diğeri öğrenci listelemek için. Alanları da no, ad, soyad olsun.
İlk önce Sql serverla işlemlerimizi yapmamızı sağlayan kütüphanemizi tanımlıyoruz.
using System.Data.SqlClient;
Bağlantımızı oluşturuyoruz.
SqlConnection con=new SqlConnection(constr);
Bağlantımızı açıyoruz.
con.Open();
Veritabanına sorgumuzu göndermek için SqlCommand nesnesini tanımlıyoruz.
SqlCommand cmd = New SqlCommand();
Hangi bağlantıyla bağlanacağını, sorgunun türünün ne olacağını ve hangi sorguyu çalıştıracağını tanımlıyoruz.
Geriye veri döndürmeyeceği için ExecuteNonQuery metoduyla veriyi çalıştırıyorum ve bağlantıyı kapatıyorum.
cmd.ExecuteNonQuery();
con.Close();
Şimdi ikinci prosedürümüzü çağıralım. İkinci prosedürümüz geriye değer döndürüyor. O yüzden SqlDataAdapter nesnesini tanımlayacağız. Dönen değeri DataGridView de gösterelim.
SqlConnection con = New SqlConnection(constr);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText="OgrenciListele";
//Parametre almayacak
SqlDataAdapter da = New SqlDataAdapter(cmd);
//Datatable nesnemizi tanımlıyoruz.
DataTable dt = New DataTable();
da.Fill(dt) //DataTable nesnemizi dönen değerlerle dolduruyoruz.
DataGridView1.DataSource = dt; //Datagridview nesnesini dolduruyoruz.
DataGridView1.DataBind();
Not: CommandType kullanabilmek için System.Data kütüphanesini çağırmanız gerekir.
using System.Data;
Hayırlı günler. Sağlıcakla kalın.
Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.
Saklı prosedürler (Stored Procedure) sql cümleciklerinden oluşur. Bir nevi alt programlardır. Çalışması hızlıdır. Bunun sebebi bir kere derlenmeleridir.
Tanımlanması:
CREATE PROCEDURE ad
parametreler
AS
BEGIN
Komutlar
END
Prosedürün çağırılması:
EXEC Proseduradi parametredegeri,...
Bir ogrenciler tablomuz olsun. Alanları sırasıyla Numara, Ad, Soyad, Bolum, Sinif, Sube olsun.
Bu tabloyu listeleyen bir procedür yazalım. Dışarıdan herhangi bir parametre almayacak.
CREATE PROCEDURE OgrenciListele
AS
BEGIN
SELECT * FROM ogrenciler;
END
Prosedürümüzü yazdık. Şimdi bunu çağıralım.
EXEC OgrenciListele
Dönen değer ogrenciler tablosundaki verilerdir.
Numarası girilen öğrencinin kaydını gösteren saklı prosedürü yazalım. Dışarıdan parametre alacak. Numara alanımızın türü int olduğu için parametremizin türü de int olacak.
CREATE PROCEDURE Ogrenci
@no int
AS
BEGIN
SELECT * FROM ogrenciler WHERE Numara=@no;
END
CREATE PROCEDURE OgrenciSil
@no int
AS
BEGIN
DELETE FROM ogrenciler WHERE Numara=@no;
END
Ad ve Soyadı girilen öğrenciyi getiren saklı prosedürü yazalım. İki tane parametre alacak. bir ad alanı için diğeri soyad alanı için.
CREATE PROCEDURE OgrenciBul
@ad nvarchar(50), @soyad nvarchar(50)
AS
BEGIN
SELECT * FROM ogrenciler WHERE Ad=@ad and Soyad=@soyad;
END
Prosedürümüzü çağıralım.
EXEC OgrenciBul 'Çiğdem','KAYA'
Değişken tanımlama:
CREATE PROCEDURE procedureadi
--@parametreadi turu(int, varchar(50),...)
AS
BEGIN
--Declare @degiskenadi turu(int, varchar(50),...)
--Komutlar
END
Tanımlanmış bir değişkene tablonun alanından veri almak:
CREATE PROCEDURE proseduradi
@no int
AS
BEGIN
Declare @ad nvarchar(50), @soyad nvarchar(50)
SELECT @ad=Ad, @soyad=Soyad FROM ogrenciler WHERE Numara=@no;
END
Bir değişkene veri aktarmak için SET komutu kullanılır.
CREATE PROCEDURE proseduradi
AS
BEGIN
Declare @degisken int
SET @degisken = 10;
END
Hayırlı günler. Sağlıcakla kalın.
Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.
obs isimli MySQL veritabanının notlar isimli tablosu şu şekilde tasarlanmıştır:
id – int – primary key
adsoyad – text
numara – text
ogretmen – text
ders – text
vize – text
final – text
ortalama – text
durum – text
Bu tablodan ortalaması 65 ve üzeri olanların numaralarını lst_gecenler isimli listbox bileşenine ekleyen ve geçenlerin içinden ortalaması 95’in üzerinde olanların numaralarını lst_onur listbox bileşenine ekleyen C# programını yazınız.
Not: Herhangi bir görsel tasarım yapmanıza gerek yoktur. DatagridView bileşeni kullanılmayacaktır. Veritabanı bağlantısı için connectionstring yazılmış ve ilgili tüm bileşenler tanımlanmıştır.
CEVAP:
MysqlConnection con = New MysqlConnection(constr);
con.Open();
MysqlCommand cmd=new MysqlCommand();
cmd.CommandText = "SELECT * FROM notlar";
cmd.Connection = con;
MysqlDataReader dr = cmd.ExecuteReader();
int ort=0;
While (dr.Read())
{
ort = Convert.ToInt32(dr["ortalama"].ToString());
if(ort >= 65)
{
lst_gecenler.items.add(dr["numara"].ToString());
if(ort > 95)
lst_onur.items.add(dr["numara"].ToString());
}
}
con.Close();
Bilgisayar Programcılığı (Gece)
Mikroişlemciler ve Assembly Dili
Vize Sınavı
1 – Çıkış portunda 1 rakamını yakmak için gerekli olan komutlar nelerdir? (Display ortak anotludur)
CEVAP:
D0
D1
D2
D3
D4
D5
D6
D7
1
0
0
1
1
1
1
1
A
B
C
D
E
F
G
H
1 rakamını yakmak için b ve c’ye 1 sinyali göndeririz. B ve C girişi D1 ve D2’yi temsil ediyor.
16’lık tabanda bu sayı 9FH eşittir.
MVI A, 9FH
OUT PORT0
HLT
2 – Aşağıda verilen assembly programı işletildikten sonra register içeriklerinin aldığı değerleri bulunuz.
MVI C, 15H
LXI D, 7099H
INR E
MOV A, E
ADD C
ORA D
MOV H, A
CEVAP:
İşlem:
A
B
C
D
E
H
L
9AH
15H
70H
99H
FFH
AFH
9AH
FFH
Sonuç:
A
B
C
D
E
H
L
FFH
15H
70H
9AH
FFH
3 – Aşağıda verilen işlemleri yerine getiren assembly dili programını yazınız.
a. B ve C kaydedicilerine 10H ve 90H verilerini yükle
b. Her iki veriye OR işlemi gerçekleştir
c. Neticeyi C5H verisinden çıkar
d. Sonucu D kaydedicisine yükle
CEVAP:
MVI B, 10H
MVI C, 90H
MVI A, B
ORA C
SUI C5H
MOV D, A
İlk önce SglClient isim uzayını (namespace) projemize dahil ediyoruz.
using System.Data.SqlClient;
Baglanti adında bir class tanımlayalım. Sql bağlantımızı tanımlayalım.
public class baglanti{
private SqlConnection con;
}
Sunucu, veritabani, kullanici ve parola değişkenlerini tanımlayalım.
public class baglanti{
private SqlConnection con;
private string _sunucu;
private string _veritabani;
private string _kullanici;
private string _parola;
}
Bu değişkenlere private (özel) olduğu için dışarıdan erişilemez. Bu değişkenlere erişmek için özellik tanımlayalım.
public class baglanti{
private SqlConnection con;
private string _sunucu;
public string Sunucu
{
get { return _sunucu; }
set { _sunucu = value; }
}
private string _veritabani;
public string Veritabani
{
get { return _veritabani; }
set { _veritabani = value; }
}
private string _kullanici;
public string Kullanici
{
get { return _kullanici; }
set { _kullanici = value; }
}
private string _parola;
public string Parola
{
get { return _parola; }
set { _parola = value; }
}
}
Özelliklerimizi tanımladık. bu girilen verilerle bağlantımızı oluşturalım. Bunun için bir BaglantiOlustur adında bir method yazalım. ConnectionString oluşturmak için SqlConnectionStringBuilder nesnesini kullanalım.
public void BaglantiOlustur()
{
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
scsb.DataSource = _sunucu;
scsb.InitialCatalog = _veritabani;
scsb.UserID = _kullanici;
scsb.Password = _parola;
con = new SqlConnection(scsb.ConnectionString);
}
Bağlantımızı tanımladık. Bağlantımızı Açıp, kapatmak için bir method yazalım.
public void BaglantiAc()
{
if (con.State == ConnectionState.Closed)
con.Open();
}
public void BaglantiKapat()
{
if (con.State == ConnectionState.Open)
con.Close();
}
ConnectionState kullanabilmek için projemize System.Data eklememiz gerekir.
Şimdi Update, Insert, Delete işlemini yaptıran bir method yazalım. Bu işlemi yapmak için SqlCommand nesnesini tanımlıyoruz. Bağlantımızı veriyoruz. Bağlantımızı açıyoruz. Sorgumuzu çalıştırıyoruz ve baglantımızı kapatıyoruz.
public void SorguCalistir(string sorgu)
{
SqlCommand cmd = new SqlCommand(sorgu, con);
BaglantiAc();
cmd.ExecuteNonQuery();
BaglantiKapat();
}
Şimdi verileri datatable ile geriye döndüren bir fonksiyon yazalım. datatable veya dataseti doldurabilmek için SqlDataAdapter nesnesini kullanacağız.
public DataTable TabloGetir(string sorgu)
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sorgu, con);
da.Fill(dt);
return dt;
}
Şimdi de verilerimizi satır satır okumak için bir fonksiyon yazalım. Satırları okumamız için SqlDataReader nesnesini kullanacağız.
public SqlDataReader VeriGetir(string sorgu)
{
SqlDataReader dr;
SqlCommand cmd = new SqlCommand(sorgu, con);
dr = cmd.ExecuteReader();
return dr;
}
Şimdilik sınıfımızı (class) bitirelim.
Şimdi nasıl kullanacağımıza bir bakalım. İlk önce bir sınıfımızın bir görüntüsünü (instance) oluşturalım. Sonra baglantı metnimizi tanımlayalım.
baglanti bag = new baglanti();
bag.Sunucu = "Sunucu adı";
bag.Veritabani = "Veritabanı";
bag.Kullanici = "Kullanıcı adı";
bag.Parola = "Parola";
bag.BaglantiOlustur();
Register çiftinde kayıtlı olan adresteki veriyi A registerına yükler.
LDAX Rç
Ramdeki 2050H adresinde FEH verisi kayıtlı olsun. B register çiftini gösterge olarak seçelim.
LXI B, 2050H
B register çiftine 2050H adresi atandı. Şimdi bu adresteki veriyi A registerına atalım.
LDAX B
B register çiftinde adres kayıtlıydı. B register çiftindeki adreste bulunan veri (FEH) A registerına atandı.
LDA Komutu
Belirtilen ramdeki adresdeki veriyi A registerına yükler.
LDA 16-bit
LDA 2050H
STAX Komutu
A registerındaki veriyi belirtilen register çiftinde bulunan ramdeki adrese yükler.
STAX Rç
D’yi gösterge olarak seçelim. 2050H adresini atayalım.
LXI D, 2050H
A daki veriyi D register çiftinde bulunan adrese atayalım.
STAX D
STA Komutu
A registerındaki veriyi belirtilen ramdeki adrese yükler.
STA 16-bit
STA 2050H
INX Komutu
Register çiftini bir arttırır.
INX Rç
DCX Komutu
Register çiftini bir azaltır.
DCX Rç
M, H (H, L) register çiftinde bulunan adresteki veriyi temsil eder.
MOV M, R
Belirtilen registerdaki veriyi, H register çiftinin temsil ettiği adrese atar.
MOV R, M
Belirtilen registera, H register çiftinin temsil ettiği adresteki veriyi atar.
RLC Komutu
A registerını bir bit sola kaydır.(8-bit)
RLC
MVI A, 50H
A daki veri 01010000
RLC
A daki veri 10100000
RAL Komutu
A registerını 1 bit sola kaydır. Carry bayrağıda dahil. (9-bit)
RAL
MVI A, 3A
A daki veri 00111010
RAL
Carry bayrağında 0 olduğunu varsayalım. Carry bayrağına sıfır atandı. A ‘ya carry bayrağı eklendi. A daki veri 01110100
RRC Komutu
A registerını bir bit sağa kaydır.(8-bit)
RRC
RAR Komutu
A registerını 1 bit sağa kaydır. Carry bayrağıda dahil. (9-bit)
RAR
Not: Carry bayrağı değişen biti tutar.
CALL Komutu
Alt programı çağırmak için kullanılır.
CALL 16-bit (adres)
RET Komutu
Alt program sonu.
RET
CMP, CPI Komutu
CMP R
CPI 8-bit
Karşılaştırma operatörüdür. A registerı ile belirtilen registerı veya 8-bitlik değeri karşılaştırır.
Eğer veriler eşitse Z=1 C=0
A registerı küçükse Z=0 C=1
A registerı büyükse Z=0 C=0
Örnekler
1. 01H nolu porttan veriyi okuyup 02H nolu porta gönderen programı yazınız.
IN 01H
OUT 02H
HLT
2. B registerına 4FH yükleyen ve 01H adresindeki porta gönderen programı yazınız.
MVI B, 4FH
MOV A, B
OUT 01H
HLT
3. B registerına 32H, C registerına ise 1A değerini giren ve bunları toplayıp 01H nolu çıkış portuna gönderen programı yazınız.
MVI B, 32H
MVI C, 1AH
MOV A, B
ADD C
OUT 01H
HLT
4. 2050H adresindeki veriyi alıp 25H dan çıkaran ve 2051H adresine kaydeden programı yazınız.
LDA 2050H
SUI 25H
STA 2051H
HLT
5.C registerına 6FH, D registerına 4CH yazan; C registerını bir azaltan, D registerını bir artıran sonra C ve D registerını toplayan; 2050H adresine yazan programı yazınız.
MVI C, 6FH
MVI D, 4CH
DCR C
INR D
MOV A, C
ADD D
STA 2050H
HLT
6. D ve C registerlarına 9BH ve A7H sayılarını yükleyin. Daha sonra bu sayıları toplatın. Eğer toplam FFH tan büyükse PORT0 çıkışına 01H bilgisini yazdırın. Büyük değilse, toplamı görüntüleyin.
MVI D, 9BH
MVI C, A7H
MOV A, D
ADD C
JNC atla
MVI A, 01H
atla: OUT PORT0
HLT
7. xx50H adresinden başlayarak 16 veriyi, xx70H adresinden itibaren kopyalayan programı yazınız.
MVI D, 10H
LXI H, xx50H
LXI B, xx70H
atla:MOV A, M
STAX B
INX H
INX B
DCR D
JNZ atla
HLT
Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.
USE AN EXISTING IDEtıklayın. Açılan açılır pencereden Download the SDK tools for Windows tıklayın.
I have read… tik atın.
Download… tıkladıktan sonra dosya inmeye başlayacaktır.
Dosya indikten sonra çalıştırın. Finish butonuna tıkladığınızda Start Android SDK Manager işaretliyse Program çalışacaktır.
Hangi sürüme program yazacaksanız o sürümleri seçin. Android 4.1.2 sürümünde yazdığınız program Android 2.2 de çalışmayacaktır. Sürüme göre kütüphaneler farklılık gösterir.
Android sürümlerini seçtikten sonra Install… tıklayın.
Accept License seçin. Install tıklayın.
Program seçtiğimiz paketleri yüklemeye başlayacaktır. Bu internet bağlantınıza göre biraz zaman alabilir.
Eğer programda hata alırsanız. Menüden Tools->Options girin.
Açılan pencereden Force… seçin. Pencereyi kapatın. Menüden Packages->Reload tıklayın. Sonra paketleri seçin tekrar yükleyin.
Yükleme işlemi bittikten sonra pencereyi kapatın. Başlat->Tüm Programlar->Android SDK Tools->AVD Manager tıklayın. Burada sanal bir cihaz tanımlaması yapacağız.
New tıklayın. Açılan pencereden cihaza bir isim verin. Device: cihazınızı seçin. Target: Yüklü olan bir Android sürümü seçin. Diğer ayarları da isterseniz yapabilirsiniz.
Not: Eğer sistemimizin 32 bit veya 64 bit olduğunu bilmiyorsanız. Windows XP kullanıyorsanız. Başlat->Çalıştır->winmsd.exe tamama tıklayın. Açılan pencerede Sistem türünde bulabilirsiniz. Windows 7 kullanıyorsanız eğer Bilgisayarım’a sağ tıklayın. Özelliklere tıklayın.
Şimdi ise son olarak Eclipse IDE for Java Developers indirelim ve ADT Plugin yükleyelim. http://www.eclipse.org/downloads/ adresinden Eclipse IDE for Java Developers indirelim.
İndirdiğimiz Eclipse dosyası bir zip dosyasıdır. Arşivden çıkaralım. Eclipse adında bir klasör çıkacaktır. İsterseniz o klasörü Program Files klasörünün içine atıp eclipse.exe’ yi masaüstünde bir kısayol oluşturabilirsiniz.
Eclipse programını çalıştıralım. İlk açılışta projelerin hangi klasöre kaydedileceğini soruyor. İstediğiniz gibi ayarlayabilirsiniz. Use this… işaretlerseniz varsayılan olarak seçtiğiniz yolu anımsayacaktır bir daha size sormayacaktır.
Menüden Help->Install New Software tıklayın.
Work with alanına https://dl-ssl.google.com/android/eclipse/ veya http://dl-ssl.google.com/android/eclipse/ adresini yazıp enter tuşuna basın.
Select All tıklayarak hepsini seçelim. Next tıklayalım.
Next tıklayalım.
I accept the terms… seçelim ve Finish tıklayalım.
Program eklenti dosyalarını indirmeye başlayacak ve yükleyecektir. Bu internet bağlantınıza göre biraz zaman alabilir.
Bittikten sonra programı yeniden başlatın. Menüden Windows->Preferences tıklayın.
Sol menüden Android tıklayın. Eğer Android SDK seçilmemişse Browse diyerek yüklediğiniz Android SDK klasörünü belirtin.
Evet kurulumumuz sonunda bitti. 🙂
Selametle Kalın. Hayırlı günler…
Makalenin bütün hakları www.ibasoglu.com’a aittir. Kaynak belirtmek kaydıyla alıntı yapılabilir.