Programlama dilleri, makine dili, yüksek düzey diller Derleyici, "source", "object", "link" kavramları
tarix 20.02.2018 ölçüsü 441 b. #43021
Derleyici, "source", "object", "link" kavramları. Algoritma, bir programın hayat hikâyesi
X = A * B + C X = A * B + C Hafızanın A adresindeki değeri al, ALU’da bir "register"e yükle; Hafızanın B adresindeki değeri al, yukardaki değerle çarp ve sonucu aynı "register"de tut. Hafızanın C adresindeki değeri registerdeki değere ekle. Registerdeki değeri hafızanın X adresine koy.
X = A * B + C X = A * B + C Opcode Operand 00010000 0000000000000100 00000000 (A’daki değeri reg. yükle) Hex: 08 00 04 00 00100100 0000000000000100 00000001 (B’deki değerle çarp) Hex: 24 00 04 01 00100011 0000000000000100 00000010 (C’deki değeri reg. ile topla) Hex: 23 00 04 02 00010001 0000000000000100 00000011 (Registerdeki değeri X’e taşı) Hex: 11 00 04 03 İki tabanındaki sayılar : 0, 1 Ondalık sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Ondalık Hex Hex Ondalık Ondalık Hex Hex Ondalık 1 = 1 10 = A 36 = 24 A5 = 165 147 = 93 DD = 221 255 = FF
X = A * B + C
X = A * B + C X = A * B + C X = A * B + C
FORTRAN FORTRAN C Pascal Basic C++ Java C#
http://www.digibarn.com/collections/ posters/tongues/tongues.jpg http://www.digibarn.com/collections/ posters/tongues/tongues.jpg
Derleme hataları (Compiler error) Derleme hataları (Compiler error) Bağlama hataları (Falan modülü bulamadım) İcra hataları (Run time error)
public class HesapMakinesi { int a, b, c; public void Carp() { a = int.Parse(Birinci); b = int.Parse(Ikinci); c = (a * b); Sonuc = c.ToString(); } }
class Program class Program { static void Main() { HesapMakinesi HM = new HesapMakinesi(); HM.Birinci = Console.ReadLine(); HM.Ikinci = Console.ReadLine(); HM.Carp(); Console.WriteLine(HM.Sonuc); Console.Read(); } }
namespace KaraEkranÇarpmaMakinesi namespace KaraEkranÇarpmaMakinesi { class Program { static void Main() { ......... } } public class HesapMakinesi { .......... } }
Değişken tipleri: Değişken tipleri: int int birinciSayi; birinciSayi = 1256;
Değişken tipleri mutlaka ilan edilmelidir (type decleration- types must be declared “C# is a strongly typed language) Değişken tipleri mutlaka ilan edilmelidir (type decleration- types must be declared “C# is a strongly typed language) Kullanılmadan önce ilan edilmelidir İlk değer atanması ilân sırasında veya ilândan sonra yapılabilir:
= = variable = expression object = expression
= ile diğer operatörler birleştirilebilir: a = a + b yerine a += b = ile diğer operatörler birleştirilebilir: a = a + b yerine a += b a = a / b yerine a /= b
( ve ) işlemlerde öncelik değiştirmek için, vby... { ve } program bloklarını ayırmak için // x = y + z // y ile z’yi topluyorum /* ve */ /* y ile z’yi topluyorum */ En önemli işaret: a = x + y
Önce parantez içleri Sonra soldan sağa * ve / ve % işlemleri Sonra soldan sağa + ve – işlemleri
İsim vermede kurallar ve tavsiyeler C# anahtar kelimeleri
Kurallar Kurallar Öneriler (style ~ üslup) Tümü büyük harf olmasın Başlangıç alt çizgi olmasın Birden fazla kelimede her kelimenin baş harfi büyük olsun Kısaltmalardan kaçınınız İlk kelimenin baş harfi için başka kurallar var.
Keyword’ler derleyiciye ayrılmış kimlikleyicilerdir Keyword’ler derleyiciye ayrılmış kimlikleyicilerdir Keyword’ler değişken adı olamazlar compile-time hatası üretir Keyword’ler yazıldığı gibi kullanılmalıdır. (Case-Sensitive)
Batch Batch Etkileşimli - olayların sürdüğü (event driven) Prosedürel-> yapılı (structured) Nesneye yönelik (Object oriented- OOP)
Veri- değişkenler Veri- değişkenler Metotlar Veri üzerinde yapılacak işlemler (Encapsulation) Sınıf = plan Nesne = plana göre inşa edilmiş yapı
Veriler ne? Veriler ne? Birinci değer İkinci değer İşlemi belirten bişiy
public class CarpmaMakinesi { // Özellikler public double Birinci; public double Ikinci; // Metot(lar) public double Carp() { return Birinci * Ikinci; } }
using System; using System; using System.ComponentModel; using System.Windows.Forms; namespace WindowsApplication5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btCarpma_Click(object sender, EventArgs e) { CarpmaMakinesi Makinem = new CarpmaMakinesi(); Makinem.Birinci = double.Parse(tbIlkSayi.Text); Makinem.Ikinci = double.Parse(tbIkinciSayi.Text); lbSonuc.Text = Makinem.Carp().ToString(); } } public class CarpmaMakinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } } }
Dört işlem yapan makineyi Windows ortamında programlayın. Dört işlem yapan makineyi Windows ortamında programlayın. Dikkat edin: Dört işlem için ayrı ayrı düğmeler kullanırsanız, Hesapla() diye bir metot yazıp switch veya bir sürü if’le uğraşmanız gerekmiyor: Her düğme için basit bir metot yazmanız yeterli.
Ebû Cafer Muhammed bin Musâ el- Harizmî Ebû Cafer Muhammed bin Musâ el- Harizmî (Ölümü: 847) İlk cebir kitabının yazarı: "Kitabı muhtasar fi hisabil- cebr ve’l mukabele" İlk "algoritma" fikri de onun; o yüzden adını taşıyor… Lâtinceye çevirirken H ile G’yi karıştırmışlar: H: ﺧ G: ﻏ
Harezmî’nin anısına… Harezmî’nin anısına… (Harezmî, daha önce ismin verdiğimiz kitabında ikinci derece denkleminin çözümüyle uğraşmış, bir çok hal için çözmüş ve ilk defa iki kök bulunduğunu fark etmiştir.) Mesela: 2 x2 – 19 x + 35 = 0 Böyle bir denklemi çözmek için IkinciDerece adlı bir class yazın. Sonra bu class’ı kullanacak bir Windows uygulaması yazın.
Değişkenler Değişkenler a, b, c, x1, x2, delta, kokDelta Metotlar: “constructor” private diskriminantHesapla public KokleriHesapla
1. Çözüm: Bütün özellikleri “public” yapmak. 1. Çözüm: Bütün özellikleri “public” yapmak. Bu, nesne yönelim felsefesine tamamen zıttır. Nesnelerin değişkenleri ve metotlarının nasıl çalıştığı, tam tersine , kullanıcı programlardan gizlenmelidir . Doğru çözüm: Gerekli minimum sayıda public değişken, nesnenin kontrolü altında nesnenin iç değişkenlerine değer vermelidir.
1. Metotlarda gerektikçe (Q&D yöntem) : 1. Metotlarda gerektikçe (Q&D yöntem) :
2. Namuslu yöntem: 2. Namuslu yöntem: private double a; public double A{ get{ return a; } set{ a = value; } }
2. Namuslu yöntem: 2. Namuslu yöntem: private double a; public string A{ get{ return a.ToString(); } set{ a = Convert.ToDouble(value); } }
Her şey nesne- object. Her şey nesne- object. Sınıflar, nesnelerin planlarıdır. Classes are blueprints of objects Programda nesneler çalışır, sınıflar değil. Nesne yaratmak için Sınıf_ismi nesne_ismi = new Sınıf_ismi (); HesapMakinesi HM = new HesapMakinesi(); kullanılır. Sınıftan nesne yaratmak: Instantiation Her nesne bir sınıfın bir “instance”ıdır.
public/private sınıf_adı { public/private sınıf_adı { public/private type değişkenler public/private sınıflar public/private type metotlar }
Sınıfın değişkenleri tiplerinden (double, int, string, v. s.) başka public veya private olabilir. Sınıfın değişkenleri tiplerinden (double, int, string, v. s.) başka public veya private olabilir. public belirtilmemişse hükmen (default) private olurlar. public değişkenlere dışarıdan değer verilebilir ; değerleri alınıp kullanılabilir. Bunlara nesnenin özellikleri - (property) denir.
Getter ve setter kullanılarak görülen ve değer atanan değişkenlere “özellik” (“property”) deniliyor. (Get ve set kullanmasanız da böyle derleniyor.) Getter ve setter kullanılarak görülen ve değer atanan değişkenlere “özellik” (“property”) deniliyor. (Get ve set kullanmasanız da böyle derleniyor.) Get ve set’in içinde kullanılan değerleri kontrol edebilir, tip değişiklikleri yapabilir, varsayılan değerler verebilirsiniz.
Sınıf içinde tanımlanması: Sınıf içinde tanımlanması: public/private return_type metot_adı (parametreler ){ ..... } public void KokleriHesapla(){ ... } Dışarda kullanılması: object .metot_adı (parametreler ); HM. KokleriHesapla ();
Console.ReadLine(); Console.ReadLine(); public static Main(){ ... } Yüklendiği anda object olarak inşa edilir. Tek kopyası vardır. Instance- instantiation
HesapMakinesi HM = new HesapMakinesi(); HesapMakinesi HM = new HesapMakinesi(); Sınıfla aynı ismi taşır. Tipsizdir (return değeri ve tipi yoktur). Parametreleri bulunabilir.
IkinciDerece Denklem = new IkinciDerece(); IkinciDerece Denklem = new IkinciDerece(); yerine IkinciDerece Denklem = new IkinciDerece(A, B, C); O zaman sınıfın içinde: public class Ikinci Derece{ private double a, b, c; ........ public IkinciDerece(double A, double B, double C){ a = A; b = B; c = C; } ......... }
Bazen şu stil kullanılıyor: Bazen şu stil kullanılıyor: public class Ikinci Derece{ private double a, b, c; ........ public IkinciDerece(double a, double b, double c){ this.a = a; this.b = b; this.c = c; } ......... }
Dallanmalar
if(önerme ) ifade ; if(önerme ) ifade ; if(önerme){ ifade; ifade ifade .... }
if(önerme ) ifade ; else ifade; if(önerme){ ifade; ifade; .... } else{ ifade; ifade: ..... {
Aslında... Aslında... if(önerme){ } else{ }
switch(ifade){ switch(ifade){ case sabit: case sabit:
Tekrarlar
for(tarif ve ilk değer ; kontrol ; değişim ){ for(tarif ve ilk değer ; kontrol ; değişim ){ ifade; ifade; ----- } for(int i = 0; i < 7; i++){ }
1) Açı değerini alarak kurulsun. Açıyı derece cinsinden alsın, kurulurken en küçük radyan değerine çevrilsin. (1 rad = 180/π) π = 3,1415926535897932 1) Açı değerini alarak kurulsun. Açıyı derece cinsinden alsın, kurulurken en küçük radyan değerine çevrilsin. (1 rad = 180/π) π = 3,1415926535897932 2) Set de aynı şeyi yapsın. 3) Get derece döndürsün. 5) Sinüs hesaplayan bir metot olsun Sin x = x – x3/3! + x5/5! – x7/ 7! + ... 6) Kosinüs hesaplayan bir metot olsun Cos x = 1 – x2/2! + x4/4! – xN/N! + … 7) Bir Acı nesnesinin hesapladığı Sin ve Cos ile Math sınıfının hesapladıklarını karşılaştırarak yaptığınızı denetleyin.
Tıpkı gün gibi Tıpkı gün gibi Aylar 0- 11 arasında kodlanıyor Sayiya ve Yaziya metotları var Topla metodu var
Gecen hafta yazdığınız Aci sınıfına iki metot veya property ekleyin: Gecen hafta yazdığınız Aci sınıfına iki metot veya property ekleyin: Radyana(double derece) Dereceye(double radyan) --- Aci BirAci = new Aci(45.0); --- BirAci.Derece(); //Bunun değeri 45.0 olsun BirAci.Radyan(); // Bunun değeri π/4 olsun. Nasıl yapacağınızı bilmediğim için parametreleri çeşitli yazdım...
Array Array ArrayList HashTable SortedList
Avantajlar: Avantajlar: Kolay (her programlama dilinde var) Hızlı Üyenin tipini siz belirliyorsunuz Dezavantajlar Boyu sabit Araya üye sokmak zor
public string Yaziya(int ggun) public string Yaziya(int ggun) { return Gunler[ggun]; } public int Sayiya(tring gunismi) { return Gunler.IndexOf(gunismi); }
Gunleri ard arda yazmak istiyoruz: Gunleri ard arda yazmak istiyoruz: lbl.Text = “Pazartesi ” + “Salı ” + “ Çarşamba” +- - - yerine: lbl.Text = “”; foreach(string gun in Gunler){ lbl.Text += gun; }
ArrayList identifier = new ArrayList(); ArrayList identifier = new ArrayList(); ArrayList gunler = new ArrayList(); Peki boyu belli değil... gunler.Add(“Pazartesi”); gunler.Add(“Salı”); gunler[0].ToString() >>> “Pazartesi” verir.
İşe yarayan bazı özellik (property) ve metotlar: İşe yarayan bazı özellik (property) ve metotlar: gunler.Count >>>> 7 verir (bütün günler girilmişse) gunler.Clear(); gunler.RemoveAt(1); gunler.Reverse(); gunler.Sort(); gunler.Remove(“Çarşamba”);
foreach ile çalışır. foreach ile çalışır. Her türlü nesneyi taşır Avantajlar: Otomatik boy Üye sokup çıkarmak çok kolay Kolay kullanış Dezavantaj Yavaş
ArrayList gibi... Fakat indeks yerine nesne var. (Kullanımda nesne genellikle string) ArrayList gibi... Fakat indeks yerine nesne var. (Kullanımda nesne genellikle string) Hashtable Ulke = new Hashtable(), Ulke[“tr”] = “Türkiye”; Ulke[“de”] = “Almanya”; Ulke[“to”] = “Tonga”; veya Ulke.Add(“tr”, “Türkiye”); Ulke.Add(“de”, “Almanya”); -- -- --
Bir üyeye ulaşmak için: Bir üyeye ulaşmak için: string hangiUlke = Ulke[“tr”]; hangiUlke’nin içinde “Türkiye” vardır. foreach kullanımı: foreach(DictionaryEntry ulkeler in Ulke){ ---- }
Avantajlar: Avantajlar: Esnek kullanım Hızlı bulma... Dezavantajlar Sıraya sokulamaz Kuruluş yavaş, yeni üye sokmak yavaş
ArrayList gibi, fakat eleman eklendikçe otomatik olarak sıraya sokuyor. ArrayList gibi, fakat eleman eklendikçe otomatik olarak sıraya sokuyor. Hashtable gibi, fakat sıraya sokamama problemi yok Meselâ: Öğrenci isimlerini otomatik sıraya sokarak bir öğrenci koleksiyonu yaratabilir. Kelime- açıklama ikilisi ile sözlük yaratabilir...
Öğrenci sınıfı yazın. Numara, İsim, Not özellikleri olsun Öğrenci sınıfı yazın. Numara, İsim, Not özellikleri olsun Sınıf sınıfı yazın. İçinde uygun dizi çeşitleriye öğrenci nesnelerini taşısın. Sınıf nesnelerinin ortalama hesaplayacak bir metodu olsun. Ortalam hesabında foreach kullansın. Kullanıcı ara yüzü numaraya veya isme göre (istenirse birine, istenirse diğerine göre), numara, isim, notu versin. Sınıf ortalaması da görünsün. Temel dizi, ArrayList, HashTable ve SortedList kullanarak ayrı ayrı yapın.
Yazmada ve okumada sayının, tarihin, diğer yazılanların şeklini yönetemiyorduk. Yazmada ve okumada sayının, tarihin, diğer yazılanların şeklini yönetemiyorduk. Sayı formatları Tarih formatları Kültür
c veya C ---- para c veya C ---- para f veya F ----- tam sayı d veya D ---- ondalık sayı x veya X ---- heksadesimal sayı e veya E ----- bilimsel (üstel) Her birinin sonuna kaç rakam hassasiyet istediğinizi bildiren bir sayı koyabilirsiniz: F10, D5 gibi. Kendi tasarladığınız formatlar
DateTime, zamanı, 1 Ocak 1900’den bu yana geçen milisaniye sayısını tam sayı olarak tutar. DateTime, zamanı, 1 Ocak 1900’den bu yana geçen milisaniye sayısını tam sayı olarak tutar. Y2K kıyamet korkusu d ---- 30.04.2007 D --- 30 Nisan 2007 14:33:44 M --- 30 Nisan t ---- 14:33 T --- 14:33:44 F --- 30 Nisan 2007 14:33:44
İki sembol: xx - XX İki sembol: xx - XX tr - TR en - US ru - RU ar - SA İki assembly gerekiyor: using System.Globalization using System.Threading
Niçin okuma ve yazma öğrenmeliyiz? Niçin okuma ve yazma öğrenmeliyiz? Okuma, yazmaya bakış:
using System.IO using System.IO Stream, FileStream, File Directory
Veri tabanı? Veri tabanı? İlişkili Veri Tabanı Relational Data Base Tablo(lar)
Dostları ilə paylaş: