c# programlama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
c# programlama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

 1) 

Bir Car sınıfı oluşturun. Bu sınıfın Model, Year, ve Color adında üç özelliği (property) olsun. Bu özelliklere sınıf dışından erişilebilmeli ve değer atanabilmeli. Ayrıca DisplayInfo adında bir metot ekleyin; bu metot, aracın modelini, üretim yılını ve rengini ekrana yazdırsın.


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace ConsoleApp1

{

    internal class Program

    {

        public class Car

        {

            public string Model { get; set; }

            public string Color { get; set; }

            public int Year { get; set; }


            public void DisplayInfo()

            {

                Console.WriteLine("Mode: {0},Color: {1}, Year: {2}",Model,Color,Year);

            }

        }

        static void Main(string[] args)

        {

            Car car = new Car();

            Console.Write("Model: ");

            car.Model = Console.ReadLine();

            Console.Write("Year: ");

            car.Year = Convert.ToInt32(Console.ReadLine());

            Console.Write("Color: ");

            car.Color = Console.ReadLine();

            car.DisplayInfo();


            Console.ReadLine();

        }

    }

}

2) Bir Student sınıfı oluşturun. Bu sınıfın Name, Grade, ve StudentID adında üç özelliği (property) olsun.
  • Grade özelliğine yalnızca 0 ile 100 arasında bir değer atanabilsin. Eğer bu aralığın dışında bir değer atanırsa, program bir uyarı mesajı versin.
  • DisplayStudentInfo adında bir metot yazın. Bu metot, öğrencinin adını, numarasını ve notunu ekrana yazdırsın.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    internal class Program
    {
        public class Student
        {
            public int Id { get; set; }
            public string Name { get; set; }
            private int grade;
            public int Grade
            {
                get { return grade; }
                set {
                    if (value <= 100 && value > 0)
                    {
                        grade = value;
                    }
                    else
                    {
                        Console.WriteLine("0-100 arasinda degil");
                    }
                }
            }
            public void DisplayStudentInfo()
            {
                Console.WriteLine("Öğrenci Bilgileri:");
                Console.WriteLine($"ID: {Id}, İsim: {Name}, Not: {Grade}");
            }
        }
        static void Main(string[] args)
        {
            Student s = new Student();
            s.Name = Console.ReadLine();
            s.Id = Convert.ToInt32(Console.ReadLine());
            s.Grade = Convert.ToInt32(Console.ReadLine());
            s.DisplayStudentInfo();
            Console.ReadLine();
        }
    }
}

3)Bir Rectangle sınıfı oluşturun. Bu sınıfın:
  1. Width ve Height adında iki özelliği (property) olsun.
  2. Area adında, yalnızca okunabilir (read-only) bir özelliği olsun. Bu özellik, dikdörtgenin alanını (genişlik * yükseklik) döndürsün.
  3. Perimeter adında, yine yalnızca okunabilir bir özelliği olsun. Bu özellik, dikdörtgenin çevresini hesaplayarak döndürsün (2 * (genişlik + yükseklik)).

Kullanıcıdan bir Rectangle nesnesi oluşturmasını, genişlik ve yükseklik değerlerini girmesini ve ardından alan ve çevre değerlerini ekrana yazdırmasını isteyin.


using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading.Tasks;


namespace ConsoleApp3

{

    internal class Program

    {

        public class Rectangle

        {

            public int width { get; set; }

            public int height { get; set; }

            public double Area

            {

                get {

                    return (double)width * (double)height;

                }

            }

            public int Perimeter { 

                get {

                    return 2*((int)width + (int)height);

                }

            }

        }

        static void Main(string[] args)

        {

            Rectangle rect = new Rectangle();


            Console.Write("Genişlik değerini girin: ");

            rect.width = Convert.ToInt32(Console.ReadLine());


            Console.Write("Yükseklik değerini girin: ");

            rect.height = Convert.ToInt32(Console.ReadLine());


            Console.WriteLine($"Dikdörtgenin Alanı: {rect.Area}");

            Console.WriteLine($"Dikdörtgenin Çevresi: {rect.Perimeter}");

            

            Console.ReadLine();

        }

    }

}


 Bu yazımızda C# form uygulamasında OpenGL kullanarak Line çizimine bakacağız:

OpenControl ve bir button kullanacağız, butona basıldığında çizme işlemini yapacak.

 private void button1_Click(object sender, EventArgs e)

        {

            // rotationTimer.Start();

            Draw();

        }

 private void Draw()

        {

            // OpenGL nesnesi tanımlanır

            OpenGL gl = openGLControl1.OpenGL;


            // Ekran temizlenir

            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);


            // Matris işlemleri başlatılır

            gl.PushMatrix();

            gl.LoadIdentity();


            // Geometriyi ekrana yerleştirme

            gl.Translate(0.0f, 0.0f, -6.0f); // Ekrana yerleştirir

            gl.Rotate(0, 0.0f, 0.0f, 1.0f); // Z ekseni etrafında döndür

            gl.Scale(1.0, 1.0, 1.0); // Ölçeklemede bir değişiklik yapılmadı

            DrawLine(gl);

            // Çizimleri ekrana gönderelim

            gl.Flush();


            // Render işlemini manuel tetikleyelim

            openGLControl1.DoRender();

        }

 private void DrawLine(OpenGL gl)

        {

            gl.Begin(OpenGL.GL_LINES);

            gl.Color(1.0f,0.0f,0.0f); // Kırmızı

            gl.Vertex(-1.0f, 0.0f, 0.0f); // ilk nokta

            gl.Vertex(1.0f, 0.0f, 0.0f); // ikinci nokta

            gl.End();

        }

