C Dili : Ek: 16. Konu

Programlama Örnekleri

Bu konuda, kolaydan zora doğru giden programlama örnekleri göstermek ve açıklamasını yapmak istedim.
Bu programlar, hemen her zaman işimize yarayabilen temel taşlarını içermektedir. Buradaki programlar “en optimal” değil, en kolay anlaşılır olarak tasarlanmıştır. Hatta sanki bu online kitaptaki tüm örnekler böyledir!

ciftmitekmi.c
=============================================================
#include<stdio.h>
main()
{

    int n;
    printf
(“Bir tamsayı giriniz \n);
    scanf
(“%d”,&n);  
    if ( n%2 == 0 )
            printf
(“Çift \n);
    else
            printf(“Tek \n);
    return 0;
}
=============================================================
Bu programda % işareti olan modulo operatörünü görüyorsunuz. Yani, bir rakamı bir başka rakama böler, ve KALAN sayıyı döndürür.  Girilen rakamı 2 ye bölünce birşey kalıyorsa, o rakam tek sayıdır.

artikyil.c
=============================================================
#include <stdio.h>
main()
{
   int year;
   printf(“Artık yıl olup olmadığını kontrol için bir yıl giriniz\n”);
   scanf(“%d”, &year);
   if ( year%400 == 0)
      printf(“%d bir artık yıldır\n”, year);
   else if ( year%100 == 0)
      printf(“%d bir artık yıl değildir.\n”, year);
   else if ( year%4 == 0 )
      printf(“%d bir artık yıldır\n”, year);
   else
      printf(“%d bir artık yıl değildir\n”, year);  
   return 0;
}
=============================================================
Önce yılın 400’e tam olarak bölünüp bölünmediğini kontrol ediyoruz. Bölünüyorsa artık yıldır.
Daha sonra 100e bölünmesini, 4 e bölünmesini kontrol ediyoruz.

rakamlarıtopla.c
=============================================================
#include<stdio.h>
main()
{
   int n, toplam = 0, kalan;
   printf(“Bir tamsayı girin\n”);
   scanf(“%d”,&n);
   while( n != 0 )
   {
      kalan = n % 10;
      toplam += kalan;
      n = n / 10;
   }
   printf(“Girilen rakamın hanelerinin toplamı = %d\n”,toplam);
   return 0;
}
=============================================================
Bu program girilen rakamın içindeki rakamları toplayıp size toplamını sunar. Bunu, her seferinde rakamı 10 a bölerek yapar. Kalan rakamları toplamak bize hanelerinin toplamını verecektir.


asalsayimi.c
=============================================================
main()
{
   int n, c;
   printf(“Bir rakam giriniz\n”);
   scanf(“%d”, &n);
   if ( n == 2 )
      printf(“Asal sayıdır.\n”);
   else
   {
       for (c=2 ; c <= n – 1 ; c++)
       {
           if ( (n%c) == 0 )
              break;
       }
       if ( c != n )
          printf(“Asal değil.\n”);
       else
          printf(“Asal sayıdır.\n”);
   }
   return 0;
}
=============================================================
Bu programda girilen rakamın bir asal sayı (sadece kendisine ve 1 e bölünebilen rakamlar) olup olmadığına bakıyoruz. Rakamın önce 2 olup olmadığını kontrol ediyoruz (2 özel bir durumdur).. Daha sonra kendisine kadar olan her rakama bölünüp bölünmediğini kontrol ediyoruz.

 
ondalik2biner.c
=============================================================
#include <stdio.h>
main()
{
   int n, c, k;
   printf(“Bir tamsayı girinizn”);
   scanf(“%d”,&n);
   printf(“%d bu tamsayının biner sistemdeki karşılığı şudur:\n”, n);
   for ( c = 31 ; c >= 0 ; c– )
   {
      k = n >> c;
      if ( k & 1 )
         printf(“1”);
      else
         printf(“0”);
   }
   printf(“\n”);
   return 0;
}
=============================================================
Bu program, girilen tamsayıyı sağa doğru kaydırır (>> operatoru), ve ilk hanesini 1 ile AND ler.
Bunun sonucunda o hanede 1 varsa, if işleminin sonucu doğru olacağından ekrana 1 yazacagız, değilse 0 yazacağız.

noelagaci.c
=============================================================
#include<stdio.h>
main()
{
   int satir, c, n, temp;
   printf(“Kaç satırlık bir noel ağacı yaratalım? “);
   scanf(“%d”,&n);
   temp = n;
   for ( satir = 1 ; satir <= n ; satir++ )
   { // Önce satır başındaki boşlukları çizelim..
      for ( c = 1 ; c < temp ; c++ )
         printf(” “);
      temp–;
     // Şimdi de yıldızları..
      for ( c = 1 ; c <= 2*satir – 1 ; c++ )
         printf(“*”);
      printf(“\n”);
   }
   return 0;
}
=============================================================
Bu programda girilen satır kadar uzunlukta bir noel ağacı çizeceğiz. Bunu yaparken her satırın tek tek üretildiğini unutmayalım, ve bir satırdan bir alt satıra geçerken neler değiştiğini düşünelim.. Örnek bir ağaç:

     *
    ***
