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

başlıkk 11111

Embed Size (px)

Citation preview

Page 1: başlıkk 11111

C#

Prof. Dr. İskender ÖksüzAraştırma Görevlisi Alpay Şahin

Beginning Visual C# 2010, Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon Reid, Morgan Skinner, Wrox- Wiley 2010

Page 2: başlıkk 11111

1 Bilgisayar programlama:

Programlama dilleri, makine dili, yüksek düzey dillerDerleyici, "source", "object", "link" kavramları.Algoritma, bir programın hayat hikâyesi

Page 3: başlıkk 11111

Şimdi buna "işlemci" veya "mikroprosesör" diyoruz

Von Neumann bilgisayarı

Ana Hafıza

(RAM)

Main

Memory

Aritmetik ve Mantık Birimi

Arithmetic and Logic Unit

Program Kontrol Birimi

Program Control Unit

Giriş- Çıkış

Cihazları

Input

Output

Equipment

Page 4: başlıkk 11111

Makine diliX = A * B + C1) 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.

Page 5: başlıkk 11111

Makine diliX = A * B + C

Opcode Operand1) 00010000000000000000010000000000 (A’daki değeri reg. yükle)

Hex: 08 00 04 002) 00100100000000000000010000000001 (B’deki değerle çarp)

Hex: 24 00 04 01 3) 00100011000000000000010000000010 (C’deki değeri reg. ile topla)

Hex: 23 00 04 02 4) 00010001000000000000010000000011 (Registerdeki değeri X’e taşı)

Hex: 11 00 04 03

İki tabanındaki sayılar : 0, 1Ondalık sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Page 6: başlıkk 11111

Biraz daha hexOndalık Hex Hex Ondalık1 = 110 = A36 = 24 A5 = 165147 = 93 DD = 221255 = FF

Page 7: başlıkk 11111

Makine dili - AssemblerX = A * B + C

08 00 04 0024 00 04 01 23 00 04 0211 00 04 03

MOV A, ACCMUL B, ACCADD C, ACCSTO ACC, X

Page 8: başlıkk 11111

Yüksek seviye dilleri?

X = A * B + C

X = A * B + C

LET X = A * B + C

Page 9: başlıkk 11111

Üst seviye dili FORTRAN C Pascal Basic C++ Java C#

Üst seviye dili

Derleyici (compiler)(Scriptlerde yok)

Makine dili

Page 10: başlıkk 11111
Page 11: başlıkk 11111
Page 12: başlıkk 11111
Page 13: başlıkk 11111
Page 14: başlıkk 11111
Page 15: başlıkk 11111

http://www.digibarn.com/collections/posters/tongues/tongues.jpg

Page 16: başlıkk 11111

Derleme (Compilation)

Üst seviye dili

Derleyici (compiler)(Scriptlerde yok)

Makine dili

X = A * B + C

08 00 04 00

24 00 04 01

23 00 04 02

11 00 04 03

Ara dil (Java, C#)

Kaynak kod(Source code)

Source module

Object code

Object module

Page 17: başlıkk 11111

Bitti mi?

Object program

Okumaprogramı

Ekrana yazmaprogramı

… programı

… programı

Bağlama- link

İcra edilebilir program: Executable

Çarp_Topla.exedll : dynamic link library

Page 18: başlıkk 11111

Hatalar:

Derleme hataları (Compiler error)

Bağlama hataları (Falan modülü bulamadım)

İcra hataları (Run time error)

Page 19: başlıkk 11111

İ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

Page 20: başlıkk 11111

A * B Hesap makinesi devam... public class HesapMakinesi { 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.ToString(); } }

Page 21: başlıkk 11111

A * B Hesap makinesi devam... 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(); } }

Page 22: başlıkk 11111

Tepeden bakış:namespace KaraEkranÇarpmaMakinesi{

class Program { static void Main() {

......... }

}public class HesapMakinesi {

.......... }

}

Page 23: başlıkk 11111

A * B Hesap makinesi devam... class Program { static void Main() { Console.WriteLine("Çarpacağınız birinci tam sayıyı giriniz:"); HesapMakinesi HM = new HesapMakinesi(); HM.Birinci = Console.ReadLine(); Console.WriteLine("Çarpacağınız iknci tam sayıyı giriniz:"); HM.Ikinci = Console.ReadLine(); HM.Carp(); Console.WriteLine(HM.Sonuc); Console.WriteLine("İşte sonuç! Nasıl ama!"); Console.Read(); } }

Page 24: başlıkk 11111

2. C# programcılığına giriş

Değişken tipleri:intint birinciSayi;birinciSayi = 1256;

SabitDeğişken

Atama

string

string strBirinci;

strBirinci = “Gaziantep”

SabitDeğişken

Atama

Page 25: başlıkk 11111

Tipler (types) 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 birinciSayi;

birinciSayi = 1256;int birinciSayi = 1256;

string strBirinci = “Bu takım” string strBirinci;

strBirinci = “Bu takım”

Page 26: başlıkk 11111

Tiplerint birinciSayi = 1256;

long uzunTamSayi= 12345678901..

float Avagadro = 6.02E23

double piSayisi= 3.141592653589

string strBirinci = “Bu takım”

char uUml = 'ü'

bool dogruMu = false

Page 27: başlıkk 11111

C# veri tipleriTip Bit? Değerler

bool 8 true – false

char 16 ‘\u0000’ - ‘\uFFFF’

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

Tip Bit? Değerler

uint 32 0 – 4.294.967.295

ulong 64 264 - 1

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

Page 28: başlıkk 11111

Atama ifadesi: Assignment statement

=variable = expressionobject = expression

Page 29: başlıkk 11111

OperatörlerAritmetik operatörleri

Operatör C# ifadesi

+ f + 7

- p - c

* b * m

/ x / y

% x % s

Mantık operatörleri

Operatör C# ifadesi

= = x = = y

!= x != y

> x > y

< x < y

>= x >= y

<= x <= y

Page 30: başlıkk 11111

Not:

= ile diğer operatörler birleştirilebilir:

a = a + b yerine a += ba = a / b yerine a /= b

Page 31: başlıkk 11111

Operatörler devam...Operatör C# ifadesi

&& bool a && bool b

|| bool a || bool b

++ a++ veya ++a

-- a-- veya --a

<< >> & | bitlerle oynama

Page 32: başlıkk 11111

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

/* ve */

/* y ile

z’yi topluyorum*/

En önemli işaret: a = x + y

Boşluk!

Page 33: başlıkk 11111

Operatör öncelikleri (operator precedence)

Önce parantez içleri Sonra soldan sağa * ve / ve % işlemleri Sonra soldan sağa + ve – işlemleri