Delegate Nedir?



C# programlama dilinde tanımlanan ve metot olarak adlandırılan işlevlerin bellek adresini tutmak için kullanılan yapıya delegate veya temsilci denir. C# delegate yapısı C/C++ dillerindeki function pointer veya fonksiyon göstericileri yapısına benzemektedir. 

Metot adı ve parametresi metot imzası olarak adlandırılır.

Bellekte bulunan metotlara erişebilmek için metot imzasının bilinmesi gerekir. Bu metot imzası C# içerisinde yer alan delegate ile tanımlanır.

Metotların sabit bir tanımı yoktur. Aşağıdaki iki metot birbirinden farklıdır:

void Topla(int sayi1, double sayi2); 
void Topla(double sayi1, int sayi2);

Metot adı ve parametresi metot imzası olarak adlandırılır.

Delegate Kullanımı


Genel tanımı aşağıdaki gibidir:

delegate <Metot_Dönüş_Değeri> <Temsilci_Adı> (<Metot_Parametresi>);

Yukarıda tanımlanan ilk metoda erişmek için aşağıdaki gibi bir delegate tanımı yapılmalıdır:

delegate void Temsilci (int sayi1,int sayi2);

Oluşturulan bu temsilci sayesinde bu imzaya sahip metotlara erişilebilir. Metotlara erişimi aşağıdaki gibidir:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @delegate
{
class Program
{
static void Sum(int number1, double number2)
{
Console.WriteLine("Number1: {0} + Number2: {1} = result {2}", number1, number2, number1 + number2);
}
delegate void sumDelegate(int x, double y);
static void Main(string[] args)
{
sumDelegate sum = Sum; // sumDelegate sum = new sumDelegate(Topla);
sum(3, 5);
Console.ReadLine();
}
}
}


Func Delegate

Sıfır veya daha fazla input alır ve bir tane output verir. 

public delegate TResult Func < in T,out TResult>(T arg);

Örnek:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @delegate
{
class Program
{
static int Sum(int num1, int num2)
{
return num1 + num2;
}
static void Main(string[] args)
{
Func<int, int, int> add = Sum;
int result = add(3, 5);
Console.WriteLine(result);
Console.ReadLine();
}
}
}


Action Delegate

Bir değer döndürmez, bunun dışından func delegate ile aynıdır.

public delegate void Print (int val);

Örnek:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @delegate
{
class Program
{
static void ConsolePrint(int num)
{
Console.WriteLine(num);
}
static void Main(string[] args)
{
Action<int> printCns = ConsolePrint;
printCns(5);
Console.ReadLine();
}
}
}

Func ve Action Delegate Avantajları 

  1. Tanımlamak hızlı ve kolaydır. 
  2. Uygulama boyunca uyumlu tip.
  3. Kodu kısadır.


Kaynak:
Ders notları
https://docs.microsoft.com/tr-tr/dotnet/api/system.action-1?view=net-6.0
https://www.yusufsezer.com.tr/csharp-delegate/
https://docs.microsoft.com/tr-tr/dotnet/api/system.func-2?view=net-6.0






 

Recursive Örnekler

1) Klavyeden girilen sayının faktöriyeli:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace dort_islemm
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Sayi giriniz: ");
            int sayi = Convert.ToInt32(Console.ReadLine());
            islem(sayi);
            Console.WriteLine("{0}! = {1}", sayi,islem(sayi));

            Console.ReadLine();
        }

        public static int islem(int sayi)
        {
            if (sayi <= 0) return 1;
            else return sayi * (islem(sayi - 1));
        }
        
    }
}

2)  0 dan girilen sayıya kadar toplayan program: 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace toplama
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Sayi giriniz: ");
            int sayi = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Toplam = " + topla(sayi));

            Console.ReadLine();

        }
        public static int topla(int sayi)
        {
            if (sayi==0) { return  0; }
            else
            return sayi + topla(sayi - 1);
        }
        
    }
}

3) Girilen adım numarasındaki fibonacci değerini bulma:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace fibonacci
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Adim sayisini giriniz: ");
            int adim = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(fibonacci(adim));
            Console.ReadLine(); 
        }

        public static int fibonacci (int adim)
        {
            if(adim<=2)
            {
                return 1;
            }
            else
            {
                return fibonacci(adim - 1) + fibonacci(adim - 2);
            }
        }
    }
}
 4)0 dan girilen sayıya kadar yazma:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ekrana__sayi
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("sayi giriniz: ");
            int sayi = Convert.ToInt32(Console.ReadLine());
            yaz(sayi);
            Console.ReadLine();
        }

        static void yaz(int sayi)
        {
            if (sayi == 0) return;
            else
            {
                Console.WriteLine(sayi);
                yaz(sayi - 1);
            }
        }
    }
}

5) Bir dizinin minimum değerdeki elemanı:


    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace dizinin_en_büyük_elemanı
{
    class Program
    {
        public static int findMinRec(int[] A, int n)
        {
            // if size = 0 means whole array  
            // has been traversed  
            if (n == 1)
                return A[0];

            return Math.Min(A[n - 1], findMinRec(A, n - 1));
        }

        static void Main(string[] args)
        {
            int[] A = { 1, 4, 45, 6, -50, 10, 2 };
            int n = A.Length;

            // Function calling  
            Console.WriteLine(findMinRec(A, n));
            Console.ReadLine();
        }
    }
}