YAPISAL PROGRAMLAMA Hafta-7 AR. GÖR. ESRA SÖĞÜT
İçindekiler Recursive fonksiyonlar Enum Diziler Dizi Elemanlarına İlk Atama Dizi ve Fonksiyon Kullanımı İki Boyutlu Diziler İki Boyutlu Dizi ve Fonksiyonlar Örnekler Kaynaklar
Kendi Kendini Çağıran Fonksiyonlar (Recursive) Tekrarlama fonksiyonları Kendi kendini çağıran fonksiyonlardır Yalnızca temel problemi çözebilirler Problemi böl Yapamadığı kısım için fonksiyon kendi yeni kopyasını çağırır (tekrarlama basamağı) Sonunda temel problem çözülmüş olur
Kendi Kendini Çağıran Fonksiyonlar Örnek olarak faktöryel: 5!=5*4*3*2*1 Faktöriyel tekrarlama ile çözülebilir Temel kısmı çöz(1! = 0! = 1) sonra 2! = 2 * 1! = 2 * 1 = 2; 3! = 3 * 2! = 3 * 2 = 6;
Örnek: Bir tamsayının faktörünün hesaplanması #include<stdio.h> long faktor (int); İnt main() { İnt sayi; Long sonuc; Printf ( “bir tam sayi giriniz: " ); Scanf ( "%d", &sayi); result = faktor ( sayi); printf( “%d faktoriyeli = %ld\n", sayi, sonuc); Return 0; } /* tekrarlama faktor fonksiyonu tanimi*/ Long faktor ( int n ) { İf ( n <=1 ) return1; Else return ( n * faktor( n -1 ); }
Enum = Enumeration (Numaralandırmalar) Bu kavramın türkçeleştirilmesi anlam karışıklığına yol açtığı için genellikle "enum sabiti" şekilde kullanılmaktadır. Bu tip, değişkenin alabileceği değerlerin belli (sabit) olduğu durumlarda programı daha okunabilir hale getirmek için kullanılır. Bu tipte, değerleri çeşitli sembollerle belirtebiliriz: Örneğin haftanın günlerini sembolize etmek için aşağıdaki gibi bir yapı kullanılabilir. Enum gunler {pzt, sl, crs, prs, cm, cts, pzr} hafta; Enum gunler hafta1, haft2; Başka bir örnek: Enum ornek { bir = a, iki= b, uc = t, dort = n };
Enum-Örnek #include<stdio.h> using namespace std; //isim uzayı tanımladık. Her satırın başına(string olanların) başına std //koymamak için bu kısa tanımlamayı kullandık int main() { enum Dizi { seyfettin, kahveci, bau}; //dizi adında enum tanımlamasını yaptık . //DİKKAT Enum tanımlaması yaparken string ifadeler "tırnak" içinde yazılmaz. Dizi d; //enumun adı olan dizinin artık yeni adı d d=bau; //dnin bau olan degerinin indezks numarası cout<<d; //dnin değerini ekrana yazalım //enumlar da 0 dan başlar, o sebeple ekrana 2 yazar. return 0; //programı bitirelim. }
Diziler (Arrays) Belirli bir boyutta tanımlanmış, içinde aynı tipte veriler barındıran, ardı ardına sıralı bellek hücrelerinden oluşan bir veri yapısıdır. veriTipi diziİsmi[elemanSayisi]; Bir dizi, aynı isme ve aynı tipe sahip olmaları sebebiyle birbirleriyle ilişkili olan hafıza konumlarının bir grubudur. Bir dizinin içindeki bir elemanı ya da konumu belirtmek için o dizinin adını ve elemanın dizi içindeki pozisyonunu belirtmeliyiz.
Diziler int c[12]; int c[4]=1543; X=5; C[x+3]=-3; c[2]=c[2]+5; veya Sonuçta: c[2]=5 oldu.
Diziler-Soru
Diziler-Cevap
Dizi Elemanlarına İlk Atama
Dizi ve Fonksiyon Kullanımı-Örnek
Dizi ve Fonksiyon Kullanımı-Örnek Dizi elemanlarını yazan program:
Soru
Cevap
İki Boyutlu Diziler
İki Boyutlu Dizi Tanımı
İki Boyutlu Dizi
İki Boyutlu Dizi Elemanlarına Erişim
İki Boyutlu Dizi Elemanlarına Erişim
İki Boyutlu Dizi-Soru
İki Boyutlu Dizi-Cevap
İki Boyutlu Dizi ve Fonksiyonlar
Diziler-Örnek /*Diziye bildirim sırasına ilk değerler verme*/ #include <stdio.h> int main( ) { int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; int i; printf (“%s %13s\n”,”Eleman”,”Değer”); for (i = 0; i <= 9 ;i++1) printf (“%6d%14d\n”,i,n[i]); return 0; }
Diziler-Örnek /*Dizi elemanlarının toplamlarını hesaplamak*/ #include <stdio.h> #define BOYUT 12 int main( ) { int a[ BOYUT ]={1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45}; int i, toplam=0; for (i = 0;i <= BOYUT - 1; i++) toplam += a[i]; printf (“Dizideki elemanların toplamı %d dir.\n”,toplam); return 0; }
Diziler-Örnek /*Karakter dizilerini string gibi ele almak */ #include <stdio.h> int main( ) { char string1[ 20 ], string2[] = "string literal"; int i; printf("Bir string girin: "); scanf( "%s", string1 ); printf( "string1: %s\nstring2: %s\n" "karakterler arasında boşlukla string1:\n", string1, string2 ); for ( i = 0; string1[ i ] != '\0'; i++ ) printf( "%c ", string1[ i ] ); printf( "\n" ); return 0; }
Diziler-Örnek /*Dizide lineer arama yapmak */ #include <stdio.h> #define BOYUT 100 int lineerArama( const int [], int, int ); int main( ) { int a[ BOYUT ], x, aramaDegeri, eleman; for ( x = 0; x <= BOYUT - 1; x++ ) /* veri oluştur */ a[ x ] = 2 * x; printf( "Arama değeri tamsayısını gir:\n" ); scanf( "%d", & aramaDegeri); eleman = lineerArama( a, aramaDegeri, BOYUT); if ( eleman != -1 ) printf( "Bu değer, eleman %d de bulundu\n", eleman ); else printf( "Bu değer bulunamadı\n" ); return 0; } int lineerArama( const int dizi[], int anahtar, int boyut ) { int n; for ( n = 0; n <= boyut - 1; ++n ) if ( dizi[ n ] == anahtar ) return n; return -1; }
Diziler-Örnek /*Çok boyutlu dizilere ilk değer atanması */ #include <stdio.h> void diziyiYazdir( const int [ ][ 3 ] ); int main( ) { int dizi1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }, dizi2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }, dizi3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; printf( "Satır satır dizi1’in elemanları:\n" ); diziyiYazdir ( dizi1 ); printf( " Satır satır dizi2’in elemanları:\n" ); 234 diziyiYazdir ( dizi2 ); 18 printf( " Satır satır dizi3’in elemanları:\n" ); diziyiYazdir ( dizi3 ); return 0; } void diziyiYazdir ( const int a[ ][ 3 ] ) { int i, j; for ( i = 0; i <= 1; i++ ) { for ( j = 0; j <= 2; j++ ) printf( "%d ", a[ i ][ j ] ); printf( "\n" ); } }
Soru
Cevap
Soru
Cevap
Kaynaklar Atılım Üniversitesi-Yrd. Doç. Dr. Çiğdem Turhan - Yrd. Doç. Dr. Fatma Cemile Serçe-C++ Dersi Sunumları Anadolu Üniversitesi- Öğr. Gör. Levent Terlemez-Bilgisayar Programlama Ders Notları C ve C++ Deitel&Deitel Programlama Kitabı İTÜ-Dr. Feza Buzluca-Nesneye Dayalı Programlama Dersi Notları Gazi Üniversitesi-Doç. Dr. Ercan Nurcan YILMAZ C++ Dersi Sunumları İnönü Üniversitesi-Doç. Dr. Müslüm Arkan C Programlama Ders Notları