Page 34: başlıkk 11111

•İşlem Öncelikleri (Örnek)

1. Adım

2. Adım

5. Adım

3. Adım

4. Adım

6.Adım

y = 2 * 5 * 5 + 3 * 5 + 7;

2 * 5 = 10 (En soldaki çarpma)

y = 10 * 5 + 3 * 5 + 7;

10 * 5 = 50 (En soldaki çarpma)

y = 50 + 3 * 5 + 7;3 * 5 = 15 (Toplamadan önceki çarpma)

y = 50 + 15 + 7;

50 + 15 = 65 (En soldaki toplama)

y = 65 + 7;

65 + 7 = 72 (Son toplama)

y = 72; (Son işlem 72 değeri y değişkenine aktarılır)

Mehmet Ali Hoca’dan

Page 35: başlıkk 11111

• Değişkenleri, nesneleri isimlendirme (Kimlikleyiciler ~ identifiers)

İsim vermede kurallar ve tavsiyeler

C# anahtar kelimeleri

Mehmet Ali Hoca’dan

Page 36: başlıkk 11111

Kurallar ve Öneriler Kurallar

İlk karakter harfler, altçizgi Daha sonraki karakterler rakam olabilir

Ö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.

farkFarkfarkFark

Cevap4242CevapCevap4242Cevap

KOTUSONUC_KotuSonucKotuSonuckotuSonuc

KOTUSONUC_KotuSonucKotuSonuckotuSonuc

MsjMesajMsjMesaj

Mehmet Ali Hoca’dan

Page 37: başlıkk 11111

C# Anahtar kelimeleriKeyword’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)

abstract, base, bool, default, if, finallyabstract, base, bool, default, if, finally

int INT; // Kötü Kullanımint INT; // Kötü Kullanım

Mehmet Ali Hoca’dan

Page 38: başlıkk 11111

Soru: Geçerli olmayan veya tavsiye edilmeyen kimliklemeleri bulunuz.

char $diskFiyat;char $diskFiyat;

char ortaDeger;char ortaDeger;

int 12sayi;int 12sayi;

float BUDEGER;float BUDEGER;

2222

3333

4444

1111

int __ilkDeger;int __ilkDeger;5555

Mehmet Ali Hoca’dan

Page 39: başlıkk 11111

Programlama paradigmaları

Batch Etkileşimli - olayların sürdüğü (event

driven)

Prosedürel-> yapılı (structured) Nesneye yönelik

(Object oriented- OOP)

Page 40: başlıkk 11111

Sınıf- nesne (class- object) Veri- değişkenler Metotlar

Veri üzerinde yapılacak işlemler

(Encapsulation) Sınıf = plan Nesne = plana göre inşa edilmiş yapı

Page 41: başlıkk 11111

Hesap makinesi?

Veriler ne? Birinci değer İkinci değer İşlemi belirten bişiy

Metotlar ne? İnşa Carpma, Bölme Toplama Çıkarma

Page 42: başlıkk 11111

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

Page 43: başlıkk 11111

A * B Hesap makinesi devam...

public class CarpmaMakinesi { // Özellikler public double Birinci; public double Ikinci;

// Metot(lar) public double Carp() { return Birinci * Ikinci; } }

Page 44: başlıkk 11111

namespace CarpmaMakinesi{ class Program { static void Main() { double IlkSayi, IkinciSayi; IlkSayi = double.Parse(Console.ReadLine()); IkinciSayi = double.Parse(Console.ReadLine()); CarpmaMakinesi Makinemiz = new CarpmaMakinesi(); Makinemiz.Birinci = IlkSayi; Makinemiz.Ikinci = IkinciSayi; Console.WriteLine

("İşte sonuç ağalar:" + Makinemiz.Carp()); } } public class CarpmaMakinesi{}}

public class CarpmaMakinesi { public double Birinci; public double Ikinci;

public double Carp() { return Birinci * Ikinci; } }

Page 45: başlıkk 11111
Page 46: başlıkk 11111

Windows için ne yapmalıyız?

public class CarpmaMakinesi { public double Birinci; public double Ikinci;

public double Carp() { return Birinci * Ikinci; } }

public class CarpmaMakinesi { public double Birinci; public double Ikinci;

public double Carp() { return Birinci * Ikinci; } }

Aradaki 7 farkı bulunuz!

Page 47: başlıkk 11111
Page 48: başlıkk 11111

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; }

}}

Page 49: başlıkk 11111

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; } }

Sınıf(Class) Nesne

(Object)

Page 50: başlıkk 11111

public class HesapMakinesi

{

public string Birinci, Ikinci, Islem, Sonuc;

int a, b, c;

public void Carp()

{

a = int.Parse(Birinci);

b = int.Parse (Ikinci);

c = (a * b);

Sonuc = c.ToString();

}........................

}

public variables

private variables

metot

Page 51: başlıkk 11111

static void Main(string[] args)

{

HesapMakinesi.Birinci = Console.ReadLine();

HesapMakinesi.Islem = Console.ReadLine();

HesapMakinesi.Ikinci = Console.ReadLine();

if (HesapMakinesi.Islem == "x") HesapMakinesi.Carp();

if (HesapMakinesi.Islem == "/") HesapMakinesi.Bol();

if (HesapMakinesi.Islem == "+") HesapMakinesi.Topla();

if (HesapMakinesi.Islem == "-") HesapMakinesi.Cikar();

Console.WriteLine(HesapMakinesi.Sonuc);

Console.ReadLine();

}X

Page 52: başlıkk 11111

static void Main(string[] args)

{

HesapMakinesi HM = new HesapMakinesi();

HM.Birinci = Console.ReadLine();

HM.Islem = Console.ReadLine();

HM.Ikinci = Console.ReadLine();

if (HM.Islem == "x") HM.Carp();

if (HM.Islem == "/") HM.Bol();

if (HM.Islem == "+") HM.Topla();

if (HM.Islem == "-") HM.Cikar();

Console.WriteLine(HM.Sonuc);

Console.ReadLine();

}

Page 53: başlıkk 11111

using System;namespace HesapMakinesi{ class Program { static void Main(string[] args) { HesapMakinesi HM = new HesapMakinesi();

.............. }

} public class HesapMakinesi { değişkenler public void Carp() {

........... } metotlar

}}

Page 54: başlıkk 11111

Laboratuar ödevi: 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.

Page 55: başlıkk 11111

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: غ

Page 56: başlıkk 11111

Ö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 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.

Page 57: başlıkk 11111

ax2 + bx + c = 0Değişkenlera, b, c, x1, x2, delta, kokDelta

