Bu örneğimizde bir kişinin bankamatikten para çektiğini düşünelim. Kişi tutarı yazdığında girilen tutarı en az miktarda banknot ile vermesi için bankamatik programı yazacağız. Bunun için yazılan tutar içerisinde kaç tane 200, 100, 50, 20, 10, 5 ve 1’lik banknot olduğunu bularak hangisinden kaç tane vermesi gerektiğini bulacağız.

Programın ekran görüntüsü:

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Parayı_Banknotlara_ayırma
{
     class Program
{
//Bankamatikten çekilen tutar içerisinde bulunan banknot sayılarını
//bulan program.
static void Main(string[] args)
{
      int ParaMik=0;
      Console.Write("Çekilecek Para Tutarını Yazınız: ");
      ParaMik=int.Parse(Console.ReadLine());
      Console.WriteLine("----------------------------------------- ");
      int a200=0,a100=0,a50=0,a20=0,a10=0,a5=0,a1=0;
//200 lük banknot adedi
if (ParaMik >= 200)
{
      a200 = ParaMik / 200;
      ParaMik = ParaMik % 200;
}
//100 lük banknot adedi
if (ParaMik >= 100)
{
      a100 = ParaMik / 100;
      ParaMik = ParaMik % 100;
}
//50 lik banknot adedi
if (ParaMik >= 50)
{
      a50 = ParaMik / 50;
      ParaMik = ParaMik % 50;
}
//20 lik banknot adedi
if (ParaMik >= 20)
{
      a20 = ParaMik / 20;
      ParaMik = ParaMik % 20;
}
//10 luk banknot adedi
if (ParaMik >= 10)
{
      a10 = ParaMik / 10;
      ParaMik = ParaMik % 10;
}
//5 lik banknot adedi
if (ParaMik >= 5)
{
      a5 = ParaMik / 5;
      ParaMik = ParaMik % 5;
}
//1 lik banknot adedi
if (ParaMik >= 1)
{
      a1 = ParaMik / 1;
      ParaMik = ParaMik % 1;
}
//www.kazimsimsek.net
Console.WriteLine("200'lük Banknot Adedi   : " + a200);
Console.WriteLine("100'lük Banknot Adedi   : " + a100);
Console.WriteLine("50'lik Banknot Adedi    : " + a50);
Console.WriteLine("20'lik Banknot Adedi    : " + a20);
Console.WriteLine("10'luk Banknot Adedi    : " + a10);
Console.WriteLine("5'lik Banknot Adedi     : " + a5);
Console.WriteLine("1'lik Metal Para Adedi  : " + a1);
Console.ReadKey();
}
}
}

 

Diziler

Değişkenleri incelerken gördük ki, değişkenlere sadece bir kere değer atayabiliriz. Yeni atadığımız değer eskisinin yerine gelecektir.

Bazı durumlar olur ki, birden fazla değer depolamamız gerekebilir. Burada devreye diziler giriyor.

Diziler bünyesinde birden fazla değer saklar.

Dizi Tanımlama:

veritipi[] diziadi = new veritipi[kapasite]; 

Yapısı yukarıdaki gibidir.

string[] veriler = new string[10];

Yukarıda; string veri tipinde, kapasitesi 10 olan ve adı veriler olan bir dizi tanımladık. Ancak henüz içi boştur.

Sadece yer ayırdık, yani tanımladık. Henüz içerisine veri atamadık.

string[] veriler;
veriler = new string[10];

İstersek yukarıdaki gibi de tanımladıktan sonra başka bir satırda da kapasitesini belirleyebiliriz.

Diziye Değer Atama:

Diziye değer atamanın birçok yolu vardır.

