Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.

Benzer bir sunumlar


... konulu sunumlar: "Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz."— Sunum transkripti:

1 Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

2 Matematiksel bağıntılarda veri tipi dönüşümleri C/C++ dilinde yazılan bir matematiksel bağıntı içinde bir çok değişken ve sabit bulunabilir. Bu değişken ve sabitler birbirlerinden faklı tiplerde bildirilmiş olabilir. Bu durumda hesap sonucunun hangi tipte olacağı önemlidir ve bu sonuç için bildirilen tipe uygun olması veri kaybını önler. Örneğin sonucu “float” olan bir işlem “int”tipi bir değişkene atanır ise sadece tam kısmı korunur ve ondalık kısmı ihmal edilir. Bu tür işlemler kontrolsüz yapılır ise değer kaybına neden olabilir. Bir işlem sırasında ilgili operatörün (işlem önceliklerine göre işleme sokulan) iki değer (değişken veya sabit) üzerinde işlem yapacağını dikkate almalıyız. İşlem sırasında verilerden birinin tipi aşağıdaki tabloda verildiği önceliğe göre dönüşüme tabi tutulur {UYARI: değişime uğrayan sadece değerdir. Asıl değişken kendi tip değerini korur};

3 Matematiksel bağıntılarda veri tipi dönüşümleri Örneğin, bir “long double” ile diğer tipte bir veri işleme girecekse diğerinin tipi “long double” ‘ a dönüştürülür ve işlem sonucu “long double” olur. Her iki değer de bir tip tamsayı ise, tiplerden biri veya her ikisi her ikisini de gösterebilecek tamsayı tipine dönüştürülür {derleyiciye göre dönüşüm farklı olabilir}.

4 Giriş çıkış komutları. Giriş çıkış işlemleri her programda ihtiyaç duyulan temel işlemlerden birisidir. Programcı veya diğer veri kaynakları ile bilgisayarın iletişimini sağlar. C/C++ programlama dilinde giriş çıkış işlemleri bu dilin giriş çıkış kütüphane fonksiyonları (fonksiyon kavramı daha ileriki derslerde geniş olarak ele alınacaktır) aracılığı ile gerçekleştirilir. C/C++ programlama dilinde ihtiyaç duyulan her türlü giriş çıkış işlemi bu kütüphane fonksiyonları ile kolay ve esnek bir şekilde sağlanabilmektedir. Bir C/C++ programında standart giriş çıkış fonksiyonları oldukça çok kullanılır. Bu giriş çıkış fonksiyonlarını kullanabilmek için “stdio.h” adlı başlık dosyasını aşağıdaki şekilde yazarak program içine koymalıyız; #include Dersimizin bu kısmında sadece temel giriş çıkış fonksiyonlarından örnekler ile bahsedilecektir. Ders kapsamında ihtiyaç duyulan diğer giriş çıkış fonksiyonlarına ilgili yerlerde değinilecektir. Ayrıca giriş çıkış formatlama kavramına da ileriki konularda değinilecektir.

5 Temel giriş çıkış işlemleri Temel giriş çıkış işlemleri, karakter söz dizisi ve sayısal veri türlerinin standart giriş çıkış birimlerine aktarılmasını ifade eder. Örneğin bir karakterin klavyeden okunması veya sayının ekrana yazdırılması bu tür temel giriş çıkış işlemlerindendir. scanf()- printf() temel giriş çıkış fonksiyonları: Bu fonksiyonlar, genel olarak formatlı okuma (scanf) ve yazma (printf) işlemlerinde kullanılan, her türlü verinin okunup yazılabileceği oldukça esnek giriş çıkış fonksiyonlarıdır.

6 Örnekler; scanf(“%f”,&x); /*x: gerçel sayı*/ scanf(“%d”,&y); /*z: tamsayı*/ scanf(“%c”,&kr); /*kr: karakter*/ printf(“vize notu: %d”, vize);/*vize: tamsayı*/ printf("p=%p,n=%d,q=%p,m=%d",p,n,q,m); /*p,q: tamsayı işaretçi, n,m: tamsayı*/