Metotlar:“constructor”private diskriminantHesaplapublic KokleriHesapla

Page 58: başlıkk 11111

Değişkenler: a, b, c, x1, x2, delta, kokDelta

class IkinciDerece{double a, b, c, x1, x2, delta, kokDelta;

}

Page 59: başlıkk 11111

Metotlar: “constructor”, diskriminantHesapla, KokleriHesapla

class IkinciDerece{double a, b, c, x1, x2, delta, kokDelta;double diskriminantHesapla{

delta = b * b - 4.* a * c;return Math.Sqrt(delta);

}public void KokleriHesapla{

kokDelta = diskriminantHesapla();x1 = (-b + kokDelta) / (2.*a);x2 = (-b - kokDelta) / (2.*a);

}}

Page 60: başlıkk 11111

class IkinciDerece{double a, b, c, x1, x2, delta, kokDelta;bool gercek ;double diskriminantHesapla{

delta = b * b - 4.* a * c;if(delta < 0) { gercek = false; return Math.Sqrt(-delta);}gercek = true;return Math.Sqrt(delta);

}}

Page 61: başlıkk 11111

class IkinciDerece{double a, b, c, x1, x2, delta, kokDelta;bool gercek ;double diskriminantHesapla{

delta = b * b - 4.* a * c;if(delta < 0) { gercek = false; return Math.Sqrt(-delta);}else{

gercek = true;return Math.Sqrt(delta);

}}

}

Page 62: başlıkk 11111

public void KokleriHesapla(){kokDelta = diskriminantHesapla();if(gercek){

xR1 = (-b + kokDelta) / (2.*a);xR2 = (-b - kokDelta) / (2.*a);

}else{

xR1 = -b / (2 * a); xR2 = xR1;xI1 = kokDelta / (2. * a); xI2 = - xI1;

}}

double a, b, c, xR1, xI1, xR2, xI2, delta, kokDelta;bool gercek ;

Page 63: başlıkk 11111

...IkinciDerece Denklem = new IkinciDerece();Denklem.a = 2;Denklem.b = -19.;Denklem.c = 35;Denklem.KokleriHesapla();... Denklem.xR1, Denklem.xR2, ...

..........................................class IkinciDerece{

double a, b, c, xR1, xI1, xR2, xI2, delta, kokDelta;bool gercek ;double diskriminantHesapla{...}public void KokleriHesapla{...}

}

X

Page 64: başlıkk 11111

Nesnenin değişkenlerinin dışardan kullanılması

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.

Page 65: başlıkk 11111

...IkinciDerece Denklem = new IkinciDerece();Denklem.A = 2;Denklem.B = -19.;Denklem.C = 35;Denklem.KokleriHesapla();... Denklem.XR1, Denklem.XR2, ...

..........................................

class IkinciDerece{public double A, B, C, XR1, XI1, XR2, XI2private double a, b, c, xR1, xI1, xR2, xI2, delta, kokDelta; private bool gercek ;private double diskriminantHesapla(){...}public void KokleriHesapla(){...}

}

Page 66: başlıkk 11111

A a; B b; C c değerleri nasıl geçirilecek? 1. Metotlarda gerektikçe (Q&D yöntem) :public void KokleriHesapla(){

kokDelta = diskriminantHesapla();if(gercek){

xR1 = (-b + kokDelta) / (2.*a);xR2 = (-b - kokDelta) / (2.*a);

}else{

xR1 = -b / (2 * a); xR2 = xR1;xI1 = kokDelta / (2. * a); xI2 = - xI1;

}XR1= xR1; XI1 = xI1; XR2 = xR2; XI2 = xI2;

}

Page 67: başlıkk 11111

2. Namuslu yöntem:private double a; public double A{

get{ return a;}set{ a = value;}

}

A a; B b; C c değerleri nasıl geçirilecek?

Page 68: başlıkk 11111

“Get”, “Set” başka işlere de yarar 2. Namuslu yöntem:

private double a; public string A{

get{ return a.ToString();}set{ a = Convert.ToDouble(value);}

}

Page 69: başlıkk 11111

Özet 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: InstantiationHer nesne bir sınıfın bir “instance”ıdır.

Page 70: başlıkk 11111

Sınıflarpublic/private sınıf_adı {

public/private type değişkenler public/private sınıflar public/private type metotlar

}

Page 71: başlıkk 11111

Sınıf değişkenleri 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.

Page 72: başlıkk 11111

Sınıf değişkenleri... devam…HM.A = 3.12;...Sonuc = HM.X1R...public class HesapMakinesi{

public double A, X1R;private double a, x1R;

public/private BirMetot(){a = A;

}}

Page 73: başlıkk 11111

Doğrusu:…HM.A = 3.12;...Sonuc = HM.A...public class HesapMakinesi{

private double a;public double A{

get{return a;

}set{

a = value;}

} }

Page 74: başlıkk 11111

Sınıf değişkenleri... devam 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.

Page 75: başlıkk 11111

MetotlarSı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 ();

Page 76: başlıkk 11111

Özel bir sınıf cinsi: static Console.ReadLine(); public static Main(){

...}

Yüklendiği anda object olarak inşa edilir. Tek kopyası vardır.

Instance- instantiation

Page 77: başlıkk 11111

Özel bir metot cinsi: Constructor HesapMakinesi HM = new HesapMakinesi();

Sınıfla aynı ismi taşır. Tipsizdir (return değeri ve tipi yoktur). Parametreleri bulunabilir.

Constructor

Page 78: başlıkk 11111

Constructor... devamIkinciDerece Denklem = new IkinciDerece();yerineIkinciDerece 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;}.........

}

Page 79: başlıkk 11111

Constructor... devamBazen ş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;

}.........

}

Page 80: başlıkk 11111

Biraz eğlenelim: Zar atmak...

Page 81: başlıkk 11111

Önce fotoğrafları bulalım ve debug klasörüne yerleştirelim.

1.png

2.png

3.png

4.png

5.png

6.png

Page 82: başlıkk 11111

public class Zar{ int yuz; PictureBox hangiKutu; Random rastgele; public Zar(PictureBox HangiKutu) { rastgele = new Random(); hangiKutu = HangiKutu; }

public void at() { yuz = rastgele.Next( 1, 7); hangiKutu.Load(yuz.ToString() + ".png"); hangiKutu.Refresh(); }}

Page 83: başlıkk 11111

Visual Studio Windows Form Form1

button1

picboxZar1

Page 84: başlıkk 11111