string[] diller = {"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};

Yukarıdaki gibi tanımlarken, kapasitesini girmeye gerek kalmadan tanımlayabilirsiniz.

string[] diller = new string[7]{"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};

Yukarıdaki gibi kapasitesini girdikten sonra da tanımlayabiliriz.

string diller = new string[7];
diller[0] = "C#";
diller[1] = "C";
diller[2] = "C++";
diller[3] = "Lua";
diller[4] = "Java";
diller[5] = "Delphi";
diller[6] = "Visual Basic";

Yukarıdaki gibi de teker teker verileri girebiliriz.

Not: Bu 3 değer atama şeklinde de aynı verileri aynı bölgelere atadık. Hiç bir değişiklik olmayacaktır.

string diller = new string[7];
diller[0] = "C#";
diller[2] = "C++";
diller[4] = "Java";
diller[5] = "Delphi";
diller[6] = "Visual Basic";

 

Yukarıda diller[1] ve diller[3] bölümlerini boş bıraktık.

Görünüşü,

diller[0] ---> C#

diller[1] ---> 

diller[2] ---> C++

diller[3] ---> 

diller[4] ---> Java

diller[5] ---> Delphi

diller[6] ---> Visual Basic

şeklinde olacaktır.

string[] diller = new string[7]{"C#", null, "C++", null, "Java", "Delphi", "Visual Basic"};

Yukarıdaki gibi de boş bırakabiliriz.

Not: Dizi tanımlamada, dizi tipi sadece string olmayabilir. İsterseniz int, double, float, bool şeklinde veri tipide kullanabilirsiniz.

Diziyi Yazdırma:

string[] diller = {"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};
foreach(string dil in diller)
{
     Console.WriteLine(dil);
}
     Console.ReadKey();

Çıktısı:


string[] diller = {"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};
Console.WriteLine("diller dizisinde " + diller.Length + " adet eleman bulunmaktadır.");
Console.ReadKey();

Yukarıdaki örnekte, diller dizisinin eleman sayısı verip yazdıran programın kodlarını yazdıran programın kodları yer almaktadır.

Çıktısı:


Clear:

Dizinin belirlediğiniz kısmını veya tamamını temizlemenizi sağlar.

Array.Clear(diziadi,baslangicindexi,adet);

Yukarıdaki gibi bir yapısı vardır.

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };
Console.WriteLine("----- Temizlemeden önceki dizi: -----");
for (int i = 0; i <= 6; i++)
{
    Console.WriteLine("diller[" + i + "] = " + diller[i]);
}
Array.Clear(diller, 1, 5);
Console.WriteLine("----- Temizlendikten sonraki dizi: -----");
for (int m = 0; m <= 6; m++)
{
    Console.WriteLine("diller[" + m + "] = " + diller[m]);
}
Console.ReadKey();

Çıktısı:


Reverse:

Dizideki elemanları tersine çevirir.

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };
Console.WriteLine("---- Önce ----");
for (int i = 0; i <= 6; i++)
{
     Console.WriteLine("diller[" + i + "] = " + diller[i]);
}
Array.Reverse(diller);
Console.WriteLine("---- Sonra ----");
for (int m = 0; m <= 6; m++)
{
     Console.WriteLine("diller[" + m + "] = " + diller[m]);
}
Console.ReadKey();

Çıktısı:

 

Sort:

Verileri alfabetik(string için) veya sayı sırasına(int için) göre sıralar.

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };
Console.WriteLine("---- Önce ----");
for (int i = 0; i <= 6; i++)
{
     Console.WriteLine("diller[" + i + "] = " + diller[i]);
}
Array.Sort(diller);
Console.WriteLine("---- Sonra ----");
for (int m = 0; m <= 6; m++)
{
     Console.WriteLine("diller[" + m + "] = " + diller[m]);
}
Console.ReadKey();

Çıktısı:



IndexOf:

Bir veriyi dizide aramayı sağlar. 

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };

Console.Write("Aranacak veriyi giriniz: ");
string veri = Console.ReadLine();
if (veri.Trim() != "")
{
    int index = Array.IndexOf(diller, veri.Trim());
    if (index != -1)
    {
        Console.WriteLine("Veri " + index + " index'indedir.");
    }
    else
    {
        Console.WriteLine("Veri bulunamadı.");
    }
}
Console.ReadKey();

Yukarıdaki örnekte, kullanıcıdan aranacak veri isteniyor. Veri girildiğinde dizide aranıyor. Bulduğunda verinin index'ini veriyor. Bulamazsa Veri bulanamadı mesajı çıkartıyor.

Çıktısı:

 

Dinamik Diziler

Önceki anlatımlarda gördüğümüz klasik dizilerde önceden kapasiteyi belirliyorduk ve kapasiteyi fazla belirlediğimizde fazla yer kaplıyordu.

Şimdi inceleyeceğimiz dinamik dizilerde kapasite tanımlamamıza gerek kalmayacak ve aynı zamanda da fazla yer kaplamayacaktır.

Tanımlamasını öğrenmeden önce kütüphane eklememiz gerekmektedir.

System.Collections kütüphanesini eklemek için:

using System.Collections

using anahtar sözcüğü ile ekleyebiliriz.

ArrayList diziadi = new ArrayList();

Dizi tanımlamasının yapısı yukarıdaki gibidir.

En çok kullanılan metot ve özellikler:

Özellikler:

  • Capacity
  • Count

Metotlar:

  • Add
  • Insert
  • Remove
  • RemoveAt
  • Sort

 

Capacity:

Dizinin, kapasitesini int türünde verir.

int kapasite = dizi.Capacity;

Count:

Dizinin, eleman sayısını int türünde verir.

int eleman = dizi.Count;

Add:

Diziye çeşitli veri türünde(int, string, bool vs.) eleman eklemeyi sağlayan metottur.

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

