320 likes | 442 Views
BPR151 ALGORİTMA VE PROGRAMLAMA - I. Öğr . Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http://bmyo.bartin.edu.tr/akgul. Bugünkü konular. Tip Dönüştürme Belirtmeden Tip Dönüştürme Belirterek Tip Dönüştürme Convert sınıfı Parse ( string ) Metodu TryParse ( string ) Metodu.
E N D
BPR151 ALGORİTMA VE PROGRAMLAMA - I Öğr. Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http://bmyo.bartin.edu.tr/akgul
Bugünkü konular • Tip Dönüştürme • Belirtmeden Tip Dönüştürme • Belirterek Tip Dönüştürme • Convert sınıfı • Parse(string) Metodu • TryParse(string) Metodu
Tip Dönüştürme • C#'ta düşük kapasiteli bir değişken, sabit ya da değişken ve sabitlerden oluşan matematiksel ifade daha yüksek kapasiteli bir değişkene atanabilir. • Buna belirtmeden tip dönüşümü denir. • Aşağıdaki tabloda belirtmeden otomatik tip dönüşümü ile ilgili ilişki verilmiştir.
Belirtmeden Tip Dönüştürme üzerine Notlar • byte, sbyte, short ve ushort türündeki değişkenlerle yapılan matematiksel işlemlerde oluşan matematiksel ifade sonucu intleşir • char türünü kendisinden daha kapasiteli bir sayısal türe belirtmeden dönüştürebiliriz. • Bu durumda ilgili karakterin Unicode karşılığı ilgili sayısal değişkene atanacaktır. • double ve decimal belirtmeden hiçbir tipe dönüştürülemez!
Belirterek Tip Dönüştürme • Belirterek tip dönüşümü genellikle derleyicinin izin vermediği durumlarda kullanılır. • Belirterek tip dönüşümüyle küçük tipin büyük tipe dönüştürülmesi sağlanabilse de aslında bu gereksizdir, çünkü aynı şeyi belirtmeden tip dönüşümüyle de yapabilirdik • Örnek: int a=5; byte b=(byte)a; // normal Örnek 2: int a=500; byte b=(byte)a; // ne olur ?
Tip dönüştürmede veri kaybı int a =16909320; // 00000001 00000010 00000100 00001000 byte b = (byte)a; Console.WriteLine(b); • Ekrana 8 yazacaktır.
Convert sınıfı • System isimalanınınaltındaki Convert sınıfıiçindetürdönüşümüyapabileceğimizbirçokmetotbulunur. • Bu metotlarlahemenhemen her türü her türedönüştürebiliriz. • Bununiçindeğişkentürlerininsınıf karşılıklarınıbilmeliyiz. • DeğişkentürleriveSınıf isimlerinin karşılıklarıaşağıdakitablodalistelenmiştir.
Convert.ToXXX(x) • Convert.ToBoolean(x) • Convert.ToByte(x) • Convert.ToSbyte(x) • Convert.ToInt16(x) • Convert.ToUInt16(x) • Convert.ToInt32(x) • Convert.ToUInt32(x) • Convert.ToInt64(x) • Convert.ToUInt64(x) • Convert.ToSingle(x) • Convert.ToDouble(x) • Convert.ToDecimal(x) • Convert.ToChar(x) • XXX yerine herhangi bir veri tipi yazılabilir. Parantez içine de herhangi veri tipindeki bir değer yazılabilir.
Convert.ToBoolean(x) • Burada parantez içindeki değerin sayısal değeri 0 ise sonuç false değilse true olur. • Sayı haricindeki diğer değerler her zaman hata verecektir. bool b1 = Convert.ToBoolean(132); bool b2 = Convert.ToBoolean("-132"); bool b3 = Convert.ToBoolean(0); bool b4 = Convert.ToBoolean("a123"); bool b5 = Convert.ToBoolean("True"); bool b6 = Convert.ToBoolean("False"); bool b7 = Convert.ToBoolean("Deneme"); • b1 ve b5’in değeri True • b3 ve b6’nin değeri False • b2 , b4 ve b7 hata verir. (True veya False haricindeki tümstringlerde hata verir.)
Convert.ToByte(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı byte tipine dönüştürür. • Eğer sayısal değer byte sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. byte b1 = Convert.ToByte(123); byte b2 = Convert.ToByte(1234); byte b3 = Convert.ToByte("-123"); byte b4 = Convert.ToByte("123"); byte b5 = Convert.ToByte("123.12"); byte b6 = Convert.ToByte(123.12); byte b7 = Convert.ToByte(0); byte b8 = Convert.ToByte("sds"); • b1 ve b4 ve b6’nın değerleri 123, b7’in değeri 0 diğerleri hata verir.
Convert.ToSByte(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı sbyte tipine dönüştürür. • Eğer sayısal değer sbyte sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. sbyte b1 = Convert.ToSByte(123); sbyte b2 = Convert.ToSByte(1234); sbyte b3 = Convert.ToSByte("-123"); sbyte b4 = Convert.ToSByte("1234"); sbyte b5 = Convert.ToSByte(0); sbyte b6 = Convert.ToSByte("sds"); sbyte b7 = Convert.ToSByte("123.12"); sbyte b8 = Convert.ToSByte(123.12); • b1 ve b8’in değerleri 123, b3’ün değeri -123, b5’in değeri 0 diğerleri hata verir.
Convert.ToInt16(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı short tipine dönüştürür. • Eğer sayısal değer short sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. short b1 = Convert.ToInt16(123); short b2 = Convert.ToInt16(1234); short b3 = Convert.ToInt16("-123"); short b4 = Convert.ToInt16("1234"); short b5 = Convert.ToInt16(0); short b6 = Convert.ToInt16("sds"); short b7 = Convert.ToInt16("12323434"); shortb8 = Convert.ToInt16("123.12"); short b9 = Convert.ToInt16(123.12); • b6, b7 ve b8 hata verir, diğerlerinde sorun olmayacak.
Convert.ToUInt16(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı ushort tipine dönüştürür. • Eğer sayısal değer ushort sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. ushort b1 = Convert.ToUInt16(123); ushort b2 = Convert.ToUInt16(1234); ushort b3 = Convert.ToUInt16("-123"); ushort b4 = Convert.ToUInt16("1234"); ushort b5 = Convert.ToUInt16(0); ushort b6 = Convert.ToUInt16("sds"); ushort b7 = Convert.ToUInt16("12323434"); ushortb8 = Convert.ToUInt16("123.12"); ushort b9 = Convert.ToUInt16(123.12); • b3, b6, b7 ve b8 hata verir, diğerlerinde sorun olmayacak.
Convert.ToInt32(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı int tipine dönüştürür. • Eğer sayısal değer int sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. int b1 = Convert.ToInt32(123); int b2 = Convert.ToInt32(1234); int b3 = Convert.ToInt32("-123"); int b4 = Convert.ToInt32("1234"); int b5 = Convert.ToInt32(0); int b6 = Convert.ToInt32("abc"); int b7 = Convert.ToInt32("123234342344323"); int b8 = Convert.ToInt32(123.4); int b9 = Convert.ToInt32("123.4"); • b6, b7 ve b9 hata verir, diğerlerinde sorun olmayacak.
Convert.ToUInt32(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı uint tipine dönüştürür. • Eğer sayısal değer uint sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. uint b1 = Convert.ToUInt32(123); uint b2 = Convert.ToUInt32(1234); uint b3 = Convert.ToUInt32("-123"); uint b4 = Convert.ToUInt32("1234"); uint b5 = Convert.ToUInt32(0); uint b6 = Convert.ToUInt32("abc"); uint b7 = Convert.ToUInt32("123234345645642344323"); uint b8 = Convert.ToUInt32(123.4); uint b9 = Convert.ToUInt32("123.4"); • b3, b6, b7 ve b9 hata verir, diğerlerinde sorun olmayacak.
Convert.ToInt64(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı long tipine dönüştürür. • Eğer sayısal değer long sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. long b1 = Convert.ToInt64(123); long b2 = Convert.ToInt64(123423423423423423445456234234433); long b3 = Convert.ToInt64("-123"); long b4 = Convert.ToInt64("1234"); long b5 = Convert.ToInt64(0); long b6 = Convert.ToInt64("abc"); long b7 = Convert.ToInt64("12323434234432334455344565465464"); long b8 = Convert.ToInt64(123.4); long b9 = Convert.ToInt64("123.4"); • b2, b6, b7 ve b9 hata verir, diğerlerinde sorun olmayacak.
Convert.ToUInt64(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı ulong tipine dönüştürür. • Eğer sayısal değer ulong sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. ulong b1 = Convert.ToUInt64(123); ulong b2 = Convert.ToUInt64(123423423423423423423456232344433); ulong b3 = Convert.ToUInt64("-123"); ulong b4 = Convert.ToUInt64("1234"); ulong b5 = Convert.ToUInt64(0); ulong b6 = Convert.ToUInt64("abc"); ulong b7 = Convert.ToUInt64("12323434234432334534523443465464"); ulong b8 = Convert.ToUInt64(123.42); ulong b9 = Convert.ToUInt64("123.4"); • b2, b3, b6, b7 ve b9 hata verir, diğerlerinde sorun olmayacak.
Convert.ToSingle(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı float tipine dönüştürür. • Eğer sayısal değer float sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. float b1 = Convert.ToSingle(123); float b2 = Convert.ToSingle(123423423423423423423454566234433); float b3 = Convert.ToSingle("-123"); float b4 = Convert.ToSingle("1234"); float b5 = Convert.ToSingle(0); float b6 = Convert.ToSingle("abc"); float b7 = Convert.ToSingle("12323434234432334534545643465464"); float b8 = Convert.ToSingle(123423.423); float b9 = Convert.ToSingle("123234.342"); • b2, b6 ve b7 hata verir, diğerlerinde sorun olmayacak.
Convert.ToDouble(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı double tipine dönüştürür. • Eğer sayısal değer double sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. double b1 = Convert.ToDouble(123); doubleb2 = Convert.ToDouble(1234234234234234234245543456234433); doubleb3 = Convert.ToDouble("-123"); doubleb4 = Convert.ToDouble("1234"); doubleb5 = Convert.ToDouble(0); doubleb6 = Convert.ToDouble("abc"); doubleb7 = Convert.ToDouble("12323434234432334534543465443535464"); doubleb8 = Convert.ToDouble(123423.423); doubleb9 = Convert.ToDouble("123234.342"); • b2, b6 ve b7 hata verir, diğerlerinde sorun olmayacak.
Convert.ToDecimal(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı decimal tipine dönüştürür. • Eğer sayısal değer decimal sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. decimal b1 = Convert.ToDecimal(123); decimal b2 = Convert.ToDecimal(12342342342342342342345623443345); decimal b3 = Convert.ToDecimal("-123"); decimal b4 = Convert.ToDecimal("1234"); decimal b5 = Convert.ToDecimal(0); decimal b6 = Convert.ToDecimal("abc"); decimal b7 = Convert.ToDecimal("123423423423423423423456234433435"); decimal b8 = Convert.ToDecimal(123423.423); decimal b9 = Convert.ToDecimal("123234.342"); • b2, b6 ve b7 hata verir, diğerlerinde sorun olmayacak.
Convert.ToChar(x) • Parantez içerisine girilen her hangi bir sayısal veya rakamlardan oluşmuş yazıyı char tipine dönüştürür. • Eğer sayısal değer char (0-65535) sınırlarının dışında ise taşma hatası verir. • Eğer dönüştürülemeyecek bir değer ise tip dönüştürme hatası verir. char b1 = Convert.ToChar(123); char b2 = Convert.ToChar(123423423); char b3 = Convert.ToChar("1234"); char b4 = Convert.ToChar(0); char b5 = Convert.ToChar("abc"); char b6 = Convert.ToChar("a"); char b7 = Convert.ToChar(1234.423); char b8 = Convert.ToChar("12.3"); • b1, b4 ve b6 geçerli, diğerleri hata verir!
Tip.Parse(string) • String tipini parse metodunu kullanarak herhangi bir tipe dönüştürebiliriz. • Örnek: • int a = int.Parse(“123”); • uint a = uint.Parse(“123”); • double b = double.Parse(“123.12”); • Burada dikkat edilmesi gerekenler: • parantez içindeki string in dönüştürülmek istenen tipe uygun yazılmış olmasıdır. • Tam sayılar için sayı virgüllü olmamalıdır! • İşaretsiz sayılar için sayı negatif olmamalıdır! • Rakamların başında veya sonunda boşluk olabilir, fakat aralarında boşluk olmamalıdır!
Parse Örnek usingSystem; classProgram { /* inch’i santimetreye dönüştürme */ staticvoidMain() { doubleinch; double santimetre; string değer; Console.Write("inch gir: "); değer =Console.ReadLine(); // girilen değeri okuyor inch=double.Parse(değer); // tip dönüştürülüyor santimetre =inch*2.54; Console.WriteLine("{0} inch {1} santimetre eder" ,inch, santimetre); } }
Tip Dönüştürme Üzerine Nolar • Yukarıdaki kod ile kullanıcıdan inch girilmesi isteniyor. • Kullanıcının uygun bir sayı gireceği varsayılıyor. • Peki ya kullanıcı rakamlar yerine harf girerse ne olacak? • veya girilen sayı double sınırları dışında ise ne olacak? • Çok Basit: Hata verecek • Console.Write("inch gir: "); • string değer =Console.ReadLine(); // girilen değeri okuyor • doubleinch=double.Parse(değer); // tip dönüştürülüyor
tip.TryParse() • TryParse() metodunu kullanın! • Bu durumda girilmiş yazı double tipine dönüştürülebilirse, dönüştürülüp inch değişkenine atanmış olacak. • Eğer dönüştürülemeyecek ise, yani geçersiz bir sayı veya sınırlar dışında ise inch değişkeni 0 olarak kalacaktır. • TryParse diğer tüm tipler için de geçerlidir. • TryParse metodu tipi dönüştürmeye başlamadan önce geçerli olup olmadığını kontrol eder. • doubleinch; • Console.Write("inch gir: "); • string değer =Console.ReadLine(); // girilen değeri okuyor • double.TryParse(değer, outinch); // tip dönüştürülüyor
TryParse örnek: usingSystem; classProgram { /* inch’i santimetreye dönüştürme */ staticvoidMain() { doubleinch; double santimetre; string değer; Console.Write("inch gir: "); değer =Console.ReadLine(); // girilen değeri okuyor double.TryParse(değer, outinch); // tip dönüştürülüyor santimetre =inch*2.54; Console.WriteLine("{0} inch {1} santimetre eder" ,inch, santimetre); } }
Dinlediğiniz için teşekkürler… Öğr. Gör. Bayram AKGÜL