30640c3f99ed9ee871f6870ab0e5bd8f.ppt
- Количество слайдов: 198
C# Prof. Dr. İskender Öksüz Araştırma Görevlisi Alpay Şahin Beginning Visual C# 2010, Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon Reid, Morgan Skinner, Wrox- Wiley 2010
1 Bilgisayar programlama: Programlama dilleri, makine dili, yüksek düzey diller Derleyici, "source", "object", "link" kavramları. Algoritma, bir programın hayat hikâyesi
Von Neumann bilgisayarı Aritmetik ve Mantık Birimi Arithmetic and Logic Unit Ana Hafıza Giriş- Çıkış Cihazları Şimdi buna "işlemci" veya "mikroprosesör" diyoruz (RAM) Input Output Program Kontrol Birimi Main Equipment Program Control Unit Memory
Makine dili X = A * B + C 1) Hafızanın A adresindeki değeri al, ALU’da bir "register"e yükle; 2) Hafızanın B adresindeki değeri al, yukardaki değerle çarp ve sonucu aynı "register"de tut. 3) Hafızanın C adresindeki değeri registerdeki değere ekle. 4) Registerdeki değeri hafızanın X adresine koy.
Makine dili X = A * B + C Opcode Operand 1) 0001000000000100000 (A’daki değeri reg. yükle) Hex: 08 00 04 00 2) 001001000000001000001 (B’deki değerle çarp) Hex: 24 00 04 01 3) 0010001100000001000010 (C’deki değeri reg. ile topla) Hex: 23 00 04 02 4) 000100000001000011 (Registerdeki değeri X’e taşı) Hex: 11 00 04 03 İki tabanındaki sayılar Ondalık sayılar Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Biraz daha hex Ondalık Hex 1 = 1 10 = A 36 = 24 147 = 93 255 = FF Hex Ondalık A 5 = 165 DD = 221
Makine dili - Assembler X = A * B + C 08 00 04 00 24 00 04 01 23 00 04 02 11 00 04 03 MOV A, ACC MUL B, ACC ADD C, ACC STO ACC, X
Yüksek seviye dilleri? X = A * B + C LET X = A * B + C
Üst seviye dili o o o o FORTRAN C Pascal Basic C++ Java C# Üst seviye dili Derleyici (compiler) (Scriptlerde yok) Makine dili
o http: //www. digibarn. com/collections/ posters/tongues. jpg
Derleme (Compilation) Kaynak kod (Source code) Üst seviye dili X = A * B + C Source module Ara dil (Java, C#) Derleyici (compiler) (Scriptlerde yok) 08 00 04 00 Object code Object module Makine dili 24 00 04 01 23 00 04 02
Bitti mi? Okuma programı Bağlama- link Object program Ekrana yazma programı … programı İcra edilebilir program: Executable Çarp_Topla. exe dll : dynamic link library
Hatalar: o Derleme hataları (Compiler error) o Bağlama hataları (Falan modülü bulamadım) o İcra hataları (Run time error)
İlk program: A * B hesap makinesi Gerçekten A * B’yi hesaplayan bir hesap makinesi yazalım. Şimdilik A, B tam sayı olsun. . . Bu bir nesne mi? Evet, yalnız çarpma yapabilen ucuz bir hesap makinesi. . . Özellikler (Properties): Birinci sayı İkinci sayı Sonuç Metot? Çarpma
A * B Hesap makinesi devam. . . public class Hesap. Makinesi { public string Birinci, Ikinci, Sonuc; int a, b, c; public void Carp() { a = int. Parse(Birinci); b = int. Parse(Ikinci); c = (a * b); Sonuc = c. To. String(); } }
A * B Hesap makinesi devam. . . class Program { static void Main() { Hesap. Makinesi HM = new Hesap. Makinesi(); HM. Birinci = Console. Read. Line(); HM. Ikinci = Console. Read. Line(); HM. Carp(); Console. Write. Line(HM. Sonuc); Console. Read(); } }
Tepeden bakış: namespace Kara. EkranÇarpma. Makinesi { class Program { static void Main() {. . } } public class Hesap. Makinesi {. . } }
A * B Hesap makinesi devam. . . class Program { static void Main() { Console. Write. Line("Çarpacağınız birinci tam sayıyı giriniz: "); Hesap. Makinesi HM = new Hesap. Makinesi(); HM. Birinci = Console. Read. Line(); Console. Write. Line("Çarpacağınız iknci tam sayıyı giriniz: "); HM. Ikinci = Console. Read. Line(); HM. Carp(); Console. Write. Line(HM. Sonuc); Console. Write. Line("İşte sonuç! Nasıl ama!"); Console. Read(); } }
2. C# programcılığına giriş Değişken tipleri: int birinci. Sayi; birinci. Sayi = 1256; Değişken Atama Sabit string str. Birinci; str. Birinci = “Gaziantep” Sabit Değişken Atama
Tipler (types) o o o 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: int birinci. Sayi = 1256; string str. Birinci = “Bu takım” int birinci. Sayi; birinci. Sayi = 1256; string str. Birinci; str. Birinci = “Bu takım”
Tipler int birinci. Sayi = 1256; long uzun. Tam. Sayi= 12345678901. . string str. Birinci = “Bu takım” char u. Uml = 'ü' float Avagadro = 6. 02 E 23 bool dogru. Mu = false double pi. Sayisi= 3. 141592653589
C# veri tipleri Tip Bit? Değerler bool 8 true – false uint 32 0 – 4. 294. 967. 295 char 16 ‘u 0000’ - ‘u. FFFF’ ulong 64 264 - 1 byte 8 0 - 255 sbyte 8 -128 - +127 short 16 -32. 768 - +32. 767 ushort 16 0 – 65. 535 int 32 -2. 147. 483. 648 decimal 128 1, 0 10 -28 – 7, 9 1028 float 32 ± 1, 5 10 -45 - ± 3, 4 1038 double 64 ± 5, 10 -324 - ± 1, 7, 10308 string object
Atama ifadesi: Assignment statement = variable = expression object = expression
Operatörler Aritmetik operatörleri Operatör + Mantık operatörleri C# ifadesi Operatör C# ifadesi f + 7 = = x = = y != x != y > x > y < x < y >= x >= y <= x <= y - p - c * b * m / x / y % x % s
Not: = ile diğer operatörler birleştirilebilir: a = a + b yerine a += b a = a / b yerine a /= b
Operatörler devam. . . Operatör C# ifadesi && bool a && bool b || bool a || bool b ++ a++ veya ++a -- a-- veya --a << >> & | bitlerle oynama
Diğer önemli işaretler ( 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 o o /* ve */ /* y ile z’yi topluyorum */ o Boşluk! En önemli işaret: a = x + y
Operatör öncelikleri (operator precedence) Önce parantez içleri o Sonra soldan sağa * ve / ve % işlemleri o Sonra soldan sağa + ve – işlemleri o
Mehmet Ali Hoca’dan • İşlem Öncelikleri (Örnek) y = 2 * 5 + 3 * 5 + 7; 1. Adım 2 * 5 = 10 (En soldaki çarpma) y = 10 * 5 + 3 * 5 + 7; 2. Adım 10 * 5 = 50 y = 50 + 3 * 5 + 7; 3 * 5 = 15 3. Adım (En soldaki çarpma) (Toplamadan önceki çarpma) y = 50 + 15 + 7; 4. Adım 50 + 15 = 65 (En soldaki toplama) y = 65 + 7; 5. Adım 65 + 7 = 72 6. Adım y = 72; (Son toplama) (Son işlem 72 değeri y değişkenine aktarılır)
• Değişkenleri, nesneleri isimlendirme (Kimlikleyiciler ~ identifiers) oİsim vermede kurallar ve tavsiyeler o. C# anahtar kelimeleri Mehmet Ali Hoca’dan
Mehmet Ali Hoca’dan Kurallar ve Öneriler o Kurallar n n İlk karakter harfler, altçizgi Daha sonraki karakterler rakam olabilir o Öneriler (style ~ üslup) n n n 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. Cevap 42 42 Cevap fark Fark KOTUSONUC _Kotu. Sonuc kotu. Sonuc Msj Mesaj
Mehmet Ali Hoca’dan C# Anahtar kelimeleri o Keyword’ler derleyiciye ayrılmış kimlikleyicilerdir abstract, base, bool, default, if, finally Keyword’ler değişken adı olamazlar n compile-time hatası üretir o Keyword’ler yazıldığı gibi kullanılmalıdır. int INT; // Kötü Kullanım (Case-Sensitive)
Soru: Geçerli olmayan veya tavsiye edilmeyen kimliklemeleri bulunuz. 1 int 12 sayi; 2 char $disk. Fiyat; 3 char orta. Deger; 4 float BUDEGER; 5 int __ilk. Deger; Mehmet Ali Hoca’dan
Programlama paradigmaları Batch o Etkileşimli - olayların sürdüğü (event driven) o Prosedürel-> yapılı (structured) o Nesneye yönelik (Object oriented- OOP) o
Sınıf- nesne (class- object) o o Veri- değişkenler Metotlar Veri üzerinde yapılacak işlemler (Encapsulation) o o Sınıf = plan Nesne = plana göre inşa edilmiş yapı
Hesap makinesi? o Veriler ne? n n n Birinci değer İkinci değer İşlemi belirten bişiy o Metotlar ne? n n n İnşa Carpma, Bölme Toplama Çıkarma
Basitten başlayalım: A * B Gerçekten A * B’yi hesaplayan bir hesap makinesi yazalım. Bu bir nesne mi? Evet, yalnız çarpma yapabilen ucuz bir hesap makinesi. . . Özellikler (Properties): Birinci sayı İkinci sayı Metot? Çarpma
A * B Hesap makinesi devam. . . public class Carpma. Makinesi { // Özellikler public double Birinci; public double Ikinci; // Metot(lar) public double Carp() { return Birinci * Ikinci; } }
namespace Carpma. Makinesi { class Program { static void Main() { double Ilk. Sayi, Ikinci. Sayi; Ilk. Sayi = double. Parse(Console. Read. Line()); Ikinci. Sayi = double. Parse(Console. Read. Line()); Carpma. Makinesi Makinemiz = new Carpma. Makinesi(); Makinemiz. Birinci = Ilk. Sayi; public class Carpma. Makinesi Makinemiz. Ikinci = Ikinci. Sayi; { Console. Write. Line public double Birinci; ("İşte sonuç ağalar: " + Makinemiz. Carp()); public double Ikinci; } public double Carp() { } return Birinci * Ikinci; public class Carpma. Makinesi{} } } }
Windows için ne yapmalıyız? public class Carpma. Makinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } } Aradaki 7 farkı bulunuz!
using System; using System. Component. Model; using System. Windows. Forms; namespace Windows. Application 5 { public partial class Form 1 : Form { public Form 1() { Initialize. Component(); } private void bt. Carpma_Click(object sender, Event. Args e) { Carpma. Makinesi Makinem = new Carpma. Makinesi(); Makinem. Birinci = double. Parse(tb. Ilk. Sayi. Text); Makinem. Ikinci = double. Parse(tb. Ikinci. Sayi. Text); lb. Sonuc. Text = Makinem. Carp(). To. String(); } } public class Carpma. Makinesi { public double Birinci; public double Ikinci; } } public double Carp() { return Birinci * Ikinci; }
private void bt. Carpma_Click(object sender, Event. Args e) { Carpma. Makinesi Makinem = new Carpma. Makinesi(); Makinem. Birinci = double. Parse(tb. Ilk. Sayi. Text); Makinem. Ikinci = double. Parse(tb. Ikinci. Sayi. Text); lb. Sonuc. Text = Makinem. Carp(). To. String(); Sınıf } (Class) } Nesne public class Carpma. Makinesi (Object) { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } }
public class Hesap. Makinesi { public string Birinci, Ikinci, Islem, Sonuc; public variables int a, b, c; private variables public void Carp() metot { a = int. Parse(Birinci); b = int. Parse (Ikinci); c = (a * b); Sonuc = c. To. String(); }. . . }
X static void Main(string[] args) { Hesap. Makinesi. Birinci = Console. Read. Line(); Hesap. Makinesi. Islem = Console. Read. Line(); Hesap. Makinesi. Ikinci = Console. Read. Line(); if (Hesap. Makinesi. Islem == "x") Hesap. Makinesi. Carp(); if (Hesap. Makinesi. Islem == "/") Hesap. Makinesi. Bol(); if (Hesap. Makinesi. Islem == "+") Hesap. Makinesi. Topla(); if (Hesap. Makinesi. Islem == "-") Hesap. Makinesi. Cikar(); Console. Write. Line(Hesap. Makinesi. Sonuc); Console. Read. Line(); }
static void Main(string[] args) { Hesap. Makinesi HM = new Hesap. Makinesi(); HM. Birinci = Console. Read. Line(); HM. Islem = Console. Read. Line(); HM. Ikinci = Console. Read. Line(); if (HM. Islem == "x") HM. Carp(); if (HM. Islem == "/") HM. Bol(); if (HM. Islem == "+") HM. Topla(); if (HM. Islem == "-") HM. Cikar(); Console. Write. Line(HM. Sonuc); Console. Read. Line(); }
using System; namespace Hesap. Makinesi { class Program { static void Main(string[] args) { Hesap. Makinesi HM = new Hesap. Makinesi(); . . . } } public class Hesap. Makinesi { değişkenler public void Carp() {. . . } metotlar } }
Laboratuar ödevi: o o Dört işlem yapan makineyi Windows ortamında programlayın. Dikkat edin: Dört işlem için 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.
Ara: Algoritma ~ El Harezmî 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: ﻍ
Ödev: 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 x 2 – 19 x + 35 = 0 Böyle bir denklemi çözmek için Ikinci. Derece adlı bir class yazın. Sonra bu class’ı kullanacak bir Windows uygulaması yazın.
ax 2 + bx + c = 0 Değişkenler a, b, c, x 1, x 2, delta, kok. Delta Metotlar: “constructor” private diskriminant. Hesapla public Kokleri. Hesapla
Değişkenler: a, b, c, x 1, x 2, delta, kok. Delta class Ikinci. Derece{ double a, b, c, x 1, x 2, delta, kok. Delta; }
Metotlar: “constructor”, diskriminant. Hesapla, Kokleri. Hesapla class Ikinci. Derece{ double a, b, c, x 1, x 2, delta, kok. Delta; double diskriminant. Hesapla{ delta = b * b - 4. * a * c; return Math. Sqrt(delta); } public void Kokleri. Hesapla{ kok. Delta = diskriminant. Hesapla(); x 1 = (-b + kok. Delta) / (2. *a); x 2 = (-b - kok. Delta) / (2. *a); } }
class Ikinci. Derece{ double a, b, c, x 1, x 2, delta, kok. Delta; bool gercek ; double diskriminant. Hesapla{ delta = b * b - 4. * a * c; if(delta < 0) { gercek = false; return Math. Sqrt(-delta); } gercek = true; return Math. Sqrt(delta); } }
class Ikinci. Derece{ double a, b, c, x 1, x 2, delta, kok. Delta; bool gercek ; double diskriminant. Hesapla{ delta = b * b - 4. * a * c; if(delta < 0) { gercek = false; return Math. Sqrt(-delta); } else{ gercek = true; return Math. Sqrt(delta); } } }
double a, b, c, x. R 1, x. I 1, x. R 2, x. I 2, delta, kok. Delta; bool gercek ; public void Kokleri. Hesapla(){ kok. Delta = diskriminant. Hesapla(); if(gercek){ x. R 1 = (-b + kok. Delta) / (2. *a); x. R 2 = (-b - kok. Delta) / (2. *a); } else{ x. R 1 = -b / (2 * a); x. R 2 = x. R 1; x. I 1 = kok. Delta / (2. * a); x. I 2 = - x. I 1; } }
. . . X Ikinci. Derece Denklem = new Ikinci. Derece(); Denklem. a = 2; Denklem. b = -19. ; Denklem. c = 35; Denklem. Kokleri. Hesapla(); . . . Denklem. x. R 1, Denklem. x. R 2, . . . class Ikinci. Derece{ double a, b, c, x. R 1, x. I 1, x. R 2, x. I 2, delta, kok. Delta; bool gercek ; double diskriminant. Hesapla{. . . } public void Kokleri. Hesapla{. . . } }
Nesnenin değişkenlerinin dışardan kullanılması o 1. Çözüm: Bütün özellikleri “public” yapmak. n o 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.
. . . Ikinci. Derece Denklem = new Ikinci. Derece(); Denklem. A = 2; Denklem. B = -19. ; Denklem. C = 35; Denklem. Kokleri. Hesapla(); . . . Denklem. XR 1, Denklem. XR 2, . . . class Ikinci. Derece{ public double A, B, C, XR 1, XI 1, XR 2, XI 2 private double a, b, c, x. R 1, x. I 1, x. R 2, x. I 2, delta, kok. Delta; private bool gercek ; private double diskriminant. Hesapla(){. . . } public void Kokleri. Hesapla(){. . . } }
A a; B b; C c değerleri nasıl geçirilecek? o 1. Metotlarda gerektikçe (Q&D yöntem) : public void Kokleri. Hesapla(){ kok. Delta = diskriminant. Hesapla(); if(gercek){ x. R 1 = (-b + kok. Delta) / (2. *a); x. R 2 = (-b - kok. Delta) / (2. *a); } else{ x. R 1 = -b / (2 * a); x. R 2 = x. R 1; x. I 1 = kok. Delta / (2. * a); x. I 2 = - x. I 1; } XR 1= x. R 1; XI 1 = x. I 1; XR 2 = x. R 2; XI 2 = x. I 2; }
A a; B b; C c değerleri nasıl geçirilecek? o 2. Namuslu yöntem: private double a; public double A{ get{ return a; } set{ a = value; } }
“Get”, “Set” başka işlere de yarar o 2. Namuslu yöntem: private double a; public string A{ get{ return a. To. String(); } set{ a = Convert. To. Double(value); } }
Özet o o 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(); Hesap. Makinesi HM = new Hesap. Makinesi(); kullanılır. o Sınıftan nesne yaratmak: Instantiation Her nesne bir sınıfın bir “instance”ıdır.
Sınıflar public/private sınıf_adı { public/private type değişkenler public/private sınıflar public/private type metotlar }
Sınıf değişkenleri o o o 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.
Sınıf değişkenleri. . . devam … HM. A = 3. 12; . . . Sonuc = HM. X 1 R. . . public class Hesap. Makinesi{ public double A, X 1 R; private double a, x 1 R; public/private Bir. Metot(){ a = A; } }
Doğrusu: … HM. A = 3. 12; . . . Sonuc = HM. A. . . public class Hesap. Makinesi{ private double a; public double A{ get{ return a; } set{ a = value; } } }
Sınıf değişkenleri. . . devam o o 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.
Metotlar Sınıf içinde tanımlanması: public/private return_type metot_adı (parametreler){. . . } public void Kokleri. Hesapla(){. . . } Dışarda kullanılması: object. metot_adı (parametreler); HM. Kokleri. Hesapla ();
Özel bir sınıf cinsi: static o o Console. Read. Line(); public static Main(){. . . } Yüklendiği anda object olarak inşa edilir. Tek kopyası vardır. Instance- instantiation
Özel bir metot cinsi: Constructor o Hesap. Makinesi HM = new Hesap. Makinesi(); Constructor o o o Sınıfla aynı ismi taşır. Tipsizdir (return değeri ve tipi yoktur). Parametreleri bulunabilir.
Constructor. . . devam Ikinci. Derece Denklem = new Ikinci. Derece(); yerine Ikinci. Derece Denklem = new Ikinci. Derece(A, B, C); O zaman sınıfın içinde: public class Ikinci Derece{ private double a, b, c; . . . . public Ikinci. Derece(double A, double B, double C){ a = A; b = B; c = C; }. . }
Constructor. . . devam Bazen şu stil kullanılıyor: public class Ikinci Derece{ private double a, b, c; . . . . public Ikinci. Derece(double a, double b, double c){ this. a = a; this. b = b; this. c = c; }. . }
Biraz eğlenelim: Zar atmak. . .
Önce fotoğrafları bulalım ve debug klasörüne yerleştirelim. 1. png 4. png 2. png 5. png 3. png 6. png
public class Zar{ int yuz; Picture. Box hangi. Kutu; Random rastgele; public Zar(Picture. Box Hangi. Kutu) { rastgele = new Random(); hangi. Kutu = Hangi. Kutu; } public void at() { yuz = rastgele. Next( 1, 7); hangi. Kutu. Load(yuz. To. String() + ". png"); hangi. Kutu. Refresh(); } }
Visual Studio Windows Form 1 picbox. Zar 1 button 1
public partial class Form 1 : Form { Zar zar. Bir; public Form 1() { Initialize. Component(); } private void Form 1_Load(object sender, Event. Args e) { zar. Bir = new zar(picbox. Zar 1); zar. Bir. at(); } private void button 1_Click(object sender, Event. Args e) { zar. Bir. at(); } }
Deneyim Bakiim. . . Bir zar
İki zar yapıp tavla oynayalım. . . public partial class Form 1 : Form { Zar zar. Bir; Zar zar. Iki; public Form 1(){Initialize. Component(); } private void Form 1_Load(object sender, Event. Args e) { zar. Bir = new zar(picbox. Zar 1); zar. Bir. at(); zar. Iki = new zar(picbox. Zar 2); zar. Iki. at(); } private void button 1_Click(object sender, Event. Args e) { zar. Bir. at(); zar. Iki. at(); } }
Formdaki ilaveler İki zar
Sizin laboratuarda yapmanızı istediğim Oyun makinesi Bir böcü temizleme görevi: Niçin çok kazanılıyor?
İpucu: public void Yuvarla(Picture. Box pbox) { at(); Thread. Sleep(100); at(); Thread. Sleep(100); at(); }
public void Yuvarla(Picture. Box pbox) { at(); Thread. Sleep(100); at(); Thread. Sleep(100); at(); } { at(); for(int i = 0; i < 7; i = i +1){ i += 1 i++ Thread. Sleep(100); at(); }
Akış kontrolu: o Dallanmalar n n n o if switch ? Tekrarlar n n n for while do - while
if if(önerme) ifade; if( a > b) x = Math. Sqrt(a-b); if(önerme){ ifade; ifade. . } if( a > b){ x = a * a - b * b; y = Math. Sqrt(x); }
if if(grade >= 60) tb. Sonuc. Text = “Geçti”; true Grade >= 60 false print “Passed” if(grade >= 60){ tb. Sonuc. Text = “Geçti”; }
if if(önerme) ifade; else ifade; if( a > b) x = Math. Sqrt(a-b); else x = Math. Sqrt(b-a); if(önerme){ ifade; . . } else{ ifade; ifade: . . . { if( a > b){ x = a * a - b * b; y = Math. Sqrt(x); } else{ x = b * b - a * a; y = Math. Sqrt(x); }
if false true Grade >= 60 print “Failed” print “Passed” if(grade >= 60) tb. Sonuc. Text = “Geçti”; if(grade >= 60){ else tb. Sonuc. Text = “Kaldı”; tb. Sonuc. Text = “Geçti”; } else{ tb. Sonuc. Text = “Kaldı”; } tb. Sonuc = (grade >= 60 ? “Geçti”: “Kaldı”)
if Peki, geçti ve kaldıdan başka sonuç yok mu? 95’in üstündeyse AA ver, altındaysa BA ver. ? if(grade >= 90){ tb. Sonuc. Text = “AA”; } else{ tb. Sonuc. Text = “BA”; } if(grade >= 95){ tb. Sonuc. Text = “AA”; } else if(grade >= 90{ tb. Sonuc. Text = “BA”; } else if(grade >= 70{. .
if if(grade >= 95){ tb. Sonuc. Text = “AA”; } else if(grade >= 90){ tb. Sonuc. Text = “BA”; } else if(grade >= 85){ tb. Sonuc. Text = “BB”; } else if (grade >= 80){ tb. Sonuc. Text = “CB”; } else if (grade >= 75){ tb. Sonuc. Text = “CC”; } if(grade >= 70){ tb. Sonuc. Text = “DC”; } else if(grade >= 65){ tb. Sonuc. Text = “DD”; } else if(grade >= 60){ tb. Sonuc. Text = “FD”; } else { tb. Sonuc. Text = “FF”; }
if Aslında. . . if(önerme){ } else{ X if(önerme){ } else{ } } X } else{ }
Notlara devam: Tersten alalım: if(sonuc = = “AA”){ tb. Not. Text = “ 95 - 100 arası”; } else if(sonuc = = “BA”){ tb. Not. Text = “ 90 - 94 arası”; } if(sonuc = = “DC”){ tb. Not. Text = “ 70 - 74 arası”; } else if(sonuc = = “DD”){ tb. Not. Text = “ 65 - 69 arası”; } else if(sonuc = = “BB”) {tb. Not. Text = “ 85 - 94 arası”; } else if (sonuc = = “CB”){ tb. Not. Text = “ 80 - 84 arası”; } else if (sonuc = = CC){ tb. Not. Text = “ 75 - 79 arası”; } else if(sonuc = = “FD”) {tb. Not. Text = “ 60 - 64 arası”; } else if (sonuc = = “FF”){ tb. Not. Text = “ 0 - 59 arası”; } else{ tb. Not. Text = “Böyle bir not yok!”;
Notlara devam: Tersten alalım: switch(sonuc){ if(sonuc = = “AA”){ case “AA”: tb. Not. Text = “ 95 - 100 arası”; } break; else if(sonuc = = “BA”){ case “BA”: tb. Not. Text = “ 90 - 94 arası”; } tb. Not. Text = “ 90 - 94 arası”; else if(sonuc = = “BB”) break; {tb. Not. Text = “ 85 - 94 arası”; case “BB”; } tb. Not. Text = “ 85 - 89 ---arası”; else { break; tb. Not. Text = “Böyle bir not ---yok”; default: } tb. Not. Text = “Böyle bir not yok!” . . . .
int cinslerinden biri, char, string Switch grameri: switch(ifade){ case sabit: ifade; . . . break; case sabit: ifade; break; --- case sabit: ifade; . . . break; default: ifade; --break; } Aynı cins sabit
Tekrarlar o Tekrarlar n n n for while do - while
for for(tarif ve ilk değer; kontrol; değişim){ ifade; ----} for(int i = 0; i < 7; i++){ } Thread. Sleep(100); at();
Tekrarlar for(int i = 0; i < 7; i ++){ Thread. Sleep(100); at(); } int i; for(i = 0; i < 7; i++){ Thread. Sleep(100 ); at(); }
Tekrarlar int i; for(i = 0; i < 7; i++){ Thread. Sleep(100); at(); int i = 0; while(i < 7){ Thread. Sleep(100); at(); i++; } } int i = 0; do{ Thread. Sleep(100); at(); i++; } while(i < 7);
Ödev: Bir Acı sınıfı kuralım o o o 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 – x 3/3! + x 5/5! – x 7/ 7! +. . . 6) Kosinüs hesaplayan bir metot olsun Cos x = 1 – x 2/2! + x 4/4! – x. N/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.
Direnc (1) Direnc isimli bir sınıf yazın. Constructor, ohm cinsinden direnç yazılarak bir direnç nesnesi kursun. Paralel adlı bir metot, iki direnç paralel bağlandığında sonucu versin. Seri adlı bir metot, iki direnç seri bağlandığında sonucu versin. Seri: R = R 1 + R 2 (1) Paralel: 1/R = 1/ R 1 + 1/R 2 (2) veya R = (R 1 R 2)/(R 1 + R 2) (2') İpucu: (Meselâ) şöyle çalışacak: . . . Direnc Rezistans 1 = new Direnc(15. 5); Direnc Rezistans 2 = new Direnc(8. 2); . . . real paralel. Direnc = Rezistans 1. Paralel(Direnc 2. R); real seri. Direnc = Rezistans 1. Seri(Direnc 2. R);
Direnc. . .
public partial class Form 1 : Form { public Form 1() {Initialize. Component(); } Direnc. . . private void Seri_Click(object sender, Event. Args e) { Direnc D 1 = new Direnc(Convert. To. Double(text. Box 1. Text)); Direnc D 2 = new Direnc(Convert. To. Double(text. Box 2. Text)); lbl. Sonuc. Text = "R 1 + R 2 = " + (D 1. Seri(D 2. R)). To. String() + " Ohm"; } private void Paralel_Click(object sender, Event. Args e) { Direnc D 1 = new Direnc(Convert. To. Double(text. Box 1. Text)); Direnc D 2 = new Direnc(Convert. To. Double(text. Box 2. Text)); lbl. Sonuc. Text = "R 1 // R 2 = " + (D 1. Paralel(D 2. R)). To. String() + " Ohm"; } }
public class Direnc { double r; public double R { get { return r; } set { r = value; } public Direnc(double r) { this. r = r; } public double Seri(double Diger. R) { return (r + Diger. R); } public double Paralel(double Diger. R) { return (r * Diger. R / (r + Diger. R)); } }
Gun sınıfı Nesne, haftanın kaçıncı günü olduğu belirtilerek kurulacaktır: “Pazartesi”= 0, “Salı”=1 gibi. Gun sınıfının şu üç metodu olacaktır: Sayiya(), günün kaçıncı gün olduğunu sayıyla verecektir. “Pazartesi” ise 0, Salı ise 1 gibi. . . 0’dan başlayarak. Yaziya(int birsayı), günün ismini verecektir. Topla(int kacgun), kacgün sonra hangi gün olduğunu yazıyla verecektir.
Gun sınıfı
public class Gun { int kacincigun; public int Kacinci. Gun { get { return kacincigun; } public Gun(int kacincigun) { this. kacincigun = kacincigun; } }
Gun. . . public string Topla(int Sonra) { int sonuc; sonuc = (kacincigun + Sonra) % 7; return Yaziya(sonuc); }
public string Yaziya(int ggun) { string str. Gun; switch (ggun) { case 0: str. Gun = "Pazartesi"; break; case 1: str. Gun = "Salı"; break; case 2: str. Gun = "Çarşamba"; break; case 3: str. Gun = "Perşembe"; break; case 4: str. Gun = "Cuma"; break; case 5: str. Gun = "Cumartesi"; break; case 6: str. Gun = "Pazar"; break; default: str. Gun = "Yok böyle gün"; break; } return str. Gun; }
Ay sınıfını laboratuarda yapınız o o Tıpkı gün gibi Aylar 0 - 11 arasında kodlanıyor Sayiya ve Yaziya metotları var Topla metodu var
Aci o Gecen hafta yazdığınız Aci sınıfına iki metot veya property ekleyin: n n Radyana(double derece) Dereceye(double radyan) --Aci Bir. Aci = new Aci(45. 0); --Bir. Aci. Derece(); //Bunun değeri 45. 0 olsun Bir. Aci. Radyan(); // Bunun değeri π/4 olsun. Nasıl yapacağınızı bilmediğim için parametreleri çeşitli yazdım. . .
Hesap Makinesi İlk derslerde yazdığınız hesap makinesi sınıfına üst alma özelliğini ekleyin. Öyle ki makine gerçek sayılarla toplama, çıkarma, çarpma, bölme yapmanın yanı sıra, bir gerçek sayını bir tam sayı üstünü de alsın. Yazacağınız program XY şeklinde X’in Y’inci kuvvetini alacaktır. Y, tam sayıdır. Üst alma metodunda (adı Ust olsun), girilen Y sayısı tam sayı değilse, tam sayıya yuvarlanacaktır. Pozitif değilse de işlemi doğru yapacaktır.
Üst alma public double Ust(double X, int Y){ double sonuc = 1. 0 if(Y > 0){ for(int i = 0; i < Y; i++){ sonuc *= X; } else{ for(int i = 0; i > Y; i--){ sonuc /= X; } return sonuc; }
Ödev Uzaktaki bir cismin bize uzaklığını ölçmek için kullanılan ve temelde iki dürbünden oluşan mesafe tayin cihazı (telemetre) yandaki şekilde şemayla gösterilmiştir. Telemetrenin iki gözü arasındaki uzaklık S, D uzaklığına bakarken dürbünün yaptığı açı B ise D = S/2 tg. B bağıntısı ile uzaklık hesaplanır. (D / (S/2) nin, B açısının tanjantıdır. Bu telemetrenin firmwareinde kullanılacak programı yazacaksınız. Bir telemetre nesnesi, s değeri belirtilerek kurulur.
Telemetre sınıfı Kullanan program (Console veya Windows programı- her ikisini de yazınız. ) Açı hatalıysa: Aci 0’dan kucuk ve 90 dereceden buyuk olamaz. Siz 95. 00000 girdiniz. gibi bir mesaj verecektir. Açı doğruysa Mesafe 2347. 23 santimdir gibi sonuç yazılacaktır.
Telemetre Mesafe(double aci) metodu, derece cinsinden açıyı alıp mesafeyi verir. Açı 90 veya daha büyük, 0 veya daha küçükse Mesafe -1. değerini verir. Kullanan program bundan faydalanarak hata mesajı gönderir: Metot önce açının 0 derece ile 90 derece arasında bulunduğunu kontrol edecek, açı negatif veya 90’a eşit veya 90’dan büyükse -1. 0 verecektir. Açı doğru girilmişse D = S/2 tg(B * 0. 0174533) tg için Math sınıfındaki fonksiyonu veya geçen hafta yazdığınız Aci sınıfını kullanın.
public partial class Tele. Form : Form { public Tele. Form() { Initialize. Component(); } private void btn. Mesafe. Hesapla_Click(object sender, Event. Args e) {---} } public class Telemetre {---} public class Aci {---}
public class Telemetre { double s; public Telemetre(double s) { this. s = s; } public double Mesafe(double dbl. Aci){ if(dbl. Aci <= 0. 0 || dbl. Aci >= 90. 0)return -1. 0; Aci aci. Tele = new Aci(dbl. Aci); return( (s/2. 0)* aci. Tele. Tanjant()); } }
Aci sınıfına ek metot: Tanjant() public class Aci { double radyan; public Aci(double Derece) {---} public double Tanjant() { return this. Sinus() / this. Cosinus(); } public double Sinus() {---} public double Cosinus() {---} }
private void btn. Mesafe. Hesapla_Click(object sender, Event. Args e) { if (tb. Goz. Uzakligi. Text = = "") { Message. Box. Show("Göz uzaklığını gir!"); return; } if (tb. Aci. Text = = "") { Message. Box. Show("Açıyı gir!"); return; } Telemetre obj. Telemetre = new Telemetre(Convert. To. Double(tb. Goz. Uzakligi. Text)) double Uzaklik = obj. Telemetre. Mesafe(Convert. To. Double(tb. Aci. Text)); if (Uzaklik < 0) { Message. Box. Show("Açı sıfırdan büyük ve doksandan küçük olmalı!"); return; } lbl. Sonuc. Text = "Cismin uzaklığı " + Uzaklik. To. String() + "cm dir. "; }
Geçen haftanın Aci sınıfı
public partial class frm. Aci : Form { public frm. Aci() { Initialize. Component(); } private void bt. Hesapla_Click(object sender, Event. Args e) { Aci bir. Aci = new Aci(Convert. To. Double(tb. Giris. Text)); lbl. Math. Sin. Text = (Math. Sin(bir. Aci. Radyan). To. String())+ " Math Sin"; lb. Bizim. Sin. Text = (bir. Aci. Sinus()). To. String() + " Bizim Sin"; lbl. Math. Cos. Text = (Math. Cos(bir. Aci. Radyan)). To. String()+ " Math Cos"; lbl. Bizim. Cos. Text = (bir. Aci. Cosinus()). To. String() + " Bizim Cos"; } }
public class Aci { double radyan; public double Radyan { get { return radyan; } const double faktor = 3. 1415926535897932/ 180. 0; public Aci(double Derece) { radyan = Derece * faktor; }
public double Sinus() {//Sin x = x – x 3/3! + x 5/5! – x 7/ 7! +. . . double sonuc = radyan; double eski = radyan; double epsilon = 1. 0 D - 14; double fark; double terim; for (int i = 3; i < 101; i += 2) { terim = -eski * radyan / (i * (i - 1)); sonuc += terim; fark = terim / sonuc; if (fark < 0) fark = -fark; if (fark < epsilon) { return sonuc; } eski = terim; } return sonuc; }
public double Cosinus() { // Cos x = 1 – x 2/2! + x 4/4! – x. N/N! + … double sonuc = 1. 0; double eski = 1. 0; double epsilon = 1. 0 D - 14; double fark; double terim; for (int i = 2; i < 101; i += 2) { terim = -eski * radyan / (i * (i - 1)); sonuc += terim; fark = terim / sonuc; if (fark < 0) fark = -fark; if (fark < epsilon) { return sonuc; } eski = terim; } return sonuc; }
Diziler Array o Array. List o Hash. Table o Sorted. List o
Array type [] array_identifier = new type[]; string [] Gunler = new string[7]; Gunler[0] = “Pazartesi”; Gunler[1] = “Salı”; Gunler[3] = “Çarşamba” - - veya string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cumartesi”};
Array Avantajlar: o Kolay (her programlama dilinde var) o Hızlı o Üyenin tipini siz belirliyorsunuz Dezavantajlar o Boyu sabit o Araya üye sokmak zor
Gun sınıfında günleri array yapsaydık. . . string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cumartesi”}; public string Yaziya(int ggun) { return Gunler[ggun]; } public int Sayiya(tring gunismi) { return Gunler. Index. Of(gunismi); }
Gun sınıfında günleri array yapsaydık. . . string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cumartesi”}; Gunleri arda yazmak istiyoruz: lbl. Text = “Pazartesi ” + “Salı ” + “ Çarşamba” +- - yerine: lbl. Text = “”; foreach(string gun in Gunler){ lbl. Text += gun; } gun + “ “;
Arraylist Array. List identifier = new Array. List(); Array. List gunler = new Array. List(); Peki boyu belli değil. . . gunler. Add(“Pazartesi”); gunler. Add(“Salı”); gunler[0]. To. String() >>> “Pazartesi” verir.
Arraylist Array. List gunler = new Array. List(); İşe yarayan bazı özellik (property) ve metotlar: gunler. Count >>>> 7 verir (bütün günler girilmişse) gunler. Clear(); gunler. Remove. At(1); gunler. Reverse(); gunler. Sort(); gunler. Remove(“Çarşamba”);
Array. List o o foreach ile çalışır. Her türlü nesneyi taşır Avantajlar: Otomatik boy Üye sokup çıkarmak çok kolay Kolay kullanış Dezavantaj Yavaş
Hashtable Array. List 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”); -- -- --
Hashtable Bir üyeye ulaşmak için: string hangi. Ulke = Ulke[“tr”]; o hangi. Ulke’nin içinde “Türkiye” vardır. o foreach kullanımı: foreach(Dictionary. Entry ulkeler in Ulke){ ---}
Hashtable Avantajlar: o Esnek kullanım o Hızlı bulma. . . Dezavantajlar o Sıraya sokulamaz o Kuruluş yavaş, yeni üye sokmak yavaş
Sorted. List Array. List gibi, fakat eleman eklendikçe otomatik olarak sıraya sokuyor. o 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. . . o
Laboratuvar ve ödev o o o Öğ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, Array. List, Hash. Table ve Sorted. List kullanarak ayrı yapın.
Sınıf ve Ogrenci uygulaması
Sınıf- öğrenci public class Ogrenci { int numarasi; string ismi; Single notu = -1. 0 F; public Single Notu{ get{ return notu; } public Ogrenci(int numarasi, string ismi) { this. numarasi = numarasi; this. ismi = ismi; } public void Notver(Single notu) { this. notu = notu; } }
Sınıf- öğrenci public class Sinif { int ogrenci. Sayisi = 0; public int Ogrenci. Sayisi { get { return ogrenci. Sayisi; } Array. List ogrenciler; public Array. List Ogrenciler{ get { return ogrenciler; } public Sinif(){ ogrenciler = new Array. List(); }
Sınıf- öğrenci public void Kayit(int numarasi, string ismi, Single notu) { Ogrenci bir. Ogrenci = new Ogrenci(numarasi, ismi); ogrenciler. Add(bir. Ogrenci); bir. Ogrenci. Notver(notu); ogrenci. Sayisi++; } public Single Ortalama() { Single ortalama = 0. 0 F; int kacnot = 0; foreach (Ogrenci ogr in ogrenciler) { if (ogr. Notu < 0. 0 F) continue; ortalama += ogr. Notu; kacnot++; } return ortalama / kacnot; }
Asal sayılar
Asal sayılar private void bt. Bul_Click(object sender, Event. Args e) { if (tb. Ilk. Sayi. Text == "" || tb. Son. Sayi. Text == "") { Message. Box. Show("İlk ve son sayiları girmelisiniz"); return; } int ilk = Convert. To. Int 32(tb. Ilk. Sayi. Text); int son = Convert. To. Int 32(tb. Son. Sayi. Text); if (son <= ilk) { Message. Box. Show("Son sayı ilkinden büyük olmalı!"); return; }
Asal sayılar Asal. Sayi asal. Sayilar = new Asal. Sayi(); Array. List sayilar = asal. Sayilar. Asallar(ilk, son); lbl. Asal. Sayilar. Text = ""; if (sayilar. Count == 0) { lbl. Asal. Sayilar. Text = "Bu aralıkta asal sayi yok. "; return; } foreach (int asayi in sayilar) { lbl. Asal. Sayilar. Text += asayi. To. String() + "n"; } // Form’un bt. Bul_Click metodunun sonu
public Array. List Asallar(int ilksayi, int sonsayi) { public class Asal. Sayi for (int i = ilksayi; i <= sonsayi; i++) { bool asal = true; Array. List sayilar; for (int j = 2; j < i; j++) public Asal. Sayi() { sayilar = new Array. List(); if (i / j * j == i) { } asal = false; public int Kac. Tane break; { } get } { if (asal) sayilar. Add(i); return sayilar. Count; } return sayilar; } } // Asal. Sayi sınıfının sonu Asal sayılar
Gerçek problemler: 2) En küçük kareler metodu Fiyat Satış 160 126 180 103 200 82 220 75 240 82 260 40 280 20
…en küçük kareler Yapılması gereken: Kavuniçi parçaların toplamını minimize etmek! Toplamını? . . . Mutlak değerlerinin toplamını veya karelerinin toplamını.
…en küçük kareler Eğrinin denklemi y = ax + b ise farkların karelerinin toplamını en küçük yapacak şekilde a ve b ayarlanmalı. Her xi değeri için fark 2 = (a xi+ b – yi)2 Fark karelerinin toplamı = Σi(a xi+ b – yi)2 En küçük yapmak demek, a ve b’ye göre türev alıp sıfıra eşitlemektir…
…en küçük kareler Fark karelerinin toplamı = Σi(a xi+ b – yi)2 En küçük yapmak demek, a ve b’ye göre türev alıp sıfıra eşitlemektir… a’ya göre: 2 Σixi(a xi+ b – yi) = 0 düzenlersek: a Σixi 2+ b Σixi – Σixiyi = 0 b’ye göre: 2 Σi(a xi+ b – yi) = 0 düzenlersek: a Σi xi+ n b – Σiyi = 0
…en küçük kareler a Σixi 2+ b Σixi = Σixiyi a Σi xi+ b n = Σiyi İki bilinmeyen için iki denklem! Toplamlara isim verelim… Kolay olsun: X 2 = Σixi 2 X = Σixi XY = Σixiyi Y = Σiyi D = X 2 * n – X*X a = (XY * n – X * Y) / D b = (X 2 * Y – X * XY) / D
…en küçük kareler
…en küçük kareler public class Veri. Noktasi { public class Veriler { float x; int verisayisi = 0; public float X{ public int Veri. Sayisi get { return x; get { } return verisayisi; } float y; } public float Y{ Veri. Noktasi[] xvey = new Veri. Noktasi[100]; get { public Veri. Noktasi[] Xve. Y { return y; get { } return xvey; } public Veri. Noktasi(float x, float y) } { public void Ekle(Veri. Noktasi Nokta) { this. x = x; Xve. Y[verisayisi] = Nokta; this. y = y; verisayisi++; } } }
…en küçük kareler public class En. Kucuk { Veriler veri; float x, y, x 2, xy; float a, b; public float ASonuc { get { return a; } public float BSonuc { get { return b; } public En. Kucuk(Veriler veri) { this. veri = veri; } public void Hesapla() { x = 0. 0 f; y = 0. 0 f; x 2 = 0. 0 f; xy = 0. 0 f; float iks; float ye; float d; for (int i = 0; i < veri. Veri. Sayisi; i++) { iks = veri. Xve. Y[i]. X; ye = veri. Xve. Y[i]. Y; x += iks; y += ye; x 2 += iks * iks; xy += iks * ye; } d = x 2 * veri. Veri. Sayisi - x*x; a = (xy * veri. Veri. Sayisi - x * y) / d; b = (x 2 * y - x * xy) / d; } } }
…en küçük kareler namespace En. Kucuk. Kareler { public partial class Form 1 : Form { Veriler verilistesi; public Form 1() { Initialize. Component(); verilistesi = new Veriler(); } private void bt. Kaydet_Click(object sender, Event. Args e) { float x = Convert. To. Single(tb. X. Text); float y = Convert. To. Single(tb. Y. Text); Veri. Noktasi nokta = new Veri. Noktasi(x, y); verilistesi. Ekle(nokta); tb. X. Text = ""; tb. Y. Text = ""; }
…en küçük kareler private void bt. Hesapla_Click(object sender, Event. Args e) { En. Kucuk uydur = new En. Kucuk(verilistesi); uydur. Hesapla(); lbl. Sonuc. Text = "Verilere bir doğru uyduruldu. n"; lbl. Sonuc. Text += "Doğrunun denklemi şöyle: n"; lbl. Sonuc. Text += (uydur. ASonuc). To. String() + " X + "; lbl. Sonuc. Text += (uydur. BSonuc). To. String(); } } //Form sınıfının sonu
İntegral Y fonksiyonunun şekilde gösterilen aralıkta sayısal integralini almak için, şekilde gösterilen yamukların alanları toplanır. Yamukların yükseklikler birbirine eşit ve S'dir. İntegral = - 0. 5 (Y 0 + YN) + S ∑ Yi ler her Xi noktasında fonksiyonun değeridir. YN-1 Y 2 Y 1 Y 0 s S = (YN- Y 0) / N ile bulunur. X 0 YN ----- X 1 X 2 XN-1 XN
İntegral namespace Tamami { public partial class Form 1 : Form { public Form 1() { Initialize. Component(); } private void bt. Hesapla_Click(object sender, Event. Args e) { double birinci = Convert. To. Double(tb. Ilk. Text); double ikinci = Convert. To. Double(tb. Son. Text); int yamuk. S = Convert. To. Int 32(tb. Kac. Text); Tamami integral = new Tamami(birinci, ikinci, yamuk. S); double sonuc = integral. Topla(); lbl. Sonuc. Text = sonuc. To. String(); }
İntegral public class Tamami { double ilkdeger; double sondeger; int kacabol; public Tamami(double ilkdeger, double sondeger, int kacabol) { this. ilkdeger = ilkdeger; this. sondeger = sondeger; this. kacabol = kacabol; } }
İntegral public double Topla() { // İntegral = - 0. 5 (Y 0 + YN) + S ∑ Yi double S = (sondeger - ilkdeger) / (double)kacabol; double integral = 0. 0; double x = 0. 0; for(int i = 0; i < kacabol; i++) { x += S; integral += Fun(x); } integral *= S; integral += -0. 5 * (Fun(ilkdeger) + Fun(sondeger)); return integral; } public double Fun(double x) { return Math. Sin(x); } }
Format o o Yazmada ve okumada sayının, tarihin, diğer yazılanların şeklini yönetemiyorduk. Sayı formatları Tarih formatları Kültür
Sayı formatları o o o o 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: F 10, D 5 gibi. Kendi tasarladığınız formatlar
Tarih formatları o o o o Date. Time, zamanı, 1 Ocak 1900’den bu yana geçen milisaniye sayısını tam sayı olarak tutar. Y 2 K 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
Uygulama:
private void bt. Currency_Click(object sender, Event. Args e) { double sayi = Convert. To. Double(tb. Sayi. Text); lbl. Sayi. Sonuc. Text = sayi. To. String("C"); } private void bt. Fixed_Click(object sender, Event. Args e) { double sayi = Convert. To. Double(tb. Sayi. Text); lbl. Sayi. Sonuc. Text = sayi. To. String("F 10"); } private void bt. Yuzde_Click(object sender, Event. Args e) { double sayi = Convert. To. Double(tb. Sayi. Text); lbl. Sayi. Sonuc. Text = sayi. To. String("P 2"); }
private void bt. Hex_Click(object sender, Event. Args e) { int sayi = (int) Convert. To. Double(tb. Sayi. Text); lbl. Sayi. Sonuc. Text = sayi. To. String("X"); } private void bt. Bilim_Click(object sender, Event. Args e) { double sayi = Convert. To. Double(tb. Sayi. Text); lbl. Sayi. Sonuc. Text = sayi. To. String("E 5"); } private void bt. Custom_Click(object sender, Event. Args e) { double sayi = Convert. To. Double(tb. Sayi. Text); lbl. Sayi. Sonuc. Text = sayi. To. String("0###, ###. #0"); }
Tarih. Zaman (Date. Time) formatları private void btdate_Click(object sender, Event. Args e) { lbl. Tarih. Sonuc. Text = Date. Time. Now. To. String("d"); } private void bt. D_Click(object sender, Event. Args e) { lbl. Tarih. Sonuc. Text = Date. Time. Now. To. String("D"); } private void btt_Click(object sender, Event. Args e) { lbl. Tarih. Sonuc. Text = Date. Time. Now. To. String("t"); }
Tarih. Zaman (Date. Time) formatları. . . private void bt. TT_Click(object sender, Event. Args e) { lbl. Tarih. Sonuc. Text = Date. Time. Now. To. String("T"); } private void bt. M_Click(object sender, Event. Args e) { lbl. Tarih. Sonuc. Text = Date. Time. Now. To. String("M"); } private void bt. F_Click(object sender, Event. Args e) { lbl. Tarih. Sonuc. Text = Date. Time. Now. To. String("F"); }
. . . ve Kültür o o o İki sembol: xx - XX tr - TR en - US ru - RU ar - SA İki assembly gerekiyor: using System. Globalization using System. Threading
private void bt. Turk_Click(object sender, Event. Args e) { Thread. Current. Culture = new Culture. Info("tr-TR", false); } private void bt. Amerikan_Click(object sender, Event. Args e) { Thread. Current. Culture = new Culture. Info("en-US", false); } private void bt. Rus_Click(object sender, Event. Args e) { Thread. Current. Culture = new Culture. Info("ru-RU", false); } private void bt. Arap_Click(object sender, Event. Args e) { Thread. Current. Culture = new Culture. Info("ar-SA", false); }
Okur yazarlık o o Niçin okuma ve yazma öğrenmeliyiz? Okuma, yazmaya bakış: bit akışı byte akışı bit stream byte stream 01001101001 23 A 4 C 2 4 F Alt seviye karakter akışı kayıt (satır) dosya character str record(line) file Neha Ne haber? Haber. doc Üst seviye Bodruma gider
Nasıl? o o o using System. IO Stream, File Directory
Uygulama
File sınıfı private void bt. Dosya. Yarat_Click(object sender, Event. Args e) { if (tb. Dosya. Ismi. Text == "") { lbl. Sonuc. Text = "Dosya ismi yok!"; return; } if(File. Exists(tb. Dosya. Ismi. Text)) { lbl. Sonuc. Text = tb. Dosya. Ismi. Text + " dosyası zaten var. "; return; } File. Create(tb. Dosya. Ismi. Text); lbl. Sonuc. Text = tb. Dosya. Ismi. Text + " içine yazmaya hazır. "; }
Okuma ve yazma private void bt. Kaydet_Click(object sender, Event. Args e) { if (tb. Dosya. Ismi. Text == "") { lbl. Sonuc. Text = "Hangi dosyaya yazacağım? "; } File. Append. All. Text(tb. Dosya. Ismi. Text, tb. Yazi. Kutusu. Text); lbl. Metin. Text = "Yazı başarıyla kaydedildi. Baaak: nn" + File. Read. All. Text(tb. Dosya. Ismi. Text); }
Veri tabanları ile konuşma o o Veri tabanı? İlişkili Veri Tabanı Relational Data Base Tablo(lar) Tarih Kayıt Başlık Alan (Field) Konu 1 Konu 2 07. 05. 2007 İbo Yozgat’ta Sosyete Müzik konser veriyor Metin Önümüzdeki Cumartesi İbrahim Tatlıses Yozgat’ta iki saatlik bir konser verecek
Örnek problem: Haber veri tabanı
Haber: Kullanıcı Ara Yüzü Konu seçimi Başlık Resim Metin
public class Haber { static string Veri. Tabani = "Provider=Microsoft. Jet. Ole. Db. 4. 0; " + " Data Source= " + @". Haberler. mdb"; string baslik; public string Baslik { get { return baslik; } string konu; public string Konu { get { return konu; }
string metin; public string Metin { get { return metin; } string resim; public string Resim { get { return resim; }
public Haber(string konu) { this. konu = konu; Ole. Db. Connection obj. Baglanti = new Ole. Db. Connection(Veri. Tabani); string str. SQLSoru = "SELECT * FROM Ne. Oldu WHERE Konu = '“ + konu + "'" ; Ole. Db. Command obj. Komut = new Ole. Db. Command(str. SQLSoru, obj. Baglanti); obj. Baglanti. Open(); Ole. Db. Data. Reader obj. Veri. Okuyucu = obj. Komut. Execute. Reader(); obj. Veri. Okuyucu. Read(); baslik = obj. Veri. Okuyucu["Baslik"]. To. String(); metin = obj. Veri. Okuyucu["Metin"]. To. String(); resim = obj. Veri. Okuyucu["Resim"]. To. String(); obj. Veri. Okuyucu. Close(); obj. Baglanti. Close(); }
Form’dakiler. . . private void Form 1_Load(object sender, Event. Args e) { string[] konular = { "", "Müzik", "Sosyete", "Siyaset", "Film" }; c. Box. Konu. Data. Source = konular; }
Form’dakiler. . . private void c. Box. Konu_Selected. Index. Changed( object sender, Event. Args e) { string Ne. Konuda = c. Box. Konu. Text; if (Ne. Konuda == "") return; Haber Yeni. Haber = new Haber(Ne. Konuda); lbl. Baslik. Text = Yeni. Haber. Baslik; lbl. Metin. Text = Yeni. Haber. Metin; pb. Resim. Image. Location = Yeni. Haber. Resim; }
Web Sunucu (Apache, IIS, vs. ) Talep (Request) que (Re ep e) Sunucu ile tarayıcının konuştuğu dil: HTML: Hyper Text Mark-up Language ons Http Response esp (R Http Request Tal vap Ce Cevap (Response) Internet Client Browser (IE, Firefox, Opera, vs. )
Web sayfası
ASP. Net Web sayfası <%@ Page Language="C#" Auto. Event. Wireup="true" Code. File="Default. aspx. cs" Inherits="_Default" %>