Yukarıdaki gibi, diziye çeşitli türlerde veriler ekleyebiliriz.

Insert:

Diziye çeşitli veri türünde (int, string, bool vs.), istediğimiz yere veri eklemeyi sağlar.

 

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

dizi.Insert(2, "Ready");

Yukarıdaki dizinin içeriği aşağıdaki gibidir:

 

dizi[0] --> Sanal Dosya
dizi[1] --> 10
dizi[2] --> Ready
dizi[3] --> true
dizi[4] --> 10.11
dizi[5] --> 10.121
dizi[6] --> H 

 

Remove:

Belirlediğiniz veriyi diziden silmeyi sağlar.

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

dizi.Remove("Sanal Dosya");
dizi.Remove(10.11d);

 

Yukarıdaki dizinin içeriği aşağıdaki gibidir:

dizi[0] --> 10

dizi[1] --> true

dizi[2] --> 10,121

dizi[3] --> H

 

RemoveAt:

Belirlediğiniz indeksteki veriyi silmeyi sağlar.

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

dizi.RemoveAt(0);
dizi.RemoveAt(4);

Not: Veri sildirdikten sonra verilerin yeni indeks dizilimine dikkat edin!

Örneğin:

"dizi.RemoveAt(0)" komutu çalıştıktan sonra dizinin içeriği aşağıdaki gibidir:

dizi[0] --> 10

dizi[1] --> true

dizi[2] --> 10,11

dizi[3] --> 10,121

dizi[4] --> H

 

"dizi.RemoveAt(4)" komutu çalıştıktan sonra dizinin içeriği aşağıdaki gibidir:

dizi[0] --> 10

dizi[1] --> true

dizi[2] --> 10,11

dizi[3] --> 10,121

 

Sort:

Verileri alfabetik(string ise), sayılara göre(int ise) sıralar.

ArrayList dizi = new ArrayList();
dizi.Add('D');
dizi.Add('B');
dizi.Add('A');
dizi.Add('E');
dizi.Add('C');

dizi.Sort();

foreach (char veri in dizi)
{
    Console.WriteLine(veri);
}
Console.ReadKey();

 Çıktısı

A

B

C

D

E

Fonksiyon (metod) nedir?

Fonksiyonlar kabaca bir programdaki kod fazlalığını azaltan kod parçacıklarıdır.

Örneğin Console.WriteLine bir metoddur işlevi sadece konsola yazdırmaktır. Geri dönüşü yoktur.

Ancak Console.ReadLine ise bir geri dönüşlü metoddur. Yazılan satırdaki veriyi almak için kullanılır. Ve dışarıya veriyi aktarır. 

Bir örnek:

function topla(sayi1,sayi2)
sonuc = sayi1 + sayi2
return sonuc
end

C#'ta fonksiyonlar oluşturulurken 

1-Dönüşü olmayan (Sadece işlem yapan) fonksiyonlar

2-Return(dönüş) olan fonksiyonlar

olarak ikiye ayrılır.

1-Dönüşü olmayan fonksiyonlar

Console.WriteLine kodumuzu ele alalım. Geri dönüşlü değildir. Yani bir veriyi içerisinde işlem yapıp sonucu döndürmez sadece ekrana yazar. Örnekte de anlayacaksınız.

Dönüş olmayan fonksiyonlar void deyimi ile başlar.Örneğin;

void Topla()
{
     int sayi1 = 1;
     int sayi2 = 2;
     int sonuc = sayi1 + sayi2;
}

 

Burada yazdığımız fonksiyon sadece kendi içinde işlemleri yapar dışarıdan bir değişken, veri almaz veya dışarıya bir sonuç vermez sadece kod kalabalığı yapmamak için yazılabilir (Önerim bu şekilde)

Başka örneklere bakalım

void Yenile()
        {
            listBox1.Items.Remove(listBox1.SelectedItem);
            foreach (IniFile.IniSection veri in ini.Sections)
            {
                listBox1.Items.Add(veri.Name);

            }
        }

Örneğin Dosya Gizleyici programında yazmış olduğum bir fonksiyon.

Tabi burada INIFile class ı kullanıldı DİKKAT!  Burada yine dışarıdan alınan bir değişken, veri yok

Tabikide dışarıya verilen bir sonuç ta yok.

2-Return (Dönüşü olan fonksiyonlar)

 Dönüşü olan fonksiyonlar çok geniş bir konudur aslında, geriye dönüşü int, string , bool, list ,array vs vs bir çok değer olabilir.

Biz yine en çok kıullanılan bu 5 örnek için ayrı ayrı örnek yapacağız.

a) INT dönüşlü fonksiyonlar

int Topla(int sayi1,int sayi2)
{
int sonuc = sayi1 + sayi2;
return sonuc;
}

Burada ise yaptığımız şey dışarıdan gelen iki int değerini yine int olan bir sonuc değişkeninde depoladık. Kullanıldığında girilen iki veriyi toplayıp sonucunu döndürecektir.

Örnek kullanımı:

int sayi1 = Convert.ToInt32(Console.ReadLine());
int sayi2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(Topla(sayi1,sayi2));

b)String Dönüşlü Fonksiyonlar

String dönüşlü fonksiyonlar ise mantığı tamamen aynıdır string bir fonksiyonun dönüşünün string olarak dönmesidir.

Örneğin:

string Birlestir(string veri1,string veri2)
{
     string sonuc = veri1 + veri2;
     return sonuc;
}

Örneğin burada yaptığımız şey gelen iki veriyi birleştirip birleştirdiğimiz veriyi döndürüyoruz.

Örnek Kullanımı:

textBox1.Text = Birlestir("Night","Mare");

Kodun dönüşü

NightMare

olacaktır

c)Bool Dönüşlü Fonksiyonlar

Dönüşü true veya false olarak dönen fonksiyonlardır.

Örnek:

bool Kontrol(int sayi)
{
if(sayi % 2 == 0)
     return true;
else
     return false;
}

Örneğin burada dışarıdan gelen sayının tek mi yoksa çift mi olduğunu kontrol ettirdik. Çiftse true tekse false değeri dönecek

Örnek Kullanım:

int sayi = Convert.ToInt32(Console.ReadLine());
bool tekcift = Kontrol(sayi);
if(tekcift==true)
Console.WriteLine("Sayı Çift!");
else
Console.WriteLine("Sayı Tek!");

d)Dizi Fonksiyonları

Dizi fonksiyonları kullanıldığında veriyi dizi olarak döndüren fonksiyonlardır.

Örneğin;

int[] Veri(int baslangic,int bitis)
{
            int[] sonuc = new int[bitis-1];
            return sonuc;
}

int türünde bir dizi fonksiyonu oluşturduk. Fonksiyon amacı başlangıç ve biriş sayılarını alarak bu sayılardan bir dizi oluşturmak.

Örnek kullanımı şu şekilde :

int i = 0;
int[] dizi = Veri(1, 9);
foreach(int veri in dizi)
{
     i += 1;
     listBox1.Items.Add(i);
}

Burada i = 0 adlı bir değişken oluşturduk. Ve bir int[] dizisi yazdık. Başlangıç noktası 1, bitiş noktası 9 olmak üzere. Bu diziyi foreach döngüsüne atarsak, bize 8 adet değer döndürecektir.(Dizilerdeki limit veri sayısı)

Bu örnekleri çoğaltabilirsiniz.

e)List Fonksiyonları

List fonksiyonları, list ile oluşturulan ve benim en sıkça kullandığım fonksiyonlardır. Arraydan daha basit, pratik ve stabildir.(Bana göre.)

List fonksiyonunda sayı,sıra,limit kavramı belirtilmediği için her türlü veriyi kolayca sırasız, sınırsız bir şekilde List'e ekleyebilirsiniz.

List kullanımı şu şekildedir.

List< veri türü > degisken = new List < veri türü >();

Bu şekilde anlamayanlar için basitçe bir Klasör tarama fonksiyonu yazdım.

public List<string> FolderFind(string path)
{
   List<string> klasor = new List<string>();
   DirectoryInfo di = new DirectoryInfo(path);
   DirectoryInfo[] getdir = di.GetDirectories();
   foreach(DirectoryInfo veri in getdir)
   {
       klasor.Add(veri.ToString());
   }
   return klasor;
}

Başka bir örnek ise Dosya tarama fonksiyonu

public List<string> FileFind(string path)
{
            List<string> dosyalar = new List<string>();
            DirectoryInfo di = new DirectoryInfo(path);
            FileInfo[] getfiles = di.GetFiles();            
            foreach (FileInfo veri in getfiles)
            {
                dosyalar.Add(veri.ToString());
            }
            return dosyalar;
}

 

 

 

 

 

 

Form 1 içine yazılacaklar

private void button1_Click(object sender, EventArgs e)
{
        Form2 frm2 = new Form2();
        this.Hide();
        frm2.Show();
}

private void button2_Click(object sender, EventArgs e)
{
        Application.Exit();
}

 

Form 2 içine yazılacaklar

private void button1_Click(object sender, EventArgs e)
{
        Form1 frm1 = new Form1();
        this.Hide();
        frm1.Show();
}

private void button2_Click(object sender, EventArgs e)
{
        Application.Exit();
}

 

printDocument1.DefaultPageSettings.Landscape = true;

bu değeri printDocument1 nesnesinin örneği aldığı yere veya form uygulaması kullanıyorsanız form_load içine yazmalısınız