7 printf() Fonksiyonu Sayısal ve alfanümerik değerleri ekrana(standart çıkış birimine) göndermek için kullanılan formatlı çıkış fonksiyonudur. Bu fonksiyon stdio.h kütüphanesi içerisinde tanımlıdır. Daha önce bahsettiğimiz gibi stdio.h başlık dosyasının programın başına eklenmesi gerekir. printf (parametreler) Karakter dizini ekrana yazdırmak istiyorsak printf (“Merhaba Millet”) // “Merhaba Millet” ekrana yazdırılır. printf (“b=100”) // “b=100” string değeri ekrana yazdırılır. …… int b=10; printf(“ b değeri = %d dur”,b); // “b değeri = 10 dur” ekrana yazdırılır. ………

8

9 Bilinen kontrol karekterleri(Common Escape Sequences ) Character Escape Sequence \a zil sesi(beep) \b Geriye boşluk(Backspace ) \f Kağıt besleme \n Bir satır ekle(Newline) \r Enter (Return) \t Sekme(Tab ) \\ Ters slash (Backslash) \‘ Tek tırnak(Single quotation mark ) \“ Çift tırnak(Double quotation marks ). \xdd 16 sayı sisteminde gösterim(Hexadecimal notation ) Printf(“ %c %c %c”, ‘a’, ’b’, ‘c’); Printf(“ Ben Cemil, ben %d yaşındayım ve maaşım %f YTL\n”, 37, 1000.10) Ben Cemil, ben 37 yaşımdayım ve maaşım 1000.10 YTL

10 YAPISAL PROGRAMLAMA KAVRAMI. Y apısal programlama, program tasarımı ve yazılmasını kurallara bağlayan ve disiplin altına alan bir yaklaşımdır. Yapısal programlamada problem çözümü daha kolay alt problemlere (modül) bölünür. Her bir alt problem (modül) daha düşük seviyedeki alt seviyelere bölünür. Bu işlem, aşağıdaki şekilde de görülebileceği gibi her bir modülün kolaylıkla çözülebileceği seviyeye kadar devam eder. Yapısal programlama, program tasarımı ve yazılmasını kurallara bağlayan ve disiplin altına alan bir yaklaşımdır. Yapısal programlamada problem çözümü daha kolay alt problemlere (modül) bölünür. Her bir alt problem (modül) daha düşük seviyedeki alt seviyelere bölünür. Bu işlem, her bir modülün kolaylıkla çözülebileceği seviyeye kadar devam eder.

11

12 En üst seviyede çözümün ana mantığının sergilendiği ana modül yer alır. Alt seviyelere indikçe izlenecek adımlar ile ilgili ayrıntılar artar. Modüler program tasarımında her modül diğerlerinden bağımsız olmalıdır. Kontrol her modüle bir üst seviyedeki modülden geçmeli ve modül işlendikten sonra tekrar ayın modüle iletilmelidir. Modüllerin tanımlanmasında, (algoritma parçası olduğu için) sözde kod (pseudo-code) kullanılır. Bir modülün çözümünde kullanılacak algoritma, sözde kod ile ifade edilirse programa geçiş büyük ölçüde kolaylaşır.

13 Örnek 1; Problem: 1’den n’ ye kadar olan tam sayıların toplamını bulmak. Problem çok kolay olmasına rağmen modüler programlamaya bir örnek olması açısından aşağıdaki şekilde bir tasarım düşünelim;

14 Tasarlanan ana modül ve üç alt modülü sözde kod ile; /* Ana modül */ Veri Hesapla Yaz /* Veri modülü */ n değerini oku /* Hesapla modülü */ Eğer n<=0 ise n değerinin geçersiz olduğunu yaz değilse i’ ye 1 değerini yükle toplam’a 0 değerini yükle i<n olduğu sürece i’ yi toplama ekle i’ yi artır. /* Yaz modülü */ toplam’ ı yaz

