Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
BTP205 – Görsel Programlama
Metinler ve Fonksiyonlar
2
Bugün… Değişkenler üzerine daha fazla Fonksiyonlar ve Yetkiler
Tip Dönüşümleri Saymalar (Enumerations) Yapılar (Structs) Diziler (Arrays) Metin İşlemleri (String Operations) Fonksiyonlar ve Yetkiler
3
Tip Dönüşümleri Örnekler Dolaylı Dönüşümler Doğrudan Dönüşümler
Metni tam sayıya ya da tamsayıyı metne string int int string Rasyonel sayıyı tamsayıya (yuvarlama işlemleri) double int Dolaylı Dönüşümler Veri kaybı olmaz Derleyici tarafından yapılır Doğrudan Dönüşümler Veri kaybı olabilir Derleyici onaylar
4
Dolaylı Dönüşümler Dolaylı dönüşümler için sizin bir şey yapmanız gerekmez, ek kod yazılmaz. ushort ve char tipleri etkili biçimde dönüştürülebilirdirler, çünkü her ikisi de 0 ile arasında sayılar tutarlar.
5
Dolaylı Dönüşüm Örneği
char ch = ‘a’; ushort num; num = ch; Console.WriteLine(“ch = {0}, num = {1}”, ch, num); ch = a, num = 97
6
Dolaylı Tip Dönüşümleri
Güvenler Dönüştürülebileceği Tipler char ushort, int, uint, long, ulong, float, double, decimal byte short, ushort, int, uint, long, ulong, float, double, decimal sbyte short, int, long, float, double, decimal short int, long, float, double, decimal ushort int, uint, long, ulong, float, double, decimal int long, float, double, decimal uint long, ulong, float, double, decimal long float, double, decimal ulong float double - decimal
7
Doğrudan Dönüşümler Geniş tipler daha dar tiplere dönüştürülemezler (örn. short byte dönüşümü) Böyle durumlarda derleyici hata verir: Cannot implicitly convert type ‘short’ to ‘byte’. An explicit conversion exists (are you missing a cast?) Dönüşümü yapmak istediğinizden eminseniz, o halde doğrudan dönüşüm kullanmalısınız: Tamam, dönüşüm konusunda beni uyardığının farkındayım, ama olacaklar için sorumluluğu alıyorum.
8
Örnek byte b; short s = 7; b = s; Console.WriteLine(“b = {0}, s = {1}”, b, s); Cannot implicitly convert type ‘short’ to ‘byte’. An explicit conversion exists (are you missing a cast?)
9
Çözüm byte b; short s = 7; b = (byte) s; Console.WriteLine(“b = {0}, s = {1}”, b, s); b = 7, s = 7
10
281 byte sınırına girmez, taşar!
Sınır Sorunu 281 byte sınırına girmez, taşar! byte b; short s = 281; b = (byte) s; Console.WriteLine(“b = {0}, s = {1}”, b, s); b = 25, s = 281 256’dan taşma miktarı!
11
“Convert” ile Doğrudan Dönüşümler
Doğrudan dönüşüm yapmanın başka bir yolu “Convert” yöntemini kullanmaktır: int i = Convert.ToInt32(val) float f = Convert.ToSingle(val) double d = Convert.ToDouble(val) string s = Convert.ToString(val) Burada val birçok değişken tipinde olabilir.
12
Doğrudan Dönüşümler üzerine bir not
Eğer doğrudan dönüşüm mümkün değilse, programınız derlenmez. string s = “12.34”; double d = (double)s; Eğer doğrudan dönüşüm mümkünse ancak çalışma anında bir hata oluşursa, bir İstisna (Exception) oluşur (yani; programınız göçer ) string s = “abcd”; double d = Convert.ToDouble(s);
13
Karmaşık Değişken Tipleri
Saymalar (Enumerations - enum) Yapılar (Structures - struct) Diziler (Arrays)
14
Saymalar (Enumerations - enum)
double tipi noktalı sayıları tutmak için kullanılır bool tipi true ya da false değerlerini tutar Gerçek hayatta, başka tipler de vardır: Yön: Kuzey, Güney, Doğu, Batı Haftanın Günleri: Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar Aylar: Ocak, Şubat, …, Aralık Bu tipler C# dilinde saymalar (enum) ile uygulanır.
15
enum Sözdizimi Tanım: enum <tipAdı> { <değer1>,
… <değerN> }
16
enum Sözdizimi Değişken tanımlama: Değer atama:
<tipAdı> <değişkenAdı>; Değer atama: <değişkenAdı > = <tipAdı >.<değer>;
17
enum Örneği namespace Ch05Ex02 { enum Yonler { Kuzey, Guney, Dogu, Bati } class Program static void Main(string[] args) { Yon benimYonum = Yonler.Kuzey; Console.WriteLine(«Benim Yönüm= {0}", benimYonum );
18
enum üzerine ileri konular (1)
Saymalardaki (enum) her değer bir tamsayı olarak kaydedilir, 0’dan başlar ve birer birer artar Console.WriteLine("{0} = {1}, {2} = {3}", Yonler.Kuzey, (int) Yonler.Kuzey, Yonler.Guney, (int) Yonler.Guney); Kuzey = 0, Guney = 1
19
enum üzerine ileri konular (2)
Bazı saymaların tamsayı değerlerini değiştirebilirsiniz Belirtilmeyen değerler otomatik olarak bir öncekinin bir artırılmasıyla belirlenir enum Yonler {Kuzey=1, Guney, Dogu=4, Bati=8} Kuzey = 1, Guney = 2, Dogu = 4, Bati = 8
20
enum üzerine ileri konular (3)
Varsayılan tipi (int) byte, short ve long tiplerine dönüştürebilirsiniz (ve bunların işaretli ve işaretsiz versiyonlarına) enum Yonler : byte {Kuzey, Guney, Dogu, Bati} Console.WriteLine((byte)Yonler.Kuzey)
21
Yapılar (Struct) Yapılar (structs), birbirinden farklı veri tipinde birden fazla veri parçası içeren veri yapılarıdır. Öğrenci kayıtları (ad, yaş, doğum yılı vb.) Rota (Yön, uzaklık, etc.)
22
Yapıları Tanımlamak struct <yapıAdı> { <erişilebilirlik1> <tip1> <ad1>; <erişilebilirlik2> <tip2> <ad2>; … }
23
Örnek struct Rota { public Yonler Yon; public double Uzaklik; }
24
Bir yapı değişkeni tanımlama
Sözdizim: <YapıAdı> <değişkenAdı>; Örnek: Rota benimRotam; benimRotam.Yonler = Yonler.Kuzey; benimRotam.Uzaklik = 2.5;
25
Örnek Rota benimRotam; int benimYonum = -1; double benimUzakligim; Console.WriteLine("1) Kuzey\n2) Guney\n3) Dogu\n4) Bati"); do { Console.WriteLine("Bir yon seciniz:"); benimYonum = Convert.ToInt32(Console.ReadLine()); } while (benimYonum < 1 || benimYonum > 4); Console.WriteLine("Bir uzaklik giriniz:"); benimUzakligim = Convert.ToDouble(Console.ReadLine()); benimRotam.Yon = (Yonler)benimYonum; benimRotam.Uzaklik = benimUzakligim; Console.WriteLine("Rotam {0} yonunu ve {1} uzakligini gosteriyor", benimRotam.Yon, benimRotam.Uzaklik);
26
Diziler Aynı tipte çok sayıda veriyi tutmak için kullanılır
int not1, not2, not3, …; int[] notlar; Diziler bazı işlemleri kolaylaştırır Bütün değişkenlerin ilk değerini sıfıra eşitlemeniz gerektiğini düşünün.
27
Dizileri tanımlamak Sözdizimi: Örnek:
<tip>[] <ad>; Örnek: int[] tamsayiDizisi; string[] metinDizisi; Bu tanımlamada elemanı olmayan bir referans tanımlaması yapılmıştır
28
İlk değerleme int[] dizi = new int[5]; int[] dizi = {5, 9, 10, 2, 99};
Varsayılan ilk değerli 5 elemanlı bir dizi (sayılar için 0) int[] dizi = {5, 9, 10, 2, 99}; İlk değerleri belirli 5 elemanlı bir dizi int[] dizi = new int[5] {5, 9, 10, 2, 99}; 5 elemanlı ve ilk değerleri belirli bir dizi int[] dizi = new int[10] {5, 9, 10, 2, 99}; 10 elemanlı ve ilk 5 elemanının ilk değerleri belirli olan dizi (geri kalanlara varsayılan değer atanır)
29
Dizi Elemanlarına Erişme
Dizinin 6’ıncı elemanına 10 değeri atanmıştır İndeksleme 0’dan başlar (1’den değil) int sayi = dizi[5]; Dizinin 6’ıncı elemanı bir değişkene atanmıştır for (int i = 0; i < dizi.Length; i++) { Console.WriteLine(dizi[i]); } Tüm dizi elemanları ekrana yazdırılır.
30
Örnek string[] arkadaslarim = { "Koray", "Cihan", "Serhan" }; Console.WriteLine("Arkadaslarimdan {0} tanesi:", friendNames.Length); for (int i = 0; i < arkadaslarim.Length; i++) { Console.WriteLine(arkadaslarim[i]); }
31
Aynı örnek foreach ile string[] arkadaslarim = { "Koray", "Cihan", "Serhan" }; Console.WriteLine(" Arkadaslarimdan {0} tanesi:", friendNames.Length); foreach (string arkadas in arkadaslarim) { Console.WriteLine(arkadas); }
32
Çok Boyutlu Diziler int[,] matris = new int[5, 8];
matris[i, j] şeklinde erişilir int[,,] kup = new int[3, 5, 8]; int[,] matris = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 3x4 büyüklüğünde iki-boyutlu dizi (3 satır, 4 sütun)
33
Metin İşlemleri (1) Birleştirme Belirli bir yerdeki karaktere erişme
str = str1 + str2; Belirli bir yerdeki karaktere erişme char ch = str[3]; // 4’üncü eleman ch değişkenine atanır Uzunluğunu bulma int metinUzunlugu = str.Length; Bütün karakterleri bir karakter dizisine koyma char[] chars = str.ToCharArray();
34
Metin İşlemleri (2) Büyük ya da küçük harfe çevirme
str2 = str1.ToUpper(); str2 = str1.ToLower(); Bu metodlar str1’i değiştirmez! Eğer str1’in kendisini değiştirmek isterseniz: str1 = str1.ToLower(); Başındaki ve sonundaki beyaz boşlukları atma (boşluk, tab, yeni satır) : str2 = str1.Trim();
35
Metin İşlemleri (3) Sadece başındaki beyaz boşlukları atma:
str2 = str1.TrimStart(); Sadece sonundaki beyaz boşlukları atma : str2 = str1.TrimEnd(); Alt metinler: string str1 = “marabalar”; string str2 = str1.SubString(1, 5); // “araba” str2 = str1.SubString(1); // “arabalar”
36
Split() Split() metodu ile bir metni bölebilirsiniz
Split() metodu bir metin dizisi döner Ayırıcı karakterleri bir karakter dizisi şeklinde alır Eğer parametre verilmezse metni sadece boşluğa göre böler string metin = “Fenerbahcem benim biricik sevgilim”; string[] dizi = str.Split(); foreach (string s in dizi) { Console.WriteLine(s); } Fenerbahcem benim biricik sevgilim
37
Split() ile ayırıcıları kullanmak
string metin= “1,2,3,4,5”; char[] ayirici= {‘,’}; string[] dizi = str.Split(ayirici); foreach (string s in dizi) { Console.WriteLine(s); } 1 2 3 4 5
38
Diğer Metin İşlemleri Aşağıdaki metin işlemlerini kendiniz inceleyiniz: CompareTo, Equals Contains StartsWith, EndsWith IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny PadLeft, PadRight Remove Replace
39
Fonksiyonlar Bazı görevlerin program içinde birçok noktada tekrarlanması gerekebilir örn. Bir dizinin en büyük elemanını bulmak Çözüm: Kodu bir fonksiyona yazın ve onu tekrar tekrar çağırın Nesne-tabanlı programlamada fonksiyon objelerine metod denir
40
‘static’ yazmayı unutmayın!
Fonksiyon Örneği class Program { static void CerceveCiz() Console.WriteLine(“ ”); } static void Main(string[] args) CerceveCiz(); Console.WriteLine(“| Merhaba! |”); | Merhaba! | ‘static’ yazmayı unutmayın!
41
Değer dönen fonksiyonlar
static int YasOku() { Console.Write(“Yasinizi giriniz: ”); int yas = int.Parse(Console.ReadLine()); if (yas < 1) return 1; else if (yas > 120) return 120; else return yas; }
42
Parametre alan fonksiyonlar
static double Carpim(double a, double b) { return a * b; }
43
Parametre olarak dizi alan fonksiyonlar
class Program { static int MaxDeger(int[] intDizi) { int maxDeger = intDizi[0]; for (int i = 1; i < intDizi.Length; i++) { if (intDizi[i] > maxDeger) maxDeger = intDizi[i]; } return maxDeger ; static void Main(string[] args) { int[] benimDizim = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int max = MaxDeger(benimDizim ); Console.WriteLine("BenimDizim’deki maksimum deger {0} dir.", max);
44
Parametre Dizileri Eğer bir fonksiyon değişken sayıda parametre alabiliyorsa, bu durumda parametre dizileri kullanabilirsiniz Örn. Console.WriteLine(format, params) Format metininden sonra istediğiniz sayıda parametre kullanabilirsiniz Parametre dizileri params anahtar sözcüğüyle tanımlanır Parametre dizisi fonksiyonun parametre listesinde son parametre olmalıdır
45
params Örneği class Program { static int DegerlerToplami(params int[] degerler) { int toplam= 0; foreach (int deger in degerler) { toplam += deger; } return toplam; static void Main(string[] args) { int toplam = DegerlerToplami(1, 5, 2, 9, 8); Console.WriteLine("Toplanan Degerler = {0}", toplam);
46
Değer ile çağırma, Referans ile çağırma
Bir fonksiyonda parametre olarak aldığınız bir değer-tipli argümanın değerini değiştirirseniz, main fonksiyondaki değişken bundan etkilenmez Çünkü, değişkenin sadece değeri gönderilmiştir Ancak eğer referans-tipli bir parametrenin değerini değiştirirseniz, main fonksiyondaki argümanın da değeri değiştirilir Çünkü nesnenin kendisi transfer edilir Dizileri referans-tipi olarak düşünebilirsiniz
47
Değer ile çağırma degerin iki kati = 10 main icinde sayi: 5
static void IkiKatiniGoster(int deger) { deger *= 2; Console.WriteLine(“degerin iki kati = {0}”, deger); } static void Main(string[] args) { int sayi = 5; IkiKatiniGoster(myNumber); Console.WriteLine(“main icinde sayi: ” + sayi); degerin iki kati = 10 main icinde sayi: 5
48
Referans il çağırma static void IlkiniDegistir(int[] arr) { dizi[0] = 99; } static void Main(string[] args) int[] dizi = {1, 2, 3, 4, 5}; DiziGoster(dizi); IlkiniDegistir(dizi);
49
ref ve out Main fonksiyonda bir argümanın değerini ref anahtar sözcüğüyle değiştirebilirsiniz Fonksiyona gönderdiğiniz bir argümanı out anahtar sözcüğüyle bir fonksiyonun çıktısı olarak tanımlayabilrsiniz out parametreleri fonksiyon çağrılmadan önce ilkdeğerlemeye ihtiyaç duymaz (değerleri fonksiyon tarafından belirlenir)
50
ref Örneği degerin iki kati = 10 Main icinde sayi: 10
static void IkiKatiniGoster (ref int deger) { deger*= 2; Console.WriteLine(“degerin iki kati = {0}”, deger); } static void Main(string[] args) { int sayi = 5; IkiKatiniGoster(ref sayi); Console.WriteLine(“Main icinde sayi: ” + sayi); degerin iki kati = 10 Main icinde sayi: 10
51
out Örneği static void OrtVeToplamBul(int[] dizi, out double ort, out int toplam) { toplam = 0; foreach (int sayi in dizi) { toplam += sayi; } ort = (double) toplam / dizi.Lenght; static void Main(string[] args) { int toplam; double ort; int[] benimDizim = {3, 4 , 8, 2, 7}; OrtVeToplamBul(benimDizim, out ort, out toplam);
52
Başka bir out örneği static int MaxDeger(int[] intDizi, out int maxIndex) { int maxDeger = intDizi[0]; maxIndex = 0; for (int i = 1; i < intDizi.Length; i++) { if (intDizi[i] > maxVal) { maxDeger = intDizi[i]; maxIndex = i; } return maxDeger;
53
Değişkenlerin kapsamı
Fonksiyonlar içindeki değişkenlere diğer fonksiyonlar tarafından erişilemez Bunlara yerel (lokal) değişkenler denir Class tanımlamasında kullanılan değişkenler ise tüm fonksiyonlar tarafından erişilebilirdir Bunlara global değişkenler denir Static olmaları gerekir ve böylece static fonksiyonlar tarafında erişilebilirler Bir blok içinde (for, while, {}, vb.) tanımlanan değişkenler sadece o blok içinde tanımlıdırlar
54
Main Fonksiyon Main fonksiyion bir C# programının giriş noktasıdır
Bir metin dizi parametresi alır ve bu dizinin elemanlarına komut satırı parametreleri denir Main için aşağıdaki tanımlamaların hepsi geçerlidir: static void Main() static void Main(string[] args) static int Main() static int Main(string[] args)
55
Komut satırı parametreleri
class Program { static void Main(string[] args) Console.WriteLine("{0} komut satiri parametresi belirtilmistir:", args.Length); foreach (string arg in args) Console.WriteLine(arg); }
56
Visual Studio IDE’sinde komut satırı argumanı vermek
Solution Explorer kısmında proje ismine sağ tıklayınız ve Properties’i seçiniz Debug sekmesini seçiniz Komut satırı parametrelerini kutuya yazınız Uygulamayı çalıştırınız
57
Komut satırı parametrelerini komut satırında belirlemek
Bir komut satırı açınız Programın çalıştırılabilir çıktısının olduğu dizine gidiniz Çalıştırılabilir dosyanın adını ve argümanları yazınız prog.exe 256 dosya.txt “uzun bir arguman”
58
struct Fonksiyonları struct MusteriAdi { public string adi, soyadi; public string Isim() return adi + " " + soyadi; }
59
struct Fonksiyonlarını çağırmak
MusteriAdi yeniMusteri; yeniMusteri.adi = "Ahmet"; yeniMusteri.soyadi = "Yavuz"; Console.WriteLine(yeniMusteri.Isim());
60
Fonksiyon Overloading
Bir fonksiyonun birçok imzası olabilir Aynı fonksiyon ismi fakat farklı parametreler örn. Console.WriteLine() Visual Studio’nun Intellisense özelliği doğru fonksiyonu seçmemize yardımcı olur
61
Örnek 1 static int MaxDeger(int[] intDizi) { … } static double MaxDeger(double[] doubleDizi) { static void Main(string[] args) { int[] dizi1 = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; double[] dizi2 = { 0.1, 0.8, 0.3, 1.6, 0.2}; int maxDeger1 = MaxDeger(dizi1); double maxDeger2 = MaxDeger(dizi2);
62
Örnek 2 static void func(ref int deger) { … } static void func(int deger) { … } func(ref deger); func(deger); İmzalar farklı olduğu için kullanım doğrudur! ref anahtar sözcüğü fonksiyonları farklılaştırır!
63
Temsilciler (Delegates)
Fonksiyon referansları (adresleri) C ve C++ daki “Fonksiyon İşaretçileri” Tanımlama: Bir dönüş tipi ve parametre listesi belirleyin Atama: Fonksiyon referansını bir temsilciye çevirin Çağırma: Sadece temsilci ismini kullanın
64
Delegate Örneği Tanımlama delegate double MyDelegate(double num1, double num2); static double Çarpma(double param1, double param2) { return param1 * param2; } static double Bolme(double param1, double param2) { return param1 / param2;
65
Delegate Örneği (devam)
static void Main(string[] args) { MyDelegate fonk; double param1 = 5; double param2 = 3, fonk = new MyDelegate(Carpma); Console.WriteLine("Result: {0}", fonk(param1, param2)); process = new MyDelegate(Bolme); }
66
Daha kolayı static void Main(string[] args) { MyDelegate fonk; double param1 = 5; double param2 = 3, fonk = Carpma; Console.WriteLine("Result: {0}", fonk(param1, param2)); fonk = Bolme; }
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.