başlıkk 11111

Preview:

Citation preview

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

1 Bilgisayar programlama:

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

Ş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

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.

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

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

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

Yüksek seviye dilleri?

X = A * B + C

X = A * B + C

LET X = A * B + C

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

Üst seviye dili

Derleyici (compiler)(Scriptlerde yok)

Makine dili

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

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

Bitti mi?

Object program

Okumaprogramı

Ekrana yazmaprogramı

… programı

… programı

Bağlama- link

İcra edilebilir program: Executable

Çarp_Topla.exedll : dynamic link library

Hatalar:

Derleme hataları (Compiler error)

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

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

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

Tepeden bakış:namespace KaraEkranÇarpmaMakinesi{

class Program { static void Main() {

......... }

}public class HesapMakinesi {

.......... }

}

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

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

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”

Tiplerint birinciSayi = 1256;

long uzunTamSayi= 12345678901..

float Avagadro = 6.02E23

double piSayisi= 3.141592653589

string strBirinci = “Bu takım”

char uUml = 'ü'

bool dogruMu = false

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

Atama ifadesi: Assignment statement

=variable = expressionobject = expression

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

Not:

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

a = a + b yerine a += ba = 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

/* ve */

/* y ile

z’yi topluyorum*/

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

Boşluk!

Operatör öncelikleri (operator precedence)

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

•İş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

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

İsim vermede kurallar ve tavsiyeler

C# anahtar kelimeleri

Mehmet Ali Hoca’dan

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

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

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

Programlama paradigmaları

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

driven)

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

(Object oriented- OOP)

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ı

Hesap makinesi?

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

Metotlar ne? İ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 CarpmaMakinesi { // Özellikler public double Birinci; public double Ikinci;

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

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

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!

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

}}

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)

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

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

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

}

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

}}

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.

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

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

Metotlar:“constructor”private diskriminantHesaplapublic KokleriHesapla

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

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

}

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

}}

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

}}

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

}}

}

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 ;

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

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.

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

}

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;

}

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?

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

}

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

Sınıflarpublic/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 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.X1R...public class HesapMakinesi{

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

public/private BirMetot(){a = A;

}}

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

private double a;public double A{

get{return a;

}set{

a = value;}

} }

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.

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

Ö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

Ö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

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

}

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;

}.........

}

Biraz eğlenelim: Zar atmak...

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

1.png

2.png

3.png

4.png

5.png

6.png

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

Visual Studio Windows Form Form1

button1

picboxZar1

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

Deneyim Bakiim...

Bir zar

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

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

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++

Akış kontrolu: Dallanmalar

if switch ?

Tekrarlar for while do - while

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

}

if

print “Passed”Grade >= 60true

false

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

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

}

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

}

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ı”)

?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{....

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

ifAslında...

if(önerme){

}else{

}

if(önerme){

}else{

}

X

X

if(önerme){

}else if(önerme){

}else{

}

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!”;

}

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!” }

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

Tekrarlar Tekrarlar

for while do - while

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

ifade;ifade;-----

}

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

}

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

Thread.Sleep(100);at();

}

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

Thread.Sleep(100);at();

}

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

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

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

Direnc...

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

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

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

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

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

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

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

}

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

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 TeleForm : Form { public TeleForm() { InitializeComponent(); }

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

}

public class Telemetre {---}

public class Aci {---}

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

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

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

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

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

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

Diziler Array ArrayList HashTable SortedList

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

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

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

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 + “ “;

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

Peki boyu belli değil...

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

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

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

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

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

DezavantajYavaş

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

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

----}

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

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

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

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.

Sınıf ve Ogrenci uygulaması

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

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

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

Asal sayılar

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

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

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

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

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

…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

…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

…en küçük kareler

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

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

} }}

…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 = ""; }

…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

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

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

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

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

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

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

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

Uygulama:

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

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

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ı

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

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

using System.Globalizationusing System.Threading

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

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

Nasıl?

using System.IO Stream, FileStream, File Directory

Uygulama

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

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

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

Örnek problem: Haber veri tabanıNeOldu

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

Başlık

Resim Metin

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

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

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

Form’dakiler...

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

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

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

Web sayfası

<html ><head >

<title>Buraya başlık girer

</title></head><body>

Buraya gövde girer</body>

</html>

<h1> </h1>

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>

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>

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

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)

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

Recommended