15 Bu aşamadan sonra algoritma herhangi bir programlama dili ile yazılabilir. Problemin C/C++’ ta örnek kodlanması (fonksiyon kavramına ileri konularda değinilecek); #include /*standart giris cikis icin*/ #include /*DOS destekli giris cikis icin*/ int veri (); float hesapla (int); void yaz (float); void main(void) /* Ana modul */ {int n; float toplam; clrscr(); n=veri(); toplam=hesapla(n); yaz(toplam); } int veri() /* Veri modulu */ {int n; printf("1' den N' ye kadar olan tam sayilarin toplamini bulma programi"); printf("\n"); printf("N degerini giriniz: "); scanf("%u",&n); return n; }

16 float hesapla (int n) /* Hesapla modulu */ {int i; float t; t=0; for(i=1;i<=n;i++) t=t+i; return t; } void yaz (float toplam) /* Yaz modulu */ { printf("\n"); printf("sonuc=%0.0f",toplam); getch(); }

17 Yapısal programlamada algoritma temel yapıları: sıra, sorgu ve tekrar yapıları. Yapısal programlamada ana ilke goto deyimini kaldırmak ve temel kontrol yapılarını kullanmaktır. Yapısal olmayan bir programda çok sayıda goto deyimi kullanılır ve yukarıdan aşağıya, aşağıdan yukarıya atlamalar görülür. Program içinde birkaç atlamadan sonra programcı, işlem akışını ve program mantığını izleyemez duruma gelir. Yapısal programlamada her hangi bir algoritma üç temel kontrol yapısı ile ifade edilebilir;

18 Sıra: bir dizi işlemin birbiri ardından sırasıyla yapılmasını ifade eder. Sorgu (seçme): iki seçenek yoldan hangisinin izleneceği bir testin sonucuna bağlıdır. Tekrar (yineleme): test edilen sonuç sağlanana kadar işlemin yinelendiği durumu ifade eder. Bu temel kontrol yapıları aşağıda grafiksel olarak (akış diyagramı) gösterilmiştir;

19 En basit akış şeması ifadeleri, bir dizi işlemin birbiri ardından sırasıyla yapılmasını şeklinde olan akış ifadeleridir. Bu tip akışlar oldukça yalın ve basittir. Bu tarz akışlar genelde bir problemin bir parçasını çözümlemek ve ifade etmek için kullanılır. Sorgu ve tekrar gerektirmeyen bazı basit ardışık problemler de bu tip akış kullanabilir. Örneğin; Klavyeden girilen iki sayıyı okuyup aritmetik ortalamasını hesaplayan ve sonucu ekrana yazan bir programın akışı aşağıdaki şekilde ifade edilebilir;

20 Sorgu (seçme) yapıları Algoritma içerisinde verilen işlem adımları genel de sıralı adımlardan oluşur. Fakat bazı koşullarda bu işlem sıralarının değiştirilmesi ve diğer bir işlem sırasının seçilmesi gerekebilir. Sorgu (seçme) işlemi akış diyagramında baklava dilimi şeklindeki karşılaştırma simgesi ile ifade edilir. Simgenin içerisine koşul yazılır. Koşulun sonucuna göre iki yönden birisi seçilir. Program akışı, koşul olumlu ise “evet” olumsuz ise “hayır” olarak etiketlenen yöne dallanma yapar.

21 Basit Sorgu (IF) yapısı. Bir koşullu işlem yapma deyimidir. “if” ve “else” tek bir karşılaştırma deyimi olup “else” ’in kullanımı isteğe bağlıdır. Eğer koşul olumlu ise “if” ’den sonraki komut kümesi yürütülür ve “else” ’den sonraki komut kümesi atlanır. Eğer koşul olumsuz ise “if” ’den sonraki komut kümesi atlanır ve “else” ’den sonraki komut kümesi yürütülür. Aşağıda verilen şekilde “else” ’li ve “else” ’siz “if” yapısı akış diyagramı olarak gösterilmekte ve genel yazılım formatı verilmektedir;

22 Örnek: Örnek alg.3 için çizilen akış diyagramı için if sorgu yapısı kullanan bir C/C++ programı yazalım.

