├── 00 ├── 01.c ├── 02.c ├── 03.c ├── 04.c ├── 05.c └── README.md ├── 02 ├── 01.c ├── 02.c ├── 03.c ├── 04.c ├── 05.c ├── 06.c └── README.md ├── 03 ├── 01.c ├── 02.c ├── 03.c └── README.md ├── 04 ├── 01.c ├── 02.c ├── 03.c ├── 04.c ├── 05.c ├── 06.c ├── 07.c ├── 08.c └── README.md ├── 05 ├── 01.c ├── 02.c ├── 03.c ├── 04.c ├── 05.c ├── 06.c ├── 07.c ├── 08.c ├── 09.c ├── 10.c ├── 11.c ├── 12.c ├── 13.c ├── 14.c ├── 15.c ├── 16.c ├── 17.c ├── 18.c └── README.md ├── 06 ├── 01.c ├── 02.c ├── 03.c ├── 04-1.c ├── 04-2.c ├── 05.c ├── 06.c ├── 07.c ├── 08-1.c ├── 08-2.c ├── 09.c ├── 10.c ├── 11-1.c ├── 11-2.c ├── 12.c ├── 13.c ├── 14.c ├── 15.c ├── Output1.c ├── Output2.c ├── Output3.c ├── Output4.c ├── Output5.c └── README.md ├── 07 ├── 01.c ├── 02.c ├── 03.c ├── 04.c ├── 05.c ├── 06.c ├── 07.c ├── Output1.c ├── Output2.c ├── Output3.c ├── Output4.c ├── Output5.c └── README.md ├── 08 ├── 01.c ├── 02.c ├── 03.c ├── 04.c └── README.md ├── 09 ├── 01.c ├── 02.c ├── 03.c ├── 04.c ├── 05.c ├── 06.c └── README.md ├── LICENSE ├── README.md └── SECURITY.md /00/01.c: -------------------------------------------------------------------------------- 1 | /* Burası yorum satırıdır */ 2 | 3 | // #include [Başlığı(Header)] 4 | 5 | #include //Her C programında olması gerekir. //stdio.h: [STandarD Input/Output(Standart Girdi/Çıktı)] 6 | 7 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 8 | 9 | /* main() fonksiyonu her C programında bulunması gereken bir fonksiyondur */ 10 | 11 | 12 | int main() 13 | { 14 | printf("Hello world!\n"); 15 | 16 | setlocale(LC_ALL,"Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 17 | 18 | printf("Merhaba Dünya\n"); 19 | 20 | printf("İĞÜÇÖŞ iğüçöş"); 21 | 22 | return; // Geriye değer gönderme işlemi yapar. 23 | } 24 | -------------------------------------------------------------------------------- /00/02.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | /* 6 | Karakterler 7 | 8 | 9 | \0 > sonlandırıcı karakter (null character) 10 | \a > çan sesi (alert) 11 | \b > geri boşluk (back space) 12 | \t > 1 tane tab kadar boşluk bırakır. (horizontal TAB) 13 | \n > Bir alt satıra geçer(new line) 14 | \v > düşey tab (vertical tab) 15 | \f > sayfa ileri (form feed) 16 | \r > satır başı (carriage return) 17 | 18 | */ 19 | 20 | 21 | /* 22 | Veri Tipleri 23 | char-> int -> float -> double 24 | 25 | 26 | - char : Karakter(Character): Alfabedeki büyük küçük harfler, özel semboller //1 byte (-128'den 127'ye kadar) STANDART ASCII TABLOSU 27 | 28 | unsigned char > İşaretsiz char Türü 29 | 30 | - int : Tamsayı(İnteger): Tamsayı değişken ve sabitleri tanımlamak için kullanılır. //4 byte 31 | 32 | [signed] short [int] > İşaretli Kısa Tamsayı Türü // 2 byte (-32.768 - 32.767) 33 | [signed] long [int] > İşaretli Uzun Tamsayı Türü // 4 byte (-2.147.483.648 - 2.147.483.647) 34 | unsigned short [int] > İşaretsiz Kısa Tamsayı Türü // 2 byte 35 | unsigned long [int] > İşaretsiz Uzun Tamsayı Türü // 4 byte 36 | 37 | - float : Küsüratlı Sayılar: Virgüllü kısmıyla ifade eder. //4 byte 38 | 39 | - double : Daha Hassas Küsüratlı Sayılar: Float türünden 2 kat daha duyarlıdır. //8 byte 40 | 41 | long double 42 | 43 | */ 44 | 45 | 46 | /* 47 | Yer ve Tür Belirleyiciler 48 | Yer Belirleyicileri 49 | - auto 50 | - register 51 | - static 52 | - extern 53 | Tür Belirleyicileri 54 | - const > Bir değişken ile tanımlandığında ve ilk değer atandığında, bu değişken içeriği hiç değişmez. 55 | ÖRN: const pi = 3.14; 56 | const double pi = 3.1416; 57 | 58 | - volatile 59 | 60 | 61 | */ 62 | 63 | 64 | int main() 65 | 66 | { 67 | setlocale(LC_ALL, "Turkish"); 68 | 69 | int tamsayi; 70 | 71 | char karakter; 72 | 73 | char karakterDizisi[50]; 74 | 75 | float kesirlisayi1; 76 | 77 | double kesirlisayi2; 78 | 79 | /* scanf veri alır, printf veri gönderir*/ 80 | 81 | printf("Lütfen bir tam sayı giriniz: "); 82 | scanf("%d", &tamsayi); 83 | 84 | printf("Lütfen bir karakter giriniz: "); 85 | scanf(" %c", &karakter); 86 | 87 | /* scanf(" %c" ,&karakter); 88 | Program içerisinde kullanıcıdan birden fazla tipte değer almak istediğimizde derleyicinin kafasının karışmaması 89 | için karakter alırken bir boşluk kullanarak karakter değerini kullanıcıdan almalıyız. 90 | */ 91 | 92 | printf("Lütfen bir karakter dizini giriniz: "); 93 | scanf("%s", &karakterDizisi); 94 | // scanf("%s" ,&karakterDizisi), scanf("%s" ,karakterDizisi), scanf("%s" ,karakterDizisi[0]) 95 | 96 | printf("Lütfen bir kesirli sayı giriniz: "); // Program bizden kesirli bir sayı değeri girmemizi istediğinde virgül kullanarak girmeliyiz. 97 | scanf("%f", &kesirlisayi1); 98 | 99 | printf("Lütfen bir daha hassas küsüratlı bir sayı giriniz: "); 100 | scanf("%lf", &kesirlisayi2); 101 | 102 | 103 | /* printf ("Sabit metin bilgisi", değişken ismi)*/ 104 | printf("\n\n"); 105 | 106 | printf("Girilen Tam Sayı: %d\n", tamsayi); 107 | printf("Girilen Karakter: %c\n", karakter); 108 | printf("Girilen Karakter Dizisi: %s\n", karakterDizisi); 109 | printf("Girilen Kesirli Sayı: %f\n", kesirlisayi1); 110 | printf("Girilen Hassas Küsüratlı Sayı: %lf\n", kesirlisayi2); 111 | 112 | 113 | 114 | 115 | int x = 15; 116 | float y = 15; 117 | double z = 15; 118 | 119 | printf("\n\n"); 120 | printf("int / float= %f\n", x / y); 121 | printf("int / float= %lf\n", x / z); 122 | printf("float / double= %f\n", y / z); 123 | 124 | 125 | int t = 3; 126 | printf("\n\n"); 127 | printf("%f\n", (float)x); 128 | printf("%.1f", (float)x); 129 | 130 | } 131 | -------------------------------------------------------------------------------- /00/03.c: -------------------------------------------------------------------------------- 1 | /* Alan Genişliği Ayırarak Yazdırma 2 | 3 | %d > Tamsayı Belirleyici 4 | (int) onluk sayı sisteminde yazar. 5 | 6 | %ld > Uzun Tamsayı Belirleyici 7 | (long) onluk sayı sisteminde yazar. 8 | 9 | %f > Ondalık Sayı Belirleyici 10 | (float,double) onluk sayı sisteminde yazar. 11 | 12 | %lf > Uzun Ondalık Sayı Belirleyici 13 | (double,long) onluk sayı sisteminde yazar. 14 | 15 | %e > Üstel Biçim Belirleyici 16 | Gerçek sayıları üstel biçimde yazar. 17 | 18 | %u > İşaretsiz Tamsayı Belirleyici 19 | (unsigned int) onluk sayı sisteminde yazar. 20 | 21 | %x > İşaretsiz Hexadesimal (Onaltılık) Belirleyici 22 | (unsigned int) onaltılık sayı sisteminde yazar. 23 | 24 | %o > İşaretsiz Oktal (Sekizlik) Belirleyici 25 | (unsigned int) sekizlik sayı sisteminde yazar. 26 | 27 | %g > Durume göre %f veya %e kullanılan Belirleyici 28 | Kısa olan şekli tercih ederler 29 | 30 | %c > Karakter Belirleyici 31 | 32 | 33 | %s > Metin Belirleyici 34 | 35 | 36 | */ 37 | 38 | 39 | #include 40 | #include 41 | 42 | int main() 43 | { 44 | setlocale(LC_ALL, "Turkish"); 45 | 46 | 47 | printf(" %%d Kullanımı\n"); 48 | printf("\n"); 49 | 50 | 51 | printf("Output:%d\n", 7); 52 | /* Aynısı gibi yazar.*/ 53 | 54 | printf("Output:%6d\n", 7); 55 | /* 6 karakterli bir alan içerisinde yazdırır. Yani 5 karakterlik yer atlayarak değeri yazar.*/ 56 | 57 | printf("Output:%06d\n", 7); 58 | /* Aynı tam sayı değeri 6 karakterlik bir alan içerisine yazar ama boşluk olan yerler sıfır ile doldurur.*/ 59 | 60 | printf("Output:%-10d\n", 75); 61 | /* (-) işareti sola dayalı yazdırır.*/ 62 | 63 | printf("\n********************************\n"); 64 | 65 | printf(" %%f Kullanımı\n"); 66 | printf("\n"); 67 | 68 | 69 | printf("Output:%.8f\n", 1.234); 70 | /* Virgülden sonrasındaki sayıyı yazdıktan sonra 8 karakterlik olması için boşluklar sıfırla tamamlanır.*/ 71 | 72 | printf("Output:%2.3f\n", 45.58678); 73 | /* Tam sayı bölümü 2, desimal bölümü (Virgülden sonrası) ise 3 karakter yazdırır. Yuvarlama yapar.*/ 74 | 75 | printf("Output:%2.3f\n", 45.58); 76 | /* Tam sayı bölümü 2, desimal bölümü ise 3 karakter yazdırır.*/ 77 | 78 | printf("Output:%5.3f\n", 45.58); 79 | /* Tam sayı bölümü 5, desimal bölümü ise 3 karakter yazdırır.*/ 80 | 81 | printf("Output:%-15.3f\n", 45.58); 82 | /* Sola dayalı tam sayı bölümü aynı, desimal bölümü ise 3 karakter yazdırır.*/ 83 | 84 | printf("\n********************************\n"); 85 | 86 | printf(" %%e Kullanımı\n"); 87 | printf("\n"); 88 | 89 | 90 | printf("Output:%+.3e\n", -123.456789); 91 | /* Sayısını üssel gösterimle 3 hane hassasiyetli olarak (+ -) işareti ile birlikte yazdırır.*/ 92 | 93 | printf("Output:%.2e\n", 225.68); 94 | printf("Output:%20.2e\n", 225.68); 95 | printf("Output:%-20.2e\n", 225.68); 96 | 97 | printf("\n********************************\n"); 98 | 99 | 100 | 101 | 102 | unsigned int u = 57054; 103 | printf("Output (%%u) = %u\n", u); /* u değerini onluk sistemde yazar */ 104 | printf("Output (%%o) = %o\n", u); /* u değerini sekizlik sistemde yazar */ 105 | printf("Output (%%x) = %x\n", u); /* u değerini onaltılık sistemde yazar */ 106 | 107 | printf("\n********************************\n"); 108 | 109 | long int lo = 23467; 110 | unsigned long int unlo = 65242; 111 | printf("Output (%%ld) = %ld\n", lo); /* onluk sistemde yazar */ 112 | printf("Output (%%lu) = %lu\n", unlo); /* onluk sistemde yazar */ 113 | printf("Output (%%lx) = %lo\n", unlo); /* sekizlik sistemde yazar */ 114 | printf("Output (%%lx) = %lx\n", unlo); /* onaltılık sistemde yazar */ 115 | 116 | printf("\n********************************\n"); 117 | 118 | 119 | printf("Output (%%s) = %s\n", "This is a string"); 120 | 121 | printf("Output (%%g) = %g\n", 123456.789); 122 | } 123 | -------------------------------------------------------------------------------- /00/04.c: -------------------------------------------------------------------------------- 1 | /* Matematiksel İşlemler */ 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | /* ATAMA OPERATÖRLERİ 8 | x += y > x = x+y 9 | x -= y > x = x-y 10 | x *= y > x = x*y 11 | x /= y > x = x/y 12 | x %= y > x = x%y 13 | 14 | */ 15 | 16 | /* Arttırma ve Eksiltme Operatörleri 17 | 18 | ++x > x = x+1 önce arttırılır, sonra atanır 19 | --x > x = x-1 önce eksiltilir, sonra atanır 20 | 21 | x++ > önce atanır, sonra arttırılır 22 | x-- > önce atanır, sonra azaltılır 23 | 24 | 25 | */ 26 | 27 | 28 | int main() 29 | { 30 | 31 | setlocale(LC_ALL, "Turkish"); 32 | 33 | int x, y; 34 | 35 | 36 | 37 | printf("Lütfen bir tam sayı giriniz: \n"); 38 | scanf("%d", &x); 39 | 40 | 41 | y = x++; //atanır sonra arttırılır. 42 | 43 | printf("x= %d, y= %d\n", x, y); 44 | 45 | 46 | 47 | printf("Lütfen bir tam sayı giriniz: \n"); 48 | scanf("%d", &x); 49 | 50 | y = ++x; //önce arttırılır, sonra atanır 51 | 52 | printf("x= %d, y= %d\n", x, y); 53 | 54 | 55 | 56 | printf("Lütfen bir tam sayı giriniz: \n"); 57 | scanf("%d", &x); 58 | 59 | x += 5; 60 | 61 | printf("x= %d", x); 62 | 63 | 64 | return 0; 65 | 66 | } 67 | -------------------------------------------------------------------------------- /00/05.c: -------------------------------------------------------------------------------- 1 | /* 2 | Mantıksal Operatörler 3 | 4 | -- Operatör -- Anlamı -- C Sembol -- C Örnek Kod -- Sonuç 5 | AND Ve && a && b >> Her ikiside doğru ise 1(True), her ikiside yanlış ise 0(False) 6 | OR Veya || a || b >> Herhangi birisi doğru ise 1(True), her ikiside yanlış ise 0(False) 7 | NOT Değil ! !a >> Doğru ise 0(False), Yanlış ise 1(True) 8 | 9 | 10 | */ 11 | 12 | 13 | /* 14 | Operatörlerde Öncelik Sırası 15 | 16 | Öncelikli Operatör () soldan sağa 17 | 18 | Aritmetik Operatörler ! ++ -- SAĞDAN SOLA 19 | / * % soldan sağa 20 | + - soldan sağa 21 | 22 | Karşılaştırma Operatörler > >= < <= soldan sağa 23 | (İlişkisel) == != soldan sağa 24 | 25 | Mantıksal Operatörler && soldan sağa 26 | || soldan sağa 27 | 28 | Atama Operatörü = SAĞDAN SOLA 29 | 30 | */ 31 | 32 | 33 | #include 34 | #include 35 | 36 | 37 | void main() 38 | 39 | { 40 | setlocale(LC_ALL, "Turkish"); 41 | 42 | int a = 5, b = 8, c = 3, d, e, f, g; 43 | 44 | d = a * b / c % a; 45 | printf("%d\n", d); 46 | 47 | e = (a < 5) || (++b > 4); 48 | printf("%d\n", !e); 49 | 50 | printf("%d\n", a || c && b % c && e); 51 | 52 | f = a * 2 % (b + 1) - c / (a + b); 53 | printf("%d\n", f); 54 | 55 | g = (f / e * a - b++ * --c) / -3; 56 | printf("%d\n", g); 57 | 58 | printf("\n\n"); 59 | 60 | int x = 4, y = 7, z = 5, p, r, s, m; 61 | 62 | p = x * y / z % x; 63 | printf("%d\n", p); 64 | 65 | r = (x < 5) || (++y > 4); 66 | printf("%d\n", !r); 67 | 68 | printf("%d\n", x || z && y % z && r); 69 | 70 | s = x * 2 % (y + 1) - z / (x + y); 71 | printf("%d\n", s); 72 | 73 | m = (s / r * x - y++ * --z) / -3; 74 | printf("%d", m); 75 | 76 | } 77 | -------------------------------------------------------------------------------- /00/README.md: -------------------------------------------------------------------------------- 1 | #### 00 - Intro (Giriş) 2 | 3 | | \.c | Başlıklar | 4 | | ----- | --------------------- | 5 | | 01\.c | Giriş | 6 | | 02\.c | Bazı Tanımlar | 7 | | 03\.c | Alan Genişliği | 8 | | 04\.c | Matematiksel İşlemler | 9 | | 05\.c | Operatörler | 10 | -------------------------------------------------------------------------------- /02/01.c: -------------------------------------------------------------------------------- 1 | /* Tek Sayıların Toplamı 2 | 3 | // While Kullanımı 4 | 5 | Klavyeden çift sayı girilene kadar girilmiş olan tek sayıların toplamını hesaplayıp yazdıran programı C dili ile yazınız*/ 6 | 7 | 8 | #include 9 | #include 10 | 11 | 12 | int main() 13 | { 14 | setlocale(LC_ALL, "Turkish"); 15 | 16 | int sayi, toplam=0; 17 | 18 | printf("Bir sayı giriniz: "); 19 | 20 | scanf("%d", &sayi); 21 | 22 | 23 | while (sayi%2!=0) 24 | { 25 | toplam+=sayi; 26 | printf("Bir Sayı Giriniz: "); 27 | scanf("%d", &sayi); 28 | } 29 | 30 | printf("Tek Sayıların Toplamı = %d", toplam); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /02/02.c: -------------------------------------------------------------------------------- 1 | /* En Büyük ve En Küçük Sayıyı Bulma 2 | 3 | //While Kullanımı 4 | 5 | Kullanıcı klavyeden -1 girene kadar girilmiş olan sayıların en büyüğü ile en küçüğünü ekrana yazdıran program*/ 6 | 7 | #include 8 | #include 9 | 10 | int main() 11 | { 12 | setlocale(LC_ALL, "Turkish"); 13 | 14 | float sayi, max, min; 15 | printf("Sayı Giriniz: "); 16 | scanf("%f", &sayi); 17 | 18 | min = sayi; 19 | max = sayi; 20 | 21 | while (sayi != -1) 22 | { 23 | 24 | if (sayi > max) 25 | max = sayi; 26 | 27 | if (sayi < min) 28 | min = sayi; 29 | 30 | printf("Sayı Giriniz: "); 31 | scanf("%f", &sayi); 32 | 33 | } 34 | printf("En Büyük Sayı: %.2f\n", max); 35 | printf("En Küçük Sayı: %.2f", min); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /02/03.c: -------------------------------------------------------------------------------- 1 | /* Girilen Değerlerin Ortalamasını Hesaplama 2 | 3 | //For Kullanımı 4 | 5 | SIZE (#define SIZE İstediğin Sayı) elemanlı bir dizideki değerleri toplayıp ortalamasını yazan program. */ 6 | 7 | #include 8 | #include 9 | #define SIZE 3 10 | 11 | int main() 12 | { 13 | setlocale(LC_ALL, "Turkish"); 14 | 15 | int i; 16 | float a[SIZE], ort, toplam; 17 | toplam = 0; 18 | 19 | for (i = 0; i < SIZE; i++) 20 | 21 | { 22 | printf("Sayı Giriniz: "); 23 | scanf("%f", &a[i]); 24 | toplam = toplam + a[i]; 25 | } 26 | 27 | 28 | ort = toplam / SIZE; 29 | printf("Ortalama=%.2f", ort); 30 | 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /02/04.c: -------------------------------------------------------------------------------- 1 | /* Bir Sayı Diğer Sayının Katı Mıdır? */ 2 | 3 | #include 4 | #include 5 | 6 | int main() 7 | 8 | { 9 | 10 | setlocale(LC_ALL, "Turkish"); 11 | 12 | int buyukSayi, kucukSayi; 13 | 14 | printf("Lutfen once büyük sayıyı sonra küçük sayıyı giriniz...\n"); 15 | 16 | scanf("%d %d", &buyukSayi, &kucukSayi); 17 | 18 | 19 | if (buyukSayi % kucukSayi == 0) 20 | { 21 | 22 | printf("Katıdır\n"); 23 | 24 | } 25 | 26 | else 27 | { 28 | 29 | printf("Katı Değildir\n"); 30 | 31 | } 32 | 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /02/05.c: -------------------------------------------------------------------------------- 1 | /*Girilen Sayıyı Tersten Yazan Program 2 | 3 | // While Kullanımı 4 | */ 5 | 6 | #include 7 | #include 8 | 9 | int main() 10 | { 11 | 12 | setlocale(LC_ALL, "Turkish"); 13 | 14 | int sayi, ters = 0, basamak; 15 | 16 | printf("Tam Sayı Giriniz: "); 17 | scanf("%d", &sayi); 18 | 19 | while (sayi != 0) 20 | { 21 | 22 | basamak = sayi % 10; 23 | ters = ters * 10 + basamak; 24 | sayi /= 10; 25 | 26 | } 27 | 28 | printf("Sayının Tersi: %d", ters); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /02/06.c: -------------------------------------------------------------------------------- 1 | /* İki Sayının EBOB'unu Bulan Program */ 2 | 3 | #include 4 | #include 5 | 6 | int main() 7 | 8 | { 9 | 10 | setlocale(LC_ALL, "Turkish"); 11 | 12 | int x, y, min; 13 | 14 | int i, ebob = 1; 15 | 16 | printf("Birinci Sayıyı Giriniz:"); 17 | scanf("%d", &x); 18 | 19 | printf("Ikinci Sayıyı Giriniz:"); 20 | scanf("%d", &y); 21 | 22 | if (x < y) 23 | min = x; 24 | min = y; 25 | 26 | for (i = 2; i <= min; i++) 27 | 28 | { 29 | if (x % i == 0 && y % i == 0) 30 | ebob = i; 31 | } 32 | 33 | printf("EBOB(%d,%d) = %d", x, y, ebob); 34 | 35 | 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /02/README.md: -------------------------------------------------------------------------------- 1 | #### 02 - Flow (Akış) 2 | 3 | | \.c | Başlıklar | 4 | | -------- | ----------------------------------------- | 5 | | 01\.c | Tek Sayıların Toplamı | 6 | | 02\.c | En Büyük ve En Küçük Sayıyı Bulma | 7 | | 03\.c | Girilen Değerlerin Ortalamasını Hesaplama | 8 | | 04\-1\.c | Bir Sayı Diğer Sayının Katı Mıdır? | 9 | | 04\-2\.c | Girilen Sayıyı Tersten Yazan Program | 10 | | 05\.c | İki Sayının EBOB'unu Bulan Program | 11 | | 06\.c | Sayının Tersini Yazma | 12 | -------------------------------------------------------------------------------- /03/01.c: -------------------------------------------------------------------------------- 1 | /* Dizideki Elemanların Ortalaması 2 | 3 | 4 | */ 5 | 6 | #include 7 | #include 8 | #define MAX_SIZE 100 9 | 10 | 11 | 12 | int main() 13 | 14 | { 15 | setlocale(LC_ALL, "Turkish"); 16 | 17 | float dizi[MAX_SIZE]; 18 | int i, N; 19 | float toplam=0; 20 | 21 | printf("Dizinin Boyutunu Giriniz: "); 22 | scanf("%d", &N); 23 | 24 | for (i = 0; i < N; i++) 25 | { 26 | printf("%.2d. Elemanı Giriniz: ", i + 1); 27 | scanf("%f", &dizi[i]); 28 | 29 | toplam += dizi[i]; 30 | } 31 | 32 | printf("\nGirilen Elemanların Ortalaması= %f\n", toplam / N); 33 | 34 | return 0; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /03/02.c: -------------------------------------------------------------------------------- 1 | /* Dizinin En Büyük ve En Küçük Elemanını Bulma */ 2 | 3 | #include 4 | #include 5 | #define SIZE 100 6 | 7 | 8 | int main() 9 | { 10 | setlocale(LC_ALL, "Turkish"); 11 | 12 | int dizi[SIZE]; 13 | int i,N; 14 | int max=0, min=0; 15 | 16 | printf("Dizinin Boyutunu Giriniz: "); 17 | scanf("%d", &N); 18 | 19 | printf("\n"); 20 | 21 | for (i = 0; i < N; i++) 22 | { 23 | printf("%.2d. Elemanı Giriniz: ", i + 1); 24 | scanf("%d", &dizi[i]); 25 | } 26 | 27 | max = dizi[0]; 28 | min = dizi[0]; 29 | 30 | for (i = 1; i < N; i++) 31 | { 32 | if (dizi[i] > max) 33 | { 34 | max = dizi[i]; 35 | } 36 | else if (dizi[i] < min) 37 | { 38 | min = dizi[i]; 39 | } 40 | } 41 | 42 | printf("\nEn Büyük Sayı = %d\n", max); 43 | printf("\nEn Küçük Sayı = %d\n", min); 44 | 45 | return 0; 46 | } 47 | -------------------------------------------------------------------------------- /03/03.c: -------------------------------------------------------------------------------- 1 | /* Dizi İçerisinde Sayı Arama ve o Sayıdan kaç tane olduğunu Yazan Program 2 | 3 | Klavyeden girilen SIZE elemanlı dizi içerisinde klavyeden girilen sayının frekansını bulan C programı 4 | 5 | */ 6 | 7 | #include 8 | #include 9 | #define SIZE 100 10 | 11 | int main() 12 | { 13 | setlocale(LC_ALL, "Turkish"); 14 | 15 | int dizi[SIZE],N; 16 | int x; 17 | int frekans = 0; 18 | int i, toplam = 0; 19 | 20 | printf("Dizinin Boyutunu Giriniz: "); 21 | scanf("%d", &N); 22 | 23 | printf("\n"); 24 | 25 | printf("Aranacak Sayı: "); 26 | scanf("%d", &x); 27 | 28 | printf("\n"); 29 | 30 | 31 | for (i = 0; i < N; i++) 32 | { 33 | printf("%.2d. Elemanı Giriniz: ", i + 1); 34 | scanf("%d", &dizi[i]); 35 | if (dizi[i] == x) 36 | frekans++; 37 | } 38 | 39 | 40 | printf("\nDizi içerisinde %d adet, %d sayısı vardır.\n", frekans, x); 41 | 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /03/README.md: -------------------------------------------------------------------------------- 1 | #### 03 - Arr (Arrays- Diziler) 2 | 3 | | \.c | Başlıklar | 4 | | ----- | -------------------------------------------- | 5 | | 01\.c | Dizideki Elemanların Ortalaması | 6 | | 02\.c | Dizinin En Büyük ve En Küçük Elemanını Bulma | 7 | | 03\.c | Dizi İçerisinde Sayı Arama | 8 | -------------------------------------------------------------------------------- /04/01.c: -------------------------------------------------------------------------------- 1 | /* 2 | Şans Oyunu : Craps 3 | • İki zar atılır. 4 | • Zarların toplam hesaplanır. 5 | • İlk atışta 7 veya 11 gelirse oyuncu kazanır. 6 | • İlk atışta 2, 3 veya 12 gelirse oyuncu kaybeder. 7 | • İlk atışta 4, 5, 6, 8, 9 ve 10 gelirse bu oyuncunun puanı oluyor. 8 | • Oyuncu 7 atmadan önce kendi puanını tutturmalıdır. 9 | 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | 19 | int zaratma(void) 20 | { 21 | int ilkzar, ikincizar, toplam; 22 | 23 | ilkzar = 1 + (rand() % 6); 24 | 25 | ikincizar = 1 + (rand() % 6); 26 | 27 | printf("İlk Zar: %d \n", ilkzar); 28 | printf("İkinci Zar: %d \n", ikincizar); 29 | 30 | toplam = ilkzar + ikincizar; 31 | printf("Oyuncunun Puanı: %d + %d = %d \n", ilkzar, ikincizar, toplam); 32 | printf("\n"); 33 | 34 | 35 | return toplam; 36 | 37 | } 38 | 39 | 40 | 41 | int main() 42 | { 43 | setlocale(LC_ALL, "Turkish"); 44 | 45 | int atis, puan, sonuc; 46 | 47 | 48 | srand(time(NULL)); //Rastgele Sayı Üretimi 49 | 50 | 51 | atis = zaratma(); 52 | 53 | 54 | if (atis == 7 || atis == 11) 55 | { 56 | sonuc = 1; 57 | printf("OYUNCU KAZANDI\n"); 58 | } 59 | 60 | else if (atis == 2 || atis == 3 || atis == 12) 61 | { 62 | sonuc = 2; 63 | printf("OYUNCU KAYBETTİ\n"); 64 | } 65 | 66 | 67 | else //else if (atis == 4 || atis == 5 || atis == 6 || atis == 8 || atis == 9 || atis == 10) 68 | { 69 | sonuc = 3; 70 | 71 | } 72 | 73 | while (sonuc == 3) 74 | { 75 | 76 | puan = zaratma(); 77 | 78 | if (puan == atis) 79 | 80 | { 81 | sonuc = 1; 82 | printf("OYUNCU KAZANDI\n"); 83 | } 84 | 85 | else if (puan == 7) 86 | 87 | { 88 | sonuc = 2; 89 | printf("OYUNCU KAYBETTİ\n"); 90 | } 91 | 92 | } 93 | return 0; 94 | 95 | } 96 | -------------------------------------------------------------------------------- /04/02.c: -------------------------------------------------------------------------------- 1 | /* Tam Sayının Üssünü Almak 2 | 3 | C program to find power of a number using function 4 | 5 | Write a C program to input a number from user and find power of given number. 6 | 7 | // Fonksiyon Kullanımı 8 | 9 | */ 10 | 11 | #include 12 | #include 13 | 14 | 15 | int fonk(int x, int y) 16 | { 17 | int i; 18 | 19 | int sonuc = 1; 20 | 21 | for (i = 0; i < y; i++) 22 | { 23 | sonuc *= x; 24 | } 25 | 26 | return sonuc; 27 | } 28 | 29 | int main() 30 | { 31 | 32 | setlocale(LC_ALL, "Turkish"); 33 | 34 | int x, y; 35 | 36 | printf("Lütfen bir tam sayı giriniz: "); 37 | scanf("%d", &x); 38 | 39 | printf("\n"); 40 | 41 | printf("Lütfen üssünü giriniz: "); 42 | scanf("%d", &y); 43 | 44 | printf("\nSonuç: %d\n", fonk(x, y)); 45 | 46 | } 47 | -------------------------------------------------------------------------------- /04/03.c: -------------------------------------------------------------------------------- 1 | /* Dizinin En Büyük ve En Küçük Elemanını Bulma 2 | 3 | // Dizi ve İşlevi 4 | // Fonksiyon ile 5 | 6 | */ 7 | 8 | #include 9 | #include 10 | #define SIZE 100 11 | 12 | void fonksiyon(int dizi[], int N) 13 | { 14 | 15 | int min = 0, max = 0; 16 | int i; 17 | 18 | max = dizi[0]; 19 | min = dizi[0]; 20 | 21 | for (i = 1; i < N; i++) 22 | { 23 | if (dizi[i] > max) 24 | { 25 | max = dizi[i]; 26 | } 27 | if (dizi[i] < min) 28 | { 29 | min = dizi[i]; 30 | } 31 | } 32 | 33 | printf("\nEn Büyük Sayı = %d\n", max); 34 | printf("\nEn Küçük Sayı = %d\n", min); 35 | } 36 | 37 | 38 | int main() 39 | { 40 | setlocale(LC_ALL, "Turkish"); 41 | 42 | int dizi[SIZE], N; 43 | int i; 44 | 45 | printf("Dizinin Boyutunu Giriniz: "); 46 | scanf("%d", &N); 47 | 48 | printf("\n"); 49 | 50 | for (i = 0; i < N; i++) 51 | { 52 | printf("%.2d. Elemanı Giriniz: ", i + 1); 53 | scanf("%d", &dizi[i]); 54 | } 55 | 56 | fonksiyon(dizi, N); 57 | return 0; 58 | } 59 | -------------------------------------------------------------------------------- /04/04.c: -------------------------------------------------------------------------------- 1 | /* Girilen Sayıyı Tersten Yazan Program 2 | 3 | //Fonksiyon Kullanımı 4 | 5 | */ 6 | 7 | #include 8 | #include 9 | 10 | int tersinialma(int sayi) 11 | { 12 | int ters = 0, basamak; 13 | 14 | while (sayi != 0) 15 | { 16 | 17 | basamak = sayi % 10; 18 | ters = ters * 10 + basamak; 19 | sayi /= 10; 20 | 21 | } 22 | 23 | return ters; 24 | } 25 | 26 | int main() 27 | { 28 | 29 | setlocale(LC_ALL, "Turkish"); 30 | 31 | int sayi; 32 | 33 | printf("Tam Sayı Giriniz: "); 34 | scanf("%d", &sayi); 35 | 36 | printf("\nSayının Tersi: %d\n", tersinialma(sayi)); 37 | 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /04/05.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | /* İki Sayı Arasındaki Asal Sayıları Bulma 5 | 6 | 7 | C Program to Display Prime Numbers Between Intervals Using Function 8 | Example to print all prime numbers between two numbers (entered by the user) by making a user-defined function. 9 | 10 | //Fonksiyon Kullanımı 11 | 12 | 13 | */ 14 | 15 | int func(int sayi); 16 | 17 | 18 | int main() 19 | { 20 | setlocale(LC_ALL, "Turkish"); 21 | 22 | int sayi1, sayi2; 23 | int i, j; 24 | 25 | printf("İki pozitif tam sayı giriniz: \n"); 26 | scanf("%d %d", &sayi1, &sayi2); 27 | 28 | printf("\n"); 29 | printf("İki sayı arasındaki asal sayılar: \n"); 30 | 31 | for (i = sayi1 + 1; i < sayi2; ++i) 32 | { 33 | j = func(i); 34 | if (j == 1) 35 | printf("%d\n", i); 36 | } 37 | 38 | return 0; 39 | } 40 | 41 | int func(int sayi) 42 | { 43 | int k, j = 1; 44 | 45 | for (k = 2; k <= sayi / 2; ++k) 46 | { 47 | if (sayi % k == 0) 48 | { 49 | j = 0; 50 | break; 51 | } 52 | } 53 | return j; 54 | } 55 | -------------------------------------------------------------------------------- /04/06.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Diziyi Artan ve Azalan Şekilde Yazma 4 | 5 | C Fonksiyonu kullanarak bir diziyi artan ve azalan düzende Sıralama Programı 6 | 7 | 8 | C Program to Sort an array in ascending and descending order using function 9 | Code for Sorting of array elements using a function in C Programming 10 | 11 | //Fonksiyon Kullanımı 12 | 13 | */ 14 | 15 | 16 | #include 17 | #include 18 | #define MAX_SIZE 100 19 | 20 | 21 | int diziyisirala(int dizi[], int N) 22 | { 23 | int i, j, k; 24 | 25 | for (i = 0; i < N; i++) 26 | { 27 | for (j = i + 1; j < N; j++) 28 | { 29 | if (dizi[i] > dizi[j]) 30 | { 31 | k = dizi[i]; 32 | dizi[i] = dizi[j]; 33 | dizi[j] = k; 34 | } 35 | 36 | } 37 | } 38 | 39 | } 40 | 41 | int diziyisirala2(int dizi[], int N) 42 | { 43 | int i, j, k; 44 | 45 | for (i = 0; i < N; i++) 46 | { 47 | for (j = i + 1; j < N; j++) 48 | { 49 | if (dizi[i] < dizi[j]) 50 | { 51 | k = dizi[i]; 52 | dizi[i] = dizi[j]; 53 | dizi[j] = k; 54 | } 55 | 56 | } 57 | } 58 | 59 | } 60 | 61 | 62 | int main() 63 | { 64 | setlocale(LC_ALL, "Turkish"); 65 | 66 | int dizi[MAX_SIZE]; 67 | int i, N; 68 | 69 | 70 | printf("Dizinin Boyutunu Giriniz: "); 71 | scanf("%d", &N); 72 | 73 | 74 | for (i = 0; i < N; i++) 75 | { 76 | printf("%d. Elemanı Giriniz: ", i + 1); 77 | scanf("%d", &dizi[i]); 78 | } 79 | 80 | 81 | printf("\n\n"); 82 | 83 | printf("Girilen Dizi\n"); 84 | for (i = 0; i < N; i++) 85 | { 86 | printf("%d ", dizi[i]); 87 | } 88 | 89 | 90 | 91 | printf("\n\n"); 92 | 93 | 94 | diziyisirala(dizi, N); 95 | 96 | printf("Küçükten Büyüğe Sıralanmış Hali:\n"); 97 | 98 | for (i = 0; i < N; i++) 99 | { 100 | printf("%d ", dizi[i]); 101 | } 102 | 103 | printf("\n\n"); 104 | 105 | 106 | diziyisirala2(dizi, N); 107 | 108 | printf("Büyükten Küçüğe Sıralanmış Hali:\n"); 109 | 110 | for (i = 0; i < N; i++) 111 | { 112 | printf("%d ", dizi[i]); 113 | } 114 | 115 | printf("\n\n"); 116 | 117 | 118 | return 0; 119 | } 120 | -------------------------------------------------------------------------------- /04/07.c: -------------------------------------------------------------------------------- 1 | /* 2 | Rastgele sırada sunum yapılması için bir program yazılması gerekmektedir. 3 | Sunum listesi bir dizide saklanmalıdır. rastgeleSıralamaOlustur isimli bir fonksiyonu diziyi ve 4 | dizinin boyutunu parametre olarak alacak şekilde yazınız. Lütfen programın tamamını kodlayınız. 5 | 6 | 7 | In order to make a presentation in random order, a program must be written. 8 | The presentation list should be stored in an array. Write a function called generateRandomOrder 9 | which takes an array and size of the array as a parameter. Please write the entire program. 10 | 11 | 12 | */ 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | #define SIZE 100 19 | 20 | 21 | int rastgeleSiralamaOlustur(int dizi[], int x) 22 | 23 | { 24 | int i, j = 0, random; 25 | 26 | for (i = 0; i < x; i++) 27 | { 28 | random = 1 + rand() % x; 29 | 30 | for (j = 0; j <= i; j++) 31 | { 32 | if (i == j) //Eğer üretilen sayı önceki değerlerden farklıysa 33 | { 34 | dizi[i] = random; 35 | } 36 | else if (random == dizi[j]) // Eğer üretilen sayı dizide ise 37 | { 38 | i--; 39 | break; 40 | } 41 | 42 | } 43 | 44 | } 45 | 46 | } 47 | 48 | 49 | int main() 50 | { 51 | setlocale(LC_ALL, "Turkish"); 52 | 53 | srand(time(NULL)); ////Rastgele Sayı Üretimi 54 | 55 | int ogrenci_sayisi; 56 | 57 | printf("Öğrenci Sayısını Giriniz: "); 58 | scanf("%d", &ogrenci_sayisi); 59 | 60 | int dizi[SIZE]; 61 | 62 | rastgeleSiralamaOlustur(dizi, ogrenci_sayisi); 63 | 64 | int i = 0; 65 | 66 | for (i = 0; i < ogrenci_sayisi; i++) 67 | printf("%d. Sırada Sunacak Kişi - Listedeki %d. Öğrenci\n", i + 1, dizi[i]); 68 | 69 | return 0; 70 | 71 | } 72 | -------------------------------------------------------------------------------- /04/08.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Boy ve kilo bilgisini alarak vücut kitle indeksini hesaplayan kitleIndeks isimli bir fonksiyon yazınız. 4 | Bu fonksiyon aşağıda verilen tabloya göre değer döndürmektedir. 5 | 6 | Yazdığınız fonksiyonu main fonksiyonunda çağırarak kullanın ve bir program yazınız. Programın örnek çalışması şekilde verildiği gibi olmalıdır. 7 | Vücut kitle indeksi hesabı aşağıda verilmiştir. 8 | 9 | 10 | Write a function named bodyIndex that computes body mass index by taking height and weight information. Write a program that calls the function in the main. 11 | The sample output of the program should be as it is given. 12 | 13 | 14 | */ 15 | 16 | 17 | #include 18 | #include 19 | 20 | 21 | int kitleindeks(float boy, float kilo) 22 | { 23 | 24 | float indeks; 25 | 26 | indeks = kilo / (boy * boy); 27 | 28 | if (indeks <= 18) 29 | { 30 | return 1; 31 | } 32 | 33 | else if (indeks <= 25) 34 | { 35 | 36 | return 2; 37 | } 38 | 39 | else if (indeks <= 30) 40 | { 41 | 42 | return 3; 43 | } 44 | 45 | else 46 | { 47 | return 4; 48 | } 49 | } 50 | 51 | 52 | int main() 53 | { 54 | 55 | setlocale(LC_ALL, "Turkish"); 56 | 57 | float boy=0, kilo=0; 58 | 59 | printf("Boyunuzu ve Kilonuzu Giriniz: "); //boyu metre cinsinden kiloyu da kg cinsinden giriniz. 60 | scanf("%f %f", &boy, &kilo); 61 | 62 | 63 | int sonuc = kitleindeks(boy, kilo); 64 | 65 | if(sonuc==1) 66 | printf("ZAYIF"); 67 | 68 | else if(sonuc==2) 69 | printf("NORMAL"); 70 | 71 | else if(sonuc==3) 72 | printf("KİLOLU"); 73 | 74 | else 75 | printf("OBEZ"); 76 | 77 | } 78 | -------------------------------------------------------------------------------- /04/README.md: -------------------------------------------------------------------------------- 1 | #### 04 - Func (Function - Fonksiyon) 2 | 3 | | .c | Başlıklar | 4 | | ---- | -------------------------------------------- | 5 | | 01.c | Şans Oyunu : Craps | 6 | | 02.c | Tam Sayının Üssünü Almak | 7 | | 03.c | Dizinin En Büyük ve En Küçük Elemanını Bulma | 8 | | 04.c | Girilen Sayıyı Tersten Yazan Program | 9 | | 05.c | İki Sayı Arasındaki Asal Sayıları Bulma | 10 | | 06.c | Diziyi Artan ve Azalan Şekilde Yazma | 11 | | 07.c | Rastgele Listeden Kişi Sıralama | 12 | | 08.c | Vücut Kitle İndeksi | 13 | -------------------------------------------------------------------------------- /05/01.c: -------------------------------------------------------------------------------- 1 | /* Her Harfin Tekrar Sayısını Bulma (1) 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | //While ile 6 | 7 | Klavyeden girilen bir metnin içerisinde her harfin tekrar sayısını bularak ekrana yazdıran C kodu 8 | 9 | ASCII Değerleri A=65,a=97,enter=13 10 | 11 | */ 12 | 13 | #include 14 | #include 15 | #define SIZE 150 16 | 17 | int main() 18 | { 19 | setlocale(LC_ALL, "Turkish"); 20 | 21 | char metin[256]; 22 | int i=0,j; 23 | int sayac[SIZE] = { 0 }; 24 | 25 | printf("Metin Giriniz: "); 26 | gets(metin); 27 | 28 | while (metin[i] != NULL) 29 | { 30 | sayac[metin[i] - 65]++; 31 | i++; 32 | } 33 | 34 | for (j = 0; j < SIZE; j++) 35 | { 36 | if (sayac[j] != 0) 37 | printf("%d tane %c harfi vardir.\n", sayac[j], j + 65); 38 | } 39 | 40 | getch(); 41 | 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /05/02.c: -------------------------------------------------------------------------------- 1 | /* Metni Tersten Yazdırma Programı 2 | 3 | //String (Karakter Tutan Diziler) 4 | //For ile 5 | //Fonksiyonla yazımı 6 | 7 | Klavyeden girilen metni tersten ekrana yazdıran C programı */ 8 | 9 | #include 10 | #include 11 | #define SIZE 100 12 | 13 | int uzunlukbulma(char metin[]) 14 | { 15 | 16 | int i = 0; // karakter sayısını alacak 17 | 18 | 19 | while (1) // Sonsuz Döngü 20 | { 21 | if (metin[i] == '\0') // '\0' simgesi NULL(bos) karakter 22 | { 23 | break; //NULL gelince sonsuz döngüden çıkıyoruz 24 | } 25 | 26 | i++; 27 | 28 | } 29 | 30 | return i; //Metnin uzunluğunu verir. 31 | 32 | /* Alternatif 33 | while(metin[i] != '\0') //Null görene kadar dönmeye devam eder. 34 | { 35 | i++; 36 | } 37 | return i; 38 | */ 39 | 40 | } 41 | 42 | 43 | int main() 44 | { 45 | setlocale(LC_ALL, "Turkish"); 46 | 47 | char metin[SIZE]; 48 | 49 | printf("Metin giriniz: "); 50 | gets(metin); // alternatif: scanf("%s", metin); 51 | 52 | int uzunluk = uzunlukbulma(metin); 53 | 54 | int sayac = 0; 55 | 56 | 57 | printf("\nMetnin Tersi: "); 58 | 59 | for (sayac = uzunluk - 1; sayac >= 0; sayac--) 60 | { 61 | putchar(metin[sayac]); // printf("%c", metin[sayac]) //Belirtilen karakteri ekrana yazar. 62 | } 63 | 64 | printf("\n"); 65 | 66 | } 67 | -------------------------------------------------------------------------------- /05/03.c: -------------------------------------------------------------------------------- 1 | /* Kelimelerin Baş Harflerini Yazdırma 2 | 3 | //String (Karakter Tutan Diziler) 4 | //While ile 5 | 6 | Klavyeden girilen cümlede yer alan kelimelerin baş harflerini ekrana yazdıran programı C dilinde yazınız. 7 | 8 | >ASCII KOD< 9 | 32 = Space 10 | 11 | */ 12 | 13 | #include 14 | #include 15 | #define SIZE 256 16 | 17 | int main() 18 | { 19 | setlocale(LC_ALL, "Turkish"); 20 | 21 | char cumle[SIZE]; 22 | 23 | printf("Cümlenizi Giriniz: "); 24 | gets(cumle); 25 | 26 | int i = 1; 27 | int sayac = 0; 28 | 29 | printf("%c", cumle[0]); // alternatif: putchar(cumle[0]) 30 | 31 | while (cumle[i] != '\0') // '\0' simgesi NULL(bos) karakter 32 | { 33 | if ((cumle[i] == 32) && (cumle[i + 1] != 32)) 34 | { 35 | putchar(cumle[i + 1]); // alternatif: printf("%c", cumle[i + 1]); 36 | } 37 | 38 | i++; 39 | } 40 | 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /05/04.c: -------------------------------------------------------------------------------- 1 | /* Büyük/Küçük Harf Değiştirme (1) 2 | 3 | Büyük Harfleri Küçük, Küçük Harfleri Büyük Harf Yapan Program 4 | 5 | //String (Karakter Tutan Diziler) 6 | //While ile yazılan program 7 | 8 | Klavyeden girilen bir ifadede yer alan büyük harfleri küçük harflere, 9 | küçük harfleri büyük harflere hazır bir fonksiyon kullanmadan çeviren ve sonucu 10 | ekrana yazdıran C programını yazınız. 11 | 12 | (Örneğin İfade “BuGün hAVa güzel” ise Sonuç “bUgÜN HavA GÜZEL” olmalıdır). 13 | 14 | >ASCII KOD< 15 | 65 = A 16 | 90 = Z 17 | 97 = a 18 | 122 = z 19 | 20 | */ 21 | 22 | #include 23 | #include 24 | 25 | 26 | int main() 27 | { 28 | setlocale(LC_ALL, "Turkish"); 29 | 30 | char ifade[256]; 31 | 32 | printf("Cümleyi Giriniz: "); 33 | gets(ifade); 34 | 35 | int i = 0; 36 | 37 | int fark = 'a' - 'A'; 38 | 39 | while (ifade[i] != '\0') // '\0' simgesi NULL(bos) karakter 40 | { 41 | if (ifade[i] >= 'A' && ifade[i] <= 'Z') 42 | { 43 | ifade[i] += fark; 44 | } 45 | else if (ifade[i] >= 'a' && ifade[i] <= 'z') 46 | { 47 | ifade[i] -= fark; 48 | 49 | } 50 | 51 | printf("%c", ifade[i]); //alternatif: putchar(ifade[i]) 52 | 53 | i++; 54 | } 55 | 56 | return 0; 57 | } 58 | -------------------------------------------------------------------------------- /05/05.c: -------------------------------------------------------------------------------- 1 | /* Büyük/Küçük Harf Değiştirme (2) 2 | 3 | Büyük Harfleri Küçük, Küçük Harfleri Büyük Harf Yapan Program 4 | 5 | 6 | // String (Karakter Tutan Diziler) 7 | // For ile yazılan program 8 | 9 | Klavyeden girilen bir ifadede yer alan büyük harfleri küçük harflere, 10 | küçük harfleri büyük harflere hazır bir fonksiyon kullanmadan çeviren ve sonucu 11 | ekrana yazdıran C programını yazınız. (Örneğin İfade “BuGün hAVa güzel” ise Sonuç “bUgÜN HavA GÜZEL” olmalıdır). 12 | */ 13 | 14 | #include 15 | #include 16 | 17 | int main() 18 | { 19 | setlocale(LC_ALL, "Turkish"); 20 | char ifade[256]; 21 | printf("ifadeyi giriniz: "); 22 | gets(ifade); 23 | 24 | int i; 25 | 26 | //While ile yapmak daha doğru olur. 27 | for (i = 0; i < 256; i++) 28 | { 29 | if ((ifade[i] >= 65) && (ifade[i] <= 90)) //harf buyukse 30 | ifade[i] = ifade[i] + 32; 31 | else if ((ifade[i] >= 97) && (ifade[i] <= 122)) //harf buyukse 32 | ifade[i] = ifade[i] - 32; 33 | else if (ifade[i] == '\0') //ifade bittiyse 34 | break; 35 | } 36 | 37 | printf("\n"); 38 | 39 | puts(ifade); 40 | 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /05/06.c: -------------------------------------------------------------------------------- 1 | /* Kaç Tane Karakter Var Hesaplama 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | Klavyeden girilen bir string içerisinde kelimelerden kaç tane "e" (İstediğini Yapabilirsin) karakteri geçtigini bulan c programı 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | 12 | int main() 13 | { 14 | setlocale(LC_ALL, "Turkish"); 15 | 16 | char karakter[256]; 17 | printf("Karakteri giriniz: "); 18 | gets(karakter); 19 | 20 | int i = 0; 21 | int sayac = 0; 22 | 23 | while (karakter[i] != '\0') 24 | { 25 | if (karakter[i] == 'e') //İstediğin karakteri yazabilirsin. 26 | sayac++; 27 | i++; 28 | } 29 | printf("\n%s ifadesinde %d tane karakter var", karakter, sayac); 30 | 31 | return 0; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /05/07.c: -------------------------------------------------------------------------------- 1 | /*Metnin Karakter Uzunluğunu Bulma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | Klavyeden girilen metnin karakter uzunluğu bulan C programı (Boşluklarda sayılır) 6 | */ 7 | 8 | #include 9 | #include 10 | 11 | void main() //Void yazıldığında fonksiyon geriye bir deger gondermez. 12 | //int main() yazmak istiyorsan sonuna return eklemen gerekir. 13 | { 14 | 15 | setlocale(LC_ALL, "Turkish"); 16 | 17 | char metin[256]; 18 | int sayac = 0; 19 | printf("Metni Giriniz: "); 20 | gets(metin); 21 | 22 | while (metin[sayac] != '\0') 23 | sayac++; 24 | printf("Girilen metin %d karakterden oluşur.", sayac); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /05/08.c: -------------------------------------------------------------------------------- 1 | /* Metnin Kelime Sayısını Bulan Program 2 | 3 | //String (Karakter Tutan Diziler) 4 | //While ile 5 | 6 | Klavyeden girilen metnin kelime sayısını bulan C programı 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | int main() 13 | { 14 | setlocale(LC_ALL, "Turkish"); 15 | 16 | char ifade[256]; 17 | printf("ifadeyi giriniz: "); 18 | gets(ifade); 19 | 20 | int i = 0; 21 | int sayac = 0; 22 | 23 | while (ifade[i] == 32) 24 | i++; 25 | 26 | while (1) 27 | { 28 | if ((ifade[i] == 32) && (ifade[i - 1] != 32)) 29 | sayac++; 30 | else if ((ifade[i] == '\0') && (ifade[i - 1] != 32)) 31 | { 32 | 33 | sayac++; 34 | break; 35 | } 36 | i++; 37 | } 38 | 39 | printf("%s ifadesinde %d tane kelime var.\n", ifade, sayac); 40 | 41 | 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /05/09.c: -------------------------------------------------------------------------------- 1 | /* Metin İçerisinde Karakter Değiştirme 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | Klavyeden girilen bir cümle içerisinde yer alan tüm ‘a’ karakterlerini ‘A’ ile değiştiren 6 | ve değiştirilmiş metin ile kaç karakter değiştirildiğini ekrana yazdıran programı C dili ile kodlayınız. */ 7 | 8 | #include 9 | #include 10 | 11 | int main() 12 | { 13 | setlocale(LC_ALL, "Turkish"); 14 | 15 | char cumle[256]; 16 | printf("Bir Cümle Giriniz: "); 17 | gets(cumle); 18 | 19 | int i = 0; 20 | int sayac = 0; 21 | 22 | while (cumle[i] != '\0') 23 | { 24 | if (cumle[i] == 'a') // if(cumle[i]==97) 25 | { 26 | cumle[i] = 'A'; //cumle[i] = 65; 27 | sayac++; 28 | } 29 | i++; 30 | 31 | } 32 | printf("\nDeğiştirilen Cümle = %s\t %d tane a A'ye cevrildi\n", cumle, sayac); 33 | 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /05/10.c: -------------------------------------------------------------------------------- 1 | /* Büyük/Küçük Harf Sayısını Bulma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | 6 | Klavyeden girilen metin içerisindeki küçük ve büyük harf sayısını bulan C programı 7 | 8 | 9 | */ 10 | 11 | #include 12 | #include 13 | 14 | void main() 15 | { 16 | setlocale(LC_ALL, "Turkish"); 17 | 18 | char metin[100]; 19 | 20 | int sayac = 0, kucuk_harf = 0, buyuk_harf= 0; 21 | 22 | printf("Metin giriniz: "); 23 | gets(metin); 24 | 25 | while (metin[sayac] != '\0') 26 | { 27 | char karakter = metin[sayac]; 28 | 29 | if (karakter >= 'a' && karakter <= 'z') 30 | 31 | kucuk_harf++; 32 | 33 | else if (karakter >= 'A' && karakter <= 'Z') 34 | 35 | buyuk_harf++; 36 | 37 | sayac++; 38 | } 39 | 40 | printf("\nMetnin içerisinde %d küçük ve %d büyük harf bulunuyor.\n", kucuk_harf, buyuk_harf); 41 | 42 | } 43 | -------------------------------------------------------------------------------- /05/11.c: -------------------------------------------------------------------------------- 1 | /* Kelimenin İlk Harfini Büyük Yapma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | 6 | Klavyeden girilen metnin içerisindeki kelimelerin sadece ilk harfini büyük yazan C programı 7 | 8 | Örnek= merhaba dünya -> Merhaba Dünya 9 | */ 10 | 11 | #include 12 | #include 13 | 14 | int main() 15 | { 16 | setlocale(LC_ALL, "Turkish"); 17 | 18 | char metin[256]; 19 | 20 | int i=0; 21 | 22 | int durum=1; 23 | 24 | printf("Metin Giriniz:"); 25 | gets(metin); 26 | 27 | while (metin[i] != 0) 28 | { 29 | if (durum) 30 | { 31 | if (metin[i] >= 'a' && metin[i] <= 'z') 32 | 33 | metin[i] -= 32; 34 | durum = 0; 35 | } 36 | 37 | else 38 | { 39 | if (metin[i] >= 'A' && metin[i] <= 'Z') 40 | 41 | metin[i] += 32; 42 | } 43 | 44 | if (metin[i] == ' ' || metin[i] == '.') 45 | 46 | durum = 1; 47 | 48 | i++; 49 | } 50 | 51 | printf("%s", metin); 52 | 53 | return 0; 54 | 55 | } 56 | -------------------------------------------------------------------------------- /05/12.c: -------------------------------------------------------------------------------- 1 | /* Harf/Rakam/Özel Karakter Sayılarını Bulma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | Klavyeden girilen metin içerisinde harf, rakam ve özel karakterlerin sayısını bulan C Programı 6 | 7 | >ASCII KOD< 8 | 48 = 0 9 | 57 = 9 10 | 65 = A 11 | 90 = Z 12 | 97 = a 13 | 122 = z 14 | 15 | */ 16 | 17 | #include 18 | #include 19 | #define SIZE 256 20 | 21 | int main() 22 | { 23 | setlocale(LC_ALL, "Turkish"); 24 | 25 | char metin[SIZE]; 26 | 27 | int i = 0; 28 | 29 | int harf = 0, rakam = 0, ozel = 0; 30 | 31 | printf("Metin giriniz: "); 32 | gets(metin); 33 | 34 | while (metin[i] != 0) 35 | { 36 | char karakter = metin[i]; 37 | 38 | if ((karakter >= 'a' && karakter <= 'z') || (karakter >= 'A' && karakter <= 'Z')) 39 | harf++; 40 | 41 | else if (karakter >= '0' && karakter <= '9') 42 | rakam++; 43 | 44 | else 45 | ozel++; 46 | 47 | i++; 48 | } 49 | 50 | printf("\nHarf Sayısı= %d \nRakamların Sayısı= %d \nÖzel Karakterlerin Sayısı= %d\n", harf, rakam, ozel); 51 | 52 | return 0; 53 | } 54 | -------------------------------------------------------------------------------- /05/13.c: -------------------------------------------------------------------------------- 1 | /* Metin de Aranan Kelimenin Olup Olmadığına Bakma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | */ 6 | 7 | #include 8 | #include 9 | 10 | int main() 11 | { 12 | setlocale(LC_ALL, "Turkish"); 13 | 14 | char metin[256]; 15 | 16 | char arama[256]; 17 | 18 | int sayac_1 = 0, sayac_2 = 0; 19 | 20 | int durum = 0; 21 | 22 | printf("Metin Giriniz: "); 23 | gets(metin); //alternatif: scanf("%s", metin); 24 | 25 | printf("\nMetinde Aranması Gereken Kelime: "); 26 | gets(arama); 27 | 28 | while (metin[sayac_1] != 0) 29 | { 30 | sayac_2 = 0; 31 | 32 | if (metin[sayac_1] == arama[sayac_2]) 33 | { 34 | while (metin[sayac_1 + sayac_2] == arama[sayac_2]) 35 | sayac_2++; 36 | 37 | if (arama[sayac_2] == '\0') 38 | durum = 1; 39 | } 40 | 41 | if (durum == 1) 42 | break; 43 | 44 | sayac_1++; 45 | } 46 | 47 | if (durum) 48 | 49 | printf("\nAranan kelime, metin içerisinde bulunuyor.\n"); 50 | else 51 | 52 | printf("\nAranan kelime, metin içerisinde bulunmuyor.\n"); 53 | 54 | return 0; 55 | } 56 | -------------------------------------------------------------------------------- /05/14.c: -------------------------------------------------------------------------------- 1 | /* Metnin Her Kelimesinin Harf Sayısını Bulma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | */ 6 | 7 | #include 8 | #include 9 | #define SIZE 256 10 | 11 | 12 | 13 | int uzunlukbulma(char metin[]) 14 | { 15 | int i = 0; 16 | 17 | while(metin[i] != '\0') //Null görene kadar dönmeye devam eder. 18 | { 19 | i++; 20 | } 21 | return i; 22 | 23 | } 24 | 25 | 26 | int main() 27 | { 28 | setlocale(LC_ALL, "Turkish"); 29 | 30 | 31 | char metin[SIZE]; 32 | char ifade[SIZE] = { 0 }; 33 | 34 | int i, sayac = 0; 35 | 36 | printf("Metin giriniz: "); 37 | gets(metin); // alternatif: scanf("%s", metin); 38 | 39 | int uzunluk = uzunlukbulma(metin); 40 | 41 | 42 | for (i = 0; i < uzunluk; i++) 43 | { 44 | if (metin[i] == ' ') 45 | { 46 | sayac++; 47 | } 48 | 49 | else 50 | { 51 | ifade[sayac]++; 52 | } 53 | } 54 | 55 | for (i = 0; i <= sayac; i++) 56 | { 57 | printf("\n%d. Kelime: %d harf var.\n", i+1, ifade[i]); 58 | } 59 | 60 | return 0; 61 | } 62 | -------------------------------------------------------------------------------- /05/15.c: -------------------------------------------------------------------------------- 1 | /* Büyük Ünlü Uyumu 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | */ 6 | 7 | #include 8 | #include 9 | 10 | 11 | 12 | int uzunlukbulma(char metin[]) 13 | { 14 | int i = 0; 15 | 16 | while (metin[i] != '\0') //Null görene kadar dönmeye devam eder. 17 | { 18 | i++; 19 | } 20 | return i; 21 | 22 | } 23 | 24 | int main() 25 | { 26 | setlocale(LC_ALL, "Turkish"); 27 | 28 | char metin[100]; 29 | 30 | int kalin = 0, ince = 0; 31 | 32 | printf("Metin Giriniz: "); 33 | gets(metin); 34 | 35 | int uzunluk = uzunlukbulma(metin); 36 | 37 | for (int i = 0; i < uzunluk; i++) 38 | { 39 | 40 | if (metin[i] == 'a' || metin[i] == 'ı' || metin[i] == 'o' || metin[i] == 'u') 41 | kalin++; 42 | 43 | if (metin[i] == 'e' || metin[i] == 'i' || metin[i] == 'ö' || metin[i] == 'ü') 44 | ince++; 45 | 46 | } 47 | 48 | if (kalin != 0 && ince != 0) 49 | printf("\nBüyük Ünlü Uyumuna Uymaz\n"); 50 | 51 | else 52 | printf("\nBüyük Ünlü Uyumuna Uyar\n"); 53 | 54 | return 0; 55 | 56 | } 57 | -------------------------------------------------------------------------------- /05/16.c: -------------------------------------------------------------------------------- 1 | /* Her Harfin Tekrar Sayısını Bulma (2) 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | //Fonksiyon ile yazımı 6 | 7 | //While ile 8 | 9 | Klavyeden girilen bir metnin içerisinde her harfin tekrar sayısını bularak ekrana yazdıran C kodu 10 | 11 | ASCII Değerleri A=65,a=97,enter=13 12 | */ 13 | 14 | #include 15 | #include 16 | #define SIZE 150 17 | 18 | 19 | void fonksiyon(char x[], int sayac[]) 20 | { 21 | int i = 0; 22 | 23 | while (x[i] != '\0') 24 | { 25 | if (x[i] >= 'a' && x[i] <= 'z') 26 | 27 | sayac[x[i] - 'a']++; 28 | 29 | else if (x[i] >= 'A' && x[i] <= 'Z') 30 | 31 | sayac[x[i] - 'A']++; 32 | 33 | i++; 34 | } 35 | } 36 | 37 | int main() 38 | { 39 | setlocale(LC_ALL, "Turkish"); 40 | 41 | char metin[256]; 42 | int i; 43 | int sayac[SIZE] = { 0 }; 44 | 45 | printf("Metin Giriniz: "); 46 | gets(metin); 47 | 48 | fonksiyon(metin, sayac); 49 | 50 | for (i = 0; i < SIZE; i++) 51 | { 52 | if (sayac[i] != 0) 53 | printf("%d tane %c harfi vardir.\n", sayac[i], i + 65); 54 | } 55 | 56 | getch(); 57 | 58 | return 0; 59 | } 60 | -------------------------------------------------------------------------------- /05/17.c: -------------------------------------------------------------------------------- 1 | /* Her Satırda Bir Harf Ekleyerek Kelimeyi Yazma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | //While ile 6 | 7 | Klavyeden girilen bir kelimenin harflerini her bir satıda bir harf ekleyerek ekrana yazdıran C Kodu 8 | 9 | ÖRNEK: 10 | 11 | Kelimeyi Giriniz: Hello 12 | 13 | H 14 | He 15 | Hel 16 | Hell 17 | Hello 18 | 19 | */ 20 | 21 | #include 22 | #include 23 | #define SIZE 150 24 | 25 | int main() 26 | { 27 | setlocale(LC_ALL, "Turkish"); 28 | 29 | char kelime[SIZE]; 30 | 31 | int i = 0, j; 32 | 33 | printf("Kelimeyi Giriniz: "); 34 | gets(kelime); 35 | 36 | while (kelime[i] != NULL) 37 | { 38 | for(j = 0; j <= i; j++) 39 | { 40 | putchar(kelime[j]); 41 | } 42 | 43 | printf("\n"); 44 | 45 | i++; 46 | } 47 | 48 | getch(); 49 | } 50 | -------------------------------------------------------------------------------- /05/18.c: -------------------------------------------------------------------------------- 1 | /* Örüntü Bulma 2 | 3 | //String (Karakter Tutan Diziler) 4 | 5 | Klavyeden girilen bir karakter dizisinde kaç tane “ak” örüntüsünün olduğunu bulma 6 | 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | 13 | 14 | int uzunlukbulma(char metin[]) 15 | { 16 | int i = 0; 17 | 18 | while (metin[i] != '\0') //Null görene kadar dönmeye devam eder. 19 | { 20 | i++; 21 | } 22 | return i; 23 | 24 | } 25 | 26 | int main() 27 | { 28 | setlocale(LC_ALL, "Turkish"); 29 | 30 | char metin[100]; 31 | 32 | int sayac = 0,i; 33 | 34 | printf("Metin Giriniz: "); 35 | gets(metin); 36 | 37 | int uzunluk = uzunlukbulma(metin); 38 | 39 | for (i = 0; i < uzunluk; i++) 40 | { 41 | if (metin[i] == 'a' && metin[i + 1] == 'k') 42 | { 43 | sayac++; 44 | } 45 | } 46 | 47 | printf("\n%d tane 'ak' vardır.\n", sayac); 48 | 49 | return 0; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /05/README.md: -------------------------------------------------------------------------------- 1 | #### 05 - String (Karakter Dizileri) 2 | 3 | | \.c | Başlıklar | 4 | | ----- | ----------------------------------------------- | 5 | | 01\.c | Her Harfin Tekrar Sayısını Bulma \(1\) | 6 | | 02\.c | Metni Tersten Yazdırma Programı | 7 | | 03\.c | Kelimelerin Baş Harflerini Yazdırma | 8 | | 04\.c | Büyük/Küçük Harf Değiştirme \(1\) | 9 | | 05\.c | Büyük/Küçük Harf Değiştirme \(2\) | 10 | | 06\.c | Kaç Tane Karakter Var Hesaplama | 11 | | 07\.c | Metnin Karakter Uzunluğunu Bulma | 12 | | 08\.c | Metnin Kelime Sayısını Bulan Program | 13 | | 09\.c | Metin İçerisinde Karakter Değiştirme | 14 | | 10\.c | Büyük/Küçük Harf Sayısını Bulma | 15 | | 11\.c | Kelimenin İlk Harfini Büyük Yapma | 16 | | 12\.c | Harf/Rakam/Özel Karakter Sayılarını Bulma | 17 | | 13\.c | Metin de Aranan Kelimenin Olup Olmadığına Bakma | 18 | | 14\.c | Metnin Her Kelimesinin Harf Sayısını Bulma | 19 | | 15\.c | Büyük Ünlü Uyumu | 20 | | 16\.c | Her Harfin Tekrar Sayısını Bulma \(2\) | 21 | | 17\.c | Her Satırda Bir Harf Ekleyerek Kelimeyi Yazma | 22 | | 18\.c | Örüntü Bulma | 23 | -------------------------------------------------------------------------------- /06/01.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Faktöriyel Hesaplama 4 | // Özyinelemeli Fonksiyon (Recursive Function) 5 | 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | 12 | 13 | int faktoriyel(int sayi) 14 | { 15 | if (sayi >= 1) 16 | { 17 | 18 | return sayi * faktoriyel(sayi - 1); 19 | 20 | /* 21 | ÖRNEK= 5! 22 | 23 | 5 * faktoriyel(5) 24 | 4 * faktoriyel(3) 25 | 3*faktoriyel(2) 26 | 2 * faktoriyel(1) 27 | 1 *faktoriyel(0) 28 | 1 29 | */ 30 | } 31 | 32 | else 33 | return 1; 34 | } 35 | 36 | 37 | 38 | 39 | 40 | int main() 41 | { 42 | setlocale(LC_ALL, "Turkish"); 43 | 44 | int sayi; 45 | 46 | 47 | printf("Bir tam sayı giriniz: "); 48 | scanf("%d", &sayi); 49 | 50 | printf("%d!= %d\n", sayi, faktoriyel(sayi)); 51 | 52 | 53 | return 0; 54 | 55 | /* 56 | while (1) //Sonsuz Döngü de olsun. Program bitmesin. 57 | { 58 | printf("Bir tam sayı giriniz: "); 59 | scanf("%d", &sayi); 60 | printf("%d!= %d\n", sayi, faktoriyel(sayi)); 61 | } 62 | return 0; 63 | */ 64 | 65 | 66 | } 67 | -------------------------------------------------------------------------------- /06/02.c: -------------------------------------------------------------------------------- 1 | /* 2 | İki Sayının EBOB ve EKOK'unu Bulan Program 3 | 4 | 5 | En Büyük Ortak Bölenini (Ebob) Bulma 6 | (Her ikisini de tam bölen tam sayıların en büyüğüdür) 7 | C program to find GCD (HCF) of two numbers using recursion 8 | 9 | 10 | En Küçük Ortak Kat (EKOK)Bulma 11 | C program to find LCM of two numbers using recursion 12 | 13 | 14 | // Özyinelemeli Fonksiyon (Recursive Function) 15 | */ 16 | 17 | 18 | #include 19 | #include 20 | 21 | 22 | int ebob(int sayi1, int sayi2) 23 | { 24 | if (sayi2 != 0) 25 | { 26 | return ebob(sayi2, sayi1 % sayi2); 27 | } 28 | 29 | else 30 | { 31 | return sayi1; 32 | } 33 | 34 | } 35 | 36 | int ekok(int sayi1, int sayi2) 37 | { 38 | 39 | return (sayi1 * sayi2) / ebob(sayi1, sayi2); 40 | 41 | } 42 | 43 | 44 | 45 | int main() 46 | { 47 | setlocale(LC_ALL, "Turkish"); 48 | 49 | int sayi1, sayi2; 50 | int EBOB, EKOK; 51 | 52 | 53 | printf("İki Sayı Giriniz: \n"); 54 | scanf("%d %d", &sayi1, &sayi2); 55 | 56 | if (sayi1 > sayi2) 57 | { 58 | EBOB = ebob(sayi1, sayi2); 59 | EKOK = ekok(sayi1, sayi2); 60 | } 61 | else 62 | 63 | EBOB = ebob(sayi2, sayi1); 64 | EKOK = ekok(sayi2, sayi1); 65 | 66 | 67 | printf("EBOB(%d,%d)= %d", sayi1, sayi2, EBOB); 68 | printf("\nEKOK(%d,%d)= %d", sayi1, sayi2, EKOK); 69 | 70 | 71 | return 0; 72 | 73 | } 74 | -------------------------------------------------------------------------------- /06/03.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Tam Sayının Üssünü Almak 4 | 5 | C program to find power of a number using recursion 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | 9 | */ 10 | 11 | 12 | #include 13 | #include 14 | 15 | 16 | int fonk(int sayi1, int sayi2) 17 | { 18 | if (sayi2 != 0) 19 | { 20 | return sayi1 * fonk(sayi1, sayi2 - 1); 21 | 22 | 23 | /* 24 | ÖRNEK= 2^3 25 | 26 | 2*fonk(2,2) 27 | 2*fonk(2,1) 28 | 2*fonk(2,0) 29 | 1 30 | 31 | */ 32 | 33 | } 34 | 35 | else 36 | 37 | return 1; 38 | 39 | 40 | } 41 | 42 | 43 | 44 | int main() 45 | { 46 | setlocale(LC_ALL, "Turkish"); 47 | 48 | int sayi1, sayi2; 49 | 50 | printf("Lütfen bir tam sayı giriniz: "); 51 | scanf("%d", &sayi1); 52 | 53 | printf("Lütfen üssünü giriniz: "); 54 | scanf("%d", &sayi2); 55 | 56 | int sonuc = fonk(sayi1, sayi2); 57 | 58 | printf("%d ^ %d = %d", sayi1, sayi2, sonuc); 59 | 60 | 61 | return 0; 62 | 63 | } 64 | -------------------------------------------------------------------------------- /06/04-1.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | İki Sayı Arasındaki Tam Sayıları Yazdırma 4 | 5 | Program to print integers in a given range using recursion 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | 9 | */ 10 | 11 | 12 | #include 13 | #include 14 | 15 | 16 | int fonk(int sayi1,int sayi2) 17 | { 18 | 19 | if (sayi2 >= sayi1) 20 | { 21 | printf("%d ", sayi1); 22 | 23 | fonk(sayi1 + 1, sayi2); 24 | } 25 | 26 | else 27 | return 0; 28 | 29 | 30 | } 31 | 32 | 33 | int main() 34 | { 35 | setlocale(LC_ALL, "Turkish"); 36 | 37 | int sayi1, sayi2; 38 | 39 | printf("Lütfen bir tam sayı giriniz (AltSınır): "); 40 | scanf("%d", &sayi1); 41 | 42 | printf("\nLütfen bir tam sayı giriniz (Üst Sınır): "); 43 | scanf("%d", &sayi2); 44 | 45 | printf("\n%d ve %d arasındaki tam sayılar: \n", sayi1, sayi2); 46 | 47 | printf("\n"); 48 | 49 | fonk(sayi1, sayi2); 50 | 51 | return 0; 52 | 53 | } 54 | -------------------------------------------------------------------------------- /06/04-2.c: -------------------------------------------------------------------------------- 1 | /* 2 | İki Sayı Arasındaki Tam Sayıları Toplama 3 | 4 | 5 | C program to find sum of natural numbers in a given range using recursion 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | */ 9 | 10 | 11 | #include 12 | #include 13 | 14 | 15 | int topla(int sayi1, int sayi2) 16 | { 17 | 18 | if (sayi1 == sayi2) 19 | { 20 | return sayi1; 21 | } 22 | 23 | else 24 | return sayi1 + topla(sayi1 + 1, sayi2); 25 | 26 | 27 | } 28 | 29 | 30 | int main() 31 | { 32 | setlocale(LC_ALL, "Turkish"); 33 | 34 | int sayi1, sayi2; 35 | 36 | printf("Lütfen bir tam sayı giriniz (AltSınır): "); 37 | scanf("%d", &sayi1); 38 | 39 | printf("\nLütfen bir tam sayı giriniz (Üst Sınır): "); 40 | scanf("%d", &sayi2); 41 | 42 | printf("\n%d ve %d arasındaki tam sayıların toplamı: %d", sayi1, sayi2, topla(sayi1, sayi2)); 43 | 44 | return 0; 45 | 46 | } 47 | -------------------------------------------------------------------------------- /06/05.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | İki Sayı Arasındaki Çift ve Tek Sayıları Yazdırma 4 | 5 | Verilen aralıkta çift ve tek sayıların yazdırılması için C programı 6 | C program to print even and odd numbers in given range using recursion 7 | 8 | // Özyinelemeli Fonksiyon (Recursive Function) 9 | 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | 17 | int fonk(int sayi1,int sayi2) 18 | { 19 | 20 | 21 | if (sayi2 >= sayi1) 22 | { 23 | if (sayi1 % 2 != 0) 24 | { 25 | 26 | printf("Tek : %d\n", sayi1); 27 | return fonk(sayi1 + 1, sayi2); 28 | 29 | 30 | 31 | } 32 | 33 | else if (sayi1 % 2 == 0) 34 | { 35 | 36 | printf("Çift: %d\n", sayi1); 37 | return fonk(sayi1 + 1, sayi2); 38 | 39 | } 40 | } 41 | 42 | else 43 | return 0; 44 | 45 | } 46 | 47 | 48 | 49 | int main() 50 | { 51 | setlocale(LC_ALL, "Turkish"); 52 | 53 | int sayi1, sayi2; 54 | 55 | printf("Lütfen bir tam sayı giriniz (AltSınır): "); 56 | scanf("%d", &sayi1); 57 | 58 | printf("\nLütfen bir tam sayı giriniz (Üst Sınır): "); 59 | scanf("%d", &sayi2); 60 | 61 | fonk(sayi1 + 1, sayi2); 62 | 63 | return 0; 64 | 65 | } 66 | -------------------------------------------------------------------------------- /06/06.c: -------------------------------------------------------------------------------- 1 | /* 2 | Sayının Tersini Yazma 3 | 4 | Girilen Sayı Değerinini tersten yazan program 5 | C program to find reverse of a number using recursion 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | 9 | */ 10 | 11 | 12 | #include 13 | #include 14 | 15 | 16 | int ters = 0; 17 | int basamak; 18 | 19 | 20 | 21 | int tersinialma(int sayi) 22 | { 23 | 24 | if (sayi) 25 | { 26 | basamak = sayi % 10; 27 | ters = ters * 10 + basamak; 28 | tersinialma(sayi /10); 29 | } 30 | 31 | else 32 | return ters; 33 | 34 | } 35 | 36 | 37 | int main() 38 | { 39 | setlocale(LC_ALL, "Turkish"); 40 | 41 | int sayi; 42 | 43 | 44 | printf("Lütfen bir tam sayı giriniz: "); 45 | scanf("%d", &sayi); 46 | 47 | 48 | printf("\nSayının Tersi: %d", tersinialma(sayi)); 49 | 50 | return 0; 51 | 52 | } 53 | -------------------------------------------------------------------------------- /06/07.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Metni Tersten Yazdırma Programı 4 | 5 | 6 | // Özyinelemeli Fonksiyon (Recursive Function) 7 | 8 | */ 9 | 10 | 11 | #include 12 | #include 13 | 14 | 15 | 16 | int ters() 17 | 18 | { 19 | char metin; 20 | scanf("%c", &metin); 21 | 22 | if (metin != '\n') 23 | { 24 | 25 | 26 | ters(); 27 | 28 | printf("%c", metin); 29 | 30 | } 31 | } 32 | 33 | 34 | int main() 35 | { 36 | setlocale(LC_ALL, "Turkish"); 37 | 38 | 39 | printf("Lütfen Metninizi Giriniz: \n"); 40 | 41 | ters(); 42 | 43 | 44 | return 0; 45 | 46 | } 47 | 48 | /* 49 | int ters() fonksiyonu kullanıcı tarafından girilen ilk harfi metin değişkeninde saklar. 50 | 51 | Değişken '\ n' dışında bir karakterse, ters () işlevi yeniden çağrılır. 52 | 53 | ters () ikinci kez çağrıldığında, kullanıcı tarafından girilen ikinci harf tekrar metin 'e kaydedilir. 54 | Ancak, ikinci fonksiyondaki metin değişkeni birincisiyle aynı değildir. Her ikisi de bellekte farklı yer tutarlar. 55 | 56 | 57 | '\ n' girdiğinde, en son işlevi ters () işlevi en son karakteri basar printf("%c", metin) nedeniyle 58 | ve ikinci ters () işlevine geri döner. 59 | 60 | 61 | Yine, ikinci son ters () işlevi, ikinci son karakteri basar ve 62 | üçüncü son ters () işlevine geri döner. 63 | 64 | Bu süreç devam ediyor ve son çıktı ters metin olacak. 65 | 66 | KAYNAK: https://www.programiz.com/c-programming/examples/reverse-sentence-recursion 67 | 68 | */ 69 | -------------------------------------------------------------------------------- /06/08-1.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Girilen Sayının Palindromik Olup Olmadığını Bulmak 4 | (Palindrom, tersten okunuşu da aynı olan cümle, sözcük ve sayılara denilmektedir.) 5 | 6 | C program to check palindrome number using recursion 7 | 8 | // Özyinelemeli Fonksiyon (Recursive Function) 9 | 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | int palindrome(int sayi); 17 | int tersinialma(int sayi); 18 | 19 | int ters = 0; 20 | int basamak; 21 | 22 | 23 | int main() 24 | { 25 | setlocale(LC_ALL, "Turkish"); 26 | 27 | int sayi; 28 | 29 | 30 | printf("Lütfen bir tam sayı giriniz: "); 31 | scanf("%d", &sayi); 32 | 33 | 34 | if (palindrome(sayi) == 1) 35 | { 36 | printf("%d sayısı palindromik bir sayıdır.\n", sayi); 37 | } 38 | else 39 | { 40 | printf("%d sayısı palindromik bir sayı değildir.\n", sayi); 41 | } 42 | 43 | return 0; 44 | 45 | 46 | } 47 | 48 | 49 | int palindrome(int sayi) 50 | { 51 | if (sayi == tersinialma(sayi)) 52 | { 53 | return 1; 54 | } 55 | 56 | return 0; 57 | 58 | } 59 | 60 | 61 | int tersinialma(int sayi) 62 | { 63 | 64 | if (sayi) 65 | { 66 | basamak = sayi % 10; 67 | ters = ters * 10 + basamak; 68 | tersinialma(sayi / 10); 69 | } 70 | 71 | else 72 | return ters; 73 | 74 | } 75 | -------------------------------------------------------------------------------- /06/08-2.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Girilen Metnin(String) Palindromik Olup Olmadığını Bulmak 4 | 5 | (Palindrom, tersten okunuşu da aynı olan cümle, sözcük ve sayılara denilmektedir.) 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | */ 9 | 10 | #include 11 | #include 12 | #define SIZE 100 13 | 14 | 15 | 16 | int uzunlukbulma(char metin[]) 17 | { 18 | 19 | int i = 0; // karakter sayısını alacak 20 | 21 | 22 | while (1) // Sonsuz Döngü 23 | { 24 | if (metin[i] == '\0') // '\0' simgesi NULL(bos) karakter 25 | { 26 | break; //NULL gelince sonsuz döngüden çıkıyoruz 27 | } 28 | 29 | i++; 30 | 31 | } 32 | 33 | return i; //Metnin uzunluğunu verir. 34 | 35 | 36 | /* Alternatif 37 | 38 | while(metin[i] != '\0') //Null görene kadar dönmeye devam eder. 39 | { 40 | 41 | i++; 42 | } 43 | 44 | return i; 45 | 46 | */ 47 | 48 | 49 | } 50 | 51 | 52 | 53 | int palindrome(char metin[], int uzunluk) 54 | { 55 | if (uzunluk <= 0) 56 | { 57 | return 1; //Uzunluk eğer sıfıra kadar gelebildiyse 1' döndürüyoruz. 58 | } 59 | 60 | else if (metin[0] == metin[uzunluk - 1]) 61 | { 62 | return palindrome(metin + 1, uzunluk - 2); 63 | } 64 | 65 | else 66 | { 67 | return 0; //Yukarıdaki if ler doğru olmazsa sıfır döndürüyoruz. 68 | 69 | } 70 | 71 | } 72 | 73 | 74 | 75 | int main() 76 | { 77 | setlocale(LC_ALL, "Turkish"); 78 | 79 | 80 | char metin[SIZE]; 81 | 82 | printf("Metin giriniz: "); 83 | gets(metin); // alternatif: scanf("%s", metin); 84 | 85 | 86 | int uzunluk = uzunlukbulma(metin); 87 | 88 | /* 89 | Tersini Yazdırma 90 | 91 | int sayac = 0; 92 | 93 | 94 | printf("\nMetnin Tersi: "); 95 | 96 | for (sayac = uzunluk - 1; sayac >= 0; sayac--) 97 | 98 | putchar(metin[sayac]); // printf("%c", metin[sayac]) //Belirtilen karakteri ekrana yazar. 99 | 100 | */ 101 | 102 | 103 | int sonuc = palindrome(metin, uzunluk); 104 | 105 | if (sonuc == 1) //Eğer sonuç 1 ise palindromdur. 106 | { 107 | printf("\n '%s' ifadesi palindromdur\n", metin); 108 | } 109 | 110 | else if (sonuc == 0) //Eğer sonuç 2 ise palindrom değildir. 111 | { 112 | printf("\n '%s' ifadesi polindrom değildir.\n", metin); 113 | } 114 | 115 | 116 | } 117 | 118 | /* 119 | 120 | Örnek:KAZAK kelimesi 121 | 122 | metin[0]: K 123 | metin[1]: A 124 | metin[2]: Z 125 | metin[3]: A 126 | metin[4]: K 127 | 128 | 129 | **** uzunlukbulma(char metin[]) fonksiyonu; Bu kelimenin uzunluğunu bulacak. 130 | strlen() fonksiyonun işlevini yapar. 131 | (strlen fonksiyonu başlangıç adresini aldığı yazının uzunluğu ile geri döner.) 132 | 133 | 134 | **** palindrome(char metin[], int uzunluk) fonksiyonu; 135 | 136 | if (5 <= 0) 'YANLIŞ' 137 | { 138 | return 1; 139 | } 140 | 141 | else if (metin[0] == metin[4]) ( (metin[0]: KK)== (metin[4]: K) ) 'DOĞRU' 142 | { 143 | return palindrome(metin + 1, 5 - 2); başa geri dönüyor 144 | } 145 | 146 | if (3 <= 0) 'YANLIŞ' 147 | { 148 | return 1; 149 | } 150 | 151 | else if (metin[0] == metin[2]) ( (metin[1]: A) == (metin[3]: A) ) 'DOĞRU' 152 | 153 | { 154 | 155 | return palindrome(metin + 1, 3 - 2); başa geri dönüyor 156 | 157 | } 158 | 159 | if (1 <= 0) 'YANLIŞ' 160 | { 161 | return 1; 162 | } 163 | 164 | else if (metin[0] == metin[0]) ( (metin[2]: Z) == (metin[2]: Z) ) 'DOĞRU' 165 | 166 | { 167 | 168 | return palindrome(metin + 1, 1 - 2 ); başa geri dönüyor 169 | 170 | } 171 | 172 | 173 | if (-1 <= 0) 'DOĞRU' 174 | 175 | { 176 | return 1; 177 | } 178 | 179 | 180 | **** int sonuc = palindrome(metin, uzunluk); 181 | 182 | if (sonuc == 1) 'DOĞRU' 183 | { 184 | printf("\n '%s' ifadesi palindromdur\n", metin); 185 | } 186 | 187 | 188 | */ 189 | -------------------------------------------------------------------------------- /06/09.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Basamak Değerlerinin Toplamı 4 | 5 | C program to find sum of digits using recursion 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | 9 | */ 10 | 11 | 12 | #include 13 | #include 14 | 15 | 16 | 17 | 18 | int basamakdegerleritoplamı(int sayi) 19 | { 20 | if (sayi == 0) 21 | return 0; 22 | else 23 | return (sayi % 10) + basamakdegerleritoplamı(sayi / 10); 24 | 25 | /* 26 | 27 | Örnek= 125 Sayısı 28 | 29 | 5+basamakdegerleritoplamı(12) 30 | 2+basamakdegerleritoplamı(1) 31 | 1+basamakdegerleritoplamı(0) 32 | 33 | 34 | */ 35 | 36 | } 37 | 38 | 39 | int main() 40 | { 41 | setlocale(LC_ALL, "Turkish"); 42 | 43 | int sayi; 44 | 45 | 46 | printf("Lütfen bir tam sayı giriniz: "); 47 | scanf("%d", &sayi); 48 | 49 | 50 | printf("\nBasamak Değerleri Toplamı = %d\n", basamakdegerleritoplamı(sayi)); 51 | 52 | return 0; 53 | 54 | } 55 | -------------------------------------------------------------------------------- /06/10.c: -------------------------------------------------------------------------------- 1 | /* 2 | N adet Fibonacci Sayısı Yazdıran Program 3 | // Özyinelemeli Fonksiyon (Recursive Function) 4 | */ 5 | 6 | 7 | #include 8 | #include 9 | 10 | 11 | int fibonacci(int x) 12 | { 13 | if (x == 0 || x == 1) 14 | { 15 | return x; 16 | } 17 | else 18 | return fibonacci(x - 1) + fibonacci(x - 2); 19 | } 20 | 21 | 22 | int main() 23 | { 24 | setlocale(LC_ALL, "Turkish"); 25 | 26 | int sayi, i; 27 | 28 | printf("Kaç tane Fibonacci sayısı yazılsın?: "); 29 | scanf("%d", &sayi); 30 | 31 | for (i = 1; i <= sayi; i++) 32 | { 33 | printf("%d\n", fibonacci(i)); 34 | } 35 | 36 | return 0; 37 | 38 | } 39 | 40 | /* 41 | 42 | 43 | i=1 fibonacci(1) 44 | 45 | i=2 fibonacci(1)+fibonacci(0) 46 | 47 | i=3 fibonacci(2)+fibonacci(1) 48 | 49 | 50 | */ 51 | -------------------------------------------------------------------------------- /06/11-1.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dizideki Elemanlar Toplamı 3 | 4 | 5 | C program to find sum of array elements using recursion 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | */ 9 | 10 | 11 | #include 12 | #include 13 | #define MAX_SIZE 100 14 | 15 | int topla(int dizi[], int x, int y) //topla(dizi, 0, N); x=0, y=N <<< Başlangıç 16 | { 17 | if (x >= y) 18 | return 0; 19 | else 20 | return (dizi[x] + topla(dizi, x + 1, y)); 21 | } 22 | 23 | 24 | 25 | int main() 26 | { 27 | setlocale(LC_ALL, "Turkish"); 28 | 29 | int dizi[MAX_SIZE]; 30 | int i,N; 31 | int sonuc; 32 | 33 | printf("Dizinin Boyutunu Giriniz: "); 34 | scanf("%d", &N); 35 | 36 | 37 | for (i = 0; i < N; i++) 38 | { 39 | printf("%d. Elemanı Giriniz: ", i + 1); 40 | scanf("%d", &dizi[i]); 41 | 42 | } 43 | 44 | sonuc = topla(dizi, 0, N); 45 | 46 | printf("Dizideki Elemanların Toplamı: %d", sonuc); 47 | 48 | return 0; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /06/11-2.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dizideki Elemanların Ortalaması 3 | 4 | 5 | C program that finds the average of the numbers in a given array with the recursive function 6 | 7 | // Özyinelemeli Fonksiyon (Recursive Function) 8 | */ 9 | 10 | 11 | #include 12 | #include 13 | #define MAX_SIZE 100 14 | 15 | int topla(int dizi[], int x, int y) //topla(dizi, 0, N); x=0, y=N <<< Başlangıç 16 | { 17 | if (x >= y) 18 | return 0; 19 | else 20 | return (dizi[x] + topla(dizi, x + 1, y)); 21 | } 22 | 23 | 24 | 25 | int main() 26 | { 27 | setlocale(LC_ALL, "Turkish"); 28 | 29 | int dizi[MAX_SIZE]; 30 | int i, N; 31 | int sonuc; 32 | 33 | printf("Dizinin Boyutunu Giriniz: "); 34 | scanf("%d", &N); 35 | 36 | 37 | for (i = 0; i < N; i++) 38 | { 39 | printf("%d. Elemanı Giriniz: ", i + 1); 40 | scanf("%d", &dizi[i]); 41 | 42 | } 43 | 44 | sonuc = topla(dizi, 0, N); 45 | 46 | printf("Dizideki Elemanların Ortalaması: %d", sonuc/N); 47 | 48 | return 0; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /06/12.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dizinin En Büyük Elemanını Bulma 3 | 4 | // Dizi ve İşlevi 5 | 6 | 7 | C program to find maximum elements in array using recursion 8 | 9 | // Özyinelemeli Fonksiyon (Recursive Function) 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #define MAX_SIZE 100 16 | 17 | 18 | 19 | int enbuyuksayi(int dizi[], int ilk_elemani, int son_elemani) 20 | { 21 | int max; 22 | 23 | if (ilk_elemani == son_elemani) 24 | return dizi[ilk_elemani]; 25 | 26 | else 27 | { 28 | max = enbuyuksayi(dizi, ilk_elemani + 1, son_elemani); 29 | 30 | if (dizi[ilk_elemani] >= max) 31 | 32 | return dizi[ilk_elemani]; 33 | else 34 | return max; 35 | } 36 | 37 | 38 | } 39 | 40 | 41 | 42 | 43 | int main() 44 | { 45 | setlocale(LC_ALL, "Turkish"); 46 | 47 | int dizi[MAX_SIZE]; 48 | int i, N; 49 | 50 | 51 | printf("Dizinin Boyutunu Giriniz: "); 52 | scanf("%d", &N); 53 | 54 | 55 | for (i = 0; i < N; i++) 56 | { 57 | printf("%d. Elemanı Giriniz: ", i + 1); 58 | scanf("%d", &dizi[i]); 59 | 60 | } 61 | 62 | printf("Dizinin En Büyük Elemanı = %d\n", enbuyuksayi(dizi, 0, N)); 63 | 64 | 65 | return 0; 66 | 67 | } -------------------------------------------------------------------------------- /06/13.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Decimal Sayıyı Binary Sayıya Çevirme 4 | 5 | 6 | Verilen bir sayısının decimal’den binary’e dönüşümünü rekürsif fonksiyonla hesaplayan programı yazınız? 7 | Write a C program for decimal to binary conversion with the recursive function? 8 | 9 | // Özyinelemeli Fonksiyon (Recursive Function) 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | 17 | int binary(int sayi) 18 | { 19 | if (sayi == 0) 20 | { 21 | return 0; 22 | } 23 | 24 | 25 | binary(sayi / 2); 26 | printf("%d", sayi % 2); 27 | 28 | 29 | } 30 | 31 | 32 | int main() 33 | { 34 | setlocale(LC_ALL, "Turkish"); 35 | 36 | int sayi; 37 | 38 | printf("Onluk Tabanında Olan Bir Sayı Giriniz: "); 39 | scanf("%d", &sayi); 40 | 41 | binary(sayi); 42 | 43 | return 0; 44 | 45 | } 46 | 47 | /* 48 | 49 | 50 | • Onlu (Desimal, 10 Tabanlı, Decimal) Sayı Sistemi 51 | Günlük hayatta kullandığımız sayı sistemi 10 tabanına göredir. Yani bu sistemde 0-1-2-3-4-5-6-7-8-9 sayıları mevcuttur. Kullanılan bu sayı sistemine de Onlu Sayı Sistemi veya Desimal Sistem denilmektedir. 52 | 53 | • İkili (Binary, 2 Tabanlı) Sayı Sistemi 54 | İkili sayı sisteminde sadece 1 ve 0′ lar bulunur. Bu sayı sistemi 2 tabanında olduğu için İkili Sayı Sistemi veya Binary Sistem olarak isimlendirilmektedir. 55 | 56 | 57 | //Desimal sayı binary sayıya çevrilirken binary sayının tabanı olan 2'ye bölünür. 58 | Kalanlar bir kenara yazılarak tersten ikilik sayı olarak yazılır. 59 | 60 | 61 | 62 | */ 63 | 64 | 65 | 66 | 67 | /* 68 | Örnek 45 sayısı girildiğinde 69 | 70 | printf("Modu Alınacak Sayı= %d\n", sayi); 71 | 72 | 45,22,11,5,2,1 sayılarını alt alta yazıyor. 73 | 74 | 75 | binary(sayi / 2); Sayi==0 Olana kadar bulunan sayıları 2 ye bölmeye devam ediyor. 76 | 77 | printf("%d", sayi % 2); //Bulunan sayıların ayrı ayrı modları alınıp yanyana yazılınca sonuç çıkıyor. 78 | 79 | */ 80 | 81 | -------------------------------------------------------------------------------- /06/14.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Girilen Sayının Asal Sayı Olup Olmadığını Kontrol Etmek 4 | 5 | // Özyinelemeli Fonksiyon (Recursive Function) 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | 12 | 13 | int asal(int sayi, int x) 14 | { 15 | if (x == 1) 16 | { 17 | return 1; 18 | } 19 | else 20 | { 21 | if (sayi % x == 0) 22 | { 23 | return 0; 24 | } 25 | else 26 | { 27 | return asal(sayi, x - 1); 28 | } 29 | } 30 | } 31 | 32 | 33 | int main() 34 | { 35 | setlocale(LC_ALL, "Turkish"); 36 | 37 | int sayi; 38 | 39 | printf("Lütfen bir tam sayı giriniz: "); 40 | scanf("%d", &sayi); 41 | 42 | int kontrol = asal(sayi,sayi/ 2); 43 | 44 | 45 | if (kontrol == 1) 46 | { 47 | printf("\nASAL SAYIDIR"); 48 | printf("\n"); 49 | } 50 | else 51 | { 52 | printf("\nASAL SAYI DEĞİLDİR"); 53 | printf("\n"); 54 | } 55 | return 0; 56 | 57 | } -------------------------------------------------------------------------------- /06/15.c: -------------------------------------------------------------------------------- 1 | /* 2 | Pascal Üçgeni Oluşturma 3 | 4 | // Özyinelemeli Fonksiyon (Recursive Function) 5 | 6 | */ 7 | 8 | #include 9 | #include 10 | #define MAX_SIZE 50 11 | 12 | int fun(int i, int j) { 13 | 14 | if (i == j || j == 0) 15 | return 1; 16 | 17 | else 18 | return fun(i - 1, j) + fun(i - 1, j - 1); 19 | } 20 | 21 | int main() { 22 | 23 | setlocale(LC_ALL, "Turkish"); 24 | 25 | int N, i, j, A[MAX_SIZE][MAX_SIZE]; 26 | 27 | printf("Satır Sayısı İçin\n" 28 | "Lütfen Bir Değer Giriniz: "); 29 | scanf("%d", &N); 30 | 31 | printf("\n"); 32 | 33 | for (i = 0;i < N;i++) { 34 | 35 | for (j = 0;j <= i;j++) { 36 | A[i][j] = fun(i, j); 37 | } 38 | } 39 | 40 | for (i = 0;i < N;i++) { 41 | 42 | for (j = 0;j <= i;j++) { 43 | 44 | printf("%-6d", A[i][j]); 45 | 46 | } 47 | printf("\n"); 48 | } 49 | } -------------------------------------------------------------------------------- /06/Output1.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void fun(int x) 4 | { 5 | if (x > 0) 6 | { 7 | fun(--x); 8 | printf("%d\t", x); 9 | fun(--x); 10 | } 11 | } 12 | 13 | int main() 14 | { 15 | int a = 4; 16 | fun(a); 17 | getchar(); 18 | return 0; 19 | } 20 | 21 | 22 | 23 | 24 | /* 25 | 26 | P(): Yazdır 27 | 28 | fun(4) = fun(3) + P(3) + fun(2) <<< Buna Göre takip edilecek. 29 | 30 | 31 | fun(3) = fun(2) + P(2) + fun(1) 32 | fun(2) = fun(1) + P(1) + fun(0) 33 | fun(1) = fun(0) + P(0) + fun(-1) 34 | 35 | Output: 0 1 2 0 3 0 1 36 | 37 | fun(3) = 0 1 2 0 38 | fun(2) = 0 1 39 | 40 | 41 | */ 42 | -------------------------------------------------------------------------------- /06/Output2.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void fun(int n) 4 | { 5 | if (n > 0) 6 | { 7 | fun(n - 1); 8 | printf("%d ", n); 9 | fun(n - 1); 10 | } 11 | } 12 | 13 | int main() 14 | { 15 | fun(4); 16 | return 0; 17 | } 18 | 19 | /* 20 | P(): Yazdır 21 | 22 | f(4) = f(3) P(4) f(3) <<< Buna Göre takip edilecek. 23 | 24 | f(3) = f(2) P(3) f(2) 25 | f(2) = f(1) P(2) f(1) 26 | f(1) = f(0) P(1) f(0) 27 | 28 | 29 | 30 | f(3) = 1 2 1 3 1 2 1 31 | P(4) = 4 32 | 33 | 34 | 35 | Output= 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 36 | 37 | */ 38 | -------------------------------------------------------------------------------- /06/Output3.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void fun(int x) 4 | { 5 | if (x < 1) 6 | { 7 | return; 8 | } 9 | 10 | fun(x - 1); 11 | 12 | fun(x - 3); 13 | 14 | printf("%d\t", x); 15 | 16 | } 17 | 18 | int main() 19 | { 20 | int a = 4; 21 | 22 | fun(a); 23 | 24 | getchar(); 25 | 26 | return 0; 27 | } -------------------------------------------------------------------------------- /06/Output4.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 3 | 4 | 5 | void calculate(int a) { 6 | 7 | printf("%3d", a); 8 | 9 | if (a < 9) 10 | calculate(a + 1); 11 | 12 | printf("%3d", a); 13 | } 14 | 15 | 16 | void calculate_2(int a) { 17 | 18 | printf("%3d", a); 19 | 20 | if (a > 9) 21 | calculate_2(a - 1); 22 | 23 | printf("%3d", a); 24 | } 25 | 26 | 27 | main() 28 | { 29 | setlocale(LC_ALL, "Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 30 | 31 | printf("\ncalculate(1) : "); 32 | 33 | calculate(1); 34 | 35 | printf("\n\ncalculate_2(20): "); 36 | 37 | calculate_2(20); 38 | } 39 | -------------------------------------------------------------------------------- /06/Output5.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 3 | 4 | 5 | struct complex { 6 | 7 | int real; 8 | int im; 9 | 10 | }; 11 | 12 | struct complex sum(struct complex s1, struct complex s2) { 13 | 14 | struct complex result; 15 | 16 | result.real = s1.real + s2.real; 17 | result.im = s1.im + s2.im; 18 | 19 | return result; 20 | } 21 | 22 | 23 | main() 24 | { 25 | setlocale(LC_ALL, "Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 26 | 27 | struct complex a1, a2, a3; 28 | 29 | a1.real = 5; 30 | a1.im = 3; 31 | 32 | a2.real = 15; 33 | a2.im = 30; 34 | 35 | a3 = sum(a1, a2); 36 | 37 | printf("Sonuç: %d+i%d\n", a3.real, a3.im); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /06/README.md: -------------------------------------------------------------------------------- 1 | #### 06 - Recursive (Özyinelemeli Fonksiyon) 2 | 3 | | \.c | Başlıklar | 4 | | -------- | ------------------------------------------------- | 5 | | 01\.c | Faktöriyel Hesaplama | 6 | | 02\.c | İki Sayının EBOB ve EKOK'unu Bulan Program | 7 | | 03\.c | Tam Sayının Üssünü Almak | 8 | | 04\-1\.c | İki Sayı Arasındaki Tam Sayıları Yazdırma | 9 | | 04\-2\.c | İki Sayı Arasındaki Tam Sayıları Toplama | 10 | | 05\.c | İki Sayı Arasındaki Çift ve Tek Sayıları Yazdırma | 11 | | 06\.c | Sayının Tersini Yazma | 12 | | 07\.c | Metni Tersten Yazdırma Programı | 13 | | 08\-1\.c | Girilen Sayının Palindrom Olup Olmadığını Bulmak | 14 | | 08\-2\.c | Girilen Metnin Palindrom Olup Olmadığını Bulmak | 15 | | 09\.c | Basamak Değerlerinin Toplamı | 16 | | 10\.c | N adet Fibonacci Sayısı Yazdıran Program | 17 | | 11\-1\.c | Dizideki Elemanlar Toplamı | 18 | | 11\-2\.c | Dizideki Elemanların Ortalaması | 19 | | 12\.c | Dizinin En Büyük Elemanını Bulma | 20 | | 13\.c | Decimal Sayıyı Binary Sayıya Çevirme | 21 | | 14\.c | Girilen Sayının Asal Sayı Olup Olmadığını Bulmak | 22 | | 15\.c | Pascal Üçgeni Oluşturma | 23 | -------------------------------------------------------------------------------- /07/01.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dinamik olarak ayrılan bir hafıza bölgesine 1 ile 100 arasında rastgele oluşturulan 3 | 10 tane tam sayıyı yazan program 4 | 5 | //Dinamik bellek ayırma yöntemi kullanımı 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | 15 | 16 | int main() 17 | { 18 | setlocale(LC_ALL, "Turkish"); 19 | 20 | srand(time(NULL)); //Rastgele Sayı Üretimi 21 | 22 | int* p; 23 | 24 | int i; 25 | 26 | p = malloc(10 * sizeof(int)); 27 | 28 | for (i = 0; i < 10; i++) 29 | { 30 | *(p + i) = 1 + (rand() % 100); 31 | 32 | printf("%2d. Eleman= %d\n", i + 1, *(p + i)); 33 | 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /07/02.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dizideki Elemanları Tersten Yazma (Pointer) 3 | Verilen dizi içerisinde yer alan sayıları pointer kullanarak ters şekilde sıralayan programı C dilinde yazınız. 4 | */ 5 | 6 | 7 | #include 8 | #include 9 | #define SIZE 100 10 | 11 | void main () 12 | { 13 | setlocale(LC_ALL, "Turkish"); 14 | 15 | int dizi[SIZE]; 16 | int i, N; 17 | int* ptr; 18 | 19 | 20 | 21 | printf("Dizinin Boyutunu Giriniz: "); 22 | scanf("%d", &N); 23 | 24 | printf("\nDizideki %d Elemanın Değerlerini Giriniz \n",N); 25 | 26 | ptr = &dizi[0]; // ptr, dizi[0] dizisinin adresini saklar 27 | 28 | 29 | for (i = 1; i <= N; i++) 30 | { 31 | printf("\n%d. Elemanı Giriniz: ", i); 32 | 33 | scanf("%d", ptr); //değerin adresini alır. 34 | 35 | ptr++; //Adresi artırır. Adres 4 byte artar. 36 | 37 | } 38 | 39 | 40 | 41 | printf("\n--------------------------\n"); 42 | 43 | printf("\nDizideki Elemanların Tersi\n"); 44 | 45 | ptr = &dizi[N - 1]; 46 | 47 | for (i = N; i > 0; i--) 48 | { 49 | printf("\n%d. Eleman= %d \n", i, *ptr); //*ptr dizideki değerleri verir. 50 | 51 | ptr--; //Adresi azaltır. Adres 4 byte azalır. 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /07/03.c: -------------------------------------------------------------------------------- 1 | /* 2 | Diziyi Artan Şekilde Yazma 3 | 4 | //Pointer Kullanımı 5 | 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | #define SIZE 100 12 | 13 | void main() 14 | { 15 | setlocale(LC_ALL, "Turkish"); 16 | 17 | int N; 18 | 19 | int dizi[SIZE]; 20 | 21 | int i, j, k; 22 | 23 | int* ptr; 24 | 25 | 26 | printf("Dizinin Boyutunu Giriniz: "); 27 | scanf("%d", &N); 28 | 29 | printf("\nDizideki %d Elemanın Değerlerini Giriniz \n", N); 30 | 31 | ptr = &dizi[0]; // ptr, dizi[0] dizisinin adresini saklar 32 | 33 | for (i = 0; i < N; i++) 34 | { 35 | printf("\n%d. Elemanı Giriniz: ", i + 1); 36 | 37 | scanf("%d", ptr + i); 38 | 39 | /* 40 | Dizi, işaretçi değişkeni dizinin temel adresini gösteren işaretçiler yardımıyla getirilebilir. 41 | Bu nedenle, işaretçileri kullanarak diziyi sıralamak için, 42 | dizinin öğelerine (pointer + indeks) biçimini kullanarak erişmemiz gerekir. 43 | 44 | */ 45 | } 46 | 47 | for (i = 0; i < N; i++) 48 | { 49 | for (j = i + 1; j < N; j++) 50 | { 51 | if (*(ptr + i) > * (ptr + j)) 52 | { 53 | k = *(ptr + i); 54 | *(ptr + i) = *(ptr + j); 55 | *(ptr + j) = k; 56 | } 57 | 58 | } 59 | } 60 | 61 | printf("\nKüçükten Büyüğe Sıralanmış Hali\n"); 62 | 63 | 64 | for (i = 0; i < N; i++) 65 | { 66 | printf("\n%d. Eleman= %d \n", i + 1, *(ptr + i)); 67 | 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /07/04.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dizideki Metnin Tüm Permütasyonlarını Yazma 3 | 4 | //Pointer Kullanımı 5 | 6 | 7 | */ 8 | 9 | 10 | 11 | #include 12 | #include 13 | #define SIZE 100 14 | 15 | 16 | 17 | int uzunlukbulma(char metin[]) 18 | { 19 | /* 20 | 21 | strlen() fonksiyonun işlevini yapar. 22 | (strlen fonksiyonu başlangıç adresini aldığı yazının uzunluğu ile geri döner.) 23 | 24 | */ 25 | int i = 0; // karakter sayısını alacak 26 | 27 | 28 | while (1) // Sonsuz Döngü 29 | { 30 | if (metin[i] == '\0') // '\0' simgesi NULL(bos) karakter 31 | { 32 | break; //NULL gelince sonsuz döngüden çıkıyoruz 33 | } 34 | 35 | i++; 36 | 37 | } 38 | 39 | return i; //Metnin uzunluğunu verir. 40 | 41 | 42 | 43 | 44 | /* Alternatif 45 | while(metin[i] != '\0') //Null görene kadar dönmeye devam eder. 46 | { 47 | i++; 48 | } 49 | return i; 50 | */ 51 | 52 | 53 | } 54 | 55 | int yerdegistirme(char *metin1, char *metin2) 56 | { 57 | char k; 58 | 59 | k = *metin1; 60 | *metin1 = *metin2; 61 | *metin2 = k; 62 | 63 | return k; 64 | 65 | } 66 | 67 | 68 | 69 | void permutasyon(char* ptr,int x, int y) 70 | { 71 | int i; 72 | 73 | if (x == y) 74 | { 75 | printf("%s\n", ptr); 76 | } 77 | else 78 | { 79 | for (i = x; i < y; i++) 80 | { 81 | yerdegistirme((ptr + x), (ptr + i)); 82 | 83 | permutasyon(ptr, x + 1, y); 84 | 85 | yerdegistirme((ptr + x), (ptr + i)); 86 | } 87 | } 88 | 89 | 90 | } 91 | 92 | 93 | 94 | int main() 95 | { 96 | setlocale(LC_ALL, "Turkish"); 97 | 98 | 99 | char metin[SIZE]; 100 | 101 | printf("Metin giriniz: "); 102 | gets(metin); // alternatif: scanf("%s", metin); 103 | 104 | 105 | int uzunluk = uzunlukbulma(metin); 106 | 107 | 108 | permutasyon(metin, 0, uzunluk); 109 | 110 | 111 | } 112 | -------------------------------------------------------------------------------- /07/05.c: -------------------------------------------------------------------------------- 1 | /* 2 | Dizinin En Büyük Elemanını Bulma 3 | 4 | //Dinamik bellek ayırma yöntemi kullanımı 5 | 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | 14 | 15 | int main() 16 | { 17 | setlocale(LC_ALL, "Turkish"); 18 | 19 | 20 | int i, n; 21 | 22 | int* ptr; 23 | 24 | 25 | printf("Dizinin Boyutunu Giriniz: "); 26 | scanf("%d", &n); 27 | 28 | ptr = (int*)calloc(n,sizeof(int)); 29 | 30 | if (ptr == NULL) 31 | { 32 | printf("Yeterli Hafıza Alanı Yok!"); 33 | 34 | } 35 | 36 | 37 | for (i = 0; i < n; i++) 38 | { 39 | printf("%d. Elemanı Giriniz: ", i + 1); 40 | scanf("%d", ptr + i); 41 | 42 | } 43 | 44 | for (i = 0; i < n; i++) 45 | { 46 | if (*ptr < *(ptr + i)) 47 | { 48 | 49 | *ptr = *(ptr + i); 50 | 51 | } 52 | 53 | } 54 | 55 | printf("Dizinin En Büyük Elemanı = %d\n", *ptr); 56 | 57 | return 0; 58 | 59 | } 60 | -------------------------------------------------------------------------------- /07/06.c: -------------------------------------------------------------------------------- 1 | /* 2 | Metni Tersten Yazdırma 3 | 4 | //Pointer Kullanımı 5 | 6 | */ 7 | 8 | #include 9 | #include 10 | #define SIZE 20 11 | 12 | int main() 13 | { 14 | setlocale(LC_ALL, "Turkish"); 15 | 16 | 17 | char metin[SIZE]; 18 | char tersi[SIZE]; 19 | 20 | char* ptr_1 = metin; 21 | char* ptr_2 = tersi; 22 | 23 | int i = 0; 24 | 25 | printf("Metin giriniz: "); 26 | gets(metin); // alternatif: scanf("%s", metin); 27 | 28 | 29 | while (*ptr_1) 30 | { 31 | 32 | ptr_1++; 33 | i++; 34 | 35 | } 36 | 37 | while (i >= 0) 38 | { 39 | ptr_1--; 40 | *ptr_2 = *ptr_1; 41 | ptr_2++; 42 | --i; 43 | } 44 | 45 | 46 | *ptr_1 = '\0'; 47 | 48 | printf("Metnin Tersi: %s", tersi); 49 | 50 | return 0; 51 | 52 | } 53 | -------------------------------------------------------------------------------- /07/07.c: -------------------------------------------------------------------------------- 1 | /* 2 | Rastgele Oluşan Dizideki Rakamları Tek Ve Çift Olarak Ayırma 3 | Dinamik bellek ayırma yöntemi kullanılarak 20 elemanlı bir dizi oluşturulacak. 4 | Bu dizinin elemanları 1 ile 9 arasındaki sayıları rastgele değerlerle program dolduracak. 5 | Oluşturulan dizideki rakamların tekleri bir diziye çiftleri ayrı bir diziye yerleştirerek çıktı oluşturulacak. 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | 15 | int main(void) 16 | { 17 | setlocale(LC_ALL, "Turkish"); 18 | 19 | srand(time(NULL)); //Rastgele Sayı Üretimi 20 | 21 | int i; 22 | 23 | int cift_sayac = 0; 24 | 25 | int tek_sayac = 0; 26 | 27 | int* dizi; //Ana dizi için bir pointer 28 | 29 | int* cift; //Çift sayılar için bir dizi 30 | 31 | int* tek; //Tek Sayılar için bir dizi 32 | 33 | 34 | if ((dizi = malloc(20 * sizeof (int))) == NULL) 35 | { 36 | printf("YETERLI HAFIZA YOK"); 37 | } 38 | 39 | cift = realloc(dizi, 20 * sizeof(int)); 40 | 41 | 42 | if ((tek = malloc(20 * sizeof ( int))) == NULL) 43 | { 44 | printf("YETERLI HAFIZA YOK"); 45 | } 46 | 47 | 48 | dizi = &dizi[0]; //Pointer ile dizi aynı isimle koyarak ekstra bir dizi tanımlamamıza gerek olmuyor. 49 | 50 | 51 | for (i = 0; i < 20; ++i) 52 | { 53 | 54 | dizi[i] = 1 + (rand() % 9); 55 | 56 | printf("%.2d. Eleman= %d\n", i + 1, dizi[i]); 57 | 58 | 59 | if (dizi[i] % 2 == 0) //Çift Kontrolü 60 | { 61 | cift[cift_sayac] = dizi[i]; 62 | cift_sayac++; 63 | } 64 | 65 | else //diğerleri de tek oluyor. 66 | { 67 | tek[tek_sayac] = dizi[i]; 68 | tek_sayac++; 69 | } 70 | } 71 | 72 | 73 | printf("\nÇİFT SAYILAR\n"); 74 | 75 | for (i = 0; i < cift_sayac; i++) 76 | { 77 | printf("%d ", cift[i]); 78 | } 79 | 80 | printf("\n"); 81 | 82 | 83 | printf("\nTEK SAYILAR\n"); 84 | 85 | for (i = 0; i < tek_sayac; i++) 86 | { 87 | printf("%d ", tek[i]); 88 | } 89 | 90 | printf("\n"); 91 | 92 | free(dizi); 93 | free(tek); 94 | 95 | } 96 | -------------------------------------------------------------------------------- /07/Output1.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | 4 | void main() 5 | { 6 | 7 | int* m, ** p, *** k, myArray[5] = { 2,4,6,8,10 }; 8 | 9 | m = &myArray[2]; //m artık MyArray[2] adresini tutuyor. 10 | 11 | p = &m; 12 | 13 | k = &p; 14 | 15 | printf("%p\n", **k); // MyArray[2] adresini verir. 16 | 17 | printf("%d\n", *(**(k)+2)); // MyArray[2] deydi 8 bayt giderse MyArray[4] dizisinin değerini verir. 18 | 19 | m = myArray; //m=&myArray[0] m dizinin ilk elemanın adresidir. 20 | 21 | printf("%d\n", *(*(p)+1)); //Output=4 22 | 23 | **(p) += 7.26; 24 | 25 | m += 3; // m artık dizi[3] de başlıyor. 26 | 27 | printf("%d\n", *(*(p)-3)); //Output=9 28 | 29 | printf("%p\n", **k); // MyArray[3] adresini verir. 30 | 31 | } 32 | -------------------------------------------------------------------------------- /07/Output2.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int fun(int x, int y) 4 | { 5 | if (x == y) 6 | return x; 7 | 8 | if (x > y) 9 | { 10 | printf("\n%d, %d\n", x, y); 11 | 12 | return fun(x - y, y); 13 | } 14 | 15 | return fun(x, y - x); 16 | } 17 | 18 | int main() 19 | { 20 | int sayilar[] = { 132,48,55,47,-6 }; 21 | 22 | int* ptr = &sayilar[3]; //ptr[0]=*(ptr+0)=sayilar[3] 23 | 24 | 25 | /* int* ptr; 26 | 27 | ptr= &sayilar[3]; */ 28 | 29 | int sonuc = fun(sayilar[0], (*ptr) + 1); 30 | 31 | printf("\nfun(%d,%d) = %d\n", ptr[-3], *(ptr)+1, sonuc); 32 | 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /07/Output3.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | 5 | void main() 6 | { 7 | double* m, ** k, myArray[5] = { 1.0,2.0,3.0,4.0,5.0 }; 8 | 9 | m = myArray; //m=&myArray[0] m dizinin ilk elemanın adresidir. 10 | 11 | printf("%.1f\n", *(m + 1)); // Output=2.0 12 | 13 | *(m + 3) += 3.86; // myArray[3]= *(m+3) =7.86 14 | 15 | m += 2; // m artık dizi[2] de başlıyor. 16 | 17 | printf("%.1f\n", *(m + 1)); //Output=7.9 18 | 19 | m = &myArray[3]; //m artık MyArray[3] adresini tutuyor. 20 | 21 | k = &m; 22 | 23 | printf("%.1f\n", *(*(k)-1)); //myArray[2] değerini verir. 24 | 25 | printf("%p\n", *k); //myArray[3]'ün adresini verir. 26 | 27 | m = m - 1; 28 | 29 | printf("%p", m); //myArray[2] adresini verir. 30 | } 31 | -------------------------------------------------------------------------------- /07/Output4.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | 4 | int x=0; 5 | 6 | void main() 7 | { 8 | int *ptr=&x; 9 | /* 10 | aynı anlamda 11 | int *ptr; 12 | 13 | ptr=&x; 14 | */ 15 | 16 | printf("%p\n", ptr); 17 | 18 | x++; 19 | 20 | printf("%p\n", ptr); 21 | } 22 | 23 | 24 | /*Aynı Adres değerini verir.*/ 25 | 26 | 27 | -------------------------------------------------------------------------------- /07/Output5.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | 4 | void main() 5 | { 6 | 7 | double* m, ** k, myArray[5] = { 2.0,4.0,6.0,8.0,10.0 }; 8 | 9 | 10 | m = &myArray[1]; 11 | 12 | k = &m; 13 | 14 | 15 | printf("%p\n", *k); //myArray[1] adresini verir. 16 | 17 | printf("%.1f\n", *(*(k)+2)); //myArray[3] değerini verir. Output=8.0 18 | 19 | m = myArray; 20 | 21 | printf("%.1f\n", *(m + 1)); //Output=4.0 22 | 23 | *(m + 3) += 7.26; 24 | 25 | m += 2; 26 | 27 | printf("%.1f\n", *(m + 1)); //Output=15.30 28 | 29 | m -= 2; 30 | 31 | printf("%p\n", m); // myArray[0] adresini verir. 32 | } 33 | -------------------------------------------------------------------------------- /07/README.md: -------------------------------------------------------------------------------- 1 | #### 07 - Pointer (İşaretçiler) 2 | 3 | | .c | Başlıklar | 4 | | --------- | ------------------------------------------------------------ | 5 | | 01.c | Rastgele Sayı Yazma (Dinamik B.Y.) | 6 | | 02.c | Dizideki Elemanları Tersten Yazma | 7 | | 03.c | Diziyi Artan Şekilde Yazma | 8 | | 04.c | Dizideki Metnin Tüm Permütasyonlarını Yazma | 9 | | 05.c | Dizinin En Büyük Elemanını Bulma (Dinamik B.Y.) | 10 | | 06.c | Metni Tersten Yazdırma | 11 | | 07.c | Rastgele Oluşan Dizideki Rakamları Tek Ve Çift Olarak Ayırma | 12 | | 0utput1.c | Ekran Çıktısı | 13 | | 0utput2.c | Ekran Çıktısı | 14 | | 0utput3.c | Ekran Çıktısı \(Pointer Aritmetiği\) | 15 | | 0utput4.c | Ekran Çıktısı | 16 | | 0utput5.c | Ekran Çıktısı | 17 | -------------------------------------------------------------------------------- /08/01.c: -------------------------------------------------------------------------------- 1 | /* Tek Bağlı Liste (Singly Linked List) Uygulaması */ 2 | 3 | 4 | #include 5 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 6 | 7 | 8 | 9 | struct database { 10 | int number; 11 | struct database* next; 12 | }; 13 | 14 | typedef struct database node; 15 | 16 | node* head, * tmp; 17 | 18 | 19 | /*------------------------- 1 -------------------------*/ 20 | 21 | void createList() //Liste Oluşturma Fonksiyonu 22 | { 23 | int n, i; 24 | 25 | printf("Veri Sayısını Giriniz: "); 26 | scanf("%d", &n); 27 | 28 | for (i = 0; i < n; i++) 29 | { 30 | 31 | if (i == 0) { 32 | head = (node*)malloc(sizeof(node)); 33 | tmp = head; 34 | } 35 | 36 | else { 37 | tmp->next = (node*)malloc(sizeof(node)); 38 | tmp = tmp->next; 39 | } 40 | 41 | printf("%d. Veriyi Giriniz: ", i + 1); 42 | scanf("%d", &tmp->number); 43 | } 44 | 45 | tmp->next = NULL; 46 | 47 | printf("\n #Listeniz Oluşturuldu. Görmek İçin Ekrana Yazdırın\n"); 48 | } 49 | 50 | /*------------------------- 2 -------------------------*/ 51 | 52 | void printList() //Listeyi Ekranda Gösteren Fonksiyon 53 | { 54 | node* p; 55 | 56 | p = head; 57 | 58 | int i = 0; 59 | 60 | if (p == NULL) { 61 | 62 | printf("\n #Listede Bir Veri Yok\n"); 63 | return; 64 | } 65 | 66 | printf("\n#Oluşturduğunuz Liste; \n"); 67 | 68 | while (p != NULL) 69 | { 70 | printf("%d. Sayı: %d\n", i + 1, p->number); 71 | p = p->next; 72 | i++; 73 | } 74 | printf("\n"); 75 | } 76 | 77 | /*------------------------- 3 -------------------------*/ 78 | 79 | void deleteNode() //Listede Silmek İstediğiniz Veriyi Silen Fonksiyon 80 | { 81 | node* p, * q; 82 | 83 | int sayi; 84 | 85 | printf("Silmek İstediğiniz Veri(Sayıyı) Giriniz: "); 86 | scanf("%d", &sayi); 87 | 88 | p = head; 89 | q = head; 90 | 91 | 92 | if (p->number == sayi) 93 | { 94 | head = p->next; 95 | 96 | free(p); 97 | 98 | printf("\n #Veri Başarıyla Silindi\n" 99 | "\n (Listenin İlk Düğümü Silindi)\n"); 100 | } 101 | 102 | else 103 | { 104 | while (p->next != NULL && p->number != sayi) 105 | { 106 | q = p; 107 | p = p->next; 108 | } 109 | 110 | if (p->number == sayi) 111 | { 112 | q->next = p->next; 113 | free(p); 114 | printf("\n #Veri Başarıyla Silindi\n"); 115 | } 116 | 117 | else if (p->next == NULL) 118 | { 119 | printf("\n #Silinecek Bir Veri Bulunamadı\n"); 120 | } 121 | } 122 | 123 | } 124 | 125 | /*------------------------- 4 -------------------------*/ 126 | 127 | void addNode() //Listeye İstediğiniz Veriden önce Düğüm Ekleme 128 | { 129 | node* p, * q; 130 | 131 | int sayi; 132 | 133 | tmp = (node*)malloc(sizeof(node)); 134 | 135 | printf("Eklenecek Veriyi(Sayıyı) Giriniz: "); 136 | scanf("%d", &tmp->number); 137 | 138 | printf("Hangi Sayıdan Önce Ekrana Yazılsın? = "); 139 | scanf("%d", &sayi); 140 | 141 | p = head; 142 | q = head; 143 | 144 | if (p->number == sayi) 145 | { 146 | tmp->next = p; 147 | head = tmp; 148 | printf("\n #Veri Listenin Başına Eklendi. Görmek İçin Ekrana Yazdırın\n"); 149 | } 150 | else 151 | { 152 | while (p->next != NULL && p->number != sayi) 153 | { 154 | q = p; 155 | p = p->next; 156 | } 157 | 158 | if (p->number == sayi) 159 | { 160 | q->next = tmp; 161 | tmp->next = p; 162 | printf("\n #Veri Belirtilen Konuma Eklendi. Görmek İçin Ekrana Yazdırın\n"); 163 | } 164 | 165 | else if (p->next == NULL) 166 | { 167 | p->next = tmp; 168 | tmp->next = NULL; 169 | printf("\n #Veri Listenin Sonuna Eklendi. Görmek İçin Ekrana Yazdırın\n"); 170 | } 171 | } 172 | } 173 | 174 | /*------------------------- 5 -------------------------*/ 175 | 176 | 177 | void addNodeFirst() //Listenin Başına Düğüm Ekleme 178 | { 179 | node* p; 180 | 181 | tmp = (node*)malloc(sizeof(node)); 182 | 183 | printf("Eklenecek Veriyi(Sayıyı) Giriniz: "); 184 | scanf("%d", &tmp->number); 185 | 186 | p = head; 187 | 188 | tmp->next = p; 189 | head = tmp; 190 | 191 | printf("\n #Veri Listenin Başına Eklendi. Görmek İçin Ekrana Yazdırın\n"); 192 | } 193 | 194 | 195 | /*------------------------- 6 -------------------------*/ 196 | 197 | 198 | void addNodeLast() //Listenin Sonuna Düğüm Ekleme 199 | { 200 | node* p, * q; 201 | 202 | tmp = (node*)malloc(sizeof(node)); 203 | 204 | printf("Eklenecek Veriyi(Sayıyı) Giriniz: "); 205 | scanf("%d", &tmp->number); 206 | 207 | p = head; 208 | 209 | while (p->next != NULL) 210 | { 211 | q = p; 212 | p = p->next; 213 | } 214 | 215 | p->next = tmp; 216 | tmp->next = NULL; 217 | 218 | printf("\n #Veri Listenin Sonuna Eklendi. Görmek İçin Ekrana Yazdırın\n"); 219 | } 220 | 221 | 222 | /*------------------------- 7 -------------------------*/ 223 | 224 | void cnt() //Listedeki Eleman Sayısını Ekrana Yazdırma 225 | { 226 | node* p; 227 | int sayac = 0; 228 | 229 | p = head; 230 | 231 | while (p != NULL) 232 | { 233 | sayac++; 234 | p = p->next; 235 | } 236 | 237 | printf("\n #Eleman Sayısı: %d\n", sayac); 238 | } 239 | 240 | 241 | 242 | /*------------------------- 8 -------------------------*/ 243 | 244 | void sondakiDugumuBasaAlma() { 245 | 246 | node* p, * q; 247 | 248 | p = head; 249 | q = NULL; 250 | 251 | while (p != NULL && p->next != NULL) 252 | { 253 | q = p; 254 | p = p->next; 255 | } 256 | 257 | q->next = NULL; 258 | p->next = head; 259 | head = p; 260 | 261 | printf("\n #Sondaki Düğüm Başa Alındı. Görmek İçin Ekrana Yazdırın\n"); 262 | } 263 | 264 | /*------------------------- 9 -------------------------*/ 265 | 266 | void listeyiSil() 267 | { 268 | node* p; 269 | 270 | if (head == NULL) { 271 | printf("\n #Listede Sayı Yok\n"); 272 | return; 273 | } 274 | 275 | while (head != NULL) { 276 | p = head; 277 | head = head->next; 278 | free(p); 279 | } 280 | printf("\n #Liste Yok Edildi\n"); 281 | } 282 | 283 | 284 | /*------------------------- 10 -------------------------*/ 285 | 286 | 287 | void yer_degistirme() // İstediğiniz İki Verinin Yerini Değiştirme 288 | { 289 | node* prev1, * prev2, * node1, * node2, * temp; 290 | 291 | prev1 = NULL; 292 | prev2 = NULL; 293 | temp = NULL; 294 | node1 = head; 295 | node2 = head; 296 | 297 | int n1, n2; 298 | 299 | printf("Yer Değiştirmek İstediğiniz İki Tane Sayının Değerlerini Giriniz: \n"); 300 | scanf("%d %d", &n1, &n2); 301 | 302 | 303 | // Listenin Boş Olup Olmadığını Kontrol Etme 304 | if (head == NULL) { 305 | return; 306 | } 307 | 308 | // Sayılar eşitse yer değişmeyecek 309 | if (n1 == n2) 310 | return; 311 | 312 | //Arama Yapma (dugum1 için) 313 | while (node1 != NULL && node1->number != n1) { 314 | prev1 = node1; 315 | node1 = node1->next; 316 | } 317 | 318 | //Arama Yapma (dugum2 için) 319 | while (node2 != NULL && node2->number != n2) { 320 | prev2 = node2; 321 | node2 = node2->next; 322 | } 323 | 324 | if (node1 != NULL && node2 != NULL) { 325 | 326 | 327 | if (prev1 != NULL) 328 | prev1->next = node2; 329 | else 330 | head = node2; 331 | 332 | if (prev2 != NULL) 333 | prev2->next = node1; 334 | else 335 | head = node1; 336 | 337 | temp = node1->next; 338 | node1->next = node2->next; 339 | node2->next = temp; 340 | } 341 | else { 342 | printf("#Yer Değiştirme Yapılamıyor.\n"); 343 | } 344 | } 345 | 346 | 347 | /*------------------------- 11 -------------------------*/ 348 | 349 | void en_buyuk_sayi() 350 | { 351 | node* p; 352 | 353 | p = head; 354 | 355 | int enBuyuk = p->number; 356 | 357 | while (p != NULL) 358 | { 359 | if (p->number >= enBuyuk) 360 | { 361 | enBuyuk = p->number; 362 | } 363 | p = p->next; 364 | } 365 | 366 | printf("\nEn Büyük Sayı= %d\n", enBuyuk); 367 | } 368 | 369 | /*------------------------- 12 -------------------------*/ 370 | 371 | void en_kucuk_sayi() 372 | { 373 | node* p; 374 | 375 | p = head; 376 | 377 | int enKucuk = p->number; 378 | 379 | while (p != NULL) 380 | { 381 | if (p->number <= enKucuk) 382 | { 383 | enKucuk = p->number; 384 | } 385 | p = p->next; 386 | } 387 | 388 | printf("\nEn Küçük Sayı= %d\n", enKucuk); 389 | } 390 | 391 | 392 | /*------------------------- 13 -------------------------*/ 393 | 394 | void ortalama() 395 | { 396 | node* p; 397 | 398 | p = head; 399 | 400 | int ortalama, toplam = 0, i = 0; 401 | 402 | if (p == NULL) 403 | { 404 | printf("\nListede Sayı Yok\n"); 405 | } 406 | 407 | else 408 | { 409 | while (p != NULL) 410 | { 411 | toplam += p->number; 412 | p = p->next; 413 | i++; 414 | } 415 | 416 | ortalama = toplam / i; 417 | 418 | printf("\nListenin Ortalaması= %d\n", ortalama); 419 | } 420 | } 421 | 422 | /*------------------------- 14 -------------------------*/ 423 | 424 | void reverselist() 425 | { 426 | node* prevNode, * curNode; 427 | 428 | if (head != NULL) 429 | { 430 | prevNode = head; 431 | curNode = head->next; 432 | head = head->next; //curNode ve head aynı yerde oldu. 433 | 434 | prevNode->next = NULL; //ilk düğümü diğerlerinden ayırıyor. 435 | 436 | while (head != NULL) 437 | { 438 | head = head->next; 439 | curNode->next = prevNode; 440 | 441 | prevNode = curNode; 442 | curNode = head; 443 | } 444 | 445 | head = prevNode; 446 | } 447 | 448 | printf("\n #Liste Ters Çevirildi. Görmek İçin Ekrana Yazdırın\n"); 449 | 450 | 451 | /* Kaynak: https://codeforwin.org/2015/09/c-program-to-reverse-singly-linked-list.html */ 452 | } 453 | 454 | /*------------------------- 15 -------------------------*/ 455 | 456 | void en_kucugu_cift_dugumlerden_cikar() 457 | { 458 | node* p; 459 | 460 | p = head; 461 | 462 | int enKucuk = p->number; 463 | 464 | while (p != NULL) 465 | { 466 | if (p->number <= enKucuk) 467 | { 468 | enKucuk = p->number; 469 | } 470 | p = p->next; 471 | } 472 | 473 | p = head; 474 | 475 | while (p != NULL) 476 | { 477 | if ((p->number) % 2 == 0) 478 | { 479 | p->number -= enKucuk; 480 | } 481 | p = p->next; 482 | } 483 | 484 | printf("\nEn Küçük Sayı Tüm Çift Sayılardan Çıkarıldı. Görmek İçin Ekrana Yazdırın\n"); 485 | 486 | 487 | } 488 | 489 | /*------------------------- 16 -------------------------*/ 490 | 491 | void en_buyugu_cift_dugumlerden_cikar() 492 | { 493 | node* p; 494 | 495 | p = head; 496 | 497 | int enBuyuk = p->number; 498 | 499 | while (p != NULL) 500 | { 501 | if (p->number >= enBuyuk) 502 | { 503 | enBuyuk = p->number; 504 | } 505 | p = p->next; 506 | } 507 | 508 | p = head; 509 | 510 | while (p != NULL) 511 | { 512 | if ((p->number) % 2 == 0) 513 | { 514 | p->number -= enBuyuk; 515 | } 516 | p = p->next; 517 | } 518 | 519 | printf("\nEn Büyük Sayı Tüm Çift Sayılardan Çıkarıldı. Görmek İçin Ekrana Yazdırın\n"); 520 | 521 | 522 | } 523 | 524 | /*------------------------- 17 -------------------------*/ 525 | 526 | void delete_same_node() //Aynı sayıları siliyor. 527 | { 528 | node* p, * q, * r; 529 | 530 | p = head; 531 | 532 | while (p != NULL && p->next != NULL) 533 | { 534 | q = p; 535 | 536 | while (q->next != NULL) 537 | { 538 | if (p->number == q->next->number) 539 | { 540 | r = q->next; 541 | q->next = q->next->next; 542 | free(r); 543 | } 544 | 545 | else 546 | q = q->next; 547 | } 548 | p = p->next; 549 | } 550 | 551 | printf("\nGörmek İçin Ekrana Yazdırın\n"); 552 | } 553 | 554 | /*------------------------- 18 -------------------------*/ 555 | 556 | void list_bilgi() { 557 | 558 | int i = 1; 559 | 560 | while (head != NULL) { 561 | 562 | printf("%d. Düğümün Adresi= %p \n", i, head); 563 | printf("%d. Düğümün Verisi= %d \n", i, head->number); 564 | printf("%d. Düğümün Bağlı Olduğu Dğümün Adresi= %p \n\n", i, head->next); 565 | head = head->next; 566 | i++; 567 | } 568 | 569 | } 570 | 571 | 572 | 573 | /*------------------------- 101 -------------------------*/ 574 | 575 | 576 | void question_01() { 577 | 578 | node* yenidugum; 579 | 580 | head = (node*)malloc(sizeof(node)); 581 | 582 | if (head == NULL) 583 | { 584 | printf("YETERLİ HAFIZA YOK"); 585 | exit(0); 586 | } 587 | 588 | head->next = NULL; 589 | tmp = head; 590 | 591 | 592 | int number; 593 | 594 | printf("Sayı Giriniz: "); 595 | scanf("%d", &number); 596 | 597 | 598 | if (number == -1) 599 | { 600 | printf("\nProgram Sonlandırıldı\n"); 601 | exit(0); 602 | } 603 | 604 | else 605 | 606 | head->number = number; 607 | 608 | 609 | while (1) 610 | { 611 | printf("Sayı Giriniz: "); 612 | scanf("%d", &number); 613 | 614 | if (number == -1) 615 | break; 616 | 617 | 618 | if (number % 2 == 0) 619 | { 620 | 621 | yenidugum = (node*)malloc(sizeof(node)); 622 | 623 | if (yenidugum == NULL) 624 | { 625 | printf("YETERLI HAFIZA YOK"); 626 | exit(0); 627 | } 628 | 629 | yenidugum->number = number; 630 | yenidugum->next = NULL; 631 | 632 | head->next = yenidugum; 633 | head = yenidugum; 634 | } 635 | 636 | else 637 | { 638 | yenidugum = (node*)malloc(sizeof(node)); 639 | 640 | if (yenidugum == NULL) 641 | { 642 | printf("YETERLI HAFIZA YOK"); 643 | exit(0); 644 | } 645 | 646 | yenidugum->number = number; 647 | yenidugum->next = tmp; 648 | 649 | tmp = yenidugum; 650 | } 651 | 652 | } 653 | 654 | 655 | while (tmp != NULL) 656 | { 657 | printf("%d\n", tmp->number); 658 | 659 | tmp = tmp->next; 660 | 661 | } 662 | 663 | } 664 | 665 | 666 | /*------------------------- MAIN -------------------------*/ 667 | 668 | int main() 669 | { 670 | setlocale(LC_ALL, "Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 671 | 672 | int sec = 0; 673 | 674 | while (sec != 100) 675 | { 676 | 677 | printf("*************************\n" 678 | " 0 - Programdan Çıkış Yap\n" 679 | " 1 - Listenizi Oluşturun\n" 680 | " 2 - Listeyi Ekrana Yazdırın\n" 681 | " 3 - Listede İstediğiniz Herhangi Bir Veriyi Silin\n" 682 | " 4 - Listeye Veri Ekleme (Seçilen Verinin Öncesine Ekler)\n" 683 | " 5 - Listenin Başına Veri Ekleme\n" 684 | " 6 - Listenin Sonuna Veri Ekleme\n" 685 | " 7 - Listedeki Verilerin Sayısı\n" 686 | " 8 - Listenin Sondaki Düğümü Başa Alma\n" 687 | " 9 - Listeyi Sil(Yok et)\n" 688 | " 10 - Listedeki Değerlerin Yerlerini Değiştirme\n" 689 | " 11 - Listedeki En Büyük Sayıyı Bulma\n" 690 | " 12 - Listedeki En Küçük Sayıyı Bulma\n" 691 | " 13 - Listedeki Değerlerin Ortalamasını Bulma\n" 692 | " 14 - Listedeki Değerleri Ters Çevirme\n" 693 | " 15 - Listedeki En Küçük Sayıyı Tüm Çift Sayılardan Çıkarma\n" 694 | " 16 - Listedeki En Büyük Sayıyı Tüm Çift Sayılardan Çıkarma\n" 695 | " 17 - Listede Aynı Değere Sahip Olan Düğümleri Silme\n" 696 | " 18 - Liste Elemanlarının Tüm Bilgileri\n" 697 | 698 | " \n*** EKSTRA***\n" 699 | " 101 - Klavyeden -1 girilene kadar verilen tek sayıları tek bağlı doğrusal bir listenin başına, verilen çift sayıları ise listenin sonuna ekle\n" 700 | 701 | 702 | ); 703 | 704 | printf("\n Seçiminizi Yapınız:"); 705 | scanf("%d", &sec); 706 | 707 | printf("\n"); 708 | 709 | if (sec == 0) exit(0); 710 | else if (sec == 1) createList(); 711 | else if (sec == 2) printList(); 712 | else if (sec == 3) deleteNode(); 713 | else if (sec == 4) addNode(); 714 | else if (sec == 5) addNodeFirst(); 715 | else if (sec == 6) addNodeLast(); 716 | else if (sec == 7) cnt(); 717 | else if (sec == 8) sondakiDugumuBasaAlma(); 718 | else if (sec == 9) listeyiSil(); 719 | else if (sec == 10) yer_degistirme(); 720 | else if (sec == 11) en_buyuk_sayi(); 721 | else if (sec == 12) en_kucuk_sayi(); 722 | else if (sec == 13) ortalama(); 723 | else if (sec == 14) reverselist(); 724 | else if (sec == 15) en_kucugu_cift_dugumlerden_cikar(); 725 | else if (sec == 16) en_buyugu_cift_dugumlerden_cikar(); 726 | else if (sec == 17) delete_same_node(); 727 | else if (sec == 18) list_bilgi(); 728 | else if (sec == 101) question_01(); 729 | 730 | 731 | 732 | } 733 | } 734 | -------------------------------------------------------------------------------- /08/02.c: -------------------------------------------------------------------------------- 1 | /* Çift Bağlı Liste (Double Linked List) Uygulaması */ 2 | 3 | #include 4 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 5 | 6 | struct database { 7 | int number; 8 | struct database* next; 9 | struct database* prev; 10 | }; 11 | 12 | typedef struct database node; 13 | 14 | node* head, * end, * tmp; 15 | 16 | 17 | /*------------------------- 1 -------------------------*/ 18 | 19 | void createList() //Liste Oluşturma Fonksiyonu 20 | { 21 | int n, i; 22 | 23 | printf("Veri Sayısını Giriniz: "); 24 | scanf("%d", &n); 25 | 26 | for (i = 0; i < n; i++) 27 | { 28 | if (i == 0) { 29 | head = (node*)malloc(sizeof(node)); 30 | tmp = head; 31 | end = head; 32 | } 33 | else { 34 | tmp->next = (node*)malloc(sizeof(node)); 35 | tmp = tmp->next; 36 | } 37 | printf("%d. Sayıyı Giriniz: ", i + 1); 38 | scanf("%d", &tmp->number); 39 | tmp->prev = end; 40 | tmp->next = NULL; 41 | end->next = tmp; 42 | end = tmp; 43 | 44 | } 45 | 46 | printf("\n #Listeniz Oluşturuldu. Görmek İçin Ekrana Yazdırın\n"); 47 | 48 | 49 | /* 50 | Oluşturulan listede; 51 | head = ilk düğüm 52 | end = son düğüm 53 | tmp = boş düğüm 54 | oldu. 55 | 56 | */ 57 | } 58 | 59 | /*------------------------- 2 -------------------------*/ 60 | 61 | void printList() //Listeyi Ekranda Gösteren Fonksiyon 62 | { 63 | node* p; 64 | 65 | p = head; 66 | 67 | int i = 0; 68 | 69 | if (p == NULL) { 70 | 71 | printf("\n #Listede Bir Veri Yok\n"); 72 | return; 73 | } 74 | 75 | printf("\n#Oluşturduğunuz Liste; \n"); 76 | 77 | while (p != NULL) 78 | { 79 | printf("%d. Sayı: %d\n", i + 1, p->number); 80 | p = p->next; 81 | i++; 82 | } 83 | 84 | printf("\n"); 85 | } 86 | 87 | /*------------------------- 3 -------------------------*/ 88 | 89 | void deleteNode() //Listede Silmek İstediğiniz Veriyi Silen Fonksiyon 90 | { 91 | node* p, * q; 92 | 93 | int sayi; 94 | 95 | printf("Silmek İstediğiniz Veri(Sayıyı) Giriniz: "); 96 | scanf("%d", &sayi); 97 | 98 | p = head; 99 | q = NULL; 100 | 101 | if (head->number == sayi) 102 | { 103 | 104 | if (head == NULL) 105 | { 106 | printf(" #Silme İşlemi Yapılamıyor.\n"); 107 | } 108 | else 109 | { 110 | head = head->next; 111 | head->prev = NULL; 112 | 113 | free(p); 114 | 115 | printf("\n #Veri Başarıyla Silindi\n" 116 | "\n (Listenin Baştaki (İlk Düğümü) Silindi)\n"); 117 | } 118 | } 119 | else 120 | { 121 | while (p->next != NULL && p->number != sayi) 122 | { 123 | q = p; 124 | p = p->next; 125 | } 126 | 127 | if (p == end) 128 | { 129 | if (end == NULL) 130 | { 131 | printf(" #Silme İşlemi Yapılamıyor.\n"); 132 | } 133 | else 134 | { 135 | end = end->prev; 136 | end->next = NULL; 137 | 138 | free(p); 139 | 140 | printf("\n #Veri Başarıyla Silindi\n" 141 | "\n (Listenin Sonundaki (Son Düğümü) Silindi)\n"); 142 | } 143 | } 144 | 145 | else if (p != end) 146 | { 147 | p->prev->next = p->next; 148 | p->next->prev = p->prev; 149 | 150 | free(p); 151 | 152 | printf("\n #Veri Başarıyla Silindi\n"); 153 | } 154 | } 155 | } 156 | 157 | /*------------------------- 4 -------------------------*/ 158 | 159 | void addNode() //Listeye İstediğiniz Veriden önce Düğüm Ekleme 160 | { 161 | node* p, * q; 162 | 163 | int sayi; 164 | 165 | tmp = (node*)malloc(sizeof(node)); 166 | 167 | printf("Eklenecek Veriyi(Sayıyı) Giriniz: "); 168 | scanf("%d", &tmp->number); 169 | 170 | printf("Hangi Sayıdan Önce Ekrana Yazılsın? = "); 171 | scanf("%d", &sayi); 172 | 173 | p = head; 174 | q = head; 175 | 176 | if (p->number == sayi) 177 | { 178 | tmp->next = p; 179 | head = tmp; 180 | printf("\n #Veri Listenin Başına Eklendi. Görmek İçin Ekrana Yazdırın\n"); 181 | } 182 | else 183 | { 184 | while (p->next != NULL && p->number != sayi) 185 | { 186 | q = p; 187 | p = p->next; 188 | } 189 | 190 | if (p->number == sayi) 191 | { 192 | q->next = tmp; 193 | tmp->next = p; 194 | printf("\n #Veri Belirtilen Konuma Eklendi. Görmek İçin Ekrana Yazdırın\n"); 195 | } 196 | 197 | else if (p->next == NULL) 198 | { 199 | p->next = tmp; 200 | tmp->next = NULL; 201 | printf("\n #Veri Listenin Sonuna Eklendi. Görmek İçin Ekrana Yazdırın\n"); 202 | } 203 | } 204 | } 205 | 206 | /*------------------------- 5 -------------------------*/ 207 | 208 | 209 | void addNodeFirst() //Listenin Başına Düğüm Ekleme 210 | { 211 | node* p; 212 | 213 | tmp = (node*)malloc(sizeof(node)); 214 | 215 | printf("Eklenecek Veriyi(Sayıyı) Giriniz: "); 216 | scanf("%d", &tmp->number); 217 | 218 | p = head; 219 | 220 | tmp->next = p; 221 | tmp->prev = NULL; 222 | p->prev = tmp; 223 | head = tmp; 224 | 225 | printf("\n #Veri Listenin Başına Eklendi. Görmek İçin Ekrana Yazdırın\n"); 226 | 227 | } 228 | 229 | /*------------------------- 6 -------------------------*/ 230 | 231 | void addNodeLast() //Listenin Sonuna Düğüm Ekleme 232 | { 233 | node* p, * q; 234 | 235 | tmp = (node*)malloc(sizeof(node)); 236 | 237 | printf("Eklenecek Veriyi(Sayıyı) Giriniz: "); 238 | scanf("%d", &tmp->number); 239 | 240 | p = head; 241 | 242 | while (p->next != NULL) 243 | { 244 | q = p; 245 | p = p->next; 246 | } 247 | 248 | p->next = tmp; 249 | tmp->next = NULL; 250 | tmp->prev = p; 251 | p->next = tmp; 252 | 253 | printf("\n #Veri Listenin Sonuna Eklendi. Görmek İçin Ekrana Yazdırın\n"); 254 | } 255 | 256 | /*------------------------- 7 -------------------------*/ 257 | 258 | void cnt() //Listedeki Eleman Sayısını Ekrana Yazdırma 259 | { 260 | node* p; 261 | int sayac = 0; 262 | 263 | p = head; 264 | 265 | while (p != NULL) 266 | { 267 | sayac++; 268 | p = p->next; 269 | } 270 | 271 | printf("\n #Eleman Sayısı: %d\n", sayac); 272 | } 273 | 274 | /*------------------------- 8 -------------------------*/ 275 | 276 | void listeyiSil() 277 | { 278 | node* p; 279 | 280 | if (head == NULL) { 281 | printf("\n #Listede Sayı Yok\n"); 282 | return; 283 | } 284 | 285 | while (head != NULL) { 286 | p = head; 287 | head = head->next; 288 | free(p); 289 | } 290 | printf("\n #Liste Yok Edildi\n"); 291 | } 292 | 293 | 294 | /*------------------------- 9 -------------------------*/ 295 | 296 | void addthen() //head listesinin n. düğümün hemen ardından tmp düğümü ekleme 297 | { 298 | node* p; 299 | 300 | tmp = (node*)malloc(sizeof(node)); 301 | 302 | printf("Eklenecek Sayıyı Giriniz: "); 303 | scanf("%d", &tmp->number); 304 | 305 | int n; 306 | 307 | printf("Hangi Düğümden Sonra Eklensin: "); 308 | scanf("%d", &n); 309 | 310 | p = head; 311 | 312 | int i = 1; 313 | 314 | while (i < n) { 315 | head = head->next; 316 | i++; 317 | } 318 | 319 | tmp->prev = head; 320 | tmp->next = head->next; 321 | head->next = tmp; 322 | head = p; 323 | 324 | } 325 | 326 | 327 | 328 | /*------------------------- 10 -------------------------*/ 329 | 330 | void palindrom() 331 | { 332 | /*(Palindrom, tersten okunuşu da aynı olan cümle, sözcük ve sayılara denilmektedir.)*/ 333 | 334 | node* p, * q; 335 | 336 | 337 | if (head == NULL) 338 | return 1; 339 | 340 | p = head; 341 | q = NULL; 342 | 343 | while (p->next != NULL) 344 | { 345 | q = p; 346 | p = p->next; 347 | } 348 | 349 | while (head != p) 350 | { 351 | if (head->number != p->number) 352 | { 353 | printf(" Palindrom değildir\n"); 354 | return 0; 355 | } 356 | 357 | head = head->next; 358 | p = q; //p=p->prev; 359 | } 360 | 361 | printf(" Palindromdur\n"); 362 | return 1; 363 | } 364 | 365 | /*------------------------- MAIN -------------------------*/ 366 | 367 | int main() 368 | { 369 | setlocale(LC_ALL, "Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 370 | 371 | int sec = 0; 372 | 373 | while (sec != 100) 374 | { 375 | 376 | printf("*************************\n" 377 | " 0 - Programdan Çıkış Yap\n" 378 | " 1 - Listenizi Oluşturun\n" 379 | " 2 - Listeyi Ekrana Yazdırın\n" 380 | " 3 - Listede İstediğiniz Herhangi Bir Veriyi Silin\n" 381 | " 4 - Listeye Veri Ekleme (Seçilen Verinin Öncesine Ekler)\n" 382 | " 5 - Listenin Başına Veri Ekleme\n" 383 | " 6 - Listenin Sonuna Veri Ekleme\n" 384 | " 7 - Listedeki Verilerin Sayısı\n" 385 | " 8 - Listeyi Sil(Yok et)\n" 386 | " 9 - Listede Araya Eleman Ekleme\n" 387 | " 10 - Liste Palindrom Mudur?\n" 388 | 389 | 390 | ); 391 | 392 | printf("\n Seçiminizi Yapınız:"); 393 | scanf("%d", &sec); 394 | 395 | printf("\n"); 396 | 397 | if (sec == 0) exit(0); 398 | else if (sec == 1) createList(); 399 | else if (sec == 2) printList(); 400 | else if (sec == 3) deleteNode(); 401 | else if (sec == 4) addNode(); 402 | else if (sec == 5) addNodeFirst(); 403 | else if (sec == 6) addNodeLast(); 404 | else if (sec == 7) cnt(); 405 | else if (sec == 8) listeyiSil(); 406 | else if (sec == 9) addthen(); 407 | else if (sec == 10) palindrom(); 408 | } 409 | } 410 | -------------------------------------------------------------------------------- /08/03.c: -------------------------------------------------------------------------------- 1 | /* İkili Arama Ağacı (Binary Search Tree BTREE) */ 2 | 3 | #include 4 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 5 | 6 | 7 | struct node { 8 | int data; 9 | struct node* left; //Sol çocuğa işaretçi 10 | struct node* right; // Sağ çocuğa işaretçi 11 | }; 12 | 13 | typedef struct node BTREE; 14 | 15 | BTREE* myroot = NULL; 16 | BTREE* tmp; 17 | 18 | //Fonksiyon Prototipleri 19 | BTREE* newNode(int); 20 | int isBSTorNot(BTREE*); 21 | BTREE* insert(BTREE*, int); 22 | void preorder(BTREE*); 23 | void inorder(BTREE*); 24 | void postorder(BTREE*); 25 | int size(BTREE*); 26 | BTREE* searchtree(BTREE*, int); 27 | int heightofTree(BTREE*); 28 | void mirror(BTREE*); 29 | void createmyroot(); 30 | int minValue(BTREE*); 31 | int maxValue(BTREE*); 32 | BTREE* deleteNode(BTREE*, int); 33 | int pathTotal(BTREE*, int); 34 | void createmyroot(); 35 | 36 | 37 | 38 | 39 | BTREE* newNode(int data) { 40 | 41 | BTREE* p; 42 | 43 | p = (BTREE*)malloc(sizeof(BTREE)); //Bellekten yer alıyor 44 | 45 | p->data = data; 46 | p->left = NULL; 47 | p->right = NULL; 48 | 49 | return p; // Bu adresi geri dönderiyor. 50 | 51 | } 52 | 53 | int isBSTorNot(BTREE* root) { //İkili Arama Ağacı Kontrolü 54 | 55 | if (root == NULL) 56 | return 1; 57 | 58 | if (root->left != NULL && root->left->data > root->data) 59 | return 0; 60 | 61 | if (root->right != NULL && root->right->data < root->data) 62 | return 0; 63 | 64 | if (!isBSTorNot(root->left) || !isBSTorNot(root->right)) 65 | return 0; 66 | 67 | return 1; 68 | } 69 | 70 | 71 | BTREE* insert(BTREE* root, int data) // İkili Ağaca Veri Ekleme 72 | { 73 | if (root != NULL) { 74 | 75 | if (data < root->data) 76 | root->left = insert(root->left, data); //Küçükse sola ekleme 77 | 78 | else 79 | root->right = insert(root->right, data); //Büyük ve eşitse sağa ekleme 80 | } 81 | 82 | else 83 | root = newNode(data); 84 | /* Eğer root boşsa (Herhangi bir eleman yoksa) newnode(data)gönderiyor. 85 | BTREE* newNode(int data) döndüreln adresi root a atıyor. 86 | */ 87 | 88 | return root; 89 | } 90 | 91 | 92 | void preorder(BTREE* root) { // Önce Kök 93 | 94 | // KÖK - SOL - SAĞ (Root-Left-Right) 95 | 96 | if (root != NULL) { 97 | 98 | printf("%5d ", root->data); 99 | 100 | preorder(root->left); 101 | preorder(root->right); 102 | } 103 | } 104 | 105 | void inorder(BTREE* root) { // Kök Ortada 106 | 107 | // SOL - KÖK - SAĞ (Left-Root-Right) 108 | 109 | if (root != NULL) { 110 | 111 | inorder(root->left); 112 | 113 | printf("%5d ", root->data); 114 | 115 | inorder(root->right); 116 | } 117 | } 118 | 119 | void postorder(BTREE* root) { // Kök Sonda 120 | 121 | // SOL - SAĞ - KÖK (Left-Right-Root) 122 | 123 | if (root != NULL) { 124 | 125 | postorder(root->left); 126 | postorder(root->right); 127 | 128 | printf("%5d ", root->data); 129 | } 130 | } 131 | 132 | int size(BTREE* root) { // Düğüm Sayılarını Veren Fonksiyon 133 | 134 | if (root == NULL) 135 | return 0; 136 | 137 | else 138 | return size(root->left) + 1 + size(root->right); 139 | 140 | } 141 | 142 | int heightofTree(BTREE* root) { // Bir Ağacın Yüksekliğini Bulmak (Kökün Yüksekliği) 143 | 144 | if (root == NULL) 145 | return -1; 146 | 147 | else { 148 | 149 | int leftHeight, rightHeight; 150 | 151 | leftHeight = heightofTree(root->left); 152 | 153 | rightHeight = heightofTree(root->right); 154 | 155 | if (rightHeight > leftHeight) 156 | return rightHeight + 1; 157 | 158 | else 159 | return leftHeight + 1; 160 | } 161 | } 162 | 163 | 164 | BTREE* searchtree(BTREE* node, int data) { // İstenilen Veriyi Bulmak 165 | 166 | if (node != NULL) 167 | 168 | if (node->data == data) 169 | return node; 170 | 171 | else if (node->data > data) 172 | searchtree(node->left, data); 173 | 174 | else 175 | searchtree(node->right, data); 176 | 177 | else 178 | return NULL; 179 | } 180 | 181 | 182 | 183 | void mirror(BTREE* root) { 184 | /* 185 | İkili Bir Ağacın sol çocukları ile sağ çocukların yerini değiştiren fonksiyon. (Ayna Görüntüsü) 186 | 187 | */ 188 | if (root == NULL) 189 | return; 190 | 191 | else { 192 | BTREE* temp; 193 | 194 | mirror(root->left); 195 | mirror(root->right); 196 | 197 | temp = root->left; // Yer değiştirme işlemi yapıyor. 198 | 199 | root->left = root->right; 200 | root->right = temp; 201 | } 202 | } 203 | 204 | int minValue(BTREE* root) { // Ağaçtaki Tüm Verilerden En Küçük Olan Değer 205 | if (root == NULL) 206 | return 0; 207 | 208 | while (root->left != NULL) 209 | root = root->left; 210 | 211 | return(root->data); 212 | } 213 | 214 | int maxValue(BTREE* root) { // Ağaçtaki Tüm Verilerden En Büyük Olan Değer 215 | 216 | if (root == NULL) 217 | return 0; 218 | 219 | while (root->right != NULL) 220 | root = root->right; 221 | 222 | return(root->data); 223 | } 224 | 225 | BTREE* deleteNode(BTREE* root, int num) { 226 | 227 | BTREE* p, * q; 228 | 229 | if (root == NULL) //Ağaç yoksa 230 | return NULL; 231 | 232 | 233 | if (num < root->data) // Silinecek sayı, ebeveyninin verisinden küçükse 234 | root->left = deleteNode(root->left, num); // Sol Alt Ağaca Geçiliyor. 235 | 236 | else if (num > root->data) // Silinecek sayı, ebeveyninin verisinden büyükse 237 | root->right = deleteNode(root->right, num); // Sağ Alt Ağaca Geçiliyor. 238 | 239 | else 240 | { 241 | // Silinecek olan düğümün çocuğu yok ise 242 | if (root->left == root->right) 243 | { 244 | free(root); 245 | return NULL; 246 | } 247 | 248 | // Silinecek olan düğümün 1 çocuğu var ise 249 | if (root->left == NULL) 250 | { 251 | p = root->right; 252 | free(root); 253 | return p; 254 | } 255 | 256 | else if (root->right == NULL) { 257 | p = root->left; 258 | free(root); 259 | return p; 260 | } 261 | 262 | // Silinecek olan düğümün 2 çocuğu var ise 263 | 264 | else { 265 | p = q = root->right; 266 | while (p->left != NULL) 267 | p = p->left; 268 | p->left = root->left; 269 | free(root); 270 | return q; 271 | } 272 | } 273 | } 274 | 275 | int pathTotal(BTREE* root, int sum) { 276 | /* 277 | 278 | Girilin bir int değeri, kökten itibaren yaprak dahil olmak üzere o yol üzerindeki verilerin toplamına eşit mi? 279 | 280 | */ 281 | int pathSum; 282 | 283 | if (root == NULL) //Ağaç yok ise 284 | return (sum == 0); 285 | 286 | else { 287 | 288 | pathSum = sum - root->data; 289 | 290 | return(pathTotal(root->left, pathSum) || pathTotal(root->left, pathSum)); 291 | } 292 | } 293 | 294 | void createmyroot() { 295 | 296 | int n = 0; 297 | int i = 0; 298 | 299 | printf("Ağaca Veri Eklemek İçin Sayı Giriniz (-1 Girilene kadar) \n"); 300 | 301 | do { 302 | 303 | printf(" %d. Sayıyı Giriniz: ", i + 1); 304 | scanf("%d", &n); 305 | 306 | if (n != -1) 307 | myroot = insert(myroot, n); 308 | 309 | i++; 310 | 311 | } while (n != -1); 312 | 313 | } 314 | 315 | int main() 316 | { 317 | setlocale(LC_ALL, "Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 318 | 319 | int sec = 0; 320 | int node; 321 | 322 | while (sec != 100) 323 | { 324 | printf( 325 | "\n ****************************************************\n" 326 | " 1 - Ağaç Oluştur / Ağaç Varsa Veri Ekle\n" 327 | " 2 - İkili Bir Ağaç mı?\n" 328 | " 3 - Preorder?\n" 329 | " 4 - Inorder?\n" 330 | " 5 - Postorder?\n" 331 | " 6 - Ağaçtan İstediğiniz Veriyi Bulma\n" 332 | " 7 - Ağacın Yüksekliği (Kökün Yüksekliği) Nedir?\n" 333 | " 8 - Ağacın En Küçük Değeri Nedir?\n" 334 | " 9 - Ağacın En Büyük Değeri Nedir?\n" 335 | " 10 - Ağacın Düğümlerinin Sayısı Nedir?\n" 336 | " 11 - Ağaçtan Veri Silmek\n" 337 | " 12 - Sol Çocukları ile Sağ Çocukların Yerini Değiştir\n" 338 | " 13 - Girdiğiniz Değer Herhangi Bir Yol Üzerindeki Değerler Toplamına Eşit mi?\n" 339 | " 14 - ÇIKIŞ? \n" 340 | ); 341 | 342 | printf("\n\n Seçiminizi Yapınız: "); 343 | scanf("%d", &sec); 344 | 345 | printf("\n"); 346 | 347 | if (sec == 1) createmyroot(); 348 | 349 | else if (sec == 2) { 350 | if (isBSTorNot((myroot))) 351 | printf("\n -- İkili Arama Ağacıdır.\n"); 352 | else 353 | printf("\n -- İkili Arama Ağacı Değildir!\n"); 354 | } 355 | 356 | else if (sec == 3) preorder(myroot); 357 | else if (sec == 4) inorder(myroot); 358 | else if (sec == 5) postorder(myroot); 359 | else if (sec == 6) { 360 | printf("\nAranacak Veriyi Giriniz: "); 361 | scanf("%d", &node); 362 | 363 | tmp = searchtree(myroot, node); 364 | 365 | if (tmp) 366 | { 367 | printf("Düğüm Bulundu= %d\n", tmp->data); 368 | } 369 | else 370 | { 371 | printf("Ağaçta Böyle Bir Veri YOK\n"); 372 | } 373 | } 374 | 375 | else if (sec == 7) { 376 | printf("Ağacın Yüksekliği: %d\n", heightofTree(myroot)); 377 | } 378 | 379 | else if (sec == 8) printf("%d", minValue(myroot)); 380 | else if (sec == 9) printf("%d", maxValue(myroot)); 381 | else if (sec == 10) printf("%d", size(myroot)); 382 | else if (sec == 11) { 383 | 384 | printf("\nSilinecek Veriyi Giriniz: "); 385 | scanf("%d", &node); 386 | 387 | tmp = deleteNode(myroot, node); 388 | 389 | if (tmp) 390 | { 391 | printf("Düğüm Silindi"); 392 | } 393 | else 394 | { 395 | printf("Ağaçta Böyle Bir Veri YOK\n"); 396 | } 397 | } 398 | 399 | else if (sec == 12) mirror(myroot); 400 | 401 | else if (sec == 13) { 402 | 403 | printf("\n Veriyi Giriniz: "); 404 | scanf("%d", &node); 405 | 406 | tmp = pathTotal(myroot, node); 407 | 408 | if (tmp) 409 | { 410 | printf("\n-- Yoldaki Değerlerin Toplamı Girdiğiniz Değere EŞİT --\n"); 411 | } 412 | else 413 | { 414 | printf("\n-- Yoldaki Değerlerin Toplamı Girdiğiniz Değere Eşit DEĞİL! -- \n"); 415 | } 416 | } 417 | else if (sec == 14) exit(0); 418 | } 419 | } 420 | -------------------------------------------------------------------------------- /08/04.c: -------------------------------------------------------------------------------- 1 | /* AVL Ağacı (AVL Tree) 2 | 3 | - Dengeli İkili Arama Ağacı 4 | 5 | */ 6 | 7 | #include 8 | #include //Tüm Diller ve Karakter setleri bu kütüphane de yer alır. 9 | 10 | 11 | struct node { 12 | int data; 13 | struct node* left; // Sol çocuğa işaretçi 14 | struct node* right; // Sağ çocuğa işaretçi 15 | int height; 16 | }; 17 | 18 | typedef struct node AVLTREE; 19 | 20 | AVLTREE* myroot = NULL; 21 | AVLTREE* tmp; 22 | 23 | 24 | 25 | //Fonksiyon Prototipleri 26 | 27 | int height(AVLTREE*); 28 | int balance(AVLTREE*); 29 | int maxNumber(int, int); 30 | AVLTREE* newNode(int); 31 | AVLTREE* rightRotate(AVLTREE*); 32 | AVLTREE* leftRotate(AVLTREE*); 33 | AVLTREE* leftRightRotate(AVLTREE*); 34 | AVLTREE* rightLeftRotate(AVLTREE*); 35 | AVLTREE* insert(AVLTREE*, int); 36 | void preorder(AVLTREE*); 37 | void inorder(AVLTREE*); 38 | void postorder(AVLTREE*); 39 | int size(AVLTREE*); 40 | AVLTREE* searchtree(AVLTREE*, int); 41 | int heightofTree(AVLTREE*); 42 | int minValue(AVLTREE*); 43 | int maxValue(AVLTREE*); 44 | void createmyroot(); 45 | AVLTREE* deleteNode(AVLTREE*, int); 46 | 47 | 48 | int height(AVLTREE* n) // işaretlenen Düğümün Yüksekliği 49 | { 50 | if (n == NULL) 51 | return 0; 52 | 53 | return n->height; 54 | } 55 | 56 | int maxNumber(int x, int y) { // İki Sayıdan En Büyüğü 57 | 58 | return (x > y) ? x : y; 59 | 60 | /* 61 | int maxValue(int x, int y) { 62 | 63 | if(x>=y) 64 | return x; 65 | else 66 | return y; 67 | 68 | }*/ 69 | } 70 | 71 | 72 | /* 73 | - AVL ağacındaki bir düğümün denge faktörü, sol alt ağacın yüksekliği ile o düğümün sağ alt ağacının yüksekliği arasındaki farktır. 74 | - AVL ağaçlarınının sol ve sağ alt ağaçlar arasındaki yükseklik farkı en fazla 1'dir. (İç Ağaçlarda dahil) 75 | */ 76 | 77 | int balance(AVLTREE* n) 78 | { 79 | if (n == NULL) 80 | return 0; 81 | 82 | return height(n->left) - height(n->right); 83 | } 84 | 85 | 86 | 87 | AVLTREE* newNode(int data) { 88 | 89 | AVLTREE* p; 90 | 91 | p = (AVLTREE*)malloc(sizeof(AVLTREE)); // Bellekten yer alıyor 92 | 93 | p->data = data; 94 | p->left = NULL; 95 | p->right = NULL; 96 | 97 | p->height = 1; 98 | 99 | return p; // Bu adresi geri dönderiyor. 100 | 101 | } 102 | 103 | /* Tek Döndürme (Single Rotation) 104 | 105 | 1- Sağa Döndürme (Right Rotate) 106 | 2- Sola Döndürme (Left Rotate) 107 | */ 108 | 109 | AVLTREE* rightRotate(AVLTREE* node) { 110 | 111 | AVLTREE* temp = node->left; 112 | 113 | node->left = temp->right; 114 | 115 | temp->right = node; 116 | 117 | node->height = maxNumber(height(node->left), height(node->right)) + 1; 118 | 119 | temp->height = maxNumber(height(temp->left), height(temp->right)) + 1; 120 | 121 | return temp; 122 | } 123 | 124 | AVLTREE* leftRotate(AVLTREE* node) { 125 | 126 | AVLTREE* temp = node->right; 127 | 128 | node->right = temp->left; 129 | 130 | temp->left = node; 131 | 132 | node->height = maxNumber(height(node->left), height(node->right)) + 1; 133 | 134 | temp->height = maxNumber(height(temp->left), height(temp->right)) + 1; 135 | 136 | return temp; 137 | } 138 | 139 | AVLTREE* leftRightRotate(AVLTREE* node) { 140 | 141 | node->left = leftRotate(node->left); 142 | 143 | return rightRotate(node); 144 | } 145 | 146 | 147 | AVLTREE* rightLeftRotate(AVLTREE* node) { 148 | 149 | node->right = rightRotate(node->left); 150 | 151 | return leftRotate(node); 152 | } 153 | 154 | 155 | AVLTREE* insert(AVLTREE* node, int data) { 156 | 157 | if (node == NULL) 158 | return(newNode(data)); 159 | 160 | 161 | if (data < node->data) 162 | node->left = insert(node->left, data); 163 | 164 | else if (data > node->data) 165 | node->right = insert(node->right, data); 166 | 167 | else 168 | return node; 169 | 170 | node->height = 1 + maxNumber(height(node->left), height(node->right)); 171 | 172 | 173 | int blnc = balance(node); 174 | 175 | if (blnc > 1 && data < node->left->data) 176 | return rightRotate(node); 177 | 178 | if (blnc < -1 && data > node->right->data) 179 | return leftRotate(node); 180 | 181 | if (blnc > 1 && data > node->left->data) 182 | return leftRightRotate(node); 183 | 184 | if (blnc < -1 && data < node->right->data) 185 | return rightLeftRotate(node); 186 | 187 | return node; 188 | } 189 | 190 | 191 | 192 | void preorder(AVLTREE* root) { // Önce Kök 193 | 194 | // KÖK - SOL - SAĞ (Root-Left-Right) 195 | 196 | if (root != NULL) { 197 | 198 | printf("%5d ", root->data); 199 | 200 | preorder(root->left); 201 | preorder(root->right); 202 | } 203 | } 204 | 205 | void inorder(AVLTREE* root) { // Kök Ortada 206 | 207 | // SOL - KÖK - SAĞ (Left-Root-Right) 208 | 209 | if (root != NULL) { 210 | 211 | inorder(root->left); 212 | 213 | printf("%5d ", root->data); 214 | 215 | inorder(root->right); 216 | } 217 | } 218 | 219 | void postorder(AVLTREE* root) { // Kök Sonda 220 | 221 | // SOL - SAĞ - KÖK (Left-Right-Root) 222 | 223 | if (root != NULL) { 224 | 225 | postorder(root->left); 226 | postorder(root->right); 227 | 228 | printf("%5d ", root->data); 229 | } 230 | } 231 | 232 | int size(AVLTREE* root) { // Düğüm Sayılarını Veren Fonksiyon 233 | 234 | if (root == NULL) 235 | return 0; 236 | 237 | else 238 | return size(root->left) + 1 + size(root->right); 239 | 240 | } 241 | 242 | AVLTREE* minValueNode(AVLTREE* node) 243 | { 244 | AVLTREE* current = node; 245 | while (current->left != NULL) 246 | current = current->left; 247 | return current; 248 | } 249 | 250 | int minValue(AVLTREE* root) { // Ağaçtaki Tüm Verilerden En Küçük Olan Değer 251 | if (root == NULL) 252 | return 0; 253 | 254 | while (root->left != NULL) 255 | root = root->left; 256 | 257 | return(root->data); 258 | } 259 | 260 | int maxValue(AVLTREE* root) { // Ağaçtaki Tüm Verilerden En Büyük Olan Değer 261 | 262 | if (root == NULL) 263 | return 0; 264 | 265 | while (root->right != NULL) 266 | root = root->right; 267 | 268 | return(root->data); 269 | } 270 | 271 | 272 | int heightofTree(AVLTREE* root) { // Bir Ağacın Yüksekliğini Bulmak (Kökün Yüksekliği) 273 | 274 | if (root == NULL) 275 | return -1; 276 | 277 | else { 278 | 279 | int leftHeight, rightHeight; 280 | 281 | leftHeight = heightofTree(root->left); 282 | 283 | rightHeight = heightofTree(root->right); 284 | 285 | if (rightHeight > leftHeight) 286 | return rightHeight + 1; 287 | 288 | else 289 | return leftHeight + 1; 290 | } 291 | 292 | } 293 | 294 | AVLTREE* searchtree(AVLTREE* node, int data) { // İstenilen Veriyi Bulmak 295 | 296 | if (node != NULL) 297 | 298 | if (node->data == data) 299 | return node; 300 | 301 | else if (node->data > data) 302 | searchtree(node->left, data); 303 | 304 | else 305 | searchtree(node->right, data); 306 | 307 | else 308 | return NULL; 309 | } 310 | 311 | AVLTREE* deleteNode(AVLTREE* root, int data) { 312 | 313 | /*1. Kısım: İkili Arama Ağacı silme işlemi ile aynı yapılır*/ 314 | 315 | if (root == NULL) 316 | return root; 317 | 318 | if (data < root->data) 319 | root->left = deleteNode(root->left, data); 320 | 321 | else if (data > root->data) 322 | root->right = deleteNode(root->right, data); 323 | 324 | else 325 | { 326 | if ((root->left == NULL) || (root->right == NULL)) 327 | { 328 | AVLTREE* temp = root->left ? root->left : root->right; 329 | if (temp == NULL) 330 | { 331 | temp = root; 332 | root = NULL; 333 | } 334 | else 335 | *root = *temp; 336 | 337 | free(temp); 338 | } 339 | else 340 | { 341 | AVLTREE* temp = minValueNode(root->right); 342 | root->data = temp->data; 343 | root->right = deleteNode(root->right, temp->data); 344 | } 345 | } 346 | 347 | 348 | /* 2. Kısım: AVL Ağacı Olması İçin Döndürme İşlemleri Yapılır*/ 349 | 350 | if (root == NULL) 351 | return root; 352 | 353 | root->height = 1 + maxNumber(height(root->left), height(root->right)); 354 | 355 | 356 | int blnc = balance(root); 357 | 358 | if (blnc > 1 && balance(root->left) >= 0) 359 | return rightRotate(root); 360 | 361 | if (blnc > 1 && balance(root->left) < 0) 362 | return leftRightRotate(root); 363 | 364 | if (blnc < -1 && balance(root->right) <= 0) 365 | return leftRotate(root); 366 | 367 | if (blnc < -1 && balance(root->right) > 0) 368 | return rightLeftRotate(root); 369 | 370 | return root; 371 | } 372 | 373 | 374 | 375 | 376 | void createmyroot() { 377 | 378 | int n = 0; 379 | int i = 0; 380 | 381 | printf("Ağaca Veri Eklemek İçin Sayı Giriniz (-1 Girilene kadar) \n"); 382 | 383 | do { 384 | 385 | printf(" %d. Sayıyı Giriniz: ", i + 1); 386 | scanf("%d", &n); 387 | 388 | if (n != -1) 389 | myroot = insert(myroot, n); 390 | 391 | i++; 392 | 393 | } while (n != -1); 394 | 395 | } 396 | 397 | 398 | 399 | int main() { 400 | 401 | setlocale(LC_ALL, "Turkish"); //Türkçe karakter yazdırmamızı sağlayan fonksiyon 402 | 403 | int sec = 0; 404 | int node; 405 | 406 | 407 | while (sec != 100) 408 | { 409 | 410 | printf( 411 | "\n ****************************************************\n" 412 | " 1 - Ağaç Oluştur / Ağaç Varsa Veri Ekle\n" 413 | " 2 - Preorder?\n" 414 | " 3 - Inorder?\n" 415 | " 4 - Postorder?\n" 416 | " 5 - Ağaçtan İstediğiniz Veriyi Bulma\n" 417 | " 6 - Ağacın Yüksekliği (Kökün Yüksekliği) Nedir?\n" 418 | " 7 - Ağacın En Küçük Değeri Nedir?\n" 419 | " 8 - Ağacın En Büyük Değeri Nedir?\n" 420 | " 9 - Ağacın Düğümlerinin Sayısı Nedir?\n" 421 | " 10 - Ağaçtan Veri Silmek\n" 422 | 423 | 424 | ); 425 | 426 | printf("\n\n Seçiminizi Yapınız: "); 427 | scanf("%d", &sec); 428 | 429 | printf("\n"); 430 | 431 | if (sec == 1) createmyroot(); 432 | 433 | else if (sec == 2) preorder(myroot); 434 | else if (sec == 3) inorder(myroot); 435 | else if (sec == 4) postorder(myroot); 436 | else if (sec == 5) { 437 | printf("\nAranacak Veriyi Giriniz: "); 438 | scanf("%d", &node); 439 | 440 | tmp = searchtree(myroot, node); 441 | 442 | if (tmp) 443 | { 444 | printf("Düğüm Bulundu= %d\n", tmp->data); 445 | } 446 | else 447 | { 448 | printf("Ağaçta Böyle Bir Veri YOK\n"); 449 | } 450 | 451 | } 452 | 453 | else if (sec == 6) { 454 | printf("Ağacın Yüksekliği: %d\n", heightofTree(myroot)); 455 | } 456 | 457 | else if (sec == 7) printf("%d", minValue(myroot)); 458 | else if (sec == 8) printf("%d", maxValue(myroot)); 459 | else if (sec == 9) printf("%d", size(myroot)); 460 | else if (sec == 10) { 461 | 462 | printf("\nSilinecek Veriyi Giriniz: "); 463 | scanf("%d", &node); 464 | 465 | tmp = deleteNode(myroot, node); 466 | 467 | if (tmp) 468 | { 469 | printf("Düğüm Silindi"); 470 | } 471 | else 472 | { 473 | printf("Ağaçta Böyle Bir Veri YOK\n"); 474 | } 475 | } 476 | } 477 | } 478 | -------------------------------------------------------------------------------- /08/README.md: -------------------------------------------------------------------------------- 1 | #### 08 - Data (Data Structures - Veri Yapıları) 2 | 3 | | \# | Başlıklar | 4 | | ----- | ------------------------------------- | 5 | | 01\.c | Tek Bağlı Liste\(Single Linked List\) | 6 | | 02\.c | Çift Bağlı Liste | 7 | | 03\.c | BTREE | 8 | | 04\.c | AVL | 9 | -------------------------------------------------------------------------------- /09/01.c: -------------------------------------------------------------------------------- 1 | /* Dosya Güncelleme 2 | 3 | Dosyada bilgileri tutulan öğrencilerden final notu 55 ile 59 arasında olan 4 | tüm öğrencilerin notuna 5 puan ekleyerek dosyayı güncelleyen(update) program kodu 5 | 6 | // Rastgele Erişimli Dosya 7 | 8 | */ 9 | #include 10 | #include 11 | 12 | struct ogrenci 13 | { 14 | int numara; 15 | char ad[20]; 16 | float final_notu; 17 | }; 18 | 19 | 20 | void main() 21 | { 22 | setlocale(LC_ALL, "Turkish"); 23 | 24 | struct ogrenci bilgi; 25 | 26 | int i = 1; 27 | 28 | FILE* myPtr; 29 | 30 | if ((myPtr = fopen("student.dat", "r+")) == NULL) 31 | printf("Dosya Açılamadı\n"); 32 | 33 | /* 34 | r+ -> Dosya hem okuma hem de yazma için açılır. 35 | Dosya yok ise açılamaz. 36 | */ 37 | 38 | else 39 | { 40 | fread(&bilgi, sizeof(struct ogrenci), 1, myPtr); //İlk Kaydı Okur 41 | 42 | /*fread: Dosyadan belirtilen kadar bayt okuyup hafızaya atar. 43 | 44 | fread(bellek, boyutu, sayısı, dosya_gosterici); 45 | 46 | bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak 47 | bellekte saklanacağı alan 48 | boyutu= okutulacak alanı uzunluğu 49 | sayısı= verinin tekrarlanma sayısı 50 | */ 51 | while (!feof(myPtr)) //Dosyanın sonuna gelene kadar devam et. 52 | 53 | /* 54 | feof(Dosya İşaretçisi): Dosyanın sonunu gösterir. 55 | */ 56 | { 57 | if (bilgi.final_notu >= 55 && bilgi.final_notu <= 59) 58 | { 59 | bilgi.final_notu += 5; 60 | 61 | fseek(myPtr, (i - 1) * sizeof(struct ogrenci), SEEK_SET); 62 | 63 | /* fseek: Dosyadaki konumu belirtilen işaretçinin konumunu ayarlar. 64 | 65 | fseek(dosya_gostericisi,offset,symbolic_constant) 66 | 67 | offset= dosyadaki konumu gösteren işaretçi 68 | symbolic_constant= dosyanın neresinden okumaya başlayacağını gösterir. 69 | 70 | SEEK_SET - başından başla 71 | SEEK_CUR - mevcut bulunan konumdan başla 72 | SEEK_END - dosyanın sonundan başla 73 | */ 74 | 75 | fwrite(&bilgi, sizeof(struct ogrenci), 1, myPtr); 76 | 77 | /*fwrite: bellekteki görüntüsü ile dosyaya yazar. 78 | 79 | fwrite(bellek, boyutu, sayısı, dosya_gosterici); 80 | 81 | bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak 82 | bellekte saklanacağı alan 83 | boyutu= okutulacak alanı uzunluğu 84 | sayısı= verinin tekrarlanma sayısı 85 | */ 86 | 87 | } 88 | 89 | i++; //Bir sonraki kayıt için indisi artırır. 90 | 91 | //Sıradaki kaydı oku. 92 | fseek(myPtr, (i - 1) * sizeof(struct ogrenci), SEEK_SET); 93 | fread(&bilgi, sizeof(struct ogrenci), 1, myPtr); 94 | 95 | } 96 | 97 | 98 | printf("Hesaplar Güncellendi"); 99 | 100 | 101 | } 102 | 103 | 104 | fclose(myPtr); //Açılmış olan dosyayı kapatır. 105 | } 106 | -------------------------------------------------------------------------------- /09/02.c: -------------------------------------------------------------------------------- 1 | /* Dosyadan Dosyaya Kopyalama 2 | 3 | Sıralı erişimli "notlar.txt" isimli bir dosyada öğrenci no(int), ad ve not(float) bilgisi tutulmaktadır. 4 | Bu dosyada yer alan kayıtlar arasında ismi "Ahmet" olan ve notu 60 ve üzerinde olan öğrencileri 5 | "basari.dat" isimli rastgele erişimli bir dosyaya yazarak aktaran kod 6 | 7 | // Sıralı Erişimli Dosya -> Rastgele Erişimli Dosya 8 | 9 | 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | 18 | struct ogrenci 19 | { 20 | int no; 21 | char ad[20]; 22 | float not; 23 | }; 24 | 25 | 26 | int main(void) 27 | { 28 | setlocale(LC_ALL, "Turkish"); 29 | 30 | FILE* ptr1, * ptr2; 31 | 32 | struct ogrenci kayit; 33 | 34 | ptr1 = fopen("notlar.txt", "r"); 35 | ptr2 = fopen("basari.dat", "w"); 36 | 37 | if (ptr1 != NULL && ptr2 != NULL) 38 | { 39 | fscanf(ptr1, "%d %s %f", &kayit.no, kayit.ad, &kayit.not); 40 | 41 | /* fscanf: Dosyadan okuma yapan bir işlevdir. 42 | fscanf(dosya_gostericisi, "%d %s %f", &myInt, myString, &myFloat) 43 | 44 | */ 45 | 46 | while (!feof(ptr1)) //Dosyanın sonuna gelene kadar devam et. 47 | 48 | /* 49 | feof(Dosya İşaretçisi): Dosyanın sonunu gösterir. 50 | */ 51 | { 52 | if (strcmp(kayit.ad, "Ahmet") == 0 && kayit.no >= 60) 53 | fwrite(&kayit, sizeof(struct ogrenci), 1, ptr2); 54 | fscanf(ptr1, "%d %s %f", &kayit.no, kayit.ad, &kayit.not); 55 | } 56 | 57 | fclose(ptr1); 58 | fclose(ptr2); 59 | //fclose: Açılmış olan bir dosyayı kapatır. 60 | } 61 | 62 | } 63 | 64 | /* 65 | 66 | strcmp= birinci yazı ile ikinci yazı birbirine eşit ise 0 değeridir. 67 | 68 | */ 69 | -------------------------------------------------------------------------------- /09/03.c: -------------------------------------------------------------------------------- 1 | /* Bilgiyi Ekrana Basma 2 | 3 | Dosyada bilgileri tutulan öğrencilerden en yüksek ikinci final notuna 4 | sahip öğrencinin numara,ad ve notunu bilgilerini ekranan basan kod 5 | 6 | // Rastgele Erişimli Dosya 7 | 8 | 9 | */ 10 | 11 | 12 | #include 13 | #include 14 | 15 | 16 | struct ogrenci 17 | { 18 | int numara; 19 | char ad[40]; 20 | float not; 21 | }; 22 | 23 | 24 | void ikinciMax(FILE*okuPtr) 25 | { 26 | 27 | struct ogrenci bilgi, max1, max2; 28 | 29 | fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr); //İlk Kaydı okur. 30 | 31 | /* fread: Dosyadan belirtilen kadar bayt okuyup hafızaya atar. 32 | fread(bellek, boyutu, sayısı, dosya_gosterici); 33 | 34 | bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak 35 | bellekte saklanacağı alan 36 | boyutu= okutulacak alanı uzunluğu 37 | sayısı= verinin tekrarlanma sayısı 38 | */ 39 | 40 | max1 = bilgi; 41 | max2 = bilgi; 42 | 43 | while (!feof(okuPtr)) //Dosyanın sonuna gelene kadar devam et. 44 | 45 | /* 46 | feof(Dosya İşaretçisi): Dosyanın sonunu gösterir. 47 | */ 48 | { 49 | if (bilgi.not> max1.not) 50 | { 51 | max2 = max1; 52 | max1 = bilgi; 53 | } 54 | 55 | else if (bilgi.not> max2.not) 56 | max2 = bilgi; 57 | 58 | fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr); 59 | 60 | } 61 | 62 | printf("İkinci En Büyük Final Notu Olan Öğrenci\n"); 63 | printf("%d\t%s\t%2.f\n", max2.numara, max2.ad, max2.not); 64 | 65 | 66 | } 67 | 68 | 69 | int main(void) 70 | { 71 | setlocale(LC_ALL, "Turkish"); 72 | 73 | FILE* myPtr; 74 | 75 | if ((myPtr = fopen("student.dat", "r")) == NULL) 76 | printf("Dosya Açılamadı\n"); 77 | 78 | else 79 | ikinciMax(myPtr); 80 | } 81 | -------------------------------------------------------------------------------- /09/04.c: -------------------------------------------------------------------------------- 1 | /* Bilgiyi Ekrana Basma (2) 2 | 3 | Dosyada bilgileri tutulan öğrencilerden en düşük ikinci final notuna 4 | sahip öğrencinin numara,ad ve notunu bilgilerini ekranan basan kod 5 | 6 | // Rastgele Erişimli Dosya 7 | 8 | 9 | */ 10 | 11 | 12 | #include 13 | #include 14 | 15 | 16 | struct ogrenci 17 | { 18 | int numara; 19 | char ad[40]; 20 | float not; 21 | }; 22 | 23 | 24 | void ikinciMin(FILE*okuPtr) 25 | { 26 | 27 | struct ogrenci bilgi, min1, min2; 28 | 29 | fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr); //İlk Kaydı okur. 30 | 31 | /* fread: Dosyadan belirtilen kadar bayt okuyup hafızaya atar. 32 | fread(bellek, boyutu, sayısı, dosya_gosterici); 33 | 34 | bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak 35 | bellekte saklanacağı alan 36 | boyutu= okutulacak alanı uzunluğu 37 | sayısı= verinin tekrarlanma sayısı 38 | */ 39 | 40 | min1 = bilgi; 41 | min2 = bilgi; 42 | 43 | while (!feof(okuPtr)) //Dosyanın sonuna gelene kadar devam et. 44 | 45 | /* 46 | feof(Dosya İşaretçisi): Dosyanın sonunu gösterir. 47 | */ 48 | { 49 | if (bilgi.not 4 | #include 5 | #define MAX_SIZE 25 6 | 7 | struct student { 8 | int schoolnumber; 9 | char name[MAX_SIZE]; 10 | char surname[MAX_SIZE]; 11 | 12 | }; 13 | 14 | void display(FILE*); 15 | 16 | int main() 17 | { 18 | setlocale(LC_ALL, "Turkish"); 19 | 20 | struct student school; 21 | 22 | int i; 23 | int students; 24 | 25 | printf("Öğrenci Sayısını Giriniz: "); 26 | scanf("%d", &students); 27 | 28 | printf("\n"); 29 | 30 | FILE* fptr; 31 | 32 | 33 | if ((fptr = fopen("student.txt", "w")) == NULL) 34 | printf("Dosya Açılamadı\n"); 35 | 36 | else 37 | { 38 | rewind(fptr); 39 | 40 | //fprintf(fptr, "%-28s%-30s%10s\n", "Öğrencinin Okul Numarası", "Öğrencinin Soyadı", "Öğrencinin Adı"); 41 | 42 | 43 | for (i = 0; i < students; ++i) 44 | { 45 | printf("%d. Öğrenci\n", i + 1); 46 | 47 | printf("Öğrencinin Okul Numarası:"); 48 | scanf("%d", &school.schoolnumber); 49 | 50 | printf("Öğrencinin Adı:"); 51 | scanf("%s", &school.name); 52 | 53 | printf("Öğrencinin Soyadı:"); 54 | scanf("%s", &school.surname); 55 | 56 | 57 | printf("\n"); 58 | 59 | 60 | fprintf(fptr, "%-10d%-16s%-16s\n", school.schoolnumber, school.name, school.surname); 61 | } 62 | 63 | fclose(fptr); 64 | } 65 | 66 | 67 | printf("\nÖğrenci Bilgileri Dosyaya Yazıldı\n"); 68 | 69 | display(fptr); 70 | 71 | printf("\nYer Değiştirme Yapıldı\n"); 72 | 73 | fclose(fptr); 74 | } 75 | 76 | 77 | void display(FILE* fptr) 78 | { 79 | struct student tmp1 = {0,"",""}; 80 | struct student tmp2 = {0,"",""}; 81 | 82 | if ((fptr = fopen("student.txt", "r+")) == NULL) 83 | printf("Dosya Açılamadı\n"); 84 | 85 | else 86 | { 87 | 88 | fseek(fptr, (0) * sizeof(struct student), SEEK_SET); 89 | 90 | 91 | fread(&tmp1, sizeof(struct student), 1, fptr); 92 | 93 | 94 | fseek(fptr, (2) * sizeof(struct student), SEEK_SET); 95 | 96 | 97 | fread(&tmp2, sizeof(struct student), 1, fptr); 98 | 99 | 100 | 101 | fseek(fptr, (0) * sizeof(struct student), SEEK_SET); 102 | 103 | 104 | fwrite(&tmp2, sizeof(struct student), 1, fptr); 105 | 106 | 107 | fseek(fptr, (2) * sizeof(struct student), SEEK_SET); 108 | 109 | 110 | fwrite(&tmp1, sizeof(struct student), 1, fptr); 111 | 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /09/06.c: -------------------------------------------------------------------------------- 1 | /* Dosya Örnek Uygulama 2 | 3 | Öğrencilere ait numara, isim, vize ve final notunun tutulduğu “notlar.txt” isimli dosya üzerinde işlemler yapabileceğiniz bir C programı yazınız. Buna göre programın menüsü şu şekilde olacaktır:, 4 | 1- Dosya oluştur / veri gir 5 | 2- Dosyadan oku / listele 6 | 3- Geçme notu 60 üstü olanları listele 7 | 4- Dosyada geçme notu 60 ve üstü olanları “gecenler.txt”, düşük olanları ise “kalanlar.txt” dosyasına yazdır. 8 | 5- Dosya boyutunu ekrana yazdır. 9 | Not: Her bir menü seçeneği bir fonksiyon ile yapılıcaktır. 10 | 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | 17 | struct ogrenci { 18 | int okul_no; 19 | char isim[40]; 20 | int vize_notu; 21 | int final_notu; 22 | 23 | 24 | }; 25 | 26 | void dosyaOlustur() 27 | { 28 | struct ogrenci okul; 29 | 30 | int i; 31 | int ogrenci_sayisi; 32 | 33 | printf("Öğrenci Sayısını Giriniz: "); 34 | scanf("%d", &ogrenci_sayisi); 35 | 36 | printf("\n"); 37 | 38 | FILE* fptr; 39 | 40 | if ((fptr = fopen("notlar.txt", "w")) == NULL) 41 | printf("Dosya Açılamadı\n"); 42 | 43 | else 44 | { 45 | for (i = 0; i < ogrenci_sayisi; ++i) 46 | { 47 | printf("%d. Öğrenci\n", i + 1); 48 | 49 | printf("Öğrencinin Okul Numarası:"); 50 | scanf("%d", &okul.okul_no); 51 | 52 | printf("Öğrencinin Adı:"); 53 | scanf("%s", okul.isim); 54 | 55 | printf("Öğrencinin Vize Notu:"); 56 | scanf("%d", &okul.vize_notu); 57 | 58 | printf("Öğrencinin Final Notu:"); 59 | scanf("%d", &okul.final_notu); 60 | 61 | printf("\n"); 62 | 63 | fprintf(fptr, "%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu); 64 | 65 | } 66 | 67 | fclose(fptr); 68 | } 69 | 70 | 71 | printf("\nÖğrenci Notları Dosyaya Yazıldı\n"); 72 | 73 | } 74 | 75 | void dosyaOku() 76 | { 77 | struct ogrenci okul; 78 | 79 | FILE* fptr; 80 | 81 | 82 | if ((fptr = fopen("notlar.txt", "r")) == NULL) 83 | printf("Dosya Açılamadı\n"); 84 | 85 | else 86 | { 87 | fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu); 88 | 89 | 90 | while (!feof(fptr)) 91 | { 92 | 93 | printf("%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu); 94 | 95 | fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu); 96 | } 97 | 98 | 99 | } 100 | 101 | fclose(fptr); 102 | } 103 | 104 | void listele() 105 | { 106 | struct ogrenci okul; 107 | 108 | FILE* fptr; 109 | 110 | int gecme_notu; 111 | 112 | 113 | 114 | if ((fptr = fopen("notlar.txt", "r")) == NULL) 115 | printf("Dosya Açılamadı\n"); 116 | 117 | else 118 | { 119 | fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu); 120 | 121 | gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6); 122 | 123 | while (!feof(fptr)) 124 | { 125 | 126 | if (gecme_notu >= 60) 127 | { 128 | printf("%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu); 129 | } 130 | 131 | fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu); 132 | 133 | gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6); 134 | 135 | } 136 | 137 | } 138 | 139 | 140 | 141 | fclose(fptr); 142 | } 143 | 144 | void dosyaKopyalama() 145 | { 146 | struct ogrenci okul; 147 | 148 | FILE* fptr = fopen("notlar.txt", "r"); 149 | FILE* kalan = fopen("kalanlar.txt", "w"); 150 | FILE* gecen = fopen("gecenler.txt", "w"); 151 | 152 | int gecme_notu; 153 | 154 | 155 | if (fptr == NULL) 156 | printf("Dosya Açılamadı\n"); 157 | 158 | else 159 | { 160 | fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu); 161 | 162 | gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6); 163 | 164 | while (!feof(fptr)) 165 | { 166 | if (gecme_notu >= 60) 167 | { 168 | fprintf(gecen, "%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu); 169 | } 170 | 171 | else 172 | { 173 | fprintf(kalan, "%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu); 174 | } 175 | 176 | fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu); 177 | gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6); 178 | } 179 | 180 | } 181 | 182 | printf("\nGeçenler ve Kalanlar İçin Ayrı Dosyalar Oluşturuldu.\n"); 183 | 184 | 185 | fclose(kalan); 186 | fclose(gecen); 187 | fclose(fptr); 188 | } 189 | 190 | void dosyaBoyutu() 191 | { 192 | int i = 0; 193 | char k; 194 | 195 | FILE* fptr = fopen("notlar.txt", "r"); 196 | 197 | if (fptr == NULL) 198 | printf("Dosya Açılamadı\n"); 199 | 200 | else 201 | { 202 | 203 | k = fgetc(fptr); 204 | 205 | while (!feof(fptr)) 206 | { 207 | i++; 208 | k = fgetc(fptr); 209 | } 210 | 211 | 212 | } 213 | 214 | printf("Dosyanın Boyutu: %d Byte\n", i); 215 | fclose(fptr); 216 | } 217 | 218 | 219 | 220 | int main() 221 | { 222 | setlocale(LC_ALL, "Turkish"); 223 | 224 | int sec = 6; 225 | 226 | while (sec != 7) 227 | { 228 | printf("\n1 - Dosya Oluştur\n" 229 | "2 - Dosyayı Oku\n" 230 | "3 - Dersi Geçen Öğrencilerin Listesi\n" 231 | "4 - Geçenler Ayrı Dosyaya Kalanları Ayrı Dosyaya Yazdır\n" 232 | "5 - Dosya Boyutunu Ekrana Yazdır\n" 233 | "6 - Çıkış\n"); 234 | 235 | printf("Seçiminizi Yapınız:"); 236 | scanf("%d", &sec); 237 | 238 | printf("\n"); 239 | 240 | if (sec == 1) dosyaOlustur(); 241 | else if (sec == 2) dosyaOku(); 242 | else if (sec == 3) listele(); 243 | else if (sec == 4) dosyaKopyalama(); 244 | else if (sec == 5) dosyaBoyutu(); 245 | else if (sec == 6) exit(0); 246 | } 247 | } 248 | -------------------------------------------------------------------------------- /09/README.md: -------------------------------------------------------------------------------- 1 | #### 09 - File (Dosya) 2 | 3 | | \.c | Başlıklar | 4 | | ----- | -------------------------- | 5 | | 01\.c | Dosya Güncelleme | 6 | | 02\.c | Dosyadan Dosyaya Kopyalama | 7 | | 03\.c | Bilgiyi Ekrana Basma | 8 | | 04\.c | Bilgiyi Ekrana Basma \(2\) | 9 | | 05\.c | Yer Değiştirme | 10 | | 06\.c | Dosya Örnek Uygulama | 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Rüveyda 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

