SlideShare a Scribd company logo
1 of 36
Download to read offline
MÜHENDİSLİK PROBLEMLERİNİN BİLGİSAYAR
ORTAMINDA SAYISAL ANALİZ YÖNTEMLERİYLE
ÇÖZÜLMESİ

ABDURRAHMAN TUNÇ
DUMLUPINAR ÜNİVERSİTESİ
MÜHENDİSLİK FAKÜLTESİ
MAKİNA MÜHENDİSLİĞİ

1
ÖZET
Sayısal Analiz ve Sayısal Çözümlemeler; mühendislik alanında günlük hayatın
vazgeçilmezlerindendir. Sayısal çözümlemeler yapmak için günümüz nimetlerinden biri
olan bilgisayara ihtiyaç vardır. Yazılan bilgisayar programı bize hem zamandan kazanç
hem de çözümde kesinlik ve çözüme giden yolda kolaylık sağlar.
Bu çalışmamızda C# programlama diliyle sayısal çözümlemelerin nasıl
yapıldığına ve program yazmak için gerekli olan temel bilgilere değinilmiştir.
Anahtar Kelimeler: Sayısal Analiz, C# programlama dili

2
TEŞEKKÜR
Eğitim hayatım boyunca bizden yardımlarını, bilgilerini en önemlisi de içten ve samimi
sohbetini esirgemeyen saygı değer hocamız Yrd. Doç. Dr. Nimeti Döner hocamıza minnet
duyar teşekkürü borç bilirim.
Ayrıca Hisarlar A.Ş. personelinden Mesut Türker ve İsmail Boztay’a teşekkür ederim
ve Hisarlar A.Ş.’nin en iyi yerlere gelmesini dilerim.

İÇİNDEKİLER
Sayfa
ÖZET
1.VİSUAL C# - GİRİŞ
1.1.Vs.Net Kurulum
1.2.Visual C# Ide
1.2.1.Visual C# IDE bileşenleri;
1.2.2. Form Tasarım Penceresi
1.2.3.Araç Kutusu(Toll Box)
1.2.4.Proporties Pençeresi
2.VERİ TÜRLERİ
2.1.Değişken ve Sabitler
2.1.1.Değişkenler
2.1.2.Sabitler
2.2.Değişkenlere Değer Atama
2.3.Değişkenlerde Tip ve Dönüşümleri
3.OPERATÖRLER (İŞLEÇLER)
3.1.Aritmetik Operatörler
3.1.1.Operatörler Anlamı
3.1.2.Strıng Operatörleri
3.2.Karşılaştırma Operatörleri
3.2.1.Koşul Operatörleri
3.2.2.Atama Operatörleri
3
3.3.Diğer Mantıksal Operatörler
4.PROGRAM DENETİM DEYİMLERİ
4.1.Karşılaştırma Deyimleri
4.2.Swıtch Case
4.3.Döngü Deyimleri
4.3.1.For Döngüsü
4.3.2.While Döngüsü
4.3.3. Do-While Döngüsü
5.FONKSİYONLAR
5.1.Matematiksel Fonksiyonlar
6. NUMERİK ANALİZ(SAYISAL ANALİZ)
6.1.Tanımı Ve Tarihçesi:
6.2.Amacı:
6.3.Kullanım Alanları
6.4.Nümerik metotların dezavantajları
6.5.Nümerik Analizin Temellerini Atanlar
6.6.Sonlu Elemanlar Metodunun ilkleri
6.7.Sayısal Analizin Belli Başlı Konuları
7.UYGULAMALI SAYISAL ANALİZ ÖRNEKLERİ
8.SONUÇ VE ÖNERİLER
9.KAYNAKLAR

4
1.VİSUAL C# - GİRİŞ
Visual Studio .NET, günümüz dünyasındaki en gelişmiş yazılım geliştirme ortamıdır. Visual
Studio .NET kullanıcılarına, tüm yazılım geliştirme dilleri için ortak bir geliştirme platformu
sunar. İstenildiğinde BASIC dilinde (VB.NET), istenildiğinde C dilinde (Visual C#)
yazılımların geliştirilmesine olanak sağlar. Böylece yazılım geliştiriciler bir programlama
dilinden diğerine geçtiklerinde geliştirme platformuna alışmakla zaman kaybetmezler. Ek
olarak Visual Studio .NET, proje geliştirirken ihtiyaç duyacağınız her türlü bileşeni
barındırır ve tek bir platformda tüm ihtiyaçlarınızı karşılar. Uygulamaların (bir masaüstü
uygulaması, web servisleri, web uygulamaları vb.) hızlı ve kolay bir şekilde geliştirilmesine,
yönetilmesine olanak tanır.
Visual Studio .NET, günümüz dünyasındaki en gelişmiş yazılım geliştirme ortamıdır. Visual
Studio .NET kullanıcılarına, tüm yazılım geliştirme dilleri için ortak bir geliştirme platformu
sunar. İstenildiğinde BASIC dilinde (VB.NET), istenildiğinde C dilinde (Visual C#)
yazılımların geliştirilmesine olanak sağlar. Böylece yazılım geliştiriciler bir programlama
dilinden diğerine geçtiklerinde geliştirme platformuna alışmakla zaman kaybetmezler. Ek
olarak Visual Studio .NET, proje geliştirirken ihtiyaç duyacağınız her türlü bileşeni
barındırır ve tek bir platformda tüm ihtiyaçlarınızı karşılar. Uygulamaların (bir masaüstü
uygulaması, web servisleri, web uygulamaları vb.) hızlı ve kolay bir şekilde geliştirilmesine,
yönetilmesine olanak tanır.
1.1.Vs.Net Kurulum
Visual Studio .NET kurulumu için ihtiyacımız olan minimum konfigurasyon şu şekildedir;
İşlemci: 400Mhz
Ram: 128MB
Disk Alanı: 3GB (Boş alan)
Çözünürlük: Min. 800x600/16Bit Çözünürlük/Renk Derinliği
İşletim Sistemi: NT Based (Windows NT, 2000, XP, Server 2003,Windows
sistemlerinden
biri.

5

7 ) işletim
Programı indirdikten sonra programa tıklanır.

Next butonuna tıklayarak diğer adıma geçilir.

6
Lisans sözleşmesi kabul edilir.

Bu adımda programımızı nereye kurulacağı belirlenir
belirlenir.
7

genel olarak C sürücüsü
Kurulum Adımları ve durumu gösterilmektedir.

Exit butonuna tıklayarak kurulum tamamlanır.

8
New Project penceresini kullanarak yeni bir uygulama açılabilir. Bu pencereyi açmak
için ;Create>Project veya File>New Project sekmeleri kullanılabilir.

Proje tipi, proje kalıbı ve projenin ismi belirlenir. C tabanlı, projeleri için Project Types
bölümünden “Visual C# -> Windows” tipini, Templates bölümünden “Windows Application”
kalıbını, name bölümünden de projeye vereceğimiz isim belirlenir. Daha sonra onay butonuna
tıklanarak Visual C# IDE açılır.

9
1.2.Visual C# Ide

1.2.1.Visual C# IDE bileşenleri;
Menü Çubuğu
Araç Çubukları
Form Tasarım Penceresi
Araç Kutusu
Properties Penceresi
Solution Explorer Penceresi
Component Tray

olarak sıralanabilir.

MENÜ ÇUBUĞU
Başlık çubuğunun altındaki menüdür. Dinamik bir yapısı vardır. Alt menülere erişimi sağlar.
Aşağıda menü çubuğu verilmiştir.

File: Proje ve dosyaları açıp/kapamak için, Visual C# dan çıkmak için kullanılır.
Edit: Kod yazarken metnin taşınması, kopyalanması ve silinmesi gibi işlemler için
kullanılır.
10
View: IDE içerisindeki sık kullanılan bileşenlerin gösterilip, gizlenmesi için kullanılır.
Project: Uygulamalarımıza yeni modüller, yeni formlar, yeni sınıflar vb eklemek için
kullanılır.
Build : Uygulamaların çalıştırılması için kullanılır.
Debug: Kod satırındaki hataları onarmak için kullanılır.
Data: Veri tabanı uygulamalarında kayıt set oluşturmak için kullanılır.
Tools: IDE’yi biçimlendirmek için kullanılır. Menülerin, eklemek/çıkarmak gibi dinamik
kullanımı söz konusudur.
Windows:IDE de bulunan pencerelerin yerleşimini gösterir.
Help:Yardım menüsüdür.
1.2.2. Form Tasarım Penceresi

Visual C# IDE arabiriminin ortasında bulunan penceredir. Uygulama geliştirdiğimiz
formların tasarım pencereleri ve formların kod satırları görüntülenir. Bu pencereler arasında
geçiş yapmak çok kolay ve kullanımı basittir.
1.2.3.Araç Kutusu( Tool Box)

11
Araç kutusunda en sık kullanılan denetimler bulunmaktadır. Başka denetimler eklemek için
“Choose ToolBox Items” penceresi kullanılır. Bu penceresi açmak için çeşitli yöntemler
vardır. Bunlar;
Tools -> Choose ToolBox Items menü seçeneği,
Araç kutusunda sağ tık -> Choose Items… seçeneği ile açılır.

12
1.2.4.Proporties Pençeresi

Properties penceresi, özellikler penceresi olarak adlandırılır. Form tasarım modunda iken
kullanılır. Özellikler penceresi; formumuza ait ya da form’a eklediğimiz denetimlere ait
özelliklerin görüntülendiği penceredir. Bu özellikler; isim, arka plan rengi, genişlik, metin
boyutu gibi özelliklerdir. Özellikler penceresi dinamik olarak yapılandırılabilir. İstenildiğinde
sınıflandırılabilir, istenildiğinde alfabetik olarak sıralanabilir.

2.VERİ TÜRLERİ
13
Programlamada kod satırlarında kullanılacak olan değişkenlerin ya da sabitlerin veri
türlerinin belirlenmesi çok önemlidir. Programcının, kullanıcıdan girmesini istediği bilgilerin
türlerinin belirlenmesi için kullanılır. Veri türleri, özellikle değişkenlerin ve sabitlerin
sayısal,bir karakter ya da karakter seti veri içerip içermediklerini belirlemek için kullanılır.
Veri tipleri genellikle, ondalık sayılar, tamsayılar, karakterler, tarih ve zaman bilgilerini
içermektedir.
Visual C# içinde kullanılacak veri türleri aşağıda verilmiştir.
SByte :
-128 ile 127 arasında işaretli tamsayıları tanımlamak için kullanılır. Bir
byte’lık yer işgal eder. Bu tipler Visual C#'ta (CTS-Common Type
System) System.SByte olarak kullanılır. Örnek: sbyte Urun_Kodu;
Short:
Bu tür sayısal değerler 2 baytlık yer işgal eder. İşaretli tam sayıdır.
.NET'te (CTS-Common Type System) System. Int16 olarak kullanılır.
Örnek: short a;
Int:
Bu tür sayısal değerler 4 baytlık yer işgal ederler. İşaretli tamsayıdır.
Bu tipler .NET'te (CTS-Common Type System) System.Int32 olarak
kullanılır.Örnek: int sayi;
Long: Bu tür sayısal değerler 8 baytlık yer işgal ederler. İşaretli tamsayıdır.
Bu tipler .NET'te (CTS-Common Type System) System.Int64 olarak
kullanılır. Örnek: long miktar;
Float: Bu tür sayısal değerler 4 baytlık yer işgal ederler. Ondalık sayı tipidir.
Bu tipler .NET'te (CTS-Common Type System) System.Single olarak
kullanılır. Örnek: float sonuc;
Double: Bu tür sayısal değerler 8 baytlık yer işgal ederler. Ondalık sayı tipidir.
Bu tipler .NET'te (CTS-Common Type System) System.Double olarak
kullanılır. Örnek: double ort;
Decimal:
Bu tür sayısal değerler 16 baytlık yer işgal ederler. Bu tipler .NET'te
(CTS-Common Type System) System.Decimal olarak kullanılır. Örnek:
decimal toplam;
Bool: Bu tür sayısal değerler 2 baytlık yer işgal ederler. TrueFalse ya da
YesNo gibi iki durumlu değerlerden birini içerir. Bu tipler .NET'te
(CTS-Common Type System) System.Boolean olarak kullanılır. Örnek:
bool Evet_Hayir;
DateTime:
Bu tür veri tipleri 8 baytlık yer işgal derler. Tarih ve zaman bilgilerini
içerir .NET'te (CTS-Common Type System) System DatetTime olarak
kullanılır. System.DateTime tarih;
Char: Karakter Bilgileri içerir. Bu tür veriler 2baytlık yer işgal eder. En fazla
65535 karakter içeri. Bu tipler .NET'te (CTS-Common Type System)
System.Char olarak kullanılınır. Örnek: char Erkek_Kadın;
Sting: 2 Milyar karakter kadar bilgiyi içerebilir. Bu tipler .NET'te (CTS14
Common Type System) System.String olarak kullanılır. Örnek: string
FirmaAdi;
2.1.Değişken ve Sabitler
Değişkenler programın akışı içerisinde, değerleri sürekli olarak değişebilen, Sabitler
ise,
değeri değişmeyen program bileşenidir.
2.1.1.Değişkenler
Değişkenler geçici bilgi alanlarını ifade etmek için kullanılır. Program çalıştığında adı geçen
değişkenin saklandığı bellek alanından değer alınır, işlem yapılır, gerekirse o bellek alanı
güncellenir. Değişkenlerin saklandığı bellek alanları dinamik bir şekilde kullanılır. Her
programlama dilinde olduğu gibi Visual C#’ta değişkenlerin isimlendirme kuralları vardır.
Bunlar;
Değişken isminin ilk karakteri bir harf olmalıdır.
Değişken ismi oluşturulurken, diğer karakterler, harf, rakam ya da alt çizgi (-)
sembolü olabilir.
Kullanılan harflerin küçük ya da büyük harf olmasının önemi yoktur.
Değişken isim uzunlukları 16383 karaktere kadar olabilir.
Değişken isimleri içinde diğer semboller(+,-,/ ,boşluk vb) bulunmamalıdır.
.NET’e özgü kelimeler olmamalıdır.
Visual C#’ta değişken aşağıdaki gibi tanımlanmaktadır.
Kullanımı:
Değişken_Türü Değişken_Adı;
Örnek2.1:
string str;
str = textBox1.Text;
MessageBox.Show(str);
Yukarıdaki kod satırında tanımlanan str; string türündeki bir değişkendir.
Örnek 2.2: Butona tıklandığında textbox1’in içeriğini, textbox2’nin içeriğine bölen ve
sonucu mesajla kullanıcıya bildiren program.
private void button1_Click_1(object sender, EventArgs e)
{
double str1,str2;
str1 =Convert.ToDouble(textBox1.Text);
str2 = Convert.ToDouble(textBox2.Text);
MessageBox.Show("Bölme Sonucu : " + (str1/str2) + " Olarak Hesaplanmıştır");
}
Yukarıdaki kod satırında; str1, str2 integer ve sonuc string türünde değişkenlerdir. Metin
kutularının içeriğini birbirine böler ve sonucu ekrana mesajbox dialog kutusu ile bildirir.
Örnek 2.3: Butona tıklandığında, butonun text özelliğini “A.Tunç” olarak değiştirilen
program.
private void button1_Click_1(object sender, EventArgs e)
15
{
string str;
str = "A.Tunç";
textBox1.Text = str;
}
Yukarıdaki kod satırında; str, string türünde bir değişkendir.

2.1.2.Sabitler
Sabitler kod satırındaki değeri değişmeyen program bileşenleridir. Uygulama süresince
değiştirilmeyecek olan değer için Const ifadesi kullanılır. Bu ifade ile bir sabit tanımı yapılır.
Const tanımı aşağıdaki şekillerde yapılmaktadır:
Kullanım:
Const_değişken türü_değişken adı;
Örnek 2.4: Butona tıklandığında Form’un text özelliğini “A.Tunç” olarak değiştirilen
program.
private void button1_Click_1(object sender, EventArgs e)
{
const string str = " A.Tunç ";
Form.ActiveForm.Text = str;
}
2.2.Değişkenlere Değer Atama
Bir değişkene değer atamak için genel olarak aşağıdaki ifade kullanılmaktadır;
Değişken adı

=

Değişkene Atanan Değer ;

Yukarıdaki tanımda yer alan eşittir (=) işareti sadece, sağdaki değerin soldaki değişkene
aktarılacağını ifade etmektedir. Örneğin yas isimli bir değişkene 22 değeri;
int yaş;
yas=22;
ya da
int a,b;
a=b+1;
gibi değer atamada yapılabilir.
2.3.Değişkenlerde Tip ve Dönüşümleri
Uygulama içinde kullanılan değişkenlerin türlerini birbirlerine dönüştürmek için
kullanılan
yöntemdir. Tip dönüşümü için kullanılan fonksiyonlar şunlardır.
Convert.ToInt32 İfadeyi yuvarlatarak tam sayıya dönüştürür
Convert.ToInt64 İfadeyi yuvarlatarak uzun tamsayıya dönüştürür.
Convert.ToSingle İfadeyi tek duyarlıklı single (float) tipine dönüştürür.
Convert.ToDouble İfadeyi çift duyarlıklı double tipe dönüştürür.
16
Convert.ToString İfadeyi stringe çeviri
Convert.ToBoolean İfadeyi lojik logic boolean türe çevirir.
Convert.ToByte İfadeyi Byte’ a çevirir.
Convert.ToDateTime İfadeyi tarih Date formatına çevirir.
Convert.ToChar String ifadenin ilk karakterini, karakter türüne dönüştürür.
Convert.ToInt16 İfadeyi kısa tamsayıya çevirir

Örnek 2.5 : İki adet metin kutusunun içeriğini toplayıp etiket denetiminin text
özelliğine aktaran program.
private void button1_Click_1(object sender, EventArgs e)
{
textBox1.Text = "6";
textBox2.Text = "10";
label1.Text=Convert.ToString
(
Convert.ToInt32(textBox1.Text)
+Convert.ToInt32(textBox2.Text)
);
}
tam sayı türüne dönüştürmüştür. Daha sonra tekrar Convert.ToString
dönüşümü yapılarak Label’ın text özelliğinde görüntülenmiştir.
Örnek 2.6: Ondalık (yani decimal) türdeki bir sayısal değeri, tamsayı (integer)
türüne dönüştüren program.
private void button1_Click_1(object sender, EventArgs e)
{
const double sayi = 345.425;
int deger;
deger = Convert.ToInt32(sayi);
MessageBox.Show(deger.ToString());
}
Yukarıdaki kod satırında: 345.425, ondalık türünde bir değişkendir.
Convert.ToInt32 fonksiyonu ile ondalık türündeki bu değer, tam sayı türüne
dönüştürülmüştür. Programın çıktısı: 345’tir. Çünkü ondalık değeri tam sayıya
yuvarlanmıştır. Tanımlanan sayi isimli değeri 345.525 ise, 346 tamsayıyı değerine
yuvarlayacaktır.

17
3.OPERATÖRLER (İŞLEÇLER)
Operatörler, değişkenler ve sabitler üzerinde aritmetik, string, karşılaştırma, koşul ve
atama işlemleri yapan simgelerdir.
3.1.Aritmetik Operatörler

Aritmetik operatörler; toplama, çıkarma, çarpma ve bölme işlemlerini yapan
operatörlerdir. Yönelik operatörler olarak bilinir. Bu operatörlerdeki işlem öncelik
sıralaması, matematiksel işlemlerde olduğu gibidir.
3.1.1.Operatörler Anlamı
^ Üs alma
* Çarpma
/ Bölme
% Mod işlemi. Bölme işleminde kalanı verir.
+ Toplama
- Çıkarma
Örnek 3.1: KDV oranının kullanıcıdan istenerek, Genel Toplam değerinin
hesaplandığı program.
private void button1_Click_1(object sender, EventArgs e)
{
double KDV_Orani, GenelToplam;
int Toplam=1000;
KDV_Orani =Convert.ToDouble(textBox1.Text);
GenelToplam = (Toplam * (KDV_Orani / 100)) + Toplam;
label1.Text = Convert.ToString(GenelToplam);
}
Aritmetik operatörlerde parantez kullanımı önemlidir. Parantez kullanıldığında
işlem önceliğine dikkat etmek gerekmektedir
3.1.2.Strıng Operatörleri
String operatörleri; string ifadeleri birleştirmeyi sağlayan operatörlerdir.
Karakter katarlarını birleştirmek yada bir değişken ile ifadenin birlikte kullanıldığı
durumlarda “+”, “insert”… gibi operatörler kullanılır.
Karakter katarları üzerinde işlem yapmak için kullanılan operatörlerdir.
Operatörler Anlamı
+ String ifadeleri birleştirir.
insert String ifadenin istenilen yerinden itibaren, başka bir ifadeyi ekler.
Remove String ifadenin istenilen yerinden itibaren, bir ifadeyi çıkarır.
Split String ifadeyi böler ve sonucu dizide tutar.
18
toCharArray String ifadenin bir kısmını yada tamamını bir dizide tutar.
Örnek 3.2: KDV oranının kullanıcıdan istenerek, Genel Toplam değerinin
hesaplandığı yukarıdaki programın çıktısını aşağıdaki gibi düzenleye biliriz. (+)
private void button1_Click(object sender, EventArgs e)
{
double KDV_Orani, GenelToplam;
int Toplam = 1000;
KDV_Orani= Convert.ToDouble(textBox1.Text);
GenelToplam = (Toplam * (KDV_Orani / 100)) + Toplam;
label1.Text
=
Convert.ToString("%"
+KDV_Orani+"KDV
ORANININ GENEL TOPLAM DEĞERİ"+ GenelToplam);
}
Yukarıdaki kod satırı; genel toplam değerinin hesaplayan ve bu değeri string
operatörlerini kullanarak, mesajbox dialog kutusu ile kullanıcıya bildirilmiştir.
Örnek 3.3: String şeklinde tanımlanmış doğum günü değişkenine, GÜN, AY ve YIL
ifadelerini uygun yerde konumlanacak şeklide yerleştiren program. (Insert)
private void button1_Click_1(object sender, EventArgs e)
{
string Dogum_Tarihi1,Doğum_Tarihi2;
Dogum_Tarihi1= "06011980";
Doğum_Tarihi2 = Dogum_Tarihi1.Insert(0, "GÜN:");
Doğum_Tarihi2 = Doğum_Tarihi2.Insert(6, "/AY:");
Doğum_Tarihi2 = Doğum_Tarihi2.Insert(12, "/YIL:");
MessageBox.Show(Doğum_Tarihi2);
}

3.2.Karşılaştırma Operatörleri
Bu operatörler, iki değeri karşılaştırmak ve sonucunun "doğru" ,"yanlış" veya "boş"
(null) olma durumunu göre işlemleri yapmak amacıyla kullanılır. Bu operatörlerin
sonucun doğru çıkması durumda True yani –1, yanlış çıkması durumunda False yani 0
değerini döndürürler.
Operatörler Anlamı
== Eşittir
!= Eşit değil
< Küçük
> Büyük
<= Küçük ya da eşit
>= Büyük ya da eşit
int Sonuc, A, X, Y;
Sonuc = ( 3 < 5 ); Sonuc = -1
Sonuc = ( 7 > 9 ); Sonuc = 0
Sonuc = ( 10 <= Math.Sqrt (100) ); Sonuc = -1
A^2 < 10; a'nın karesi 10'dan küçük ise
19
3.2.1.Koşul Operatörleri
" doğru" ya da "yanlış" olması durumuna göre programın akışı yönlendirilir.
&& And, AndOr (Ve)
|| Or, XOr (Veya)
! Değil
if (Asc > 96 && Asc < 128) gibi.
3.2.2.Atama Operatörleri
Operatör Eşdeğeri Anlamı
x += y x = x + y x + y’nin değerini x’e ata
x ‐= y x = x – y
x *= y x = x * y
x++ x = x + 1
Örnek 3.4: Sayi1 ve Sayi2 şeklinde iki adet sabit tanımlayarak, atama
operatörlerinin kullanıldığı program.

}

private void button1_Click_1(object sender, EventArgs e)
{
double sonuc, sayi1, sayi2;
sayi1 = 9;
sayi2 = 2;
sonuc=sayi1+sayi2;
MessageBox.Show(sonuc.ToString());
sonuc=sayi1*sayi2;
MessageBox.Show(sonuc.ToString());
sonuc=sayi1/sayi2;
MessageBox.Show(sonuc.ToString());
sonuc=Math.Pow(sayi1,sayi2);
MessageBox.Show(sonuc.ToString());
sonuc = sayi1 % sayi2;
MessageBox.Show(sonuc.ToString());
3.3.Diğer Mantıksal Operatörler

Yukarıda anlatılan operatörlerin dışında, Visual C#’ta kullanılan diğer
operatörler şunlardır;
İşaretler Anlamı
? Herhangi bir karakter.
* Sıfır ya da daha fazla karakter.
# Bir haneli sayısal değer.
[ liste ] Listede yer alan herhangi bir karakter.
[ !liste ] Listede yer almayan herhangi bir karakter.
Bu operatörler; veri tabanında işlemlerinde, kayıt filtrelemede kullanılır.
20
4.PROGRAM DENETİM DEYİMLERİ
Program denetim deyimleri; bir veya daha fazla deyimin belirli koşul sağlandığında
yürütülmesi için kullanılır. Birden fazla koşulun birleştirilip tek bir koşul olarak
değerlendirilmesi için mantıksal operatörler kullanılır. Program denetim deyimleri;
karşılaştırma ve döngü deyimleridir.
4.1.Karşılaştırma Deyimleri
Karşılaştırma deyimleri; If…Else ve Select…Case deyimleridir.
IF…ELSE
Karşılaştırma işlemleri sonucunda bir eylemin yapılması durumunda kullanılır. If…
Else denetimleri;
If (Koşul)
{
Deyimler;
}
Else
{
Deyimler;
}
şeklinde kullanılır. Bu tanıma göre, verilen koşuldan "1" değeri döndürülürse
yani "doğru" ise Then kelimesini takip eden deyimler işlem görecektir. Eğer koşul
gerçekleşmez ise Else kelimesini izleyen satırlardaki deyimler işlem görecektir.
Örnek 4.1: Vize ve Final notunu kullanıcıdan isteyen ve ortalamasını kullanıcıya
bildiren program.
private void button1_Click(object sender, EventArgs e)
{
double sonuc;
double vize;
double final;
vize = Convert.ToInt32(textBox1.Text) ;
final = Convert.ToInt32(textBox2.Text) ;
sonuc = (vize * (0.4)) + (final * (0.6));
if (sonuc < 40)
{
MessageBox.Show("KALDINIZ");
}
else
{
MessageBox.Show("GEÇTİNİZ");
}
}
Yukarıdaki kod satırı, “Ortalama” adlı değişkenin içeriğinin 50’den küçük ya da
büyük olması koşulunu kontrol etmektedir.
If deyimini aşağıda gösterilen biçimde iç içe olarak ta kullanmak
21
mümkündür:
If (Koşul)
{
Deyimler;
}
Else
If (Koşul)
{
Deyimler;
}
…
Yukarıdaki tanımda, birinci satırdaki if deyiminde yer alan koşulun "doğru"
olması durumunda hemen ardındaki deyimler bloğu işlenecek, eğer "yanlış" ise bu
kez Else lf deyimi içindeki koşul göz önüne alınacaktır. Eğer bu koşul "doğru" ise
hemen ardındaki satırlarda yer alan deyimler işlem görecektir. Her iki koşulda
"yanlış" ise bu kez en son Else deyimini izleyen deyimler işlem görecektir.
Örnek 4.2: Vize ve Final notunu kullanıcıdan isteyen ve yıl sonu ortalamasını 5’lik
sisteme çeviren program.
private void button1_Click(object sender, EventArgs e)
{
double sonuc;
double vize;
double final;
vize = Convert.ToInt32(textBox1.Text) ;
final = Convert.ToInt32(textBox2.Text) ;
sonuc = (vize * (0.4)) + (final * (0.6));
if (sonuc >= 85)
{
MessageBox.Show("Yıl Sonu Ortalamanız Beş (5)");
}
else
if(sonuc >= 70)
{
MessageBox.Show("Yıl Sonu Ortalamanız Dört (4)");
}
else
if (sonuc >= 55)
{
MessageBox.Show("Yıl Sonu Ortalamanız Üç (3)");
}
else
if (sonuc >= 45)
{
MessageBox.Show("Yıl Sonu Ortalamanız İki (2)");
}
else
{
22
MessageBox.Show("Yıl Sonu Ortalamanız Bir (1)");
}
}
Yukarıdaki kod satırı; yıl sonu ortalamasının 5’lik sistemde karşılığını If…Else yapısı
ile hesaplamaktadır.
4.2.Swıtch Case
“If” karar yapısının gelişmişidir. Sadece bir değişkenin durumunu kontrol
eder. Kontrolü yapılacak değişken birden fazla değer alabiliyorsa switch yapısı
kullanılır.
Kullanılış şekli;
switch(değişken){
case sabit1:
…küme1;
case sabit2:
…küme2;
.
.
.
case sabitN:
default:
default_küme;
};
Verilen ifadenin aldığı değer test edilecektir. Bu değer, alt satırdaki Case
deyimleri içindeki yer alan listelerde aranacaktır. Örneğin, söz konusu değer ilk
Case deyiminde yer alan “Değişkenin1.Değeri” içinde ise, bunu takip eden deyimler
çalışacaktır. Eğer hiçbir Case deyimi çevresinde değilse, bu kez Case default
deyimini işleyen deyimler işlem görecektir.
Örnek 4.3: Haftanın gününü sistemden okuyan ve ona uygun mesajı kullanıcıya
ileten program.
private void Form1_Load(object sender, EventArgs e)
{
string gun = DateTime.Now.DayOfWeek.ToString();
switch (gun)
{
case "Sunday":
MessageBox.Show("PAZAR");
break;
case "Monday":
MessageBox.Show("PAZARTESİ");
break;
case "Tuesday":
MessageBox.Show("SALI");
break;
case "Wednesday":
MessageBox.Show("ÇARŞAMBA");
break;
23
case "Thursday":
MessageBox.Show("PERŞEMBE");
break;
case "Friday":
MessageBox.Show("CUMA");
break;
case "Saturday":
MessageBox.Show("CUMARTESİ");
break;
default:
MessageBox.Show("SİSTEM TARİH KONTROLÜ YAPINIZ");
break;
}
}
Yukarıdaki kod satırında; sistem bilgisine göre haftanın günü belirlenip, kullanıcıya mesajla
iletilmiştir.
4.3.Döngü Deyimleri
Döngü deyimleri, programların belirli bölümlerinin defalarca, işlenmesini sağlamak
üzere oluşturulmuş bir deyimlerdir. Bunlar For, While, Do…While, Break ve Continue
deyimleridir.
4.3.1.For Döngüsü
Visual C# programlarında bir ya da daha fazla sayıda deyimin belirli bir
koşul gerçekleşinceye kadar tekrarlanması isteniyorsa “for” deyimi kullanılır. Bu
deyim;
For(Başlangıç Değeri;Koşul;Artım)
{
Bildirim;
}
şeklinde kullanılır.
Örnek 4.4: 1’den 10’a kadar for döngüsü ile elde edilen sayıları listbox’a
ekleyen program.
private void Form1_Load(object sender, EventArgs e)
{
int sayac;
for(sayac=1;sayac<=20;sayac++)
{
listBox1.Items.Add(sayac);
}
}
Sayaç ve Artım değerleriyle; döngü sayı belirlenebilir. Döngü istenildiğinde “break”
ile sonlandırılabilir.
Örnek 4.5: 2’den 20’e kadar for döngüsü ile elde edilen sayıları listbox’a
ekleyen, sayaç 10’a geldiğinde break ile for döngüsünden çıkılan program.
private void Form1_Load(object sender, EventArgs e)
{
24
int sayac;
for(sayac=1;sayac<=20;sayac++)
{
listBox1.Items.Add(sayac);
if (sayac >= 10)
{
break;
}
}
}
toplayan program.
private void button1_Click(object sender, EventArgs e)
{
int basla;
int bitir;
int sayac=0;
int toplam=0;
basla = Convert.ToInt32(textBox1.Text);
bitir = Convert.ToInt32(textBox2.Text);
for(sayac=basla;sayac<=bitir;sayac++)
{
toplam = toplam + sayac;
}
MessageBox.Show(toplam.ToString());
Yukarıdaki kod satırları; iki değer arasındaki sayıları toplayıp, ekrana mesajbox
dialog kutusu ile bildirmektedir.
Örnek 4.6: Fibenocci serisinin 20 elemanını listbox’a ekleyen program.
private void Form1_Load(object sender, EventArgs e)
{
int a, b, c, i;
a = 1;
b = 1;
listBox1.Items.Add(a.ToString());
for (i = 1; i <= 20; i++)
{
c = a + b;
a = b;
b = c;
listBox1.Items.Add(a.ToString());
}
}
Yukarıdaki kod satırları; fibenocci serisinin elemanlarını her for döngüsünde elde
ederek listbax’a eklemektedir.
4.3.2.While Döngüsü
Belirli bir koşulun gerçekleşmesi sonucunda bazı deyimleri söz konusu ise
While.. döngülerinden yararlanılır. Koşul olumlu olduğu sürece çevrim yinelenir. İki
veya daha fazla koşul mantıksal operatörler ile birleştirilir.
Bu deyim;
While( koşul )
25
{
Deyimler;
};
biçimde tanımlanmaktadır. Koşulun gerçekleşmemesi durumunda ise döngü terk
edilir.
4.3.3.Do…While Döngüsü
While döngüsü gibidir. Tek fark, koşulun döngü sonunda sınanmasıdır. Yani, koşul
sınanmadan çevrime girilir ve döngü kümesi en az bir kez yürütülür.
Kullanılışı;
Do
{
Deyimler;
}While(Koşul);
şu şekildedir. Döngü istenildiğinde “Break” ile sonlandırılabilir.
Örnek 4.7: Kullanıcının girdiği değere göre faktöriyel hesaplayan program.
private void button1_Click(object sender, EventArgs e)
{
int sayac, sayisal_deger, Faktoriyel;
string
deger
=
Microsoft.VisualBasic.Interaction.InputBox("Faktöriyel
Giriniz",
"Titttlee", "", 100, 100);
sayac = 1;
Faktoriyel = 1;
sayisal_deger = Convert.ToInt32(deger);
do
{
sayac = sayac + 1;
Faktoriyel = Faktoriyel * sayac;
} while (sayac < sayisal_deger);
MessageBox.Show("FAKTÖRİYEL: " + Faktoriyel.ToString());

26
5.FONKSİYONLAR
İki çeşit fonksiyon vardır. Bunlardan birisi NET kütüphanesinde önceden tanımlanmış
bir fonksiyon (matematiksel, string yada tarih_saat fonksiyonları gibi) diğeri kullanıcı tarafından
tanımlanmış fonksiyonlardır. Her fonksiyon çalıştırıldığında geriye mutlaka bir değer döndür ve
kullanıcı bu dönen değere göre işlem yapar.
5.1.Matematiksel Fonksiyonlar
Matematiksel hesaplamalarda kullanılan fonksiyonlardır. Döndürüln değr, bu
hesaplama sonucunda elde edilen değerdir.
Fonksiyon Anlamı
Pow > Üst alma fonksiyonu.
Sqrt > Karekök alma fonksiyonu.
Log > Logaritma fonksiyonu.
Exp > e (2,718281) değerini fonksiyonda belirtilen sayı ile üssü alıp değer
dönderir.
Max_Min > Büyük yada küçük değerin dönderildiği fonksiyon.
Cos_Sin_Tan >Trigonometrik fonksiyonlar.
Ceiling_Floor >Tamlama fonksiyonlarıdır.
Ceiling >fonksiyonu, bir değerin kendisine en yakın küçük bir değeri dönderir.
Floor > fonksiyonu ise bir değerin kendisine en yakın büyük bir değeri dönderir.
Bu operatörlerin yanında rastgele sayı üretmek için kullanılan Random( )
fonksiyonuda vardır.
Örnek 5.1:
private void Form1_Load(object sender, EventArgs e)
{
Random rand = new Random();
MessageBox.Show(rand.Next(10).ToString());
}
Aşağıda matematiksel fonksiyonlar ve döndürdüğü değerlerle ilgili örnek
verilmiştir.
Örnek 5.2:Matematiksel fonksiyonların kullanımı:
private void button1_Click_1(object sender, EventArgs e)
{
double sonuc;
sonuc = Math.Pow(4, 2);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Sqrt(144);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Sqrt(100);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Exp(100);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Max(10, 100);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Min(10, 100);
MessageBox.Show(sonuc.ToString());
27
sonuc = Math.Cos(0);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Sin(0);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Tan(45);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Ceiling(144.23333);
MessageBox.Show(sonuc.ToString());
sonuc = Math.Floor(144.23333);
MessageBox.Show(sonuc.ToString());
}
Örnek 5.3:
Aşağıdaki matematiksel ifadenin hesaplanması için gereken program.

private void button1_Click_1(object sender, EventArgs e)
{
int x;
double sonuc;
x = 10;
sonuc=(Math.Pow((x+5),(1/3)))/((x+8));
MessageBox.Show(sonuc.ToString());
}

6. NUMERİK ANALİZ(SAYISAL ANALİZ)
6.1.Tanımı Ve Tarihçesi:
Bilim, problemleri ortaya koyar ve onlara çözümler üretir. Matematik, bilimin ortak
dilidir. Hem problemleri ifade ederken, hem de onlara çözümler yapmaya çalışırken bu dili
kullanırız. Ayrıca, matematik bilimsel düşünmeyi, yani doğru ve net düşünmeyi öğretir.
Düşünmeyi ve düşünebilmeyi öğretir, kişiyi doğru sonuca yönlendirir. Bu haliyle matematik bir
eğitim aracı olarak da kabul edilir. Bilim adamlarının karşılaştığı en önemli sorunlardan biri,
problemleri matematiğin diliyle ifade ettikten sonra çözümünü yapmaktır. İşte bu noktaya
Sayısal Çözümleme, diğer adıyla Nümerik Analiz devreye girer. Çünkü çözüm başlı başına bir
problemdir. Zaten, matematik yıllar içinde geliştikçe, çözüm yapabilmek için Nümerik Analiz
yöntemleri de matematiğin bir kolu olarak ortaya çıkmış, gelişmiş ve gelişmektedir.
Nümerik Analiz (Sayısal Çözümleme); analitik yöntemlerle çözülemeyen problemleri çözmek
için kullanılan yöntemler bütünüdür. Diğer bir tanımla nümerik analiz istenen matematiksel
28
işlemlerin
ayrık
olarak
nasıl
hesaplanabileceğinin
incelenmesidir.
Bugün bile ilk kullanım tarihi ve sınırları kesin olarak bilinmemekle birlikte, Nümerik Analizin
çok eski yıllardan beri farklı şekillerde ve isimler altında kullanıldığı ilgili kaynaklarda yer
almaktadır. Bunun açık bir kanıtı olarak; bundan yaklaşık 3700 yıl önce, Babilliler’in ikinci
dereceden bir denklemin köklerinin nasıl bulunabileceğini, tam sayıların kareköklerinin yaklaşık
olarak nasıl hesaplanabileceğini ve bileşik faizle ilgili bazı problemlerin lineer enterpolasyon
yöntemiyle nasıl çözülebileceğini bildiklerini bir çok kaynakta rastlamak mümkündür. Ayrıca,
yaklaşık 2000 yıl önce “günümüzde Gauss eliminasyon yöntemi” olarak bilinen, lineer denklem
sistemlerinin çözümüyle ilgi bir örnekte matris gösteriminin kullanılmış olduğu bazı Çinli
kaynaklarda ifade edilmektedir. Yine, bazı Çinli matematikçilerin (960‐1279) yılları arasında
yüksek dereceli denklemlerin nümerik çözümü için, iteratif yaklaşma yöntemini
genelleştirdiklerine ilgili kaynaklarda rastlamak mümkündür. Bir diğer durum; bundan yaklaşık
900 yıl önce yaşamış olan Ömer Hayyam’ın üçüncü dereceden denklemlerin çözümüyle ilgili
araştırmalar yaptığı, yayınlamış olduğu kendi eserinde yer almaktadır. İskoçyalı John Napier
1614 yılında logaritma tablolarını düzenleyerek yayınlamış ve neticede birçok hesaplamalar için
kullanılabilecek
bir
hesaplama
aracı
hizmete
sunmuştur.
Bugün dahi nümerik analiz konusunun sınırları diğer bazı disiplinlerin aksine kesin olarak
belirlenmemektedir. Nümerik Analiz teriminin 1950 yıllarından sonra daha yaygın olarak
kullanılır olması aynı yıllarda gelişmeye başlayan bilgisayarlar ile kesin bağlantısının bir kanıtıdır.
6.2.Amacı:
Nümerik Analizin amacı çözümünün elle yapılmasının pratik olmadığı karmaşık,
analitik olarak çözümü zor veya olanaksız olan problemlerin çözümlenebilmesi için
uygun ve en iyi yaklaşım veren yöntemleri bulmak, ayrıca bunlardan anlamlı ve faydalı
sonuçlar çıkarmaktır. Çözümü istenen problemi tanımlamak ve sonuca varacak yöntemi
saptamak genellikle aynı bilim adamının işidir. Bu nedenle problemi tanımlayanın bir
nümerik analizcinin sahip olduğu bilgilerin en azına sahip olması gerekir. Problemin
çözümünde bir takım aşamalardan geçilerek sonuca varılır. Bu aşamalardan ilki
problemin formüle edilmesidir. Problemler Cebir ve analiz başta olmak üzere değişik
matematik konularından kaynaklanır. Fiziksel bir olayın matematiksel modelinin
formüle edilmesinde nümerik analizci, problemini bilgisayar ile çözümleyebileceğini göz
önünde bulundurmalıdır. Formülasyon yapıldıktan sonra problemin çözümü için hata
analizi ile birlikte nümerik yöntem en iyi yaklaşımla sonuç elde edilecek şekilde
seçilmelidir. Nümerik çözüm yöntemi, belirtilen ya da istenilen hassaslıktaki yaklaşımla
ve belli sayıda ardışık tekrar işlemlerinden sonra matematiksel probleme çözüm
getirmelidir. Nümerik analiz sadece çözüm olarak sayılar üretmez, cebirsel ve analitik
teorilere önemli katkılarda da bulunur. Nümerik çözüm yöntemleri genellikle önceden
saptanmış aritmetik ve mantıksal işlemlerden oluşur. Bu işlemlerin tümüne çözüm
algoritması denir. Algoritma belli sayıda işlemlerden sonra probleme çözüm getirir.
Problemin bilgisayar ile çözümünde üçüncü aşama, algoritmanın bilgisayarda
çözümünü sağlayacak programlama aşamasıdır. Programlama; C, Pascal, Basic, Cobol,
Fortran gibi bilgisayar dillerinden birisi ile yapılır.
6.3.Kullanım Alanları:
Nümerik analiz mühendislik ve uygulamalı matematikte önemlidir ve birçok mühendislik
bölümünde (makine müh. vb. ) gösterilen bir derstir. Lineer programlama alanında da sıkça
kullanılır. Nümerik Analiz olmazsa olmazlardan birisidir. Özellikle bilgisayarların ortaya çıkması
ve
yaygın
kullanılması
bu
tekniklerin
önemini
daha
da
artırmıştır.
Sayısal Çözümlemenin bilgisayarlarla daha doğrusu bilgisayar mühendisliği ve uygulamalı
matematik ile olan yakın ilişkilerinden ötürü bu konunun bilgisayar mühendisliği ve matematiğin
29
ortak birer dalı olduğu genellikle kabul edilir. Çağımızda kapsamlı realizasyon işlemleri
bilgisayar aracılığı ile yapıldığı için, kullanılan nümerik metodun etkinliği, genelde bu metodun
kesinliğine bağlı olduğu kadar, kullanılan bilgisayarın teknolojik donanımının verdiği kolaylığa
ve
bilgisayar
programının
kalitesine
de
bağlıdır.
İlişkiyi örnekle açıklamak gerekirse uygulamalı matematikçi bir problem çözüm için gereken
matematiksel modeli kurar. Sayısal çözümleyici de bu modeli bilgisayar yardımıyla sayısal olarak
çözer. Kuşkusuz sayısal çözüm sırasında bilgisayar ile ilgili olan programlama dilleri, donanım
özellikleri, algoritmik süreçler ve sayısal işlemler kullanılır.
.
6.4.Nümerik metotların dezavantajları
1. Numerik analiz sayılar ile bir nevi oyun oynayarak çözüm üretmektir,
denilebilir. Oyun genelde kazanılır, fakat kaybedilebilir de! Söylenmek istenen
şudur: Çözüm genelde bulunur, ancak bulunamayabilir de.
2. Numerik metotların çoğu belli bir hesap kuralının, belki yüzlerce binlerce
kez, tekrarlanması ile adım adım sonuca varırlar(iterasyon). Bir tek sayının
hesaplanabilmesi için
binlerce hatta milyonlarca dört işlem (toplama,
çıkarma, çarpma, bölme) gerekir. Bu nedenle el hesaplarına uygun değildir.
Bilgisayar, uygun yöntem ve program kullanımı zorunludur. Direkt çözümler
bile milyarlarca dört işlem gerektirir. örneğin, n=10000 bilinmeyenli bir
denklem sisteminin Gauss indirgeme yöntemi ile çözümünde yaklaşık
2n3/3≈7x1011 (700 milyar!) dört işlem vardır. Sayıların bu denli çok dört
işleme tabi tutulması yuvarlama hatalarının giderek büyümesine neden olur.
Peki, bu kadar büyük
denklem sistemi uygulamada karşımıza çıkar mı? Evet, hatta çok daha
büyükleri! Hemen söyleyelim n=374000000 (uç yüz yetmiş dört milyon)
bilinmeyenli denklem sistemi günümüzde çözülebilmiştir. Hem de Türkiye’de:
http://www.cem.bilkent.edu.tr/world_record
3. Numerik çözüm yaklaşıktır, bir miktar kabul edilebilir hata içerir.
4. Aynı problemin çözümünde numerik metotların bazıları sonuç verebilir,
bazıları veremeyebilir.
5. Numerik metotları öğrenmek ve çözüm üretmek için temel matematik ve
mekanik bilgisi yanında bilgisayar, programlama ve paket yazılım kullanma
becerisi de gerekir. Hem numerik analiz hem de bilgisayar ve programlama
dilleri yoğun olarak matrisler ile çalıştığından matris matematiği öğrenilmek
zorundadır. Bir yapının numerik metotlar ile hesabı için mukavemet, yapı
statiği ve dinamiği gibi bilgiler de gerekir. Kısacası numerik metotlar klasik
bilgiler üzerine inşa edilmiş pratik bir çözüm yoludur, temel bilgiler olmadan
bir işe yaramaz.
6.5.Nümerik Analizin Temellerini Atanlar
John Napier (1550-1617), Isaac Newton (1643-1727), Gottfried Leibniz
(1646–1716), Leonhard Euler (1707-1783), JosephLouis Lagrange (1736-1813), Pierre-Simon-Marquis de Laplace(17491827), Karl Friedrich Gauss (1777-1855), James Joseph
Sylvester(1814 -1897).
Nümerik analiz yöntemlerinde adı sıkça geçenler
Niels Henrik Abel (1802-1829), Alexander Craig Aitken (1895 - 1967),
Bernard Bolzano(1781-1848) George Boole(1815-1864),
30
Isaac Barrow(1630-1677), Leonard Bairstow(1880-1963), Augustin Louis
Cauchy(1789-1857),
Pafnuty Lvovich Chebyshev(1821-1894) , Prescott Duran Crout (19071984), Mayric Hascall Doolittle(1830-1913), Andre-Louis
Cholesky(1875-1918), Gabriel Cramer(1704-1752), Roger Cotes(16821716), Arthur Cayley(1821-1895), Ferdinand Georg
Frobenius(1849-1917),
Leonardo
Fibonacci(1170-1250),
Joseph
Fourier(1768-1830), Jorgen Pedersen Gram(1850-1916),
Hermann Grassmann(1809-1877), Charles Hermite(1822-1901), David
Hilbert(1862-1943), Alston Scott Householder(1904–
1993), C. A. R. Hoare(1934 - ), Carl Gustav Jacob Jacobi(1804-1851),
Marie Ennemond Camille Jordan(1838-1922), Wilhelm
Jordan(1842-1899), Martin Wilhelm Kutta(1867-1944) , Joseph-Louis
Lagrange (1736 –1813), Adrien Marie Legendre(17521833), Cornelius Lanczos(1893-1974), Richard Edler von Mises(18831953), David E. Müller(1924 - ), Lewis Fry
Richardson(1881-1953), Carl David Tolme Runge(1856-1927), Werner
Romberg(1909-2003), Thomas Simpson(1710-1761),
Ludwig von Seidel(1821-1896), Erhard Schmidt(1876-1959), Johan
Frederik Steffensen (1873–1961), James Hardy
Wilkinson(1919-1986).
1930-1945 li yıllarda ilk bilgisayarların ortaya cıkmasıyla numerik analiz
yontemleri onem
kazanmaya başladı. Modern numerik analizin 1947 yılında John Neumann ve
Herman
Goldstine tarafından yayınlanan “Numerical Inverting of Matrices of High
Order , Bulletin of the AMS, Nov.
1947” ile başladığı kabul edilir. Bu yayında yuvarlama hataları ilk kez
araştırılmıştır.
Gunumuzde kullanılan numerik analiz yontemlerinin coğu 1950-1970
yıllarında
geliştirilmiştir.
Bilgisayarların ve programlama dillerinin giderek gelişmesi, devrim yaratan
ve günümüz vazgeçilmez numerik metodu olan, “Sonlu Elemanlar MetoduSEM” nun 1960 lı yıllarda
doğmasına neden oldu. Bu konudaki ilk yayın: “M. J. Turner, R. W. Clough,
H. C. Martin and L. J.
Topp, "Stiffness and Deflection Analysis of Complex Structures," J. of Aero.
Sci., 23 (9), Sept. 1956”. Finite
Element Method(Sonlu Elemanlar Metodu) adının ilk kullanıldığı yayın:
“Clough, Ray W.: The
finite element method in plane stress analysis. Proceedings, 2nd Conference
on Electronic Computation, A.S.C.E.
Structural Division, Pittsburgh, Pennsylvania, Sept. 1960”. İlk Sonlu
elemanlar kitabı: O. C. Zienkiewicz, The Finite
Element Method, 1967.
6.6.Sonlu Elemanlar Metodunun ilkleri
31
Lord Rayleigh(1842-1919), Boris Grigorievich Galerkin(1871-1945),
Walther Ritz(1878-1909), Richard Courant(1888-1972),
Alexander Hrennikoff(1896-1984), John Argyris(1913-2004), James Hardy
Wilkinson(1919-1986), Olgierd Cecil
Zienkiewicz(1921-2009), Ray W. Clough, 1920- ), William Prager( 190380).
6.7.Sayısal Analizin Belli Başlı Konuları
 Sonlu Fark Formülleri ve Türev
 İnterpolasyon ve Ekstrapolasyon
 Nümerik İntegrasyon
 Denklem Köklerinin Bulunması
 Matrisler ve Lineer Denklem Çözümleri
 Verilere Eğri Uydurma
 Difesansiyel Denklemlerin Çözümü
 Özdeğer ve Özvektörler
Gibi belli başlı konular mevcuttur. Bu konular kendi içlerindede
olarak alt bölümlere ayrılır.

32

detaylı
7.Uygulamalı Sayısal Analiz Örnekleri
Örnek7.1: Bir vinç kolonunun mukavemet hesabını yapan bilgisayar
programı yazımı ve yazılan programın paket programlara göre
karşılaştırılması

Sonlu Farklar Metodu
Yüklenmeden önce eksenleri doğru olan çubuklar, eğildikten sonra eksenleri
eğri haline gelir ve bu eğriye elastik eğri denir.
d2 y = -M
dx2

EI

Yukarıdaki ifadeye elastik eğrinin diferansiyel denklemi denir. Elastik eğriye
ait diferansiyel denklem ,sonlu farklar (differans) denklemleriyle ifade edilecek olursa ,
problemin çözümünü lineer denklem takımına indirgemek kabil olur. Varılan değer
yaklaşık olmakla beraber çok defa yaklaşıklığın mertebesi uygulama alanı için yeter
gelir. Momentin hesabını ön gören yukarıdaki diferansiyel denklemi ele alalım.
d2 y = -M
dx2

(1)

EI

İfadesinin sol tarafındaki ikinci türevi ,birbirini eşit aralıklarla izleyen, üç
ordinatın farklarıyla şu şekilde ifade edebiliriz:

Burada Dx=h sabiti ayrık noktaların apsis farkından ibarettir (şekil-1).
İkinci türev için kabul edilen bu ifadenin yaklaşığı h 4 mertebesindedir. Şayet
y(x) eğrisi 2. dereceden ise (2) ifadesi kesindir. (1) ve (2) ifadesi
karşılaştırılacak olursa;
33
Şeklinde elastik eğrinin sonlu farklar denklemi kurulmuş olur. Burada M k momenti, k
kesitine aittir. Bu cebrik denklem uygulanırken şu şekilde hareket edilecektir: Önce bir l
açıklığı

h=l/n olacak tarzda n eşit parçaya ayrılacak

ve ortaya çıkan n+1

bilinmeyen ordinatı hesaplamak için (3) denkleminde, k=1,2,3...(n+1) noktaları için
ayrı ayrı uygulanacak, n-1 tane lineer denklem elde edilecektir. Eksik kalan iki
denklemi, bize problemin sınır şartları verecek ve bu şekilde problem, belli olacaktır.
Bu anlatılan hesap metoduna uygun olmak üzere şekil-2’ de görülen basit kirişin
ortasındaki çökme istensin. Eğilme moment diyagramının verilmiş olduğunu kabul
edelim.

34

l açıklığını n=2p gibi çift sayılara bölelim. Bu şekilde h=l/2p olacak demektir. (3)
8.SONUÇ VE ÖNERİLER
Bu çalışmada sayısal analizin bilgisayar yardımıyla nasıl kullanılacağına genel olarak
değinilmiştir. Çözümlerin gerçeğe yakın olması uygulanabilirlik olanağını artırmaktadır.
Fakat bu çalışma profosyönellik konusunda yetersiz hatta çok basit kalmaktadır. Günümüzde
matematiksel modelin görsellikle desteklenmesi ve 3D hale getirilmesi çok önemlidir. Görsellik
ve 3D tasarımcıya daha iyi anlama kabiliyeti ve problemi daha kolay çözme imkanı sağlar.
Öneri olarak; 3D modelleme ve grafik işlemlerine daha fazla yer verilmeli ve
programlama becerisinden ziyade programın amacına hizmet edip etmemesi dikkat edilmelidir.

35
KAYNAKLAR
[1] SAYISAL ANALİZ UYGULAMALARI- YRD. DOÇ. DR. NİMETİ DÖNER
[2] SAYISAL ANALİZ VE MÜHENDİSLİK UYGULAMALARI-PROF. DR. İRFAN
KARAGÖZ
[3]YAZILIM
VE PROGRAMLAMA UYGULAMALARIYLA MÜHENDİSLER İÇİN
SAYISAL YÖNTEMLER-STEVEN C. CHARPA & RAYMOND P. CANALE
[4] NUMERİK ANALİZ-DOÇ. DR. İBRAHİM UZUN
[5] VİSUAL C# NET 2005-PROF. DR. E. ŞAHİN ÇONKUR

36

More Related Content

Similar to Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle çözümü

Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlıkErol Dizdar
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedirbykezza
 
C ders-notlari-necati-ergin
C ders-notlari-necati-erginC ders-notlari-necati-ergin
C ders-notlari-necati-erginIbrahim Kizir
 
Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1atasss
 
Nesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişNesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişErol Dizdar
 
Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Ahmet Yanik
 
C dilini-taniyalim
C dilini-taniyalimC dilini-taniyalim
C dilini-taniyalimAliBaran6
 
C sharp-teknikeri
C sharp-teknikeriC sharp-teknikeri
C sharp-teknikerisersld30
 
C sharp-danismani
C sharp-danismaniC sharp-danismani
C sharp-danismanisersld30
 
C sharp-ornekleri
C sharp-ornekleriC sharp-ornekleri
C sharp-orneklerisersld30
 
C sharp-seminerleri
C sharp-seminerleriC sharp-seminerleri
C sharp-seminerlerisersld30
 
Analist Eğitimi - Tüm Bölümler - [535 Slides]
Analist Eğitimi - Tüm Bölümler -  [535 Slides]Analist Eğitimi - Tüm Bölümler -  [535 Slides]
Analist Eğitimi - Tüm Bölümler - [535 Slides]Erol Bozkurt
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYusuf AYTİN
 
Az ve Öz C++ Muhammet ÇAĞATAY
Az ve Öz C++  Muhammet ÇAĞATAYAz ve Öz C++  Muhammet ÇAĞATAY
Az ve Öz C++ Muhammet ÇAĞATAYMuhammet ÇAĞATAY
 
C sharp-teknigi
C sharp-teknigiC sharp-teknigi
C sharp-teknigisersld30
 
C sharp-egitimi-atasehir
C sharp-egitimi-atasehirC sharp-egitimi-atasehir
C sharp-egitimi-atasehirsersld30
 
C sharp-konferansi
C sharp-konferansiC sharp-konferansi
C sharp-konferansisersld30
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumanisersld30
 

Similar to Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle çözümü (20)

Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlık
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedir
 
C ders-notlari-necati-ergin
C ders-notlari-necati-erginC ders-notlari-necati-ergin
C ders-notlari-necati-ergin
 
Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1
 
Nesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişNesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya giriş
 
Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)
 
Basit kodlar
Basit kodlarBasit kodlar
Basit kodlar
 
C dilini-taniyalim
C dilini-taniyalimC dilini-taniyalim
C dilini-taniyalim
 
C dilini-taniyalim
C dilini-taniyalimC dilini-taniyalim
C dilini-taniyalim
 
C sharp-teknikeri
C sharp-teknikeriC sharp-teknikeri
C sharp-teknikeri
 
C sharp-danismani
C sharp-danismaniC sharp-danismani
C sharp-danismani
 
C sharp-ornekleri
C sharp-ornekleriC sharp-ornekleri
C sharp-ornekleri
 
C sharp-seminerleri
C sharp-seminerleriC sharp-seminerleri
C sharp-seminerleri
 
Analist Eğitimi - Tüm Bölümler - [535 Slides]
Analist Eğitimi - Tüm Bölümler -  [535 Slides]Analist Eğitimi - Tüm Bölümler -  [535 Slides]
Analist Eğitimi - Tüm Bölümler - [535 Slides]
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme Teknolojileri
 
Az ve Öz C++ Muhammet ÇAĞATAY
Az ve Öz C++  Muhammet ÇAĞATAYAz ve Öz C++  Muhammet ÇAĞATAY
Az ve Öz C++ Muhammet ÇAĞATAY
 
C sharp-teknigi
C sharp-teknigiC sharp-teknigi
C sharp-teknigi
 
C sharp-egitimi-atasehir
C sharp-egitimi-atasehirC sharp-egitimi-atasehir
C sharp-egitimi-atasehir
 
C sharp-konferansi
C sharp-konferansiC sharp-konferansi
C sharp-konferansi
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumani
 

Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle çözümü

  • 1. MÜHENDİSLİK PROBLEMLERİNİN BİLGİSAYAR ORTAMINDA SAYISAL ANALİZ YÖNTEMLERİYLE ÇÖZÜLMESİ ABDURRAHMAN TUNÇ DUMLUPINAR ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ MAKİNA MÜHENDİSLİĞİ 1
  • 2. ÖZET Sayısal Analiz ve Sayısal Çözümlemeler; mühendislik alanında günlük hayatın vazgeçilmezlerindendir. Sayısal çözümlemeler yapmak için günümüz nimetlerinden biri olan bilgisayara ihtiyaç vardır. Yazılan bilgisayar programı bize hem zamandan kazanç hem de çözümde kesinlik ve çözüme giden yolda kolaylık sağlar. Bu çalışmamızda C# programlama diliyle sayısal çözümlemelerin nasıl yapıldığına ve program yazmak için gerekli olan temel bilgilere değinilmiştir. Anahtar Kelimeler: Sayısal Analiz, C# programlama dili 2
  • 3. TEŞEKKÜR Eğitim hayatım boyunca bizden yardımlarını, bilgilerini en önemlisi de içten ve samimi sohbetini esirgemeyen saygı değer hocamız Yrd. Doç. Dr. Nimeti Döner hocamıza minnet duyar teşekkürü borç bilirim. Ayrıca Hisarlar A.Ş. personelinden Mesut Türker ve İsmail Boztay’a teşekkür ederim ve Hisarlar A.Ş.’nin en iyi yerlere gelmesini dilerim. İÇİNDEKİLER Sayfa ÖZET 1.VİSUAL C# - GİRİŞ 1.1.Vs.Net Kurulum 1.2.Visual C# Ide 1.2.1.Visual C# IDE bileşenleri; 1.2.2. Form Tasarım Penceresi 1.2.3.Araç Kutusu(Toll Box) 1.2.4.Proporties Pençeresi 2.VERİ TÜRLERİ 2.1.Değişken ve Sabitler 2.1.1.Değişkenler 2.1.2.Sabitler 2.2.Değişkenlere Değer Atama 2.3.Değişkenlerde Tip ve Dönüşümleri 3.OPERATÖRLER (İŞLEÇLER) 3.1.Aritmetik Operatörler 3.1.1.Operatörler Anlamı 3.1.2.Strıng Operatörleri 3.2.Karşılaştırma Operatörleri 3.2.1.Koşul Operatörleri 3.2.2.Atama Operatörleri 3
  • 4. 3.3.Diğer Mantıksal Operatörler 4.PROGRAM DENETİM DEYİMLERİ 4.1.Karşılaştırma Deyimleri 4.2.Swıtch Case 4.3.Döngü Deyimleri 4.3.1.For Döngüsü 4.3.2.While Döngüsü 4.3.3. Do-While Döngüsü 5.FONKSİYONLAR 5.1.Matematiksel Fonksiyonlar 6. NUMERİK ANALİZ(SAYISAL ANALİZ) 6.1.Tanımı Ve Tarihçesi: 6.2.Amacı: 6.3.Kullanım Alanları 6.4.Nümerik metotların dezavantajları 6.5.Nümerik Analizin Temellerini Atanlar 6.6.Sonlu Elemanlar Metodunun ilkleri 6.7.Sayısal Analizin Belli Başlı Konuları 7.UYGULAMALI SAYISAL ANALİZ ÖRNEKLERİ 8.SONUÇ VE ÖNERİLER 9.KAYNAKLAR 4
  • 5. 1.VİSUAL C# - GİRİŞ Visual Studio .NET, günümüz dünyasındaki en gelişmiş yazılım geliştirme ortamıdır. Visual Studio .NET kullanıcılarına, tüm yazılım geliştirme dilleri için ortak bir geliştirme platformu sunar. İstenildiğinde BASIC dilinde (VB.NET), istenildiğinde C dilinde (Visual C#) yazılımların geliştirilmesine olanak sağlar. Böylece yazılım geliştiriciler bir programlama dilinden diğerine geçtiklerinde geliştirme platformuna alışmakla zaman kaybetmezler. Ek olarak Visual Studio .NET, proje geliştirirken ihtiyaç duyacağınız her türlü bileşeni barındırır ve tek bir platformda tüm ihtiyaçlarınızı karşılar. Uygulamaların (bir masaüstü uygulaması, web servisleri, web uygulamaları vb.) hızlı ve kolay bir şekilde geliştirilmesine, yönetilmesine olanak tanır. Visual Studio .NET, günümüz dünyasındaki en gelişmiş yazılım geliştirme ortamıdır. Visual Studio .NET kullanıcılarına, tüm yazılım geliştirme dilleri için ortak bir geliştirme platformu sunar. İstenildiğinde BASIC dilinde (VB.NET), istenildiğinde C dilinde (Visual C#) yazılımların geliştirilmesine olanak sağlar. Böylece yazılım geliştiriciler bir programlama dilinden diğerine geçtiklerinde geliştirme platformuna alışmakla zaman kaybetmezler. Ek olarak Visual Studio .NET, proje geliştirirken ihtiyaç duyacağınız her türlü bileşeni barındırır ve tek bir platformda tüm ihtiyaçlarınızı karşılar. Uygulamaların (bir masaüstü uygulaması, web servisleri, web uygulamaları vb.) hızlı ve kolay bir şekilde geliştirilmesine, yönetilmesine olanak tanır. 1.1.Vs.Net Kurulum Visual Studio .NET kurulumu için ihtiyacımız olan minimum konfigurasyon şu şekildedir; İşlemci: 400Mhz Ram: 128MB Disk Alanı: 3GB (Boş alan) Çözünürlük: Min. 800x600/16Bit Çözünürlük/Renk Derinliği İşletim Sistemi: NT Based (Windows NT, 2000, XP, Server 2003,Windows sistemlerinden biri. 5 7 ) işletim
  • 6. Programı indirdikten sonra programa tıklanır. Next butonuna tıklayarak diğer adıma geçilir. 6
  • 7. Lisans sözleşmesi kabul edilir. Bu adımda programımızı nereye kurulacağı belirlenir belirlenir. 7 genel olarak C sürücüsü
  • 8. Kurulum Adımları ve durumu gösterilmektedir. Exit butonuna tıklayarak kurulum tamamlanır. 8
  • 9. New Project penceresini kullanarak yeni bir uygulama açılabilir. Bu pencereyi açmak için ;Create>Project veya File>New Project sekmeleri kullanılabilir. Proje tipi, proje kalıbı ve projenin ismi belirlenir. C tabanlı, projeleri için Project Types bölümünden “Visual C# -> Windows” tipini, Templates bölümünden “Windows Application” kalıbını, name bölümünden de projeye vereceğimiz isim belirlenir. Daha sonra onay butonuna tıklanarak Visual C# IDE açılır. 9
  • 10. 1.2.Visual C# Ide 1.2.1.Visual C# IDE bileşenleri; Menü Çubuğu Araç Çubukları Form Tasarım Penceresi Araç Kutusu Properties Penceresi Solution Explorer Penceresi Component Tray olarak sıralanabilir. MENÜ ÇUBUĞU Başlık çubuğunun altındaki menüdür. Dinamik bir yapısı vardır. Alt menülere erişimi sağlar. Aşağıda menü çubuğu verilmiştir. File: Proje ve dosyaları açıp/kapamak için, Visual C# dan çıkmak için kullanılır. Edit: Kod yazarken metnin taşınması, kopyalanması ve silinmesi gibi işlemler için kullanılır. 10
  • 11. View: IDE içerisindeki sık kullanılan bileşenlerin gösterilip, gizlenmesi için kullanılır. Project: Uygulamalarımıza yeni modüller, yeni formlar, yeni sınıflar vb eklemek için kullanılır. Build : Uygulamaların çalıştırılması için kullanılır. Debug: Kod satırındaki hataları onarmak için kullanılır. Data: Veri tabanı uygulamalarında kayıt set oluşturmak için kullanılır. Tools: IDE’yi biçimlendirmek için kullanılır. Menülerin, eklemek/çıkarmak gibi dinamik kullanımı söz konusudur. Windows:IDE de bulunan pencerelerin yerleşimini gösterir. Help:Yardım menüsüdür. 1.2.2. Form Tasarım Penceresi Visual C# IDE arabiriminin ortasında bulunan penceredir. Uygulama geliştirdiğimiz formların tasarım pencereleri ve formların kod satırları görüntülenir. Bu pencereler arasında geçiş yapmak çok kolay ve kullanımı basittir. 1.2.3.Araç Kutusu( Tool Box) 11
  • 12. Araç kutusunda en sık kullanılan denetimler bulunmaktadır. Başka denetimler eklemek için “Choose ToolBox Items” penceresi kullanılır. Bu penceresi açmak için çeşitli yöntemler vardır. Bunlar; Tools -> Choose ToolBox Items menü seçeneği, Araç kutusunda sağ tık -> Choose Items… seçeneği ile açılır. 12
  • 13. 1.2.4.Proporties Pençeresi Properties penceresi, özellikler penceresi olarak adlandırılır. Form tasarım modunda iken kullanılır. Özellikler penceresi; formumuza ait ya da form’a eklediğimiz denetimlere ait özelliklerin görüntülendiği penceredir. Bu özellikler; isim, arka plan rengi, genişlik, metin boyutu gibi özelliklerdir. Özellikler penceresi dinamik olarak yapılandırılabilir. İstenildiğinde sınıflandırılabilir, istenildiğinde alfabetik olarak sıralanabilir. 2.VERİ TÜRLERİ 13
  • 14. Programlamada kod satırlarında kullanılacak olan değişkenlerin ya da sabitlerin veri türlerinin belirlenmesi çok önemlidir. Programcının, kullanıcıdan girmesini istediği bilgilerin türlerinin belirlenmesi için kullanılır. Veri türleri, özellikle değişkenlerin ve sabitlerin sayısal,bir karakter ya da karakter seti veri içerip içermediklerini belirlemek için kullanılır. Veri tipleri genellikle, ondalık sayılar, tamsayılar, karakterler, tarih ve zaman bilgilerini içermektedir. Visual C# içinde kullanılacak veri türleri aşağıda verilmiştir. SByte : -128 ile 127 arasında işaretli tamsayıları tanımlamak için kullanılır. Bir byte’lık yer işgal eder. Bu tipler Visual C#'ta (CTS-Common Type System) System.SByte olarak kullanılır. Örnek: sbyte Urun_Kodu; Short: Bu tür sayısal değerler 2 baytlık yer işgal eder. İşaretli tam sayıdır. .NET'te (CTS-Common Type System) System. Int16 olarak kullanılır. Örnek: short a; Int: Bu tür sayısal değerler 4 baytlık yer işgal ederler. İşaretli tamsayıdır. Bu tipler .NET'te (CTS-Common Type System) System.Int32 olarak kullanılır.Örnek: int sayi; Long: Bu tür sayısal değerler 8 baytlık yer işgal ederler. İşaretli tamsayıdır. Bu tipler .NET'te (CTS-Common Type System) System.Int64 olarak kullanılır. Örnek: long miktar; Float: Bu tür sayısal değerler 4 baytlık yer işgal ederler. Ondalık sayı tipidir. Bu tipler .NET'te (CTS-Common Type System) System.Single olarak kullanılır. Örnek: float sonuc; Double: Bu tür sayısal değerler 8 baytlık yer işgal ederler. Ondalık sayı tipidir. Bu tipler .NET'te (CTS-Common Type System) System.Double olarak kullanılır. Örnek: double ort; Decimal: Bu tür sayısal değerler 16 baytlık yer işgal ederler. Bu tipler .NET'te (CTS-Common Type System) System.Decimal olarak kullanılır. Örnek: decimal toplam; Bool: Bu tür sayısal değerler 2 baytlık yer işgal ederler. TrueFalse ya da YesNo gibi iki durumlu değerlerden birini içerir. Bu tipler .NET'te (CTS-Common Type System) System.Boolean olarak kullanılır. Örnek: bool Evet_Hayir; DateTime: Bu tür veri tipleri 8 baytlık yer işgal derler. Tarih ve zaman bilgilerini içerir .NET'te (CTS-Common Type System) System DatetTime olarak kullanılır. System.DateTime tarih; Char: Karakter Bilgileri içerir. Bu tür veriler 2baytlık yer işgal eder. En fazla 65535 karakter içeri. Bu tipler .NET'te (CTS-Common Type System) System.Char olarak kullanılınır. Örnek: char Erkek_Kadın; Sting: 2 Milyar karakter kadar bilgiyi içerebilir. Bu tipler .NET'te (CTS14
  • 15. Common Type System) System.String olarak kullanılır. Örnek: string FirmaAdi; 2.1.Değişken ve Sabitler Değişkenler programın akışı içerisinde, değerleri sürekli olarak değişebilen, Sabitler ise, değeri değişmeyen program bileşenidir. 2.1.1.Değişkenler Değişkenler geçici bilgi alanlarını ifade etmek için kullanılır. Program çalıştığında adı geçen değişkenin saklandığı bellek alanından değer alınır, işlem yapılır, gerekirse o bellek alanı güncellenir. Değişkenlerin saklandığı bellek alanları dinamik bir şekilde kullanılır. Her programlama dilinde olduğu gibi Visual C#’ta değişkenlerin isimlendirme kuralları vardır. Bunlar; Değişken isminin ilk karakteri bir harf olmalıdır. Değişken ismi oluşturulurken, diğer karakterler, harf, rakam ya da alt çizgi (-) sembolü olabilir. Kullanılan harflerin küçük ya da büyük harf olmasının önemi yoktur. Değişken isim uzunlukları 16383 karaktere kadar olabilir. Değişken isimleri içinde diğer semboller(+,-,/ ,boşluk vb) bulunmamalıdır. .NET’e özgü kelimeler olmamalıdır. Visual C#’ta değişken aşağıdaki gibi tanımlanmaktadır. Kullanımı: Değişken_Türü Değişken_Adı; Örnek2.1: string str; str = textBox1.Text; MessageBox.Show(str); Yukarıdaki kod satırında tanımlanan str; string türündeki bir değişkendir. Örnek 2.2: Butona tıklandığında textbox1’in içeriğini, textbox2’nin içeriğine bölen ve sonucu mesajla kullanıcıya bildiren program. private void button1_Click_1(object sender, EventArgs e) { double str1,str2; str1 =Convert.ToDouble(textBox1.Text); str2 = Convert.ToDouble(textBox2.Text); MessageBox.Show("Bölme Sonucu : " + (str1/str2) + " Olarak Hesaplanmıştır"); } Yukarıdaki kod satırında; str1, str2 integer ve sonuc string türünde değişkenlerdir. Metin kutularının içeriğini birbirine böler ve sonucu ekrana mesajbox dialog kutusu ile bildirir. Örnek 2.3: Butona tıklandığında, butonun text özelliğini “A.Tunç” olarak değiştirilen program. private void button1_Click_1(object sender, EventArgs e) 15
  • 16. { string str; str = "A.Tunç"; textBox1.Text = str; } Yukarıdaki kod satırında; str, string türünde bir değişkendir. 2.1.2.Sabitler Sabitler kod satırındaki değeri değişmeyen program bileşenleridir. Uygulama süresince değiştirilmeyecek olan değer için Const ifadesi kullanılır. Bu ifade ile bir sabit tanımı yapılır. Const tanımı aşağıdaki şekillerde yapılmaktadır: Kullanım: Const_değişken türü_değişken adı; Örnek 2.4: Butona tıklandığında Form’un text özelliğini “A.Tunç” olarak değiştirilen program. private void button1_Click_1(object sender, EventArgs e) { const string str = " A.Tunç "; Form.ActiveForm.Text = str; } 2.2.Değişkenlere Değer Atama Bir değişkene değer atamak için genel olarak aşağıdaki ifade kullanılmaktadır; Değişken adı = Değişkene Atanan Değer ; Yukarıdaki tanımda yer alan eşittir (=) işareti sadece, sağdaki değerin soldaki değişkene aktarılacağını ifade etmektedir. Örneğin yas isimli bir değişkene 22 değeri; int yaş; yas=22; ya da int a,b; a=b+1; gibi değer atamada yapılabilir. 2.3.Değişkenlerde Tip ve Dönüşümleri Uygulama içinde kullanılan değişkenlerin türlerini birbirlerine dönüştürmek için kullanılan yöntemdir. Tip dönüşümü için kullanılan fonksiyonlar şunlardır. Convert.ToInt32 İfadeyi yuvarlatarak tam sayıya dönüştürür Convert.ToInt64 İfadeyi yuvarlatarak uzun tamsayıya dönüştürür. Convert.ToSingle İfadeyi tek duyarlıklı single (float) tipine dönüştürür. Convert.ToDouble İfadeyi çift duyarlıklı double tipe dönüştürür. 16
  • 17. Convert.ToString İfadeyi stringe çeviri Convert.ToBoolean İfadeyi lojik logic boolean türe çevirir. Convert.ToByte İfadeyi Byte’ a çevirir. Convert.ToDateTime İfadeyi tarih Date formatına çevirir. Convert.ToChar String ifadenin ilk karakterini, karakter türüne dönüştürür. Convert.ToInt16 İfadeyi kısa tamsayıya çevirir Örnek 2.5 : İki adet metin kutusunun içeriğini toplayıp etiket denetiminin text özelliğine aktaran program. private void button1_Click_1(object sender, EventArgs e) { textBox1.Text = "6"; textBox2.Text = "10"; label1.Text=Convert.ToString ( Convert.ToInt32(textBox1.Text) +Convert.ToInt32(textBox2.Text) ); } tam sayı türüne dönüştürmüştür. Daha sonra tekrar Convert.ToString dönüşümü yapılarak Label’ın text özelliğinde görüntülenmiştir. Örnek 2.6: Ondalık (yani decimal) türdeki bir sayısal değeri, tamsayı (integer) türüne dönüştüren program. private void button1_Click_1(object sender, EventArgs e) { const double sayi = 345.425; int deger; deger = Convert.ToInt32(sayi); MessageBox.Show(deger.ToString()); } Yukarıdaki kod satırında: 345.425, ondalık türünde bir değişkendir. Convert.ToInt32 fonksiyonu ile ondalık türündeki bu değer, tam sayı türüne dönüştürülmüştür. Programın çıktısı: 345’tir. Çünkü ondalık değeri tam sayıya yuvarlanmıştır. Tanımlanan sayi isimli değeri 345.525 ise, 346 tamsayıyı değerine yuvarlayacaktır. 17
  • 18. 3.OPERATÖRLER (İŞLEÇLER) Operatörler, değişkenler ve sabitler üzerinde aritmetik, string, karşılaştırma, koşul ve atama işlemleri yapan simgelerdir. 3.1.Aritmetik Operatörler Aritmetik operatörler; toplama, çıkarma, çarpma ve bölme işlemlerini yapan operatörlerdir. Yönelik operatörler olarak bilinir. Bu operatörlerdeki işlem öncelik sıralaması, matematiksel işlemlerde olduğu gibidir. 3.1.1.Operatörler Anlamı ^ Üs alma * Çarpma / Bölme % Mod işlemi. Bölme işleminde kalanı verir. + Toplama - Çıkarma Örnek 3.1: KDV oranının kullanıcıdan istenerek, Genel Toplam değerinin hesaplandığı program. private void button1_Click_1(object sender, EventArgs e) { double KDV_Orani, GenelToplam; int Toplam=1000; KDV_Orani =Convert.ToDouble(textBox1.Text); GenelToplam = (Toplam * (KDV_Orani / 100)) + Toplam; label1.Text = Convert.ToString(GenelToplam); } Aritmetik operatörlerde parantez kullanımı önemlidir. Parantez kullanıldığında işlem önceliğine dikkat etmek gerekmektedir 3.1.2.Strıng Operatörleri String operatörleri; string ifadeleri birleştirmeyi sağlayan operatörlerdir. Karakter katarlarını birleştirmek yada bir değişken ile ifadenin birlikte kullanıldığı durumlarda “+”, “insert”… gibi operatörler kullanılır. Karakter katarları üzerinde işlem yapmak için kullanılan operatörlerdir. Operatörler Anlamı + String ifadeleri birleştirir. insert String ifadenin istenilen yerinden itibaren, başka bir ifadeyi ekler. Remove String ifadenin istenilen yerinden itibaren, bir ifadeyi çıkarır. Split String ifadeyi böler ve sonucu dizide tutar. 18
  • 19. toCharArray String ifadenin bir kısmını yada tamamını bir dizide tutar. Örnek 3.2: KDV oranının kullanıcıdan istenerek, Genel Toplam değerinin hesaplandığı yukarıdaki programın çıktısını aşağıdaki gibi düzenleye biliriz. (+) private void button1_Click(object sender, EventArgs e) { double KDV_Orani, GenelToplam; int Toplam = 1000; KDV_Orani= Convert.ToDouble(textBox1.Text); GenelToplam = (Toplam * (KDV_Orani / 100)) + Toplam; label1.Text = Convert.ToString("%" +KDV_Orani+"KDV ORANININ GENEL TOPLAM DEĞERİ"+ GenelToplam); } Yukarıdaki kod satırı; genel toplam değerinin hesaplayan ve bu değeri string operatörlerini kullanarak, mesajbox dialog kutusu ile kullanıcıya bildirilmiştir. Örnek 3.3: String şeklinde tanımlanmış doğum günü değişkenine, GÜN, AY ve YIL ifadelerini uygun yerde konumlanacak şeklide yerleştiren program. (Insert) private void button1_Click_1(object sender, EventArgs e) { string Dogum_Tarihi1,Doğum_Tarihi2; Dogum_Tarihi1= "06011980"; Doğum_Tarihi2 = Dogum_Tarihi1.Insert(0, "GÜN:"); Doğum_Tarihi2 = Doğum_Tarihi2.Insert(6, "/AY:"); Doğum_Tarihi2 = Doğum_Tarihi2.Insert(12, "/YIL:"); MessageBox.Show(Doğum_Tarihi2); } 3.2.Karşılaştırma Operatörleri Bu operatörler, iki değeri karşılaştırmak ve sonucunun "doğru" ,"yanlış" veya "boş" (null) olma durumunu göre işlemleri yapmak amacıyla kullanılır. Bu operatörlerin sonucun doğru çıkması durumda True yani –1, yanlış çıkması durumunda False yani 0 değerini döndürürler. Operatörler Anlamı == Eşittir != Eşit değil < Küçük > Büyük <= Küçük ya da eşit >= Büyük ya da eşit int Sonuc, A, X, Y; Sonuc = ( 3 < 5 ); Sonuc = -1 Sonuc = ( 7 > 9 ); Sonuc = 0 Sonuc = ( 10 <= Math.Sqrt (100) ); Sonuc = -1 A^2 < 10; a'nın karesi 10'dan küçük ise 19
  • 20. 3.2.1.Koşul Operatörleri " doğru" ya da "yanlış" olması durumuna göre programın akışı yönlendirilir. && And, AndOr (Ve) || Or, XOr (Veya) ! Değil if (Asc > 96 && Asc < 128) gibi. 3.2.2.Atama Operatörleri Operatör Eşdeğeri Anlamı x += y x = x + y x + y’nin değerini x’e ata x ‐= y x = x – y x *= y x = x * y x++ x = x + 1 Örnek 3.4: Sayi1 ve Sayi2 şeklinde iki adet sabit tanımlayarak, atama operatörlerinin kullanıldığı program. } private void button1_Click_1(object sender, EventArgs e) { double sonuc, sayi1, sayi2; sayi1 = 9; sayi2 = 2; sonuc=sayi1+sayi2; MessageBox.Show(sonuc.ToString()); sonuc=sayi1*sayi2; MessageBox.Show(sonuc.ToString()); sonuc=sayi1/sayi2; MessageBox.Show(sonuc.ToString()); sonuc=Math.Pow(sayi1,sayi2); MessageBox.Show(sonuc.ToString()); sonuc = sayi1 % sayi2; MessageBox.Show(sonuc.ToString()); 3.3.Diğer Mantıksal Operatörler Yukarıda anlatılan operatörlerin dışında, Visual C#’ta kullanılan diğer operatörler şunlardır; İşaretler Anlamı ? Herhangi bir karakter. * Sıfır ya da daha fazla karakter. # Bir haneli sayısal değer. [ liste ] Listede yer alan herhangi bir karakter. [ !liste ] Listede yer almayan herhangi bir karakter. Bu operatörler; veri tabanında işlemlerinde, kayıt filtrelemede kullanılır. 20
  • 21. 4.PROGRAM DENETİM DEYİMLERİ Program denetim deyimleri; bir veya daha fazla deyimin belirli koşul sağlandığında yürütülmesi için kullanılır. Birden fazla koşulun birleştirilip tek bir koşul olarak değerlendirilmesi için mantıksal operatörler kullanılır. Program denetim deyimleri; karşılaştırma ve döngü deyimleridir. 4.1.Karşılaştırma Deyimleri Karşılaştırma deyimleri; If…Else ve Select…Case deyimleridir. IF…ELSE Karşılaştırma işlemleri sonucunda bir eylemin yapılması durumunda kullanılır. If… Else denetimleri; If (Koşul) { Deyimler; } Else { Deyimler; } şeklinde kullanılır. Bu tanıma göre, verilen koşuldan "1" değeri döndürülürse yani "doğru" ise Then kelimesini takip eden deyimler işlem görecektir. Eğer koşul gerçekleşmez ise Else kelimesini izleyen satırlardaki deyimler işlem görecektir. Örnek 4.1: Vize ve Final notunu kullanıcıdan isteyen ve ortalamasını kullanıcıya bildiren program. private void button1_Click(object sender, EventArgs e) { double sonuc; double vize; double final; vize = Convert.ToInt32(textBox1.Text) ; final = Convert.ToInt32(textBox2.Text) ; sonuc = (vize * (0.4)) + (final * (0.6)); if (sonuc < 40) { MessageBox.Show("KALDINIZ"); } else { MessageBox.Show("GEÇTİNİZ"); } } Yukarıdaki kod satırı, “Ortalama” adlı değişkenin içeriğinin 50’den küçük ya da büyük olması koşulunu kontrol etmektedir. If deyimini aşağıda gösterilen biçimde iç içe olarak ta kullanmak 21
  • 22. mümkündür: If (Koşul) { Deyimler; } Else If (Koşul) { Deyimler; } … Yukarıdaki tanımda, birinci satırdaki if deyiminde yer alan koşulun "doğru" olması durumunda hemen ardındaki deyimler bloğu işlenecek, eğer "yanlış" ise bu kez Else lf deyimi içindeki koşul göz önüne alınacaktır. Eğer bu koşul "doğru" ise hemen ardındaki satırlarda yer alan deyimler işlem görecektir. Her iki koşulda "yanlış" ise bu kez en son Else deyimini izleyen deyimler işlem görecektir. Örnek 4.2: Vize ve Final notunu kullanıcıdan isteyen ve yıl sonu ortalamasını 5’lik sisteme çeviren program. private void button1_Click(object sender, EventArgs e) { double sonuc; double vize; double final; vize = Convert.ToInt32(textBox1.Text) ; final = Convert.ToInt32(textBox2.Text) ; sonuc = (vize * (0.4)) + (final * (0.6)); if (sonuc >= 85) { MessageBox.Show("Yıl Sonu Ortalamanız Beş (5)"); } else if(sonuc >= 70) { MessageBox.Show("Yıl Sonu Ortalamanız Dört (4)"); } else if (sonuc >= 55) { MessageBox.Show("Yıl Sonu Ortalamanız Üç (3)"); } else if (sonuc >= 45) { MessageBox.Show("Yıl Sonu Ortalamanız İki (2)"); } else { 22
  • 23. MessageBox.Show("Yıl Sonu Ortalamanız Bir (1)"); } } Yukarıdaki kod satırı; yıl sonu ortalamasının 5’lik sistemde karşılığını If…Else yapısı ile hesaplamaktadır. 4.2.Swıtch Case “If” karar yapısının gelişmişidir. Sadece bir değişkenin durumunu kontrol eder. Kontrolü yapılacak değişken birden fazla değer alabiliyorsa switch yapısı kullanılır. Kullanılış şekli; switch(değişken){ case sabit1: …küme1; case sabit2: …küme2; . . . case sabitN: default: default_küme; }; Verilen ifadenin aldığı değer test edilecektir. Bu değer, alt satırdaki Case deyimleri içindeki yer alan listelerde aranacaktır. Örneğin, söz konusu değer ilk Case deyiminde yer alan “Değişkenin1.Değeri” içinde ise, bunu takip eden deyimler çalışacaktır. Eğer hiçbir Case deyimi çevresinde değilse, bu kez Case default deyimini işleyen deyimler işlem görecektir. Örnek 4.3: Haftanın gününü sistemden okuyan ve ona uygun mesajı kullanıcıya ileten program. private void Form1_Load(object sender, EventArgs e) { string gun = DateTime.Now.DayOfWeek.ToString(); switch (gun) { case "Sunday": MessageBox.Show("PAZAR"); break; case "Monday": MessageBox.Show("PAZARTESİ"); break; case "Tuesday": MessageBox.Show("SALI"); break; case "Wednesday": MessageBox.Show("ÇARŞAMBA"); break; 23
  • 24. case "Thursday": MessageBox.Show("PERŞEMBE"); break; case "Friday": MessageBox.Show("CUMA"); break; case "Saturday": MessageBox.Show("CUMARTESİ"); break; default: MessageBox.Show("SİSTEM TARİH KONTROLÜ YAPINIZ"); break; } } Yukarıdaki kod satırında; sistem bilgisine göre haftanın günü belirlenip, kullanıcıya mesajla iletilmiştir. 4.3.Döngü Deyimleri Döngü deyimleri, programların belirli bölümlerinin defalarca, işlenmesini sağlamak üzere oluşturulmuş bir deyimlerdir. Bunlar For, While, Do…While, Break ve Continue deyimleridir. 4.3.1.For Döngüsü Visual C# programlarında bir ya da daha fazla sayıda deyimin belirli bir koşul gerçekleşinceye kadar tekrarlanması isteniyorsa “for” deyimi kullanılır. Bu deyim; For(Başlangıç Değeri;Koşul;Artım) { Bildirim; } şeklinde kullanılır. Örnek 4.4: 1’den 10’a kadar for döngüsü ile elde edilen sayıları listbox’a ekleyen program. private void Form1_Load(object sender, EventArgs e) { int sayac; for(sayac=1;sayac<=20;sayac++) { listBox1.Items.Add(sayac); } } Sayaç ve Artım değerleriyle; döngü sayı belirlenebilir. Döngü istenildiğinde “break” ile sonlandırılabilir. Örnek 4.5: 2’den 20’e kadar for döngüsü ile elde edilen sayıları listbox’a ekleyen, sayaç 10’a geldiğinde break ile for döngüsünden çıkılan program. private void Form1_Load(object sender, EventArgs e) { 24
  • 25. int sayac; for(sayac=1;sayac<=20;sayac++) { listBox1.Items.Add(sayac); if (sayac >= 10) { break; } } } toplayan program. private void button1_Click(object sender, EventArgs e) { int basla; int bitir; int sayac=0; int toplam=0; basla = Convert.ToInt32(textBox1.Text); bitir = Convert.ToInt32(textBox2.Text); for(sayac=basla;sayac<=bitir;sayac++) { toplam = toplam + sayac; } MessageBox.Show(toplam.ToString()); Yukarıdaki kod satırları; iki değer arasındaki sayıları toplayıp, ekrana mesajbox dialog kutusu ile bildirmektedir. Örnek 4.6: Fibenocci serisinin 20 elemanını listbox’a ekleyen program. private void Form1_Load(object sender, EventArgs e) { int a, b, c, i; a = 1; b = 1; listBox1.Items.Add(a.ToString()); for (i = 1; i <= 20; i++) { c = a + b; a = b; b = c; listBox1.Items.Add(a.ToString()); } } Yukarıdaki kod satırları; fibenocci serisinin elemanlarını her for döngüsünde elde ederek listbax’a eklemektedir. 4.3.2.While Döngüsü Belirli bir koşulun gerçekleşmesi sonucunda bazı deyimleri söz konusu ise While.. döngülerinden yararlanılır. Koşul olumlu olduğu sürece çevrim yinelenir. İki veya daha fazla koşul mantıksal operatörler ile birleştirilir. Bu deyim; While( koşul ) 25
  • 26. { Deyimler; }; biçimde tanımlanmaktadır. Koşulun gerçekleşmemesi durumunda ise döngü terk edilir. 4.3.3.Do…While Döngüsü While döngüsü gibidir. Tek fark, koşulun döngü sonunda sınanmasıdır. Yani, koşul sınanmadan çevrime girilir ve döngü kümesi en az bir kez yürütülür. Kullanılışı; Do { Deyimler; }While(Koşul); şu şekildedir. Döngü istenildiğinde “Break” ile sonlandırılabilir. Örnek 4.7: Kullanıcının girdiği değere göre faktöriyel hesaplayan program. private void button1_Click(object sender, EventArgs e) { int sayac, sayisal_deger, Faktoriyel; string deger = Microsoft.VisualBasic.Interaction.InputBox("Faktöriyel Giriniz", "Titttlee", "", 100, 100); sayac = 1; Faktoriyel = 1; sayisal_deger = Convert.ToInt32(deger); do { sayac = sayac + 1; Faktoriyel = Faktoriyel * sayac; } while (sayac < sayisal_deger); MessageBox.Show("FAKTÖRİYEL: " + Faktoriyel.ToString()); 26
  • 27. 5.FONKSİYONLAR İki çeşit fonksiyon vardır. Bunlardan birisi NET kütüphanesinde önceden tanımlanmış bir fonksiyon (matematiksel, string yada tarih_saat fonksiyonları gibi) diğeri kullanıcı tarafından tanımlanmış fonksiyonlardır. Her fonksiyon çalıştırıldığında geriye mutlaka bir değer döndür ve kullanıcı bu dönen değere göre işlem yapar. 5.1.Matematiksel Fonksiyonlar Matematiksel hesaplamalarda kullanılan fonksiyonlardır. Döndürüln değr, bu hesaplama sonucunda elde edilen değerdir. Fonksiyon Anlamı Pow > Üst alma fonksiyonu. Sqrt > Karekök alma fonksiyonu. Log > Logaritma fonksiyonu. Exp > e (2,718281) değerini fonksiyonda belirtilen sayı ile üssü alıp değer dönderir. Max_Min > Büyük yada küçük değerin dönderildiği fonksiyon. Cos_Sin_Tan >Trigonometrik fonksiyonlar. Ceiling_Floor >Tamlama fonksiyonlarıdır. Ceiling >fonksiyonu, bir değerin kendisine en yakın küçük bir değeri dönderir. Floor > fonksiyonu ise bir değerin kendisine en yakın büyük bir değeri dönderir. Bu operatörlerin yanında rastgele sayı üretmek için kullanılan Random( ) fonksiyonuda vardır. Örnek 5.1: private void Form1_Load(object sender, EventArgs e) { Random rand = new Random(); MessageBox.Show(rand.Next(10).ToString()); } Aşağıda matematiksel fonksiyonlar ve döndürdüğü değerlerle ilgili örnek verilmiştir. Örnek 5.2:Matematiksel fonksiyonların kullanımı: private void button1_Click_1(object sender, EventArgs e) { double sonuc; sonuc = Math.Pow(4, 2); MessageBox.Show(sonuc.ToString()); sonuc = Math.Sqrt(144); MessageBox.Show(sonuc.ToString()); sonuc = Math.Sqrt(100); MessageBox.Show(sonuc.ToString()); sonuc = Math.Exp(100); MessageBox.Show(sonuc.ToString()); sonuc = Math.Max(10, 100); MessageBox.Show(sonuc.ToString()); sonuc = Math.Min(10, 100); MessageBox.Show(sonuc.ToString()); 27
  • 28. sonuc = Math.Cos(0); MessageBox.Show(sonuc.ToString()); sonuc = Math.Sin(0); MessageBox.Show(sonuc.ToString()); sonuc = Math.Tan(45); MessageBox.Show(sonuc.ToString()); sonuc = Math.Ceiling(144.23333); MessageBox.Show(sonuc.ToString()); sonuc = Math.Floor(144.23333); MessageBox.Show(sonuc.ToString()); } Örnek 5.3: Aşağıdaki matematiksel ifadenin hesaplanması için gereken program. private void button1_Click_1(object sender, EventArgs e) { int x; double sonuc; x = 10; sonuc=(Math.Pow((x+5),(1/3)))/((x+8)); MessageBox.Show(sonuc.ToString()); } 6. NUMERİK ANALİZ(SAYISAL ANALİZ) 6.1.Tanımı Ve Tarihçesi: Bilim, problemleri ortaya koyar ve onlara çözümler üretir. Matematik, bilimin ortak dilidir. Hem problemleri ifade ederken, hem de onlara çözümler yapmaya çalışırken bu dili kullanırız. Ayrıca, matematik bilimsel düşünmeyi, yani doğru ve net düşünmeyi öğretir. Düşünmeyi ve düşünebilmeyi öğretir, kişiyi doğru sonuca yönlendirir. Bu haliyle matematik bir eğitim aracı olarak da kabul edilir. Bilim adamlarının karşılaştığı en önemli sorunlardan biri, problemleri matematiğin diliyle ifade ettikten sonra çözümünü yapmaktır. İşte bu noktaya Sayısal Çözümleme, diğer adıyla Nümerik Analiz devreye girer. Çünkü çözüm başlı başına bir problemdir. Zaten, matematik yıllar içinde geliştikçe, çözüm yapabilmek için Nümerik Analiz yöntemleri de matematiğin bir kolu olarak ortaya çıkmış, gelişmiş ve gelişmektedir. Nümerik Analiz (Sayısal Çözümleme); analitik yöntemlerle çözülemeyen problemleri çözmek için kullanılan yöntemler bütünüdür. Diğer bir tanımla nümerik analiz istenen matematiksel 28
  • 29. işlemlerin ayrık olarak nasıl hesaplanabileceğinin incelenmesidir. Bugün bile ilk kullanım tarihi ve sınırları kesin olarak bilinmemekle birlikte, Nümerik Analizin çok eski yıllardan beri farklı şekillerde ve isimler altında kullanıldığı ilgili kaynaklarda yer almaktadır. Bunun açık bir kanıtı olarak; bundan yaklaşık 3700 yıl önce, Babilliler’in ikinci dereceden bir denklemin köklerinin nasıl bulunabileceğini, tam sayıların kareköklerinin yaklaşık olarak nasıl hesaplanabileceğini ve bileşik faizle ilgili bazı problemlerin lineer enterpolasyon yöntemiyle nasıl çözülebileceğini bildiklerini bir çok kaynakta rastlamak mümkündür. Ayrıca, yaklaşık 2000 yıl önce “günümüzde Gauss eliminasyon yöntemi” olarak bilinen, lineer denklem sistemlerinin çözümüyle ilgi bir örnekte matris gösteriminin kullanılmış olduğu bazı Çinli kaynaklarda ifade edilmektedir. Yine, bazı Çinli matematikçilerin (960‐1279) yılları arasında yüksek dereceli denklemlerin nümerik çözümü için, iteratif yaklaşma yöntemini genelleştirdiklerine ilgili kaynaklarda rastlamak mümkündür. Bir diğer durum; bundan yaklaşık 900 yıl önce yaşamış olan Ömer Hayyam’ın üçüncü dereceden denklemlerin çözümüyle ilgili araştırmalar yaptığı, yayınlamış olduğu kendi eserinde yer almaktadır. İskoçyalı John Napier 1614 yılında logaritma tablolarını düzenleyerek yayınlamış ve neticede birçok hesaplamalar için kullanılabilecek bir hesaplama aracı hizmete sunmuştur. Bugün dahi nümerik analiz konusunun sınırları diğer bazı disiplinlerin aksine kesin olarak belirlenmemektedir. Nümerik Analiz teriminin 1950 yıllarından sonra daha yaygın olarak kullanılır olması aynı yıllarda gelişmeye başlayan bilgisayarlar ile kesin bağlantısının bir kanıtıdır. 6.2.Amacı: Nümerik Analizin amacı çözümünün elle yapılmasının pratik olmadığı karmaşık, analitik olarak çözümü zor veya olanaksız olan problemlerin çözümlenebilmesi için uygun ve en iyi yaklaşım veren yöntemleri bulmak, ayrıca bunlardan anlamlı ve faydalı sonuçlar çıkarmaktır. Çözümü istenen problemi tanımlamak ve sonuca varacak yöntemi saptamak genellikle aynı bilim adamının işidir. Bu nedenle problemi tanımlayanın bir nümerik analizcinin sahip olduğu bilgilerin en azına sahip olması gerekir. Problemin çözümünde bir takım aşamalardan geçilerek sonuca varılır. Bu aşamalardan ilki problemin formüle edilmesidir. Problemler Cebir ve analiz başta olmak üzere değişik matematik konularından kaynaklanır. Fiziksel bir olayın matematiksel modelinin formüle edilmesinde nümerik analizci, problemini bilgisayar ile çözümleyebileceğini göz önünde bulundurmalıdır. Formülasyon yapıldıktan sonra problemin çözümü için hata analizi ile birlikte nümerik yöntem en iyi yaklaşımla sonuç elde edilecek şekilde seçilmelidir. Nümerik çözüm yöntemi, belirtilen ya da istenilen hassaslıktaki yaklaşımla ve belli sayıda ardışık tekrar işlemlerinden sonra matematiksel probleme çözüm getirmelidir. Nümerik analiz sadece çözüm olarak sayılar üretmez, cebirsel ve analitik teorilere önemli katkılarda da bulunur. Nümerik çözüm yöntemleri genellikle önceden saptanmış aritmetik ve mantıksal işlemlerden oluşur. Bu işlemlerin tümüne çözüm algoritması denir. Algoritma belli sayıda işlemlerden sonra probleme çözüm getirir. Problemin bilgisayar ile çözümünde üçüncü aşama, algoritmanın bilgisayarda çözümünü sağlayacak programlama aşamasıdır. Programlama; C, Pascal, Basic, Cobol, Fortran gibi bilgisayar dillerinden birisi ile yapılır. 6.3.Kullanım Alanları: Nümerik analiz mühendislik ve uygulamalı matematikte önemlidir ve birçok mühendislik bölümünde (makine müh. vb. ) gösterilen bir derstir. Lineer programlama alanında da sıkça kullanılır. Nümerik Analiz olmazsa olmazlardan birisidir. Özellikle bilgisayarların ortaya çıkması ve yaygın kullanılması bu tekniklerin önemini daha da artırmıştır. Sayısal Çözümlemenin bilgisayarlarla daha doğrusu bilgisayar mühendisliği ve uygulamalı matematik ile olan yakın ilişkilerinden ötürü bu konunun bilgisayar mühendisliği ve matematiğin 29
  • 30. ortak birer dalı olduğu genellikle kabul edilir. Çağımızda kapsamlı realizasyon işlemleri bilgisayar aracılığı ile yapıldığı için, kullanılan nümerik metodun etkinliği, genelde bu metodun kesinliğine bağlı olduğu kadar, kullanılan bilgisayarın teknolojik donanımının verdiği kolaylığa ve bilgisayar programının kalitesine de bağlıdır. İlişkiyi örnekle açıklamak gerekirse uygulamalı matematikçi bir problem çözüm için gereken matematiksel modeli kurar. Sayısal çözümleyici de bu modeli bilgisayar yardımıyla sayısal olarak çözer. Kuşkusuz sayısal çözüm sırasında bilgisayar ile ilgili olan programlama dilleri, donanım özellikleri, algoritmik süreçler ve sayısal işlemler kullanılır. . 6.4.Nümerik metotların dezavantajları 1. Numerik analiz sayılar ile bir nevi oyun oynayarak çözüm üretmektir, denilebilir. Oyun genelde kazanılır, fakat kaybedilebilir de! Söylenmek istenen şudur: Çözüm genelde bulunur, ancak bulunamayabilir de. 2. Numerik metotların çoğu belli bir hesap kuralının, belki yüzlerce binlerce kez, tekrarlanması ile adım adım sonuca varırlar(iterasyon). Bir tek sayının hesaplanabilmesi için binlerce hatta milyonlarca dört işlem (toplama, çıkarma, çarpma, bölme) gerekir. Bu nedenle el hesaplarına uygun değildir. Bilgisayar, uygun yöntem ve program kullanımı zorunludur. Direkt çözümler bile milyarlarca dört işlem gerektirir. örneğin, n=10000 bilinmeyenli bir denklem sisteminin Gauss indirgeme yöntemi ile çözümünde yaklaşık 2n3/3≈7x1011 (700 milyar!) dört işlem vardır. Sayıların bu denli çok dört işleme tabi tutulması yuvarlama hatalarının giderek büyümesine neden olur. Peki, bu kadar büyük denklem sistemi uygulamada karşımıza çıkar mı? Evet, hatta çok daha büyükleri! Hemen söyleyelim n=374000000 (uç yüz yetmiş dört milyon) bilinmeyenli denklem sistemi günümüzde çözülebilmiştir. Hem de Türkiye’de: http://www.cem.bilkent.edu.tr/world_record 3. Numerik çözüm yaklaşıktır, bir miktar kabul edilebilir hata içerir. 4. Aynı problemin çözümünde numerik metotların bazıları sonuç verebilir, bazıları veremeyebilir. 5. Numerik metotları öğrenmek ve çözüm üretmek için temel matematik ve mekanik bilgisi yanında bilgisayar, programlama ve paket yazılım kullanma becerisi de gerekir. Hem numerik analiz hem de bilgisayar ve programlama dilleri yoğun olarak matrisler ile çalıştığından matris matematiği öğrenilmek zorundadır. Bir yapının numerik metotlar ile hesabı için mukavemet, yapı statiği ve dinamiği gibi bilgiler de gerekir. Kısacası numerik metotlar klasik bilgiler üzerine inşa edilmiş pratik bir çözüm yoludur, temel bilgiler olmadan bir işe yaramaz. 6.5.Nümerik Analizin Temellerini Atanlar John Napier (1550-1617), Isaac Newton (1643-1727), Gottfried Leibniz (1646–1716), Leonhard Euler (1707-1783), JosephLouis Lagrange (1736-1813), Pierre-Simon-Marquis de Laplace(17491827), Karl Friedrich Gauss (1777-1855), James Joseph Sylvester(1814 -1897). Nümerik analiz yöntemlerinde adı sıkça geçenler Niels Henrik Abel (1802-1829), Alexander Craig Aitken (1895 - 1967), Bernard Bolzano(1781-1848) George Boole(1815-1864), 30
  • 31. Isaac Barrow(1630-1677), Leonard Bairstow(1880-1963), Augustin Louis Cauchy(1789-1857), Pafnuty Lvovich Chebyshev(1821-1894) , Prescott Duran Crout (19071984), Mayric Hascall Doolittle(1830-1913), Andre-Louis Cholesky(1875-1918), Gabriel Cramer(1704-1752), Roger Cotes(16821716), Arthur Cayley(1821-1895), Ferdinand Georg Frobenius(1849-1917), Leonardo Fibonacci(1170-1250), Joseph Fourier(1768-1830), Jorgen Pedersen Gram(1850-1916), Hermann Grassmann(1809-1877), Charles Hermite(1822-1901), David Hilbert(1862-1943), Alston Scott Householder(1904– 1993), C. A. R. Hoare(1934 - ), Carl Gustav Jacob Jacobi(1804-1851), Marie Ennemond Camille Jordan(1838-1922), Wilhelm Jordan(1842-1899), Martin Wilhelm Kutta(1867-1944) , Joseph-Louis Lagrange (1736 –1813), Adrien Marie Legendre(17521833), Cornelius Lanczos(1893-1974), Richard Edler von Mises(18831953), David E. Müller(1924 - ), Lewis Fry Richardson(1881-1953), Carl David Tolme Runge(1856-1927), Werner Romberg(1909-2003), Thomas Simpson(1710-1761), Ludwig von Seidel(1821-1896), Erhard Schmidt(1876-1959), Johan Frederik Steffensen (1873–1961), James Hardy Wilkinson(1919-1986). 1930-1945 li yıllarda ilk bilgisayarların ortaya cıkmasıyla numerik analiz yontemleri onem kazanmaya başladı. Modern numerik analizin 1947 yılında John Neumann ve Herman Goldstine tarafından yayınlanan “Numerical Inverting of Matrices of High Order , Bulletin of the AMS, Nov. 1947” ile başladığı kabul edilir. Bu yayında yuvarlama hataları ilk kez araştırılmıştır. Gunumuzde kullanılan numerik analiz yontemlerinin coğu 1950-1970 yıllarında geliştirilmiştir. Bilgisayarların ve programlama dillerinin giderek gelişmesi, devrim yaratan ve günümüz vazgeçilmez numerik metodu olan, “Sonlu Elemanlar MetoduSEM” nun 1960 lı yıllarda doğmasına neden oldu. Bu konudaki ilk yayın: “M. J. Turner, R. W. Clough, H. C. Martin and L. J. Topp, "Stiffness and Deflection Analysis of Complex Structures," J. of Aero. Sci., 23 (9), Sept. 1956”. Finite Element Method(Sonlu Elemanlar Metodu) adının ilk kullanıldığı yayın: “Clough, Ray W.: The finite element method in plane stress analysis. Proceedings, 2nd Conference on Electronic Computation, A.S.C.E. Structural Division, Pittsburgh, Pennsylvania, Sept. 1960”. İlk Sonlu elemanlar kitabı: O. C. Zienkiewicz, The Finite Element Method, 1967. 6.6.Sonlu Elemanlar Metodunun ilkleri 31
  • 32. Lord Rayleigh(1842-1919), Boris Grigorievich Galerkin(1871-1945), Walther Ritz(1878-1909), Richard Courant(1888-1972), Alexander Hrennikoff(1896-1984), John Argyris(1913-2004), James Hardy Wilkinson(1919-1986), Olgierd Cecil Zienkiewicz(1921-2009), Ray W. Clough, 1920- ), William Prager( 190380). 6.7.Sayısal Analizin Belli Başlı Konuları  Sonlu Fark Formülleri ve Türev  İnterpolasyon ve Ekstrapolasyon  Nümerik İntegrasyon  Denklem Köklerinin Bulunması  Matrisler ve Lineer Denklem Çözümleri  Verilere Eğri Uydurma  Difesansiyel Denklemlerin Çözümü  Özdeğer ve Özvektörler Gibi belli başlı konular mevcuttur. Bu konular kendi içlerindede olarak alt bölümlere ayrılır. 32 detaylı
  • 33. 7.Uygulamalı Sayısal Analiz Örnekleri Örnek7.1: Bir vinç kolonunun mukavemet hesabını yapan bilgisayar programı yazımı ve yazılan programın paket programlara göre karşılaştırılması Sonlu Farklar Metodu Yüklenmeden önce eksenleri doğru olan çubuklar, eğildikten sonra eksenleri eğri haline gelir ve bu eğriye elastik eğri denir. d2 y = -M dx2 EI Yukarıdaki ifadeye elastik eğrinin diferansiyel denklemi denir. Elastik eğriye ait diferansiyel denklem ,sonlu farklar (differans) denklemleriyle ifade edilecek olursa , problemin çözümünü lineer denklem takımına indirgemek kabil olur. Varılan değer yaklaşık olmakla beraber çok defa yaklaşıklığın mertebesi uygulama alanı için yeter gelir. Momentin hesabını ön gören yukarıdaki diferansiyel denklemi ele alalım. d2 y = -M dx2 (1) EI İfadesinin sol tarafındaki ikinci türevi ,birbirini eşit aralıklarla izleyen, üç ordinatın farklarıyla şu şekilde ifade edebiliriz: Burada Dx=h sabiti ayrık noktaların apsis farkından ibarettir (şekil-1). İkinci türev için kabul edilen bu ifadenin yaklaşığı h 4 mertebesindedir. Şayet y(x) eğrisi 2. dereceden ise (2) ifadesi kesindir. (1) ve (2) ifadesi karşılaştırılacak olursa; 33
  • 34. Şeklinde elastik eğrinin sonlu farklar denklemi kurulmuş olur. Burada M k momenti, k kesitine aittir. Bu cebrik denklem uygulanırken şu şekilde hareket edilecektir: Önce bir l açıklığı h=l/n olacak tarzda n eşit parçaya ayrılacak ve ortaya çıkan n+1 bilinmeyen ordinatı hesaplamak için (3) denkleminde, k=1,2,3...(n+1) noktaları için ayrı ayrı uygulanacak, n-1 tane lineer denklem elde edilecektir. Eksik kalan iki denklemi, bize problemin sınır şartları verecek ve bu şekilde problem, belli olacaktır. Bu anlatılan hesap metoduna uygun olmak üzere şekil-2’ de görülen basit kirişin ortasındaki çökme istensin. Eğilme moment diyagramının verilmiş olduğunu kabul edelim. 34 l açıklığını n=2p gibi çift sayılara bölelim. Bu şekilde h=l/2p olacak demektir. (3)
  • 35. 8.SONUÇ VE ÖNERİLER Bu çalışmada sayısal analizin bilgisayar yardımıyla nasıl kullanılacağına genel olarak değinilmiştir. Çözümlerin gerçeğe yakın olması uygulanabilirlik olanağını artırmaktadır. Fakat bu çalışma profosyönellik konusunda yetersiz hatta çok basit kalmaktadır. Günümüzde matematiksel modelin görsellikle desteklenmesi ve 3D hale getirilmesi çok önemlidir. Görsellik ve 3D tasarımcıya daha iyi anlama kabiliyeti ve problemi daha kolay çözme imkanı sağlar. Öneri olarak; 3D modelleme ve grafik işlemlerine daha fazla yer verilmeli ve programlama becerisinden ziyade programın amacına hizmet edip etmemesi dikkat edilmelidir. 35
  • 36. KAYNAKLAR [1] SAYISAL ANALİZ UYGULAMALARI- YRD. DOÇ. DR. NİMETİ DÖNER [2] SAYISAL ANALİZ VE MÜHENDİSLİK UYGULAMALARI-PROF. DR. İRFAN KARAGÖZ [3]YAZILIM VE PROGRAMLAMA UYGULAMALARIYLA MÜHENDİSLER İÇİN SAYISAL YÖNTEMLER-STEVEN C. CHARPA & RAYMOND P. CANALE [4] NUMERİK ANALİZ-DOÇ. DR. İBRAHİM UZUN [5] VİSUAL C# NET 2005-PROF. DR. E. ŞAHİN ÇONKUR 36