23 Örneğin C/C++’ ta kodlanması (goto kullanılarak); #include /*standart giris cikis icin*/ #include /*DOS destekli giris cikis icin*/ #include /*matematik fonksiyonlar icin*/ void main(void) { float a,x,e,b,y; clrscr(); printf("karekoku bulunacak sayiyi giriniz: "); scanf("%f",&a); printf("\n"); printf("tahmini karekoku giriniz: "); scanf("%f",&x); printf("\n"); printf("kabul edilebilir hatayi giriniz: "); scanf("%f",&e); printf("\n");

24 Örneğin C/C++’ ta kodlanması (goto kullanılarak); A4: b=(a-x*x)/(2*x);/* fark (hata) değeri olan b’ yi hesapla */ y=x+b;/* daha yakın yeni karekök değerini (y) hesapla */ if (fabs(b)<=e) goto A9;/* eger mutlak(b)<=e ise iterasyonu durdurmak için A9 a git */ else x=y;/* y yeni karekök degerini x degiskenine ata */ goto A4;/* islemi yeni x tahmini ile tekrarlamak için A4’e git */ A9: printf("karekok=%f",y);/* en son hesaplanan karekök değerini (y) ekrana yaz */ getch(); }

25 Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

26 Karar Yapıları Karar yapıları öne sürülen koşulun doğru veya yanlış sonuç vermesine göre farklı kod bloklarını yürüten fonksiyonlardır. Döngülerdeki koşul döngünün devam edip etmemesini sağlıyordu. İf İf … else Switch Yapıları verilecektir.

27 if karar ifadesi İf ifadesi karar ifadelerinin en basitidir. İf fonksiyonundan sonra koşul ifadesi test edilir. Eğer ifade doğru sonuç verirse if bloğundaki ifadeler yürütülür. // IF ifadesine basit bir örnek #include using namespace std; int main() { int x; cout > x; if( x > 100 ) cout << “ Sayı 100 den büyüktür \n”; return 0; }

28

29 Sınama deyimi if gövdesi çıkış Yanlış Doğru

30 // IF ifadesine basit bir örnek #include using namespace std; int main() { int x; cout > x; if( x > 100 ) { cout << “ Sayı “<<x; cout<< “ 100 den büyüktür \n”; } return 0; }

31 Döngü içerisindeki İf yapısı #include using namespace std; #include //for exit() int main() { unsigned long n, j; cout << “Enter a number: ”; cin >> n; //get number to test for(j=2; j <= n/2; j++) //divide by every integer from if(n%j == 0) //2 on up; if remainder is 0, { //it’s divisible by j cout << “It’s not prime; divisible by ” << j << endl; exit(0); //exit from the program } cout << “It’s prime\n”; return 0; }

32 İf (x>100) fade; Else ifade; Koşul ifadesi Koşul doğru sonuç vermiş ise yürütülecek tek ifade Koşul yanlış(false) sonuç vermiş ise yürütülecek tek ifade İf(delta !=0) { ifade; } Else { ifade; } Koşul doğru sonuç vermiş ise yürütülecek ifadeler Koşul yanlış(false) sonuç vermiş ise yürütülecek ifadeler Koşul ifadesi

33 // if else örneği #include using namespace std; int main() { int x; cout << “\n Sayı gir …: ”; cin >> x; if( x > 100 ) cout << “ Girilen sayı 100 den büyüktür 100 \n”; else cout << “Girilen sayı 100 den büyük değildir \n”; return 0; } if (x == 100) cout << “x =100"; else cout << “x eşit değil 100";

34 Sınama deyimi İf bloğu ifadeleriElse bloğu ifadeleri çıkış Yanlış Doğru

35 // kelime ve karakter sayma #include using namespace std; #include // getche() için int main() { int harfsayac=0; int kelimesayac=1; char ch = ‘a’; //‘\r’ olmamalı cout << “bir cümle giriniz.: ”; while( ch != ‘\r’ ) //enter tusuna basana kadar dön { ch = getche(); //bir karakter oku if( ch==’ ‘ ) // eğer karakter boşluk ise kelimesayac++; // kelime sayısını bir artır else // diğer durumda harfsayac++; //harf sayısını bir artır } cout << “\nkelime sayısı=” << kelimesayac << endl << “harf=” << (harfsayac-1) << endl; return 0; }