C Programlama

2 | 3 |
4 | GitHub Stars 5 | GitHub Forks 6 |
7 |
8 |
9 | License 10 | Repo Size 11 | 12 |
13 | 14 |
15 | 16 | ## Programlama Örnekleri 17 | 18 | ### Konu Başlıkları 19 | 20 | #### 00 - Intro (Giriş) 21 | 22 | - Anahtar Kelimeler ve Tanımlamalar 23 | - Değişkenler ve Sabitler 24 | - C Veri Tipleri 25 | - C Giriş / Çıkış 26 | - C Operatörleri 27 | 28 | #### 01 - Basic (Basit) 29 | 30 | - Matematiksel İşlemler 31 | 32 | #### 02 - Flow (Akış) 33 | 34 | - if...else 35 | - switch case 36 | - break and continue 37 | - While/For Döngüleri 38 | 39 | #### 03 - Arr (Arrays- Diziler) 40 | 41 | - Çok Boyutlu Dizi (Matris) 42 | - Diziler ve İşlevler 43 | 44 | #### 04 - Func (Function - Fonksiyon) 45 | 46 | - Fonksiyon Tipleri 47 | 48 | #### 05 - String (Karakter Dizileri) 49 | 50 | #### 06 - Recursive (Özyinelemeli Fonksiyon) 51 | 52 | #### 07 - Pointer (İşaretçiler) 53 | 54 | #### 08 - Data (Data Structures - Veri Yapıları) 55 | 56 | - Listeler 57 | - Stack (Yığın) 58 | - Queue (Kuyruk) 59 | - Trees (Ağaçlar) 60 | 61 | #### 09 - File (Dosya) 62 | 63 |
64 | 65 | ### References / Useful Links 66 | 67 | - [Code Forwin](https://codeforwin.org/2017/08/introduction-c-programming.html) 68 | - [GeeksforGeeks](https://www.geeksforgeeks.org/c-programming-language/) 69 | - [Tutorials Point](https://www.tutorialspoint.com/cprogramming/index.htm) 70 | - [W3 School](https://www.w3schools.in/c-tutorial/) 71 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | --------------------------------------------------------------------------------