C# 7 ile gelen Yeni Özellikler

Normal 0 21 false false false TR X-NONE X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:8.0pt; mso-para-margin-left:0cm; line-height:107%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;} §  Out Anahtar Kelimesi §  Pattern Matching §  Switch Expression §  Yerel Fonksiyonlar §  Tuples §  Binary Literal §  Metotların Ref Döndürmesi §  Throw Expression   Yerel Fonksiyonlar C# 7 ile birlikte fonksiyon içinde fonksiyon tanımlayabilmemizin önü açıldı. Bu sayede artık yerel fonksiyonlar tanımlayabileceğiz.   public int fonksiyon1(int sayi1,int sayi2)     {         int fontsiyon(int sayi)         {                 sayi++;             return sayi*=sayi;         }               return fonksiyon(sayi1)+sayi2;     }   Binary Literal Bu özellikle birlikte sayısal ifadeler binary olarak tanımlanabilecek. Aynı zaman da digit ayraçlarıyla büyük sayıları binary veya heksadesimal olarak ayırabileceğiz. Bu daha kolay okuma da sağlayacaktır. int sayi1 = 2_000_123; int sayi2 = 0x3EEE_1111; int sayi3 = 0b0001_1100_1111_0000; var d = 123_456; var x = 0xAB_CD_EF;   Metotların Ref Döndürmesi Metotlara C# programlama dilinde ref değer gönderebiliyorduk. C# 7 ile beraber metotlar ref değeri de döndürebilecek. bu Referans tipi olarak dönmektedir. public ref int Bul(int sayi, int[] sayilar) {     for (int i = 0; i < sayilar.Length; i++)     {         if (sayilar[i] == sayi)         {             return ref sayilar[i];         }     }     thrownew IndexOutOfRangeException($"{nameof(sayi)} bulunamadı!"); }     Out Anahtar Kelimesi Out anahtar kelimesini kullanarak daha önce metotlara parametre geçirebiliyorduk. Out parametresi birden çok değer döndürmek istediğinizde oldukça popüler bir kullanıma sahiptir. bildiğiniz gibi out parametresi referans tipidir ve bir argüman olarak çalışmaktadır. Fakat out parametreye geçireceğiniz değişkeni daha önce tanımlamanız gerekmektedir.  C# 7 ile birlikte out parameteresi olarak değişkenleri aynı anda tanımlayabiliyoruz. publicvoid KooridnatCiz(Point p) {     p.GetCoordinates(out int lang, out int long);     WriteLine($"({lang}, {long})"); }   Out parametresinde değişken tanımlanın yanında var tipi değiştekde tanımlayabilirsiniz. Değişkenin kullanıdığı zaman sadece sınırlı kapsam içerdiğini dolayısıyla bunları metotun dışında kullanamayacağınızı unutmayın. Değişkeni doğrudan argüman olarak tanımlayabildiğimiz için C# 7 bunlarıda da var değer olarak tanımlamamıza izin verir. Dolayısıyla hangi tip değişken tanımladım diye kontrol yapmanıza gerek kalmaz. bildiğiniz gibi var tipi değişkenler dönüşebilmektedir.   p.KooridnatCiz(out var lang, out var long);   Pattern Matching is anahtar kelimesi ile Pattern Matching özelliğini kullanabiliriz. Örneğin bir type pattern yaparak çalışma zamanında tipe göre işlem yapabiliriz. publicvoid deneme(object o) {     if (o isnull) return;     // sabit pattern "null"     if (!(o isint sayi)) return; // tip pattern "int sayi"     WriteLine(new string('*', sayi)); }   Switch Expression switch-case yapısı daha önceki c# programlama dili versiyonlarında oldukça sınırlıydı. Artık daha kompleks yapılar kurabiliyor ve null kontrolü, sınıf kullanımı gibi özellikleride switch- case yapımızda kullanabiliyoruz. Örnek 1: switch(sekil) {     case Daire c:         WriteLine($"circle with radius {c.Radius}");         break;     case Ucgen s when (s.Length == s.Height):         WriteLine($"{s.Length} x {s.Height} kare");         break;     case Ucgen r:         WriteLine($"{r.Length} x {r.Height} üçgen");         break;     default:         WriteLine("bilinmeyen şekil");         break;     casenull:         thrownew ArgumentNullException(nameof(sekil)); }   Örnek 2: public static int deneme(IEnumerable<object> values) {     var toplam = 0;     foreach (var item in values)     {         switch (item)         {             case int val:                 toplam += val;                 break;             case IEnumerable<object> altListe:                 toplam += deneme(altListe);                 break;         }     }     return toplam; } Tuples Tuples kullanımı eski bir kullanım olmasına rağmen c# 7 ile yenilenerek gelmiştir. tuple type ve tuple literal bir yenilik olarak karşımıza çıkmaktadır. Tuple tipleri değer tipi değişkenlerdir. System.Tuple isim alanını kullanmaktadır. Birden fazal değer döndürmek için Tuple kullanabilirsiniz. Birden fazla parametre olsa dahi tek nesne olarak işlem görmektedir. Çoklu değer döndürmek için out paramtresi tercih etmeden değer döndürebilirsiniz. ( string, string, string, string) getKisi() {     //Kişi bilgilerini veritabanından veya başka bir kaynaktan okuyabilirsiniz     string strIsim = "Volkan";     string strAdres = "Kadıköy";     string strSehir= "İstanbul";      return(strIsim, strAdres, strSehir); // tuple literal }   //aşağıdaki metotu çağırdınızda çoklu değerleri döndürecektir.  var kisiBilgi= getKisi(); WriteLine("Kisi bilgi:  {kisiBilgi .Item1} {kisiBilgi .Item2} {kisiBilgi .Item3}");   Yukarıdaki örnekte çoklu değerleri tuple kullanarak kolayca elde edebiliyoruz. Fakat item1,item2 isimleri alakası ve kafa karıştırıcıdır. bu yüzden anlamlı isimler kullanarak aşağıdaki örneği inceleyelim.   (string strIsim, string strAdr, string strSe) getKisi() {     //kodlarınızı buraya yazıyorsunuz }   //metotu belirlenmiş ismi ile çağırdığınız zaman değerler aşağıda gözükecektir var kisiBilgi= getKisi(); WriteLine("kisi bilgi: {kisiBilgi.strIsim} {kisiBilgi.strAdr} {kisiBilgi.strSe} ");   Bunlara ek olarak tüm değerleri Tuple Literal olarakta döndürebilirsiniz. return (strIsim: strIsim, strAdr: strAdres, strSe: strSehir); Tuple Hash tablosu veya Dictionary kullanarak kolayca değiştirebileceğiniz ve döndürebileceğiniz bir sisteme sahiptir. Tek durumda birden fazla değeri depoladığınız List yerinede kullanabilirsiniz. .NET üstünde bir Tuple tip tanımlıdır. Bu referans tipi bir değişkendir. C#ile gelen değiştirilebilir değer türü Tuple ise daha performanslıdır. Bazı zamanlarda tüm tuple paketine ulaşmadan sadece değerlerine ihtiyacınız olabilir. O zaman C# 7 ile gelen Deconstruction özelliğini kullanarak istediğiniz parçayı oradan çekip alabilirsiniz. ( string strIsim,  string strAdr,  string strSe) = getKisi(); Console.WriteLine($"Adres: { strAdr }, Şehir: { strSe }");   Throw Expression Bir try-catch yapısının herhangi bir yerinde throw kullanabilirsiniz. C# 7 ile istediğiniz bir yerde throw fırlatabilirsiniz. class Kisi {     public string isim { get; }     public Kisi(string isim_) => Name = isim_ ?? throw new ArgumentNullException(isim_);     public string ilkismigetir()     {         var parts = isim.Split(" ");         return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException("isim yok!");     }     public string sonismigetir() => throw new NotImplementedException(); }