*****

 

Yani her satırın başındaki boşluk sayısı birer birer azalmakta, ve yıldız sayısı 2 şer artmaktadır.

stringuzunlugu.c
=============================================================
main()
{
    char str[80];
    int i=0;
    printf(“Bir string giriniz..”);
    scanf(“%s”,str);
    while (str[i++]);
    printf(“String uzunluğu: %d dir.\n”,i-1);
}
=============================================================
…veya tabi strlen()  fonksiyonunu kullanabilirsiniz.. Bu program girilen veriyi bir dizi içine almakta ve
dizi elemanlarını bir döngü içinde ziyaret etmektedir. Her stringin sonunda yer alan “0” rakamı, while ()  döngüsünü sonlandırmaktadır. Aksi takdirde, i nin değeri bir artmakta, ve döngü tekrarlamaktadır. Sonundaki ; yüzünden while döngüsü o satırda kalmaktadır.


buyukkucuk.c
=============================================================
main()
{
    char str[80];
    int i=0;
    printf(“Bir string giriniz..”);
    scanf(“%s”,str);
    while (str[i]) {
        if (str[i]>=’A’ && str[i]<=’Z’)
                str[i] += 32;
        else
        if (str[i]>=’a’ && str[i]<=’z’)
                str[i] -= 32;
        i++;
    }
    printf(“Yeni string: %s.\n”,str);
}
=============================================================

Bu program küçük harfleri büyüğe, büyük harfleri de küçük harfe çevirecektir.
Girilen string i bir dizin olarak kabul ederek ilk elemanının A ile Z harfi arasında olup olmadığını kontrol ediyoruz. Öyleyse buna 32 ekleyerek, ASCII tablosundaki aynı harfin küçük harf olanına değişmesini sağlıyoruz. Değilse, ve o eleman küçük harfse bu sefer de tersini yaparak 32 çıkarıyoruz – ki ASCII tablosunda aynı harfin büyük harf olanına dönüşsün diye..

fibonacci.c
=============================================================
main()
{
   int n, ilk = 0, ikinci = 1, birsonraki, c;
   printf(“Kaç tane fibonacci istersiniz \n”);
   scanf(“%d”,&n);
   printf(“Fibonacci serisindeki ilk %d rakam şöyledir::-\n”,n);
   for ( c = 0 ; c < n ; c++ )
   {
      if ( c <= 1 )
        birsonraki = c;
      else
      {
         birsonraki = ilk + ikinci;
         ilk = ikinci;
         ikinci = birsonraki;
      }
      printf(“%d\n”, birsonraki);
   }
}
=============================================================
Fibonacci serisi, recursion konusunda da gördüğümüz gibi dilerseniz recursion ile dilerseniz yukarıdaki gibi hesaplanabilir. Hatırlayalım: Fibonacci serisi, kendisinden önce gelen 2 rakamın toplamından oluşur.. Yani  0,1,1,2,3,5,8 diye gider.. Bu program sizden bir rakam aldıktan sonra ilk “n” Fibonacci yi ekrana döker.
“ilk” ve “ikinci” değişkenleri kendisinden önce gelen 2 rakamı tutar. Döngünün her dönüşünce bu değişkenlerin değeri bir “kaydırılır” yani diğer değişkene aktarılır.

tarihnedir.c
=============================================================
#include<stdio.h>
#include<time.h>
 main()
{
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);

    printf(“Şu anda tarih ve  saat: %d-%d-%d %d:%d:%d\n”, tm.tm_year + 1900, tm.tm_mon + 1,tm.tm_mday,
        tm.tm_hour, tm.tm_min, tm.tm_sec);
}
=============================================================
C dilinde çok zengin olan tarih/zaman fonksiyonlarından ufak bir örnek size..
Burada time.h içinde yer alan time fonksiyonu, sistem saatini döndürmekte, ve localtime()  ile kendi zaman dilimimize bunu dönüştürmekteyiz. 

sifreoku.c
=============================================================
#include <curses.h>
main()
{
  int  i;
  char buffer[80];           
  initscr();                /* ekranı sil */
  printw(“Bir şifre giriniz : “);    /* ekrana çıkacak yazı        */
  refresh();                /* ekranı güncelle */
  noecho();                /* ekrana yazılmasını engelle    */
                    /* enter e basılıncaya kadar basılan tuşları oku   */
  while((buffer[i] = getch()) != ‘\n’) i++;
  printw(“\nŞifreniz %s – dir.. Bir tuşa basınız”,buffer);
  refresh();
  getch();
  endwin();                /* curses u kapat        */
}
=============================================================
Bazen bir soruya cevabın ekranda görünmesini istemeyebilirsiniz.. Unix/Linux da çalışabilen bu program, size bunu yapacaktır. Ekrana çıktı oluşturmadan basılan tuşları kaydedecektir. Bunu yapmak için Curses kütüphanesinin fonksiyonlarını kullanıyoruz.


Ana Sayfaya Dönüş