Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BTP205 – Görsel Programlama Metinler ve Fonksiyonlar 1.

Benzer bir sunumlar


... konulu sunumlar: "BTP205 – Görsel Programlama Metinler ve Fonksiyonlar 1."— Sunum transkripti:

1 BTP205 – Görsel Programlama Metinler ve Fonksiyonlar 1

2 Bugün… Değişkenler üzerine daha fazla – Tip Dönüşümleri – Saymalar (Enumerations) – Yapılar (Structs) – Diziler (Arrays) – Metin İşlemleri (String Operations) Fonksiyonlar ve Yetkiler 2

3 Tip Dönüşümleri Örnekler – 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 3

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

5 Dolaylı Dönüşüm Örneği char ch = ‘a’; ushort num; num = ch; Console.WriteLine(“ch = {0}, num = {1}”, ch, num); 5 ch = a, num = 97

6 Dolaylı Tip Dönüşümleri TipGüvenler Dönüştürülebileceği Tipler charushort, int, uint, long, ulong, float, double, decimal byteshort, ushort, int, uint, long, ulong, float, double, decimal sbyteshort, int, long, float, double, decimal shortint, long, float, double, decimal ushortint, uint, long, ulong, float, double, decimal intlong, float, double, decimal uintlong, ulong, float, double, decimal longfloat, double, decimal ulongfloat, double, decimal floatdouble - decimal- 6

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

8 Örnek byte b; short s = 7; b = s; Console.WriteLine(“b = {0}, s = {1}”, b, s); 8 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); 9 b = 7, s = 7

10 Sınır Sorunu byte b; short s = 281; b = (byte) s; Console.WriteLine(“b = {0}, s = {1}”, b, s); 10 b = 25, s = byte sınırına girmez, taşar! 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. 11

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

13 Karmaşık Değişken Tipleri Saymalar (Enumerations - enum) Yapılar (Structures - struct) Diziler (Arrays) 13

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

15 enum Sözdizimi Tanım: enum {, … } 15

16 enum Sözdizimi Değişken tanımlama: ; Değer atama: =. ; 16

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

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); 18 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} 19 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) 20

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

22 Yapıları Tanımlamak struct { ; … } 22

23 Örnek struct Rota { public Yonler Yon; public double Uzaklik; } 23

24 Bir yapı değişkeni tanımlama Sözdizim: ; Örnek: Rota benimRotam; benimRotam.Yonler = Yonler.Kuzey; benimRotam.Uzaklik = 2.5; 24

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

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

27 Dizileri tanımlamak Sözdizimi: [] ; Örnek: – int[] tamsayiDizisi; – string[] metinDizisi; Bu tanımlamada elemanı olmayan bir referans tanımlaması yapılmıştır 27

28 İlk değerleme int[] dizi = new int[5]; – 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) 28

29 Dizi Elemanlarına Erişme dizi[5] = 10; – 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. 29

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

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

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

33 Metin İşlemleri (1) Birleştirme – 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(); 33

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

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

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

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 38

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 39

40 Fonksiyon Örneği class Program { static void CerceveCiz() { Console.WriteLine(“ ”); } static void Main(string[] args) { CerceveCiz(); Console.WriteLine(“| Merhaba! |”); CerceveCiz(); } | 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; } 41

42 Parametre alan fonksiyonlar static double Carpim(double a, double b) { return a * b; } 42

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

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 44

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

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 46

47 Değer ile çağırma 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); } 47 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); DiziGoster(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) 49

50 ref Örneği 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); } 50 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); } 51

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

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 53

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

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

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 56

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

58 struct Fonksiyonları struct MusteriAdi { public string adi, soyadi; public string Isim() { return adi + " " + soyadi; } 58

59 struct Fonksiyonlarını çağırmak MusteriAdi yeniMusteri; yeniMusteri.adi = "Ahmet"; yeniMusteri.soyadi = "Yavuz"; Console.WriteLine(yeniMusteri.Isim()); 59

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 60

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

62 Örnek 2 static void func(ref int deger) { … } static void func(int deger) { … } func(ref deger); func(deger); 62 İ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 63

64 Delegate Örneği 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; } 64 Tanımlama

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); Console.WriteLine("Result: {0}", fonk(param1, param2)); } 65

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; Console.WriteLine("Result: {0}", fonk(param1, param2)); } 66


"BTP205 – Görsel Programlama Metinler ve Fonksiyonlar 1." indir ppt

Benzer bir sunumlar


Google Reklamları