C# 7 Kitabım Çıktı!

  Önemli: Kitap hakkında yorumlarınızı ve sonraki baskılarda olmasını veya daha fazla üstünde durulmasını istediğiniz konuları bu postun altına yazabilirsiniz. C# 7.0 Programlama dilini baştan sona size öğreten ve uygulayan bir kitabı elinizde tutmaktasınız. Visual Studio 2017 ile beraber gelen Cross Platform desteği ile microsoft teknolojileri daha fazla değer kazanmıştır. IOS ve Android uygulamalarını Visual Studio 2017 ile birlikte geliştirebilmektesiniz. Bu programlama dilinin yükselişini gösterirken aynı zamanda bu programlama dilini bilerek okulunuzda veya iş yaşamınızda bir adım daha öne geçeceksiniz. C# programlama dili nesne yönelimli bir dil olduğu için bu kavramlar ve nasıl uygulanacağı size ayrıntılarıyla anlatılmıştır. C# programlama dilini hem görsel hem de kodsal olarak öğrenebilmeniz tasarlanmıştır. Veri tabanı programlama ile temel veritabanı işlemlerinizi gerçekleştirebilirsiniz. REST ve SOAP web servisleri bu kitapta ayrıntılarıyla ele alınmıştır. Büyük bir uygulama geliştirmek için fazla beklemenize gerek yok. Hemen C# 7.0 programlama dilini öğrenerek büyük projeler içine girebilirsiniz.  Kitaptaki konuların ana başlıkları: 1. Bölüm: C# Nasıl Doğdu ve Nasıl Gelişti?.2. Bölüm: Visual Studio İnceleme ve Tanıma3. Bölüm: Windows Form Bileşenlerini Tanıma ve Kullanma4. Bölüm: Temel Veri Tipleri ve Değişkenler5. Bölüm: Operatörler, Döngüler ve Deyimler6. Bölüm: Diziler ve String’ler7. Bölüm: Test ve Hata Yakalama8. Bölüm: Sınıflar, Nesneler ve Metotlar9. Bölüm: Kalıtım10. Bölüm: Indeksleyiciler ve Özellikler.11. Bölüm: Interface, Structure ve Enumaration12. Bölüm: Grafik Programlama13. Bölüm: I/O (Input/Output) İşlemleri14. Bölüm: Delegeler ve Olaylar15. Bölüm: Jenerik Koleksiyonlar, StringBuilder, Regular Expression, Bellek Yönetimi16. Bölüm: Çok Kanallı, Asenkron ve Paralel Programlama17. Bölüm: Internet ve Ağ Uygulamaları18. Bölüm: Veri Tabanı İşlemleri19. Bölüm: XML ve Web Servisleri ile Çalışmak20. Bölüm: LINQ (Language Integrated Query)21. Bölüm: C# ile ilgili Özel Konular22. Bölüm: C# 7 ile Gelen Yeni Özellikler23. Bölüm: C# ile iOS ve Android Uygulamaları ve Geliştirme   Yayın Tarihi 2017-03-20 ISBN 6058352742 Baskı Sayısı 1. Baskı Dil TÜRKÇE Sayfa Sayısı 638 Cilt Tipi Karton Kapak Kağıt Cinsi 1. Hm. Kağıt Boyut 16.5 x 23.5 cm   Yazar Hakkında:  Volkan ATASEVER, Software4Galaxy şirketinde kurucu ve Genel Müdürdür. Bilgisayar Mühendisidir. Birçok üniversitede eğitim ve seminer vermiştir. PCWorld ve T3 dergilerinde köşe yazarlığı yapmış, daha önce de üç kitap yazmıştır.