36 // kelime ve karakter sayma sürüm 2 #include using namespace std; #include // getche() için int main() { int harfsayac=0; int kelimesayac=1; char ch = ‘a’; //‘\r’ olmamalı cout << “Bir cümle yazınız: ”; while((ch=getche()) != ‘\r’ ) //enter tusuna basana kadar dön { if( ch==’ ‘ ) // eğer karakter boşluk ise kelimesayac++; // kelime sayısını bir artır else // diğer durumda harfsayac++; //harf sayısını bir artır } cout << “\nkelime sayısı=” << kelimesayac << endl << “harf=” << (harfsayac-1) << endl; return 0; }

37 #include using namespace std; #include //for getche() int main() { char dir=‘a’; int x=10, y=10; cout << “Type Enter to quit\n”; while( dir != ‘\r’ ) //until Enter is typed { cout << “\nYour location is ” << x << “, ” << y; cout << “\nPress direction key (n, s, e, w): ”; dir = getche(); //get character if( dir==‘n’) //go north y--; else if( dir==‘s’ ) //go south y++; else if( dir==‘e’ ) //go east x++; else if( dir==‘w’ ) //go west x--; } //end while return 0; } //end main

38 int main() { int a, b, c; cout > a >> b >> c; if( a==b ) if( b==c ) cout << “a, b, and c are the same\n”; else cout << “a and b are different\n”; return 0; } int main() { int a, b, c; cout > a >> b >> c; if( a==b ) if( b==c ) cout << “a, b, and c are the same\n”; else cout << “a and b are different\n”; return 0; }

39 int main() { int a, b, c; cout > a >> b >> c; if( a==b ) { if( b==c ) cout << “a, b, and c are the same\n”; } else cout << “a and b are different\n”; return 0; }

40 İf …. Else if yapısı if (x == 1) { cout << "x = 1"; } else if (x == 2) { cout << "x = 2"; } else { cout << “ X değeri bilinmiyor"; }

41 // if … else if yapısı için örnek #include using namespace std; #include int main() { char yon=’a’; int x=10, y=10; cout << “ Çıkış için Enter’a bas \n”; while( yon != ‘\r’ ) // enter tuşuna basana kadar dön { cout << “\n konumunuz..: ” << x << “, ” << y; cout << “\n yön tuşuna basınız(k-kuzey, g-güney, d-doğu, b-batı): ”; yon = getche(); //karakter oku if( yon==‘k’) //Kuzeye git y--; else if( yon==‘g’ ) //güneye git y++; else if( yon==‘d’ ) //doğuya git x++; else if( yon==‘b’ ) //batıya git x--; } //while döngüsünün sonu return 0; }

42 // platters.cpp // demonstrates SWITCH statement #include using namespace std; int main() { int speed; //turntable speed cout > speed; //user enters speed switch(speed) //selection based on speed { case 33: //user entered 33 cout << “LP album\n”; break; case 45: //user entered 45 cout << “Single selection\n”; break; case 78: //user entered 78 cout << “Obsolete format\n”; break; } return 0; }

43 switch( x ) { case 1: ifade; break; case 2: ifade; break; case 3: ifade; break; default: ifade; break; } İnteger veya char tipi değişken Not: noktalı virgül koymuyoruz İnteger veya char sabit Birinci durum ifadeleri İkinci durum ifadeleri üçüncü durum ifadeleri default durum ifadeleri Not: noktalı virgül koymuyoruz

44 Switch Değişkeni birinci duruma eşitse Birinci durum ifadeleri Yanlış Doğru Switch Değişkeni ikinci duruma eşitse Switch Değişkeni üçüncü duruma eşitse İkinci durum fadeleri Yanlış Doğru Yanlış üçüncü durum ifadeleri Default ifadeleri çıkış


"Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz." indir ppt

Benzer bir sunumlar


Google Reklamları