SlideShare a Scribd company logo
1 of 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
1Bilgisayar programlama:
Programlama dilleri, makine dili, yüksek
düzey diller
Derleyici, "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 dili
X = A * B + C
1) Hafızanın A adresindeki değeri al, ALU’da bir
"register"e yükle;
2) Hafızanın B adresindeki değeri al, yukardaki
değerle çarp ve sonucu aynı "register"de tut.
3) Hafızanın C adresindeki değeri registerdeki değere
ekle.
4) Registerdeki değeri hafızanın X adresine koy.
Makine dili
X = A * B + C
Opcode Operand
1) 00010000000000000000010000000000 (A’daki değeri reg. yükle)
Hex: 08 00 04 00
2) 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, 1
Ondalık sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Biraz daha hex
Ondalık  Hex Hex  Ondalık
1 = 1
10 = A
36 = 24 A5 = 165
147 = 93 DD = 221
255 = FF
Makine dili - Assembler
X = A * B + C
08 00 04 00
24 00 04 01
23 00 04 02
11 00 04 03
MOV A, ACC
MUL B, ACC
ADD C, ACC
STO ACC, X
Yüksek seviye dilleri?
X = A * B + C
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
Ara dil (Java, C#)
Kaynak kod
(Source code)
Source module
Object code
Object module
Bitti mi?
Object
program
Okuma
programı
Ekrana yazma
programı
… programı
… programı
Bağlama- link
İcra edilebilir
program:
Executable
Çarp_Topla.exe
dll :
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:
int
int 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”
Tipler
int 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 tipleri
Tip 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 = expression
object = expression
Operatörler
Aritmetik 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 += b
a = a / b yerine a /= b
Operatörler devam...
Operatör C# ifadesi
&& bool a && bool b
|| bool a || bool b
++ a++ veya ++a
-- a-- veya --a
<< >> & | bitlerle oynama
Diğer önemli işaretler
 ( ve ) işlemlerde öncelik değiştirmek için, vby...
 { ve } program bloklarını ayırmak için
 //
x = y + z // y ile z’yi topluyorum
 /* 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.
fark
Fark
fark
Fark
Cevap42
42Cevap
Cevap42
42Cevap




KOTUSONUC
_KotuSonuc
KotuSonuc
kotuSonuc
KOTUSONUC
_KotuSonuc
KotuSonuc
kotuSonuc


Msj
Mesaj
Msj
Mesaj



Mehmet Ali Hoca’dan
C# Anahtar kelimeleri
Keyword’ler derleyiciye ayrılmış
kimlikleyicilerdir
Keyword’ler değişken adı olamazlar
 compile-time hatası üretir
Keyword’ler yazıldığı gibi kullanılmalıdır.
(Case-Sensitive)
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 = 0
Değişkenler
a, b, c, x1, x2, delta, kokDelta
Metotlar:
“constructor”
private diskriminantHesapla
public 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, XI2
private 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: Instantiation
Her nesne bir sınıfın bir “instance”ıdır.
Sınıflar
public/private sınıf_adı {
public/private type değişkenler
public/private sınıflar
public/private type metotlar
}
Sınıf değişkenleri
 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.
Metotlar
Sınıf içinde tanımlanması:
public/private return_type metot_adı (parametreler){
.....
}
public void KokleriHesapla(){
...
}
Dışarda kullanılması:
object.metot_adı (parametreler);
HM.KokleriHesapla ();
Ö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... devam
IkinciDerece Denklem = new IkinciDerece();
yerine
IkinciDerece Denklem = new IkinciDerece(A, B, C);
O zaman sınıfın içinde:
public class Ikinci Derece{
private double a, b, c;
........
public IkinciDerece(double A, double B, double C){
a = A; b = B; c = C;
}
.........
}
Constructor... devam
Bazen şu stil kullanılıyor:
public class Ikinci Derece{
private double a, b, c;
........
public IkinciDerece(double a, double b, double c){
this.a = a;
this.b = b;
this.c = c;
}
.........
}
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
if
if(önerme) ifade;
if(önerme){
ifade;
ifade
ifade
....
}
if( a > b) x = Math.Sqrt(a-b);
if( a > b){
x = a * a - b * b;
y = Math.Sqrt(x);
}
if
print “Passed”Grade >= 60
true
false
if(grade >= 60) tbSonuc.Text = “Geçti”;
if(grade >= 60){
tbSonuc.Text = “Geçti”;
}
if
if(ö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”;
}
if
Peki, 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{
....
if
if(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”;
}
if
Aslı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
for
for(tarif ve ilk değer; kontrol; değişim){
ifade;
ifade;
-----
}
for(int i = 0; i < 7; i++){
Thread.Sleep(100);
at();
}
Tekrarlar
for(int i = 0; i < 7; i ++){
Thread.Sleep(100);
at();
}
int i;
for(i = 0; i < 7; i++)
{
Thread.Sleep(100);
at();
}
Tekrarlar
int i;
for(i = 0; i < 7; i++){
Thread.Sleep(100);
at();
}
int i = 0;
while(i < 7){
Thread.Sleep(100);
at();
i++;
}
int i = 0;
do{
Thread.Sleep(100);
at();
i++;
} while(i < 7);
Ödev: Bir Acı sınıfı kuralım
 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 = (R1
R2
)/(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 olsun
BirAci.Radyan(); // Bunun değeri π/4 olsun.
Nasıl yapacağınızı bilmediğim için parametreleri çeşitli
yazdım...
Hesap Makinesi
İlk derslerde yazdığınız hesap makinesi sınıfına üst alma
özelliğini ekleyin. Öyle ki makine gerçek sayılarla
toplama, çıkarma, çarpma, bölme yapmanın yanı sıra, bir
gerçek sayını bir tam sayı üstünü de alsın. Yazacağınız
program XY
şeklinde X’in Y’inci kuvvetini alacaktır. Y,
tam sayıdır.
Üst alma metodunda (adı Ust olsun), girilen Y sayısı tam
sayı değilse, tam sayıya yuvarlanacaktır. Pozitif değilse
de işlemi doğru yapacaktır.
Üst alma
public double Ust(double X, int Y){
double sonuc = 1.0
if(Y > 0){
for(int i = 0; i < Y; i++){
sonuc *= X;
}
else{
for(int i = 0; i > Y; i--){
sonuc /= X;
}
return sonuc;
}
Ödev Uzaktaki bir cismin bize uzaklığını ölçmek
için kullanılan ve temelde iki dürbünden
oluşan mesafe tayin cihazı (telemetre)
yandaki şekilde şemayla gösterilmiştir.
Telemetrenin iki gözü arasındaki uzaklık S,
D uzaklığına bakarken dürbünün yaptığı açı
B ise
D = S/2 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
Array
type [] array_identifier = new type[];
string [] Gunler = new string[7];
Gunler[0] = “Pazartesi”;
Gunler[1] = “Salı”;
Gunler[3] = “Çarşamba”
- - -
veya
string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”,
“Perşembe”, “Cuma”, “Cumartesi”};
Array
Avantajlar:
 Kolay (her programlama dilinde var)
 Hızlı
 Üyenin tipini siz belirliyorsunuz
Dezavantajlar
 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 + “ “;
Arraylist
ArrayList identifier = new ArrayList();
ArrayList gunler = new ArrayList();
Peki boyu belli değil...
gunler.Add(“Pazartesi”);
gunler.Add(“Salı”);
gunler[0].ToString() >>> “Pazartesi” verir.
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 kolay
Kolay kullanış
 Dezavantaj
Yavaş
Hashtable
ArrayList gibi... Fakat indeks yerine nesne var.
(Kullanımda nesne genellikle string)
Hashtable Ulke = new Hashtable(),
Ulke[“tr”] = “Türkiye”;
Ulke[“de”] = “Almanya”;
Ulke[“to”] = “Tonga”;
veya
Ulke.Add(“tr”, “Türkiye”);
Ulke.Add(“de”, “Almanya”);
-- -- --
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){
----
}
Hashtable
Avantajlar:
 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 yok
Meselâ: Öğ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 kareler
Fark karelerinin toplamı = Σi(a xi+ b – yi)2
En küçük yapmak demek, a ve b’ye göre türev alıp
sıfıra eşitlemektir…
a’ya göre: 2 Σixi(a xi+ b – yi) = 0
düzenlersek: a Σixi
2
+ b Σixi – Σixiyi = 0
b’ye göre: 2 Σi(a xi+ b – yi) = 0
düzenlersek: a Σi xi+ n b – Σiyi = 0
…en küçük kareler
a Σixi
2
+ b Σixi = Σixiyi
a Σi xi+ b n = Σiyi
İki bilinmeyen için iki denklem!
Toplamlara isim verelim… Kolay olsun:
X2 = Σixi
2
X =Σixi XY = Σixiyi Y = Σiyi
D = X2 * n – X*X
a = (XY * n – X * Y) / 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 kareler
public 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.
İntegral
namespace 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.Globalization
using 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: nn"
+ File.ReadAllText(tbDosyaIsmi.Text);
}
Alan (Field)
Veri tabanları ile konuşma
 Veri tabanı?
 İlişkili Veri Tabanı
Relational Data Base
Tablo(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;
}
Web
Sunucu (Apache, IIS, vs.)
Client
Browser
(IE, Firefox,
Opera, vs.)
Internet
Talep
(Request)
Talep
(Request)
Cevap(Response)
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>

More Related Content

Similar to başlıkk 11111

Similar to başlıkk 11111 (20)

9. şablonlar
9. şablonlar9. şablonlar
9. şablonlar
 
C#4.0
C#4.0C#4.0
C#4.0
 
C# Sunusu - 1
C# Sunusu - 1C# Sunusu - 1
C# Sunusu - 1
 
Net ve i̇stisnalar
Net ve i̇stisnalarNet ve i̇stisnalar
Net ve i̇stisnalar
 
C operatorleri-c-operators
C operatorleri-c-operatorsC operatorleri-c-operators
C operatorleri-c-operators
 
C programlama
C programlamaC programlama
C programlama
 
Cok boyutlu-diziler
Cok boyutlu-dizilerCok boyutlu-diziler
Cok boyutlu-diziler
 
Php1
Php1Php1
Php1
 
C fonksiyon-turleri
C fonksiyon-turleriC fonksiyon-turleri
C fonksiyon-turleri
 
Algoritma ve akış şemaları
Algoritma ve akış şemalarıAlgoritma ve akış şemaları
Algoritma ve akış şemaları
 
C giris-cikis-c-input-output
C giris-cikis-c-input-outputC giris-cikis-c-input-output
C giris-cikis-c-input-output
 
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Yzm 2116  - Bölüm 2 (Algoritma Analizi)Yzm 2116  - Bölüm 2 (Algoritma Analizi)
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
 
Python for Hackers
Python for HackersPython for Hackers
Python for Hackers
 
Algoritma
AlgoritmaAlgoritma
Algoritma
 
Fonksiyonlar
FonksiyonlarFonksiyonlar
Fonksiyonlar
 
İleri Seviye Programlama 2
İleri Seviye Programlama 2İleri Seviye Programlama 2
İleri Seviye Programlama 2
 
Roket Yazılımı Eğitimi Hafta 1
Roket Yazılımı Eğitimi Hafta 1Roket Yazılımı Eğitimi Hafta 1
Roket Yazılımı Eğitimi Hafta 1
 
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziPig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri Analizi
 
Csharp 3.0
Csharp 3.0Csharp 3.0
Csharp 3.0
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 

başlıkk 11111

  • 1. 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
  • 2. 1Bilgisayar programlama: Programlama dilleri, makine dili, yüksek düzey diller Derleyici, "source", "object", "link" kavramları. Algoritma, bir programın hayat hikâyesi
  • 3. Ş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
  • 4. Makine dili X = A * B + C 1) Hafızanın A adresindeki değeri al, ALU’da bir "register"e yükle; 2) Hafızanın B adresindeki değeri al, yukardaki değerle çarp ve sonucu aynı "register"de tut. 3) Hafızanın C adresindeki değeri registerdeki değere ekle. 4) Registerdeki değeri hafızanın X adresine koy.
  • 5. Makine dili X = A * B + C Opcode Operand 1) 00010000000000000000010000000000 (A’daki değeri reg. yükle) Hex: 08 00 04 00 2) 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, 1 Ondalık sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
  • 6. Biraz daha hex Ondalık  Hex Hex  Ondalık 1 = 1 10 = A 36 = 24 A5 = 165 147 = 93 DD = 221 255 = FF
  • 7. Makine dili - Assembler X = A * B + C 08 00 04 00 24 00 04 01 23 00 04 02 11 00 04 03 MOV A, ACC MUL B, ACC ADD C, ACC STO ACC, X
  • 8. Yüksek seviye dilleri? X = A * B + C X = A * B + C LET X = A * B + C
  • 9. Üst seviye dili  FORTRAN  C  Pascal  Basic  C++  Java  C# Üst seviye dili Derleyici (compiler) (Scriptlerde yok) Makine dili
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 16. 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 Ara dil (Java, C#) Kaynak kod (Source code) Source module Object code Object module
  • 17. Bitti mi? Object program Okuma programı Ekrana yazma programı … programı … programı Bağlama- link İcra edilebilir program: Executable Çarp_Topla.exe dll : dynamic link library
  • 18. Hatalar:  Derleme hataları (Compiler error)  Bağlama hataları (Falan modülü bulamadım)  İcra hataları (Run time error)
  • 19. İ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
  • 20. 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(); } }
  • 21. 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(); } }
  • 22. Tepeden bakış: namespace KaraEkranÇarpmaMakinesi { class Program { static void Main() { ......... } } public class HesapMakinesi { .......... } }
  • 23. 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(); } }
  • 24. 2. C# programcılığına giriş Değişken tipleri: int int birinciSayi; birinciSayi = 1256; SabitDeğişken Atama string string strBirinci; strBirinci = “Gaziantep” SabitDeğişken Atama
  • 25. 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”
  • 26. Tipler int birinciSayi = 1256; long uzunTamSayi= 12345678901.. float Avagadro = 6.02E23 double piSayisi= 3.141592653589 string strBirinci = “Bu takım” char uUml = 'ü' bool dogruMu = false
  • 27. C# veri tipleri Tip 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
  • 28. Atama ifadesi: Assignment statement = variable = expression object = expression
  • 29. Operatörler Aritmetik 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
  • 30. Not: = ile diğer operatörler birleştirilebilir: a = a + b yerine a += b a = a / b yerine a /= b
  • 31. Operatörler devam... Operatör C# ifadesi && bool a && bool b || bool a || bool b ++ a++ veya ++a -- a-- veya --a << >> & | bitlerle oynama
  • 32. 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!
  • 33. Operatör öncelikleri (operator precedence)  Önce parantez içleri  Sonra soldan sağa * ve / ve % işlemleri  Sonra soldan sağa + ve – işlemleri
  • 34. •İş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
  • 35. • Değişkenleri, nesneleri isimlendirme (Kimlikleyiciler ~ identifiers) İsim vermede kurallar ve tavsiyeler C# anahtar kelimeleri Mehmet Ali Hoca’dan
  • 36. 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. fark Fark fark Fark Cevap42 42Cevap Cevap42 42Cevap     KOTUSONUC _KotuSonuc KotuSonuc kotuSonuc KOTUSONUC _KotuSonuc KotuSonuc kotuSonuc   Msj Mesaj Msj Mesaj    Mehmet Ali Hoca’dan
  • 37. C# Anahtar kelimeleri Keyword’ler derleyiciye ayrılmış kimlikleyicilerdir Keyword’ler değişken adı olamazlar  compile-time hatası üretir Keyword’ler yazıldığı gibi kullanılmalıdır. (Case-Sensitive) 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
  • 38. 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     
  • 39. Programlama paradigmaları  Batch  Etkileşimli - olayların sürdüğü (event driven)  Prosedürel-> yapılı (structured)  Nesneye yönelik (Object oriented- OOP)
  • 40. 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ı
  • 41. Hesap makinesi?  Veriler ne?  Birinci değer  İkinci değer  İşlemi belirten bişiy  Metotlar ne?  İnşa  Carpma,  Bölme  Toplama  Çıkarma
  • 42. 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
  • 43. A * B Hesap makinesi devam... public class CarpmaMakinesi { // Özellikler public double Birinci; public double Ikinci; // Metot(lar) public double Carp() { return Birinci * Ikinci; } }
  • 44. 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; } }
  • 45.
  • 46. 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!
  • 47.
  • 48. 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; } } }
  • 49. 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)
  • 50. 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
  • 51. 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
  • 52. 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(); }
  • 53. 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 } }
  • 54. 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.
  • 55. 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: ‫ﻏ‬
  • 56. Ö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.
  • 57. ax2 + bx + c = 0 Değişkenler a, b, c, x1, x2, delta, kokDelta Metotlar: “constructor” private diskriminantHesapla public KokleriHesapla
  • 58. Değişkenler: a, b, c, x1, x2, delta, kokDelta class IkinciDerece{ double a, b, c, x1, x2, delta, kokDelta; }
  • 59. 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); } }
  • 60. 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); } }
  • 61. 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); } } }
  • 62. 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 ;
  • 63. ... 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
  • 64. 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.
  • 65. ... 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, XI2 private double a, b, c, xR1, xI1, xR2, xI2, delta, kokDelta; private bool gercek ; private double diskriminantHesapla(){...} public void KokleriHesapla(){...} }
  • 66. 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; }
  • 67.  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?
  • 68. “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); } }
  • 69. Ö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: Instantiation Her nesne bir sınıfın bir “instance”ıdır.
  • 70. Sınıflar public/private sınıf_adı { public/private type değişkenler public/private sınıflar public/private type metotlar }
  • 71. 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.
  • 72. 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; } }
  • 73. Doğrusu: … HM.A = 3.12; ... Sonuc = HM.A ... public class HesapMakinesi{ private double a; public double A{ get{ return a; } set{ a = value; } } }
  • 74. 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.
  • 75. Metotlar Sınıf içinde tanımlanması: public/private return_type metot_adı (parametreler){ ..... } public void KokleriHesapla(){ ... } Dışarda kullanılması: object.metot_adı (parametreler); HM.KokleriHesapla ();
  • 76. Ö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
  • 77. Ö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
  • 78. Constructor... devam IkinciDerece Denklem = new IkinciDerece(); yerine IkinciDerece Denklem = new IkinciDerece(A, B, C); O zaman sınıfın içinde: public class Ikinci Derece{ private double a, b, c; ........ public IkinciDerece(double A, double B, double C){ a = A; b = B; c = C; } ......... }
  • 79. Constructor... devam Bazen şu stil kullanılıyor: public class Ikinci Derece{ private double a, b, c; ........ public IkinciDerece(double a, double b, double c){ this.a = a; this.b = b; this.c = c; } ......... }
  • 81. Önce fotoğrafları bulalım ve debug klasörüne yerleştirelim. 1.png 2.png 3.png 4.png 5.png 6.png
  • 82. 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(); } }
  • 83. Visual Studio Windows Form Form1 button1 picboxZar1
  • 84. 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(); } }
  • 86. İ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(); } }
  • 88. Sizin laboratuarda yapmanızı istediğim Oyun makinesi Bir böcü temizleme görevi: Niçin çok kazanılıyor?
  • 89. İ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(); }
  • 90. 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++
  • 91. Akış kontrolu:  Dallanmalar  if  switch  ?  Tekrarlar  for  while  do - while
  • 92. if if(önerme) ifade; if(önerme){ ifade; ifade ifade .... } if( a > b) x = Math.Sqrt(a-b); if( a > b){ x = a * a - b * b; y = Math.Sqrt(x); }
  • 93. if print “Passed”Grade >= 60 true false if(grade >= 60) tbSonuc.Text = “Geçti”; if(grade >= 60){ tbSonuc.Text = “Geçti”; }
  • 94. if if(ö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); }
  • 95. 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ı”)
  • 96. ? if(grade >= 90){ tbSonuc.Text = “AA”; } else{ tbSonuc.Text = “BA”; } if Peki, 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{ ....
  • 97. if if(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”; }
  • 99. 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!”;
  • 100. 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!”
  • 101. 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
  • 102. Tekrarlar  Tekrarlar  for  while  do - while
  • 103. for for(tarif ve ilk değer; kontrol; değişim){ ifade; ifade; ----- } for(int i = 0; i < 7; i++){ Thread.Sleep(100); at(); }
  • 104. Tekrarlar for(int i = 0; i < 7; i ++){ Thread.Sleep(100); at(); } int i; for(i = 0; i < 7; i++) { Thread.Sleep(100); at(); }
  • 105. Tekrarlar int i; for(i = 0; i < 7; i++){ Thread.Sleep(100); at(); } int i = 0; while(i < 7){ Thread.Sleep(100); at(); i++; } int i = 0; do{ Thread.Sleep(100); at(); i++; } while(i < 7);
  • 106. Ö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.
  • 107. 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 = (R1 R2 )/(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);
  • 109. 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"; } }
  • 110. 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)); } }
  • 111. 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.
  • 113. public class Gun { int kacincigun; public int KacinciGun { get { return kacincigun; } } public Gun(int kacincigun) { this.kacincigun = kacincigun; } }
  • 114. Gun... public string Topla(int Sonra) { int sonuc; sonuc = (kacincigun + Sonra) % 7; return Yaziya(sonuc); }
  • 115. 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; }
  • 116. 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; }
  • 117. 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
  • 118. 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 olsun BirAci.Radyan(); // Bunun değeri π/4 olsun. Nasıl yapacağınızı bilmediğim için parametreleri çeşitli yazdım...
  • 119. 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.
  • 120. Üst alma public double Ust(double X, int Y){ double sonuc = 1.0 if(Y > 0){ for(int i = 0; i < Y; i++){ sonuc *= X; } else{ for(int i = 0; i > Y; i--){ sonuc /= X; } return sonuc; }
  • 121. Ö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.
  • 122. 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.
  • 123. 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.
  • 124.
  • 125. public partial class TeleForm : Form { public TeleForm() { InitializeComponent(); } private void btnMesafeHesapla_Click(object sender, EventArgs e) {---} } public class Telemetre {---} public class Aci {---}
  • 126. 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()); } }
  • 127. 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() {---} }
  • 128. 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."; }
  • 129. Geçen haftanın Aci sınıfı
  • 130. 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"; } }
  • 131. 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; }
  • 132. 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; }
  • 133. 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; }
  • 134. Diziler  Array  ArrayList  HashTable  SortedList
  • 135. Array type [] array_identifier = new type[]; string [] Gunler = new string[7]; Gunler[0] = “Pazartesi”; Gunler[1] = “Salı”; Gunler[3] = “Çarşamba” - - - veya string[] Gunler = {“Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cuma”, “Cumartesi”};
  • 136. Array Avantajlar:  Kolay (her programlama dilinde var)  Hızlı  Üyenin tipini siz belirliyorsunuz Dezavantajlar  Boyu sabit  Araya üye sokmak zor
  • 137. 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); }
  • 138. 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 + “ “;
  • 139. Arraylist ArrayList identifier = new ArrayList(); ArrayList gunler = new ArrayList(); Peki boyu belli değil... gunler.Add(“Pazartesi”); gunler.Add(“Salı”); gunler[0].ToString() >>> “Pazartesi” verir.
  • 140. 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”);
  • 141. ArrayList  foreach ile çalışır.  Her türlü nesneyi taşır  Avantajlar: Otomatik boy Üye sokup çıkarmak çok kolay Kolay kullanış  Dezavantaj Yavaş
  • 142. Hashtable ArrayList gibi... Fakat indeks yerine nesne var. (Kullanımda nesne genellikle string) Hashtable Ulke = new Hashtable(), Ulke[“tr”] = “Türkiye”; Ulke[“de”] = “Almanya”; Ulke[“to”] = “Tonga”; veya Ulke.Add(“tr”, “Türkiye”); Ulke.Add(“de”, “Almanya”); -- -- --
  • 143. 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){ ---- }
  • 144. Hashtable Avantajlar:  Esnek kullanım  Hızlı bulma... Dezavantajlar  Sıraya sokulamaz  Kuruluş yavaş, yeni üye sokmak yavaş
  • 145. SortedList  ArrayList gibi, fakat eleman eklendikçe otomatik olarak sıraya sokuyor.  Hashtable gibi, fakat sıraya sokamama problemi yok Meselâ: Öğrenci isimlerini otomatik sıraya sokarak bir öğrenci koleksiyonu yaratabilir. Kelime- açıklama ikilisi ile sözlük yaratabilir...
  • 146. 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.
  • 147. Sınıf ve Ogrenci uygulaması
  • 148. 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
  • 149. 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(); }
  • 150. 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; }
  • 152. 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; }
  • 153. 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
  • 154. 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; } }
  • 155. 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
  • 156. …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ı.
  • 157. …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…
  • 158. …en küçük kareler Fark karelerinin toplamı = Σi(a xi+ b – yi)2 En küçük yapmak demek, a ve b’ye göre türev alıp sıfıra eşitlemektir… a’ya göre: 2 Σixi(a xi+ b – yi) = 0 düzenlersek: a Σixi 2 + b Σixi – Σixiyi = 0 b’ye göre: 2 Σi(a xi+ b – yi) = 0 düzenlersek: a Σi xi+ n b – Σiyi = 0
  • 159. …en küçük kareler a Σixi 2 + b Σixi = Σixiyi a Σi xi+ b n = Σiyi İki bilinmeyen için iki denklem! Toplamlara isim verelim… Kolay olsun: X2 = Σixi 2 X =Σixi XY = Σixiyi Y = Σiyi D = X2 * n – X*X a = (XY * n – X * Y) / D
  • 161. …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++; } }
  • 162. …en küçük kareler public 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; } } }
  • 163. …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 = ""; }
  • 164. …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
  • 165. İ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.
  • 166. İntegral namespace 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(); }
  • 167. İ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; } }
  • 168. İ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); } }
  • 169. Format  Yazmada ve okumada sayının, tarihin, diğer yazılanların şeklini yönetemiyorduk.  Sayı formatları  Tarih formatları  Kültür
  • 170. 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
  • 171. 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
  • 173. 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"); }
  • 174. 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"); }
  • 175. 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ı
  • 176. 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ı...
  • 177. ... ve Kültür  İki sembol: xx - XX  tr - TR  en - US  ru - RU  ar - SA  İki assembly gerekiyor: using System.Globalization using System.Threading
  • 178. 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); }
  • 179. 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
  • 180. Nasıl?  using System.IO  Stream, FileStream, File  Directory
  • 182. 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."; }
  • 183. 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: nn" + File.ReadAllText(tbDosyaIsmi.Text); }
  • 184. Alan (Field) Veri tabanları ile konuşma  Veri tabanı?  İlişkili Veri Tabanı Relational Data Base Tablo(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
  • 185. Örnek problem: Haber veri tabanı NeOldu
  • 186. Haber: Kullanıcı Ara Yüzü Konu seçimi Başlık Resim Metin
  • 187. 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; } }
  • 188. string metin; public string Metin { get { return metin; } } string resim; public string Resim { get { return resim; } }
  • 189. 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(); }
  • 190. Form’dakiler... private void Form1_Load(object sender, EventArgs e) { string[] konular = { "", "Müzik", "Sosyete", "Siyaset", "Film" }; cBoxKonu.DataSource = konular; }
  • 191. 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; }
  • 192. Web Sunucu (Apache, IIS, vs.) Client Browser (IE, Firefox, Opera, vs.) Internet Talep (Request) Talep (Request) Cevap(Response) Cevap (Response) Http Request Http Response Sunucu ile tarayıcının konuştuğu dil: HTML: Hyper Text Mark-up Language
  • 193. Web sayfası <html > <head > <title> Buraya başlık girer </title> </head> <body> Buraya gövde girer </body> </html> <h1> </h1>
  • 194. 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>
  • 195. 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>
  • 196. 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; }
  • 197. 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)
  • 198. <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>