C# 7 ile gelen Tuples

Tuples kullanımı eski bir kullanım olmasına rağmen c# 7 ile yenilenerek gelmiştir. tuple type ve tuple literal bir yenilik olarak karşımıza çıkmaktadır. Tuple tipleri değer tipi değişkenlerdir. System.Tuple isim alanını kullanmaktadır. Birden fazal değer döndürmek için Tuple kullanabilirsiniz. Birden fazla parametre olsa dahi tek nesne olarak işlem görmektedir. Çoklu değer döndürmek için out paramtresi tercih etmeden değer döndürebilirsiniz. ( string, string, string, string) getKisi() {     //Kişi bilgilerini veritabanından veya başka bir kaynaktan okuyabilirsiniz     string strIsim = "Volkan";     string strAdres = "Kadıköy";     string strSehir= "İstanbul";      return(strIsim, strAdres, strSehir); // tuple literal }   //aşağıdaki metotu çağırdınızda çoklu değerleri döndürecektir.  var kisiBilgi= getKisi(); WriteLine("Kisi bilgi:  {kisiBilgi .Item1} {kisiBilgi .Item2} {kisiBilgi .Item3}");   Yukarıdaki örnekte çoklu değerleri tuple kullanarak kolayca elde edebiliyoruz. Fakat item1,item2 isimleri alakası ve kafa karıştırıcıdır. bu yüzden anlamlı isimler kullanarak aşağıdaki örneği inceleyelim.   (string strIsim, string strAdr, string strSe) getKisi() {     //kodlarınızı buraya yazıyorsunuz }   //metotu belirlenmiş ismi ile çağırdığınız zaman değerler aşağıda gözükecektir var kisiBilgi= getKisi(); WriteLine("kisi bilgi: {kisiBilgi.strIsim} {kisiBilgi.strAdr} {kisiBilgi.strSe} ");   Bunlara ek olarak tüm değerleri Tuple Literal olarakta döndürebilirsiniz. return (strIsim: strIsim, strAdr: strAdres, strSe: strSehir); Tuple Hash tablosu veya Dictionary kullanarak kolayca değiştirebileceğiniz ve döndürebileceğiniz bir sisteme sahiptir. Tek durumda birden fazla değeri depoladığınız List yerinede kullanabilirsiniz. .NET üstünde bir Tuple tip tanımlıdır. Bu referans tipi bir değişkendir. C#ile gelen değiştirilebilir değer türü Tuple ise daha performanslıdır. Bazı zamanlarda tüm tuple paketine ulaşmadan sadece değerlerine ihtiyacınız olabilir. O zaman C# 7 ile gelen Deconstruction özelliğini kullanarak istediğiniz parçayı oradan çekip alabilirsiniz. ( string strIsim,  string strAdr,  string strSe) = getKisi();   Console.WriteLine($"Adres: { strAdr }, Şehir: { strSe }");

C# 6.0 Kitabım Çıktı!

  Önemli: Kitap hakkında yorumlarınızı ve sonraki baskılarda olmasını veya daha fazla üstünde durulmasını istediğini konuları bu postun altına yazabilirsiniz.   Kitabı sipariş vermek için SİPARİŞ LİNKİ - Kitapyurdu Kitabı sipariş vermek için SİPARİŞ LİNKİ - Hepsiburada Kitabı sipariş vermek için SİPARİŞ LİNKİ - D&R   YAYINEVİ: LEVEL KİTAP       YAZAR: VOLKAN ATASEVER  DİZİ EDİTÖRÜ: Uğur GELİŞKEN KİTAP ADI: C# 6.0 ISBN: 9786056567902 SAYFA SAYISI: 526 EBAT: 16,5*23,5 cm KÂĞIT: 1. Hamur KAPAK TASARIMI: Yunus Karaaslan DAĞITIM TARİHİ: 20.05.2015 C# 6.0 programlama dilini baştan sona size öğreten ve uygulayan bir kitabı elinizde tutmaktasınız. Visual Studio 2015 sürümünde gelen Cross Platform desteği ile Microsoft teknolojileri daha fazla değer kazanmıştır. iOS ve Android uygulamalarını Visual Studio 2015 ile birlikte geliştirebilmektesiniz. Bu programlama dilinin yükselişini gösterirken, aynı zamanda bu programlama dilini bilerek okulunuzda veya iş yaşamınızda bir adım daha öne geçeceksiniz. C# programlama dili Nesne Yönelimli bir dil olduğu için bu kavramlar ve nasıl uygulanacağı size ayrıntılarıyla anlatılmıştır. C# programlama dilini hem görsel hem de kodsal olarak öğrenebilmeniz hedeflenmiştir. Veri tabanı programlama ile temel veritabanı işlemlerinizi gerçekleştirebilirsiniz. REST ve SOAP web servisleri bu kitapta ayrıntılarıyla ele alınmıştır. Büyük bir uygulama geliştirmek için fazla beklemenize gerek yok; hemen C# 6.0 programlama dilini öğrenerek büyük projeler içine girebilirsiniz.   •C# Nasıl Doğdu ve Nasıl Gelişti • Visual Studio 2015'i İnceleme ve Tanıma •Windows Form Bileşenlerini Tanıma •Temel Veri Tipleri ve Değişkenler •Operatörler, Döngüler ve Deyimler •Diziler ve String'ler •Test ve Hata Yakalama •Sınıflar, Nesneler ve Metotlar •Kalıtım •Indeks'leyiciler ve Özellikler •Interface, Structure ve Enumaration •Grafik Programlama •I/O (Input/Output) İşlemleri •Delegeler ve Olaylar •Jenerik Koleksiyonlar, StringBuilder, Regular Expression, Bellek Yönetimi •Çok kanallı, Asenkron ve Paralel Programlama •Internet ve Ağ Uygulamaları •Veri Tabanı İşlemleri •XML ve Web servisleri ile çalışmak •LINQ (Language Integrated Query) •Java ile C# arasındaki benzerlik •TFS Kullanımı •Mobil Programlama •C# ile Algoritma Örnekleri   Kitaptaki konuların ana başlıkları: 1. Bölüm: C# Nasıl Doğdu ve Nasıl Gelişti?. 2. Bölüm: Visual Studio İnceleme ve Tanıma 3. Bölüm: Windows Form Bileşenlerini Tanıma ve Kullanma 4. Bölüm: Temel Veri Tipleri ve Değişkenler 5. Bölüm: Operatörler, Döngüler ve Deyimler 6. Bölüm: Diziler ve String’ler 7. Bölüm: Test ve Hata Yakalama 8. Bölüm: Sınıflar, Nesneler ve Metotlar 9. Bölüm: Kalıtım 10. Bölüm: Indeksleyiciler ve Özellikler. 11. Bölüm: Interface, Structure ve Enumaration 12. Bölüm: Grafik Programlama 13. Bölüm: I/O (Input/Output) İşlemleri 14. Bölüm: Delegeler ve Olaylar 15. Bölüm: Jenerik Koleksiyonlar, StringBuilder, Regular Expression, Bellek Yönetimi 16. Bölüm: Çok Kanallı, Asenkron ve Paralel Programlama 17. Bölüm: Internet ve Ağ Uygulamaları 18. Bölüm: XML ve Web Servisleri ile Çalışmak 19. Bölüm: LINQ (Language Integrated Query) 20. Bölüm: Java ile C# Arasındaki Benzerlik. 21. Bölüm: C# ile iOS ve Android Uygulamaları Geliştirme   Yazar Hakkında:  Volkan ATASEVER Yazarımız, Bilgisayar Mühendisi olup Proje Yöneticisi, Eğitmen ve Danışman olarak iş hayatına devam etmektedir. Birçok üniversitede eğitim ve seminer vermiştir. PCWorld ve T3 dergilerinde köşe yazarlığı yapmış, daha önce de iki kitap yazmıştır. www.volkanatasever.com adresinden yazarı takip edebilirsiniz.

Rekürsif Metotlar

  C, C++, Java ve C# dilinin birbirinin akrabası olduğunu çok kereler duymuşuzdur. Eğer bir C, C++ programcısıysanız C# programlama diline daha kolay adapte olacağınız bir gerçektir. C# programlama dili ile bir rekürsif metot örneğini aşağıda bulabilirsiniz. using System;class rekursifuygulama{    static void Main()    {    rekursif(0);    }    static void rekursif(int sayi)    {    Console.WriteLine(sayi);    if (sayi<10)    {        rekursif(++sayi);    }     else     {         Console.WriteLine(sayi);     }     }}

Türkçe İçerikli C# Kodlama Standartları

Türkçe içerikili C# kodlama standarları gönüllü bir proje ekibi ile gerçekleşti. Proje Koordinatörü ve Editör Kadir Çamoğlu önderliğinde gerçekleştiğimiz bu proje ülkemizdeki bir eksikliği kapattı. Bende Yazar olarak ekipteki yerimi alarak bu projeye destek verdim. Oldukça kaliteli bir içerik ile ortaya faydalı bir C# Kodlama Standartları dökümantasyonu ortaya çıktı. Herkes kendi deneyimlerinen yola çıkarak bu standartları geliştirdi. Tiks cs v1.0 View more documents from Volkan Atasever.   C# Kodlama Standartlarını indirmek için: tiks_cs_v1.0.pdf (1,84 mb) Orjinal link: http://www.mediafire.com/?7umxy0eumpja8 Proje ekibi aşağıdaki gibidir. 20'te yakında döküman gözden geçiricii bu projede yer almıştır. Proje KoordinatörüKadir ÇamoğluEditörKadir ÇamoğluKapak TasarımıHakan ÇamoğluYazarlarVolkan ATASEVERMerve CEYLANBurhan ÇETİNKAYABahtiyar DİLEKİrfan MEVSİMCan YAPANHakan YAVUZYücel YILDIRIM  

Mobil Cihaz da Yüklü Depolama Kartlarını Bulmak

Windows Mobile işletim sistemi yüklü mobil cihazlarda kullandığımız storage card'larla ilgili bir uygulamayı anlatacağım. Cihaza bağlı herhangi bir storage kartı bulup için herhangi bir mesaj yazdıracağız. Cihazda toplamda kaç adet storage card olduğunu tespit edeceğiz. Emülatörünüze 1'den fazla storage card ekleyip sonuçları görebilirsiniz. Bu işlemleri VS 2008 ile beraber gelen emülatörle yapacağınız gibi Windows Mobile Developer Power Toys ile gelen emülatörlerle de aktif olarak deneyebilirsiniz. Windows Mobile için kullanıcı arayüz tasarımımız:   Kullanmamız ve eklememiz gereken namespace'ler: using System.IO; using System.Diagnostics; Kodumuz; publicpartialclassForm1 : Form {                public Form1()               {                       InitializeComponent();               }                conststring _cardsHelloWorldFileName = "helloworld.txt";               conststring _helloWorldMessage = "depolama kartının üzerine yazılan mesaj";               privatevoid menuFindCards_Click(object sender, EventArgs e)              {                        int cardCount = 0;                       DirectoryInfo rootInfo = newDirectoryInfo(@"\");                       foreach (DirectoryInfo dirInfo in rootInfo.GetDirectories())                      {                                    if ((dirInfo.Attributes & FileAttributes.Temporary) != 0)                                   {                                                Debug.WriteLine("Directory Name: " + dirInfo.Name);                                                 Debug.WriteLine(" Full Name: " + dirInfo.FullName);                                                cardCount++;                                                string filePathName = Path.Combine(dirInfo.FullName, _cardsHelloWorldFileName);                                               StreamWriter writer = newStreamWriter(filePathName);                                               writer.Write(_helloWorldMessage);                                              writer.Close();                                              Debug.WriteLine("Dosya yaratıldı: " + filePathName);                                             Debug.WriteLine("");                                   }                    }                   string endMessage = string.Format(" {0} tane  Storage Card bulundu", cardCount.ToString());                   Debug.WriteLine(endMessage);                   MessageBox.Show(endMessage);        } }  Programı çalıştırdıktan sonra görüntümüz; Emülatörler beraber yüklü hiçbir storage card olmadığı için bu mesajı verdi. Emülatöre donanım olarak storage card yükleyelim. Bunun için emülatörün menü seçeneklerinden File ardından configure sekmesine tıklayalım açılan pencerede shared folder kısmına bilgisayarmızdan bir klasör gösterelim mobil cihazda bu klasör storage card olarak gözükecektir. Sağdaki cihazda storage card'ı görebiliyoruz. File Explorerdan bu kontrolü yapabilirsiniz. Uygulamamızı çalıştırdıktan sonraki ekran görüntümüz; Yazan: Volkan Atasever kaynaklar: MSDN

Sayı tahmin oyunu

    Bu C# ile algoritmalar yazımda klasik bir sayı tahmin oyunu kodlayacağım. İtiraf etmek gerekirse en iyi algoritmayı kullandığım söylenemez. Daha fazla iyileştirilebilir. Sizin iyileştirilmiş kodlarınızı yazının altındaki yorum kısmına bekliyorum. Bilgisayarın tuttuğu sayı rakamları birbirinden farklı bir sayı olacak. 10 tahmin hakkımız var. Aynı zamanda eğer rakam doğru basamakta tahmin edildiyse + yanlış bir basamakta tahmin edildiyse - verilecek. Eğer hiç isabet etmemişse bir mesaj vermeyecek. Bunun için C# dili ile aşağıdaki algoritmayı uyguladım; classProgram {              staticvoid Main(string[] args)             {                   Random rnd = newRandom();                   int belirli = 0; bool flag = false;                  do{                        belirli = rnd.Next(1000, 9999);                        string ara=belirli.ToString();                       int hata=0;                       for (int i = 0; i < 3; ++i)                            if (ara[i] == ara[i + 1])                                hata++;                      if (ara[0] == ara[2])                               hata++;                     if (ara[1] == ara[3])                               hata++;                     if (ara[0] == ara[3])                              hata++;                       if (hata == 0)                           flag = true;                    else                         flag = false;                }while(!flag);              int tahmin = 0; int sayac = 0; string tah2;               do{                   Console.WriteLine("Say tahmin ediniz");                   tah2 = Console.ReadLine();                   tahmin = Convert.ToInt32(tah2);                   Console.WriteLine(belirli);                   if (belirli == tahmin){                       Console.WriteLine("Doru Tahmin bildiniz teekkrler");                       break;                  }                 Console.WriteLine(hesapla(tahmin, belirli));               }while(sayac<11);          }        staticstring hesapla(int sayi2,int tah){              string sayi = sayi2.ToString();              string tahmin = tah.ToString();              string sonuc = ""; int say = 0;              for (int i = 0; i < 4; ++i)               for(int j=say;j<4;++j)                {                      if (sayi[i] == tahmin[j])                         if (i == j)                              sonuc += "+";                         else                            sonuc += "-";                }                     return sonuc;          } }  

3 kenarı belli olan üçgen çizilebilir mi?

  Buradaki sorumuz ise 3 kenarı belli olan üçgen çizilebilir mi çizilemez mi bunu hesaplamak olacak. Bu algoritmayı oluşturabilmek için bilmemiz gereken üçgenin kenarları ile ilgili kural ve bağıntılardır. Buna göre bir üçgenin çizilebilmesi için; 1 ) Bir üçgende iki kenarın toplamı, üçüncü kenarından büyüktür. 2 ) Bir üçgende iki kenarın farkı üçüncü kenarından küçüktür. Buna göre kodumuz aşağıdaki gibi olacaktır; classProgram {         staticvoid Main(string[] args)        {               string a, b, c;               Console.WriteLine("1. kenar uzunluunu girin");              a = Console.ReadLine();              Console.WriteLine("2. kenar uzunluunu girin");              b = Console.ReadLine();              Console.WriteLine("3. kenar uzunluunu girin");              c = Console.ReadLine();             bool sonuc = is_trangle(Convert.ToInt32(a),Convert.ToInt32(b),Convert.ToInt32(c));             if (sonuc)                  Console.WriteLine("gen izilebilir");             else                Console.WriteLine("gen izilemez");       }       privatestaticbool is_trangle(int a, int b, int c)      {            bool flag1=false; bool flag2=false;            if ((a + b) > c && (a + c) > b && (b + c) > a)               flag1 = true;            if ((a - b) < c && (a - c) < b && (b - c) < a)               flag2 = true;           return flag1 && flag2;       } }