public partial class Form1 : Form { Zar zarBir;

public Form1() { InitializeComponent(); }

private void Form1_Load(object sender, EventArgs e) {

zarBir = new zar(picboxZar1); zarBir.at(); }

private void button1_Click(object sender, EventArgs e) { zarBir.at(); }}

Page 85: başlıkk 11111

Deneyim Bakiim...

Bir zar

Page 86: başlıkk 11111

İki zar yapıp tavla oynayalım...public partial class Form1 : Form { Zar zarBir;

Zar zarIki; public Form1(){InitializeComponent();}

private void Form1_Load(object sender, EventArgs e) {zarBir = new zar(picboxZar1);

zarBir.at(); zarIki = new zar(picboxZar2);zarIki.at();

} private void button1_Click(object sender, EventArgs e) { zarBir.at();

zarIki.at(); }}

Page 87: başlıkk 11111

Formdaki ilaveler

İki zar

Page 88: başlıkk 11111

Sizin laboratuarda yapmanızı istediğim

Oyun makinesi

Bir böcü temizleme görevi: Niçin çok kazanılıyor?

Page 89: başlıkk 11111

İpucu: public void Yuvarla(PictureBox pbox) { at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); }

Page 90: başlıkk 11111

public void Yuvarla(PictureBox pbox) { at();

for(int i = 0; i < 7; i = i +1){ Thread.Sleep(100); at(); }

}

public void Yuvarla(PictureBox pbox) { at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); Thread.Sleep(100); at(); }

i += 1i++

Page 91: başlıkk 11111

Akış kontrolu: Dallanmalar

if switch ?

Tekrarlar for while do - while

Page 92: başlıkk 11111

ifif(önerme) ifade;

if(önerme){ifade;ifadeifade....

}

if( a > b) x = Math.Sqrt(a-b);

if( a > b){

x = a * a - b * b;

y = Math.Sqrt(x);

}

Page 93: başlıkk 11111

if

print “Passed”Grade >= 60true

false

if(grade >= 60) tbSonuc.Text = “Geçti”;

if(grade >= 60){tbSonuc.Text = “Geçti”;

}

Page 94: başlıkk 11111

ifif(önerme) ifade;

else ifade;

if(önerme){ifade;ifade;....

}else{

ifade;ifade:.....

{

if( a > b) x = Math.Sqrt(a-b);else x = Math.Sqrt(b-a);

if( a > b){x = a * a - b * b;y = Math.Sqrt(x);

}else{

x = b * b - a * a;y = Math.Sqrt(x);

}

Page 95: başlıkk 11111

if

if(grade >= 60) tbSonuc.Text = “Geçti”;else tbSonuc.Text = “Kaldı”;

if(grade >= 60){tbSonuc.Text = “Geçti”;

}else{

tbSonuc.Text = “Kaldı”;}

Grade >= 60

print “Passed”print “Failed”

false true

tbSonuc = (grade >= 60 ? “Geçti”: “Kaldı”)

Page 96: başlıkk 11111

?if(grade >= 90){

tbSonuc.Text = “AA”;}else{

tbSonuc.Text = “BA”;}

ifPeki, geçti ve kaldıdan başka sonuç yok mu?95’in üstündeyse AA ver, altındaysa BA ver.

if(grade >= 95){tbSonuc.Text = “AA”;

}else if(grade >= 90{

tbSonuc.Text = “BA”;}else if(grade >= 70{....

Page 97: başlıkk 11111

ifif(grade >= 95){

tbSonuc.Text = “AA”;}else if(grade >= 90){

tbSonuc.Text = “BA”;}else if(grade >= 85){

tbSonuc.Text = “BB”;}else if (grade >= 80){

tbSonuc.Text = “CB”;}else if (grade >= 75){

tbSonuc.Text = “CC”;}

if(grade >= 70){tbSonuc.Text = “DC”;

}else if(grade >= 65){

tbSonuc.Text = “DD”;}else if(grade >= 60){

tbSonuc.Text = “FD”;}else {

tbSonuc.Text = “FF”;}

Page 98: başlıkk 11111

ifAslında...

if(önerme){

}else{

}

if(önerme){

}else{

}

X

X

if(önerme){

}else if(önerme){

}else{

}

Page 99: başlıkk 11111

Notlara devam: Tersten alalım:if(sonuc = = “AA”){

tbNot.Text = “95- 100 arası”;}else if(sonuc = = “BA”){

tbNot.Text = “90- 94 arası”;}

else if(sonuc = = “BB”){tbNot.Text = “85- 94 arası”;

}else if (sonuc = = “CB”){

tbNot.Text = “80- 84 arası”;}else if (sonuc = = CC){

tbNot.Text = “75- 79 arası”;}

if(sonuc = = “DC”){tbNot.Text = “70- 74 arası”;

}else if(sonuc = = “DD”){

tbNot.Text = “65- 69 arası”;}

else if(sonuc = = “FD”){tbNot.Text = “60- 64 arası”;

}else if (sonuc = = “FF”){

tbNot.Text = “0- 59 arası”;}else{

tbNot.Text = “Böyle bir not yok!”;

}

Page 100: başlıkk 11111

Notlara devam: Tersten alalım:if(sonuc = = “AA”){

tbNot.Text = “95- 100 arası”;}else if(sonuc = = “BA”){

tbNot.Text = “90- 94 arası”;}

else if(sonuc = = “BB”){tbNot.Text = “85- 94 arası”;

}----else {

tbNot.Text = “Böyle bir not yok”;

}.......

switch(sonuc){case “AA”:

tbNot.Text = “95- 100 arası”;break;

case “BA”:

tbNot.Text = “90- 94 arası”;

break;case “BB”;

tbNot.Text = “85- 89 arası”;

break;----default:

tbNot.Text = “Böyle bir not yok!” }

Page 101: başlıkk 11111

Switch grameri:switch(ifade){

case sabit:ifade;ifade;...break;

case sabit:ifade;ifade;break;

---

case sabit:ifade;ifade;...break;

default:ifade;ifade;---

break;}

int cinslerinden biri, char, string

Aynı cins sabit

Page 102: başlıkk 11111

Tekrarlar Tekrarlar

for while do - while

Page 103: başlıkk 11111

forfor(tarif ve ilk değer; kontrol; değişim){

ifade;ifade;-----

}

for(int i = 0; i < 7; i++){Thread.Sleep(100);at();

}

Page 104: başlıkk 11111

Tekrarlarfor(int i = 0; i < 7; i ++){

Thread.Sleep(100);at();

}

int i;for(i = 0; i < 7; i++){

Thread.Sleep(100);at();

}

Page 105: başlıkk 11111

Tekrarlarint 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);

Page 106: başlıkk 11111

Ödev: Bir Acı sınıfı kuralım 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.

Page 107: başlıkk 11111

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 = R1 + R2 (1)

Paralel: 1/R = 1/ R1 + 1/R2 (2)

veya R = (R1R2)/(R1 + R2) (2')

İpucu:(Meselâ) şöyle çalışacak:.....Direnc Rezistans1 = new Direnc(15.5);Direnc Rezistans2 = new Direnc(8.2);...real paralelDirenc = Rezistans1.Paralel(Direnc2.R);real seriDirenc = Rezistans1.Seri(Direnc2.R);

Page 108: başlıkk 11111

Direnc...

Page 109: başlıkk 11111

Direnc... public partial class Form1 : Form { public Form1() {InitializeComponent();}

private void Seri_Click(object sender, EventArgs e) { Direnc D1 = new Direnc(Convert.ToDouble(textBox1.Text)); Direnc D2 = new Direnc(Convert.ToDouble(textBox2.Text)); lblSonuc.Text = "R1 + R2 = " + (D1.Seri(D2.R)).ToString() + " Ohm"; }

private void Paralel_Click(object sender, EventArgs e) { Direnc D1 = new Direnc(Convert.ToDouble(textBox1.Text)); Direnc D2 = new Direnc(Convert.ToDouble(textBox2.Text)); lblSonuc.Text = "R1 // R2 = " + (D1.Paralel(D2.R)).ToString() + " Ohm"; } }

Page 110: başlıkk 11111

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 DigerR) { return (r + DigerR); }public double Paralel(double DigerR) { return (r * DigerR / (r + DigerR)); }}

Page 111: başlıkk 11111

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.

Page 112: başlıkk 11111

Gun sınıfı

Page 113: başlıkk 11111

public class Gun { int kacincigun; public int KacinciGun { get { return kacincigun; } } public Gun(int kacincigun) { this.kacincigun = kacincigun; }}

Page 114: başlıkk 11111

Gun...

public string Topla(int Sonra)

{

int sonuc;

sonuc = (kacincigun + Sonra) % 7;

return Yaziya(sonuc);

}

Page 115: başlıkk 11111

public int Sayiya(string gunismi) { int hangiGun; switch (gunismi) { case "Pazartesi": hangiGun = 0; break; case "Salı": hangiGun = 1; break; case "Çarşamba": hangiGun = 2; break; case "Perşembe": hangiGun = 3; break;

case "Cuma": hangiGun = 4; break; case "Cumartesi": hangiGun = 5; break; case "Pazar": hangiGun = 6; break; default: hangiGun = -1; break; } return hangiGun; }

Page 116: başlıkk 11111

public string Yaziya(int ggun) { string strGun; switch (ggun) { case 0: strGun = "Pazartesi"; break; case 1: strGun = "Salı"; break; case 2: strGun = "Çarşamba"; break; case 3: strGun = "Perşembe"; break;

case 4: strGun = "Cuma"; break; case 5: strGun =

"Cumartesi"; break; case 6: strGun = "Pazar"; break; default: strGun = "Yok

böyle gün"; break; } return strGun; }

Page 117: başlıkk 11111

Ay sınıfını laboratuarda yapınız Tıpkı gün gibi Aylar 0- 11 arasında kodlanıyor Sayiya ve Yaziya metotları var Topla metodu var

Page 118: başlıkk 11111

Aci 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 olsunBirAci.Radyan(); // Bunun değeri π/4 olsun.

Nasıl yapacağınızı bilmediğim için parametreleri çeşitli yazdım...

Page 119: başlıkk 11111

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.

Page 120: başlıkk 11111

Üst almapublic double Ust(double X, int Y){

double sonuc = 1.0if(Y > 0){

for(int i = 0; i < Y; i++){sonuc *= X;

}else{

for(int i = 0; i > Y; i--){sonuc /= X;

}return sonuc;

}

Page 121: başlıkk 11111

Ö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 tgB

bağıntısı ile uzaklık hesaplanır. (D / (S/2) nin, B açısının tanjantıdırBu telemetrenin firmwareinde kullanılacak programı yazacaksınız.

Bir telemetre nesnesi, s değeri belirtilerek kurulur.

Page 122: başlıkk 11111

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.

Page 123: başlıkk 11111

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.

Page 124: başlıkk 11111
Page 125: başlıkk 11111

public partial class TeleForm : Form { public TeleForm() { InitializeComponent(); }

private void btnMesafeHesapla_Click(object sender, EventArgs e) {---}

}

public class Telemetre {---}

public class Aci {---}

Page 126: başlıkk 11111

public class Telemetre { double s; public Telemetre(double s) { this.s = s; } public double Mesafe(double dblAci){ if(dblAci <= 0.0 || dblAci >= 90.0)return -1.0; Aci aciTele = new Aci(dblAci); return( (s/2.0)* aciTele.Tanjant()); } }

Page 127: başlıkk 11111

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() {---}}

Page 128: başlıkk 11111

private void btnMesafeHesapla_Click(object sender, EventArgs e) { if (tbGozUzakligi.Text = = "") { MessageBox.Show("Göz uzaklığını gir!"); return; } if (tbAci.Text = = "") { MessageBox.Show("Açıyı gir!"); return; } Telemetre objTelemetre = new Telemetre(Convert.ToDouble(tbGozUzakligi.Text)); double Uzaklik = objTelemetre.Mesafe(Convert.ToDouble(tbAci.Text)); if (Uzaklik < 0) { MessageBox.Show("Açı sıfırdan büyük ve doksandan küçük olmalı!"); return; } lblSonuc.Text = "Cismin uzaklığı " + Uzaklik.ToString() + "cm dir."; }

Page 129: başlıkk 11111

Geçen haftanın Aci sınıfı

Page 130: başlıkk 11111

public partial class frmAci : Form { public frmAci() { InitializeComponent();}

private void btHesapla_Click(object sender, EventArgs e) { Aci birAci = new Aci(Convert.ToDouble(tbGiris.Text)); lblMathSin.Text = (Math.Sin(birAci.Radyan).ToString())+ " Math Sin"; lbBizimSin.Text = (birAci.Sinus()).ToString() + " Bizim Sin"; lblMathCos.Text = (Math.Cos(birAci.Radyan)).ToString()+ " Math

Cos"; lblBizimCos.Text = (birAci.Cosinus()).ToString() + " Bizim Cos"; } }

Page 131: başlıkk 11111

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; }

Page 132: başlıkk 11111

public double Sinus() {//Sin x = x – x3/3! + x5/5! – x7/ 7! + ... double sonuc = radyan; double eski = radyan; double epsilon = 1.0D - 14; double fark; double terim; for (int i = 3; i < 101; i += 2) { terim = -eski * radyan * radyan / (i * (i - 1)); sonuc += terim; fark = terim / sonuc; if (fark < 0) fark = -fark; if (fark < epsilon) { return sonuc; } eski = terim; } return sonuc; }

Page 133: başlıkk 11111

public double Cosinus() { // Cos x = 1 – x2/2! + x4/4! – xN/N! + … double sonuc = 1.0; double eski = 1.0; double epsilon = 1.0D - 14; double fark; double terim; for (int i = 2; i < 101; i += 2) { terim = -eski * radyan * radyan / (i * (i - 1)); sonuc += terim; fark = terim / sonuc; if (fark < 0) fark = -fark; if (fark < epsilon) { return sonuc; } eski = terim; } return sonuc; }

Page 134: başlıkk 11111

Diziler Array ArrayList HashTable SortedList

Page 135: başlıkk 11111

Arraytype [] 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”, “Cuma”, “Cumartesi”};

Page 136: başlıkk 11111

ArrayAvantajlar: Kolay (her programlama dilinde var) Hızlı Üyenin tipini siz belirliyorsunuzDezavantajlar Boyu sabit Araya üye sokmak zor

Page 137: başlıkk 11111

Gun sınıfında günleri array yapsaydık... string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”,

“Perşembe”, “Cuma”, “Cumartesi”};

public string Yaziya(int ggun) {

return Gunler[ggun];}

public int Sayiya(tring gunismi){

return Gunler.IndexOf(gunismi);}

Page 138: başlıkk 11111

Gunleri ard arda yazmak istiyoruz: lbl.Text = “Pazartesi ” + “Salı ” + “ Çarşamba” +- - -yerine:

lbl.Text = “”;foreach(string gun in Gunler){

lbl.Text += gun;}

Gun sınıfında günleri array yapsaydık... string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”,

“Perşembe”, “Cuma”, “Cumartesi”};

gun + “ “;

Page 139: başlıkk 11111

ArraylistArrayList identifier = new ArrayList();ArrayList gunler = new ArrayList();

Peki boyu belli değil...

gunler.Add(“Pazartesi”);gunler.Add(“Salı”);

gunler[0].ToString() >>> “Pazartesi” verir.

Page 140: başlıkk 11111

Arraylist ArrayList gunler = new ArrayList();İş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”);

Page 141: başlıkk 11111

ArrayList foreach ile çalışır. Her türlü nesneyi taşır Avantajlar:

Otomatik boyÜye sokup çıkarmak çok kolayKolay kullanış

DezavantajYavaş

Page 142: başlıkk 11111

HashtableArrayList 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”);-- -- --

Page 143: başlıkk 11111

Hashtable 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){

----}

Page 144: başlıkk 11111

HashtableAvantajlar: Esnek kullanım Hızlı bulma...

Dezavantajlar Sıraya sokulamaz Kuruluş yavaş, yeni üye sokmak yavaş

Page 145: başlıkk 11111

SortedList ArrayList gibi, fakat eleman eklendikçe

otomatik olarak sıraya sokuyor. Hashtable gibi, fakat sıraya sokamama

problemi yokMeselâ: Öğrenci isimlerini otomatik sıraya

sokarak bir öğrenci koleksiyonu yaratabilir.Kelime- açıklama ikilisi ile sözlük yaratabilir...

Page 146: başlıkk 11111

Laboratuvar ve ödev Öğ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.

Page 147: başlıkk 11111

Sınıf ve Ogrenci uygulaması

Page 148: başlıkk 11111

public class Ogrenci { int numarasi; string ismi; Single notu = -1.0F; 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

Page 149: başlıkk 11111

Sınıf- öğrenci public class Sinif { int ogrenciSayisi = 0; public int OgrenciSayisi { get { return ogrenciSayisi; } } ArrayList ogrenciler; public ArrayList Ogrenciler{ get { return ogrenciler; } } public Sinif(){ ogrenciler = new ArrayList(); }

Page 150: başlıkk 11111

Sınıf- öğrenci public void Kayit(int numarasi, string ismi,Single notu) { Ogrenci birOgrenci = new Ogrenci(numarasi, ismi); ogrenciler.Add(birOgrenci); birOgrenci.Notver(notu); ogrenciSayisi++; } public Single Ortalama() { Single ortalama = 0.0F; int kacnot = 0; foreach (Ogrenci ogr in ogrenciler) { if (ogr.Notu < 0.0F) continue; ortalama += ogr.Notu; kacnot++; } return ortalama / kacnot; }

Page 151: başlıkk 11111

Asal sayılar

Page 152: başlıkk 11111

Asal sayılar

private void btBul_Click(object sender, EventArgs e) { if (tbIlkSayi.Text == "" || tbSonSayi.Text == "") { MessageBox.Show("İlk ve son sayiları girmelisiniz"); return; } int ilk = Convert.ToInt32(tbIlkSayi.Text); int son = Convert.ToInt32(tbSonSayi.Text); if (son <= ilk) { MessageBox.Show("Son sayı ilkinden büyük olmalı!"); return; }

Page 153: başlıkk 11111

Asal sayılar

AsalSayi asalSayilar = new AsalSayi(); ArrayList sayilar = asalSayilar.Asallar(ilk, son); lblAsalSayilar.Text = ""; if (sayilar.Count == 0) { lblAsalSayilar.Text = "Bu aralıkta asal sayi yok."; return; } foreach (int asayi in sayilar) { lblAsalSayilar.Text += asayi.ToString() + "\n"; } } // Form’un btBul_Click metodunun sonu

Page 154: başlıkk 11111

public ArrayList Asallar(int ilksayi, int sonsayi)

{ for (int i = ilksayi; i <= sonsayi; i++) { bool asal = true; for (int j = 2; j < i; j++) { if (i / j * j == i) { asal = false; break; } } if (asal) sayilar.Add(i); } return sayilar; } } // AsalSayi sınıfının sonu

Asal sayılar

public class AsalSayi { ArrayList sayilar; public AsalSayi() { sayilar = new ArrayList(); } public int KacTane { get { return sayilar.Count; } }

Page 155: başlıkk 11111

Gerçek problemler: 2) En küçük kareler metodu

Fiyat 160 180 200 220 240 260 280

Satış 126 103 82 75 82 40 20

Page 156: başlıkk 11111

…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ı.

Page 157: başlıkk 11111

…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 fark2 = (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…

Page 158: başlıkk 11111

…en küçük karelerFark 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) = 0dü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

Page 159: başlıkk 11111

…en küçük karelera Σixi

2+ b Σixi = Σixiyi

a Σi xi+ b n = Σiyi

İki bilinmeyen için iki denklem!

Toplamlara isim verelim… Kolay olsun:X2 = Σixi

2 X = Σixi XY = Σixiyi Y = Σiyi

D = X2 * n – X*X

a = (XY * n – X * Y) / D

b = (X2 * Y – X * XY) / D

Page 160: başlıkk 11111

…en küçük kareler

Page 161: başlıkk 11111

…en küçük kareler public class VeriNoktasi { float x; public float X{ get { return x; } } float y; public float Y{ get { return y; } } public VeriNoktasi(float x, float y){

this.x = x; this.y = y; } }

public class Veriler { int verisayisi = 0; public int VeriSayisi { get { return verisayisi; } } VeriNoktasi[] xvey = new VeriNoktasi[100]; public VeriNoktasi[] XveY { get { return xvey; } } public void Ekle(VeriNoktasi Nokta) { XveY[verisayisi] = Nokta; verisayisi++; } }

Page 162: başlıkk 11111

…en küçük karelerpublic class EnKucuk { Veriler veri; float x, y, x2, xy; float a, b; public float ASonuc { get { return a; } } public float BSonuc { get { return b; } } public EnKucuk(Veriler veri) { this.veri = veri; }

public void Hesapla() { x = 0.0f; y = 0.0f; x2 = 0.0f; xy = 0.0f; float iks; float ye; float d; for (int i = 0; i < veri.VeriSayisi; i++) { iks = veri.XveY[i].X; ye = veri.XveY[i].Y; x += iks; y += ye; x2 += iks * iks; xy += iks * ye; } d = x2 * veri.VeriSayisi - x*x; a = (xy * veri.VeriSayisi - x * y) / d; b = (x2 * y - x * xy) / d;

} }}

Page 163: başlıkk 11111

…en küçük kareler

namespace EnKucukKareler { public partial class Form1 : Form { Veriler verilistesi; public Form1() { InitializeComponent(); verilistesi = new Veriler(); } private void btKaydet_Click(object sender, EventArgs e) { float x = Convert.ToSingle(tbX.Text); float y = Convert.ToSingle(tbY.Text); VeriNoktasi nokta = new VeriNoktasi(x, y); verilistesi.Ekle(nokta); tbX.Text = ""; tbY.Text = ""; }

Page 164: başlıkk 11111

…en küçük kareler

private void btHesapla_Click(object sender, EventArgs e)

{

EnKucuk uydur = new EnKucuk(verilistesi);

uydur.Hesapla();

lblSonuc.Text = "Verilere bir doğru uyduruldu.\n";

lblSonuc.Text += "Doğrunun denklemi şöyle:\n";

lblSonuc.Text += (uydur.ASonuc).ToString() + " X + ";

lblSonuc.Text += (uydur.BSonuc).ToString();

}

} //Form sınıfının sonu

Page 165: başlıkk 11111

İntegral

s

----------

X0 X1 X2 XNXN-1

Y0

Y1

Y2

YN-1

YN

İntegral = - 0.5 (Y0 + YN) + S ∑ Yi

Yi ler her Xi noktasında fonksiyonun değeridir.

S = (YN- Y0) / N ile bulunur.

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.

Page 166: başlıkk 11111

İntegralnamespace Tamami { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btHesapla_Click(object sender, EventArgs e) { double birinci = Convert.ToDouble(tbIlk.Text); double ikinci = Convert.ToDouble(tbSon.Text); int yamukS = Convert.ToInt32(tbKac.Text); Tamami integral = new Tamami(birinci, ikinci, yamukS); double sonuc = integral.Topla(); lblSonuc.Text = sonuc.ToString(); }

Page 167: başlıkk 11111

İ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; } }

Page 168: başlıkk 11111

İntegral public double Topla() { // İntegral = - 0.5 (Y0 + 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); } }

Page 169: başlıkk 11111

Format Yazmada ve okumada sayının, tarihin, diğer

yazılanların şeklini yönetemiyorduk. Sayı formatları Tarih formatları Kültür

Page 170: başlıkk 11111

Sayı formatları 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

Page 171: başlıkk 11111

Tarih formatları 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

Page 172: başlıkk 11111

Uygulama:

Page 173: başlıkk 11111

private void btCurrency_Click(object sender, EventArgs e) { double sayi = Convert.ToDouble(tbSayi.Text); lblSayiSonuc.Text = sayi.ToString("C"); }

private void btFixed_Click(object sender, EventArgs e) { double sayi = Convert.ToDouble(tbSayi.Text); lblSayiSonuc.Text = sayi.ToString("F10"); }

private void btYuzde_Click(object sender, EventArgs e) { double sayi = Convert.ToDouble(tbSayi.Text); lblSayiSonuc.Text = sayi.ToString("P2"); }

Page 174: başlıkk 11111

private void btHex_Click(object sender, EventArgs e) { int sayi = (int) Convert.ToDouble(tbSayi.Text); lblSayiSonuc.Text = sayi.ToString("X"); }

private void btBilim_Click(object sender, EventArgs e) { double sayi = Convert.ToDouble(tbSayi.Text); lblSayiSonuc.Text = sayi.ToString("E5"); }

private void btCustom_Click(object sender, EventArgs e) { double sayi = Convert.ToDouble(tbSayi.Text); lblSayiSonuc.Text = sayi.ToString("0###,###.#0"); }

Page 175: başlıkk 11111

private void btdate_Click(object sender, EventArgs e) { lblTarihSonuc.Text = DateTime.Now.ToString("d"); }

private void btD_Click(object sender, EventArgs e) { lblTarihSonuc.Text = DateTime.Now.ToString("D"); }

private void btt_Click(object sender, EventArgs e) { lblTarihSonuc.Text = DateTime.Now.ToString("t"); }

TarihZaman (DateTime) formatları

Page 176: başlıkk 11111

private void btTT_Click(object sender, EventArgs e) { lblTarihSonuc.Text = DateTime.Now.ToString("T"); }

private void btM_Click(object sender, EventArgs e) { lblTarihSonuc.Text = DateTime.Now.ToString("M"); }

private void btF_Click(object sender, EventArgs e) { lblTarihSonuc.Text = DateTime.Now.ToString("F"); }

TarihZaman (DateTime) formatları...

Page 177: başlıkk 11111

... ve Kültür İki sembol: xx - XX tr - TR en - US ru - RU ar - SA İki assembly gerekiyor:

using System.Globalizationusing System.Threading

Page 178: başlıkk 11111

private void btTurk_Click(object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR", false); }

private void btAmerikan_Click(object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); }

private void btRus_Click(object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU", false); }

private void btArap_Click(object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA", false); }

Page 179: başlıkk 11111

Okur yazarlık Niçin okuma ve yazma öğrenmeliyiz? Okuma, yazmaya bakış:

bit akışı byte akışı karakter akışı kayıt (satır) dosya

bit stream byte stream character str record(line) file

01001101001 23 A4 C2 4F N e h a Ne haber? Haber.doc

Alt seviye Üst seviye

Bodruma gider

Page 180: başlıkk 11111

Nasıl?

using System.IO Stream, FileStream, File Directory

Page 181: başlıkk 11111

Uygulama

Page 182: başlıkk 11111

File sınıfı private void btDosyaYarat_Click(object sender, EventArgs e) { if (tbDosyaIsmi.Text == "") { lblSonuc.Text = "Dosya ismi yok!"; return; } if(File.Exists(tbDosyaIsmi.Text)) { lblSonuc.Text = tbDosyaIsmi.Text + " dosyası zaten var."; return; } File.Create(tbDosyaIsmi.Text); lblSonuc.Text = tbDosyaIsmi.Text + " içine yazmaya hazır."; }

Page 183: başlıkk 11111

Okuma ve yazma

private void btKaydet_Click(object sender, EventArgs e) { if (tbDosyaIsmi.Text == "") { lblSonuc.Text = "Hangi dosyaya yazacağım?"; } File.AppendAllText(tbDosyaIsmi.Text, tbYaziKutusu.Text); lblMetin.Text = "Yazı başarıyla kaydedildi. Baaak: \n\n" + File.ReadAllText(tbDosyaIsmi.Text); }

Page 184: başlıkk 11111

Alan (Field)

Veri tabanları ile konuşma Veri tabanı? İlişkili Veri Tabanı

Relational Data BaseTablo(lar)

Tarih Başlık Konu1 Konu2 Metin

07.05.2007 İbo Yozgat’ta konser veriyor

Sosyete Müzik Önümüzdeki Cumartesi İbrahim Tatlıses Yozgat’ta iki saatlik bir konser verecek

Kayıt

Kayıt

Kayıt

Kayıt

Page 185: başlıkk 11111

Örnek problem: Haber veri tabanıNeOldu

Page 186: başlıkk 11111

Haber: Kullanıcı Ara YüzüKonu seçimi

Başlık

Resim Metin

Page 187: başlıkk 11111

public class Haber {

static string VeriTabani = "Provider=Microsoft.Jet.OleDb.4.0;" + " Data Source= " + @".\Haberler.mdb";

string baslik; public string Baslik { get { return baslik; } } string konu; public string Konu { get { return konu; } }

Page 188: başlıkk 11111

string metin; public string Metin { get { return metin; } } string resim; public string Resim { get { return resim; } }

Page 189: başlıkk 11111

public Haber(string konu) { this.konu = konu;

OleDbConnection objBaglanti = new OleDbConnection(VeriTabani); string strSQLSoru = "SELECT * FROM NeOldu WHERE Konu = '“

+ konu + "'" ; OleDbCommand objKomut = new OleDbCommand(strSQLSoru,

objBaglanti); objBaglanti.Open(); OleDbDataReader objVeriOkuyucu = objKomut.ExecuteReader(); objVeriOkuyucu.Read(); baslik = objVeriOkuyucu["Baslik"].ToString(); metin = objVeriOkuyucu["Metin"].ToString(); resim = objVeriOkuyucu["Resim"].ToString(); objVeriOkuyucu.Close(); objBaglanti.Close(); }

Page 190: başlıkk 11111

Form’dakiler...

private void Form1_Load(object sender, EventArgs e) { string[] konular = { "", "Müzik", "Sosyete", "Siyaset", "Film" }; cBoxKonu.DataSource = konular; }

Page 191: başlıkk 11111

Form’dakiler... private void cBoxKonu_SelectedIndexChanged(

object sender, EventArgs e) { string NeKonuda = cBoxKonu.Text; if (NeKonuda == "") return; Haber YeniHaber = new Haber(NeKonuda); lblBaslik.Text = YeniHaber.Baslik; lblMetin.Text = YeniHaber.Metin; pbResim.ImageLocation = YeniHaber.Resim; }

Page 192: başlıkk 11111

WebSunucu (Apache, IIS, vs.)

ClientBrowser(IE, Firefox,Opera, vs.)

InternetTalep (R

equest)Talep

(Request)

Cevap (R

esponse)Cevap (Response)

Http Request

Http Response

Sunucu ile tarayıcının konuştuğu dil:HTML: Hyper Text Mark-up Language

Page 193: başlıkk 11111

Web sayfası

<html ><head >

<title>Buraya başlık girer

</title></head><body>

Buraya gövde girer</body>

</html>

<h1> </h1>

Page 194: başlıkk 11111

ASP.Net Web sayfası

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Buraya başlık girer</title></head><body>

<form id="form1" runat="server"> Buraya gövde girer </form></body></html>

Page 195: başlıkk 11111

Web sayfası<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <div> </div> </form></body></html>

Page 196: başlıkk 11111

Form’dakiler...

private void Form1_Load(object sender, EventArgs e) { string[] konular = { "", "Müzik", "Sosyete", "Siyaset", "Film" }; cBoxKonu.DataSource = konular; }

protected void Page_Load(object sender, EventArgs e) { string[] konular = { "", "Müzik", "Sosyete", "Siyaset", "Film" }; cBoxKonu.DataSource = konular; }

Page 197: başlıkk 11111

Form’dakiler...

private void cBoxKonu_SelectedIndexChanged(object sender, EventArgs e)

{ string NeKonuda = cBoxKonu.Text; if (NeKonuda == "") return; Haber YeniHaber = new Haber(NeKonuda); lblBaslik.Text = YeniHaber.Baslik; lblMetin.Text = YeniHaber.Metin; pbResim.ImageLocation = YeniHaber.Resim; } pbResim.ImageUrl = YeniHaber.Resim

protected void Bitir(object sender, EventArgs e)

Page 198: başlıkk 11111

<form id="form1" runat="server">--- <asp:DropDownList ID="cBoxKonu"

OnSelectedIndexChanged="Bitir" runat="server" AutoPostBack="True">

</asp:DropDownList --- <asp:Label ID="lblBaslik" runat="server" Font-Names="Verdana"

Font-Bold="True" Font-Size="Large" ForeColor="Navy"></asp:Label>

--- <asp:Image ID="pbResim" runat="server"

ImageUrl='' />--- <asp:Label ID="lblMetin" runat="server" Font-

Names="Verdana" Width="400px"></asp:Label </form>