C DERSLERI - web dersanesi - Blogcu



web dersanesi


Google

• 9/6/2007 - C DERS NOTLARI

Kategori: C DERSLERI

Örnek 3. 1.1.6:  Vergi iadesini hesaplan programı yazınız. (else if  yapısı)

  (0-60 bin : %10, 60-120 bin : %,120-200 bin : %12,>200 bin : %5) 

 main()

 {

   float fat_top, vergi_iade;

    printf("Fatura toplamlarını giriniz ");

    scanf("%f", &fat_top);

   if (fat_top < 60000)

      vergi_iade = fat_top * 0.10;

   else if (fat_top < 120000)

      vergi_iade = 6000 + (fat_top - 60000) * 0.20;

   else if(fat_top < 200000)

      vergi_iade = 18000 + (fat_top - 120000) * 0.12;

   else

      vergi_iade = 27600 + (fat_top - 200000) * 0.05;

      printf("ödenecek vergi iadesi = %fn", vergi_iade);

 }

  

 Örnek 3. 1.1.7: Girilen tarihteki günün adını veren programı yazınız.

  

 #include 

 main ( )

 {

    int gun, ay, yıl ;

    long gt ;

   printf(" Tarihi gir" ) ; scanf ( " %d %d %d " ,&gun)

  /* oncekı yıllardakı gun sayısını hesapla */

   gt=( yıl*1)*365 + yıl/4;

  

 /* bu yildaki aylardaki gunleri ekle */

 

 if (ay==2)

  gt = gt + 31 ;

 else if (ay ==3)

  gt = gt + 31 + 28 ;

 else if (ay ==4)

  gt = gt + 31 + 28 +31;

 else if (ay ==5)

  gt = gt + 31 + 28 +31+ 30 ;

 else if (ay ==6)

  gt = gt + 31 + 28 +31+ 30 +31;

 else if (ay ==7)

  gt = gt + 31 + 28 +31+ 30 +31+ 30 ;

 else if (ay ==8)

  gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31 ;

 else if (ay ==9)

  gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 ;

 else if (ay ==10)

  gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31;

  else if (ay ==11)

  gt = gt  + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31+ 30 ;

 else if (ay ==12)

  gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31+ 30 +31;

 

  /*Bu ayı ekle */

  gt = gt+ gun; 

  if(yıl%4==0 && ay>2),

   gt =gt+1;

 gt=gt %7,

 if(gt==1)

  printf(" Pazar" );

  else if(gt==2)

 printf(" Pazartesi" );

  else if(gt==3)

  printf(" Salı" );

  else if(gt==4)

  printf(" Carsamba" );

  else if(gt==5)

  printf(" Persembe" );

  else if(gt==6)

  printf(" Cuma" );

  else if(gt==7)

  printf(" Cumartesi" );

  }

 

  3.1.2  switch Deyimi  

 

   switch(  ) { 

    case  seçenek1 : Deyim;                                        

    case  seçenek2 : Deyim;                                     

       .

       .  

       .

    default  :     Deyim;

  }

 

  Seçicinin aldığı değere eşit seçeneğin olup olmadığına bakar.

 Var ise o noktadan sonraki deyimler yürütülür.  switch  deyiminin sonuna 

 gelindiğinde veya  break  deyimi ile karşılaşıldığında yürütme işlemi durur

 ve programın akışı switch deyimini izleyen deyim ile devam eder.  

  

 switch(i) {

    case 1 : printf("Bir");

    case 2 : printf("iki");

    default : printf("Hiçbiri");

 }

 

 i=1 ise  çıkış  BirikiHiçbiri

 i=2 ise çıkış  ikiHiçbiri

  

  Sorunu ortadan kaldırma için her durum için break deyimi eklenmeli.

  

 . Seçici  Ordinal  tiplerden biri olmalıdır (Ordinal tip: tü değerleri

   listelenebilinen veri tipleri - integer, char).

 . Seçici ile seçen ekler aynı tipte olmalıdır.

 . default kısmı seçimliktir. Seçeneklerin hiçbiri uygun değil ise yürütülür.

  

 #include 

 main()

 {

   char islem;

   int s1, s2, s3;

   printf("önce işlemi sonra sayıları girin ");

   scanf("%c%d%d",&islem, &s1, &s2);

   switch (islem) {

      case '+' : s3 = s1 + s2; break;

      case '-' : s3 = s1 - s2; break;

      case '*' : s3 = s1 * s2; break;

      case '/' : s3 = s1 / s2; break;

      default : printf ("Hatalı işlem"); 

    }

   printf("nSonuç = %d",s3);

 }

 

  Örnek 3.2.3.3 : Sin( x) fonksiyonun belli bie x için değerini seri açılımı 

             ile hesaplayınız. Serinin ilk 10 terimini kullanını(n tek sayi)

                                                                   

  main()

  {

    float    x;        /* fonksiyonun hesaplanacağı değer */

    float sinx;        /*  sin(x) in değeri */

    float   xt;        / * eklenen terimin payı */

    float fakt;        /* eklenen terimin paydası, faktoriyel */

    int isaret;        /* terimin +/- olmasını sağlar */

    int      i;

   clrscr();

   printf("Hesaplanacak değer : ");

   scanf("%f",&x);

   sinx = x;

   isaret = -1;

   fakt = 1;

   xt = x;

   for (i = 2; i<=10; i++) {

       xt = xt * x * x;

       fakt = fakt * (2 * i - 2) * (2 * i - 1);

       sinx = sinx + isaret * xt / fakt;

       isaret = -isaret;

   }

    printf("Değeri = %fn",sinx);

  }  

 

 Örnek :4.13:  Belirtilen tarihteki ayın kaç gün sürdüğünü veren 

               işlevi yazınız.

      Girdi : Ay ve yıl

      çıktı : Aydaki gün sayısı

  

 int aydakigun(int ay, int yil)

 {

   int i;

   switch (ay) {

       case 1:

       case 3:

       case 5:

       case 7:

       case 8:

       case 10:

       case 12: i = 31;break;

       case 2 :

               if (yil % 4 == 0)

                  i = 29;

               else

                  i = 28;

               break;

       default : i = 30;

   }

   return i;

 }

 

  Örnek :4.14:  önüüzdeki yılda Ramazan Bayramı nın hangi tarihte

        kutlanacağını hesaplayan programı yazınız. Bu yılki tarih 

        klavyeden gün ay ve yıl olarak okunacakır.

 

 Girdi: Bu yıl kutlanılan tarih

 çıktı : Sonraki tarih

  

 #include 

 int aydakigun(int, int);

 main()

 {

   int gun,ay, yil;

   int i, j ;

   clrscr();

   printf("Bu y ılki tarihi giriniz (G A Y) : ");

   scanf("%d %d %d",&gun, &ay, &yil);

   yil = yil + 1;

   gun = gun - 11;

   if (gun < 1 ) {

      ay = ay - 1;

      if (ay < 1 ) {

         ay = 12;

         yil = yil - 1 ;

      }

      gun = gun + aydakigun(ay, yil);

   }

   printf("Gelecek bayram = %d/%d/%dn",gun,ay,yil);

 }

 

 Diziyi Bir işleve Gönderme 

 

  şu ana kadar öğrenilen bilgi çerçevesinde işlevlere gönderilen 

  parametrelerin içeriklerinin işlev içerisinde değiştirilmesi mükün

  değildir. işleve değişkenin değeri gönderilir. işlev içerisindeki 

  işlemlerden parametre etkilenmez.

  

  Dizilerde durum böyle değildir. Normal kullanımda (şu ana kadar 

  görülen) dizi işleve gönderildiğinde elemanlar değiştirilebilir 

  (referans). Dizinin sadece herhangi bir elemanı gönderildiğinde ise

  değeri değiştirilemez (değer)

  

  Diziyi işleve gönderirken sadece adını parametre olarak yazmak 

  yeterlidir.

 

 Notlar  :

 

  *  Tanımlanan dizi boyutunun dışında bir eleman kullanımı durumunda

     C dili hata vermez (uyarmaz). 

  *  ilk indisin değerinin sıfır olması dolayısıyla  dizinin n. elemanın  

     indisi n değil n-1 dir.

  *  Gerektiği durumlarda dizi elemanlarının ilklendirilmesi (sıfırlamak) 

     unutulmamalı 

  * tanımlama anında  int a[10] = {13, 45 ..};     

                       /* fazla eleman yazılırsa hata oluşur */

                       int a[] = {  13, 45, 56};  

                       /* boyut belirtilen değer kadar olur */ 

  * giriş yaptırarak      scanf("%d", &a[i]);

  * doğrudan değer atayarak  a[i] = 4;

   

  Dizinin Boyutunu Değişken Kılma 

  

  #define önişlemcisi direktifi (preprocessor directive) 

 

  Simgesel sabit tanımlanmasını sağlar. C dili deyimlerinden biri değildir 

  (#include gibi). Kullanım biçimi

  

  #define SabitAdı  Değeri

  

  Program çalıştırıldığınde derleme işlemi öncesinde program içerisinde 

  SabitAdı simgesinim geçtiği yerlere Değeri konur.

 

  Örnek :  25 kişilik bir sınıftaki öğrencilerin sınav sonuçlarını okuyup 

           ortalamasını bulan program.

     * not bilgilerin saklanacağı veri yapısını belirle ve tipi tanımla

     * notları girdiren yöntemi yaz

     * Ortalamayı bulan fonksiyonu yaz

  

 #include 

 #define OGR_SAY 25

 void giris(int []);

 float ortalama(int []);

 main()

 {

   int ogr[OGR_SAY];

   clrscr();

   giris(ogr);

   printf("Ortalama = %fn", ortalama(ogr));

 }

 void giris(int ogr[])

 {

   int i;

    for (i=0; i

    {

       printf("% d. öğrencinin notunu gir : ",i+1);

       scanf("%d", &ogr[i]);

   }

 }

 float ortalama(int ogr[])

 {

   float x;

   int i;

   x = 0;

   for (i=0; i

       x = x + ogr[i];

   return x / OGR_SAY;

 }

 

   * 50şn küçük değerleri yazan işlev

   * 50şn küçük  değerlerin sayısını veren işlev

   * en yüksek notu veren işlev

   * Standart sapmayı veren işlen ( (abs(Xi - Xort) / OGR_SAY))

 

 5.3  Sıralama

   Dizi elemanlarının küçükten büyüğe veya büyükten küçüğe doğru dizilmesi 

   işlemi. Farklı performansa sahip birçok yöntem vardır. şimdilik en basit 

   olanlardan biri incelenecektir.

  

  Selection  Sort (seçim) 

  Dizinin en küçük elemanı bulunur ve birinci eleman ile yer değiştirilir. 

  Bu işlem (n-1). elemana kadar tekrar edilir. Her adımda en küçük eleman 

  dizinin kalan elemanlarından bulunur. örneğin aşağıda 4 elemanlı birdiziye  

  yöntemin uygulanması gösterilmiştir.

  

  Buble Sort 

  Bu yöntemde ardışıl iki eleman karşılaştırılır. Eğer önceki eleman 

  sonrakinden  büyük ise elemanlar yer değiştirilir. Bu şekilde dizi 

  taranır. Eğer herhangi bir değişiklik yapılmış ise işlem tekrar edilir.

  

  Başlangıç      1. adım       2. adım       3. adım 

  34 21 18 18   21 18 21 21   18 25 25 25     25 34 34 34

         

  Görüldüğü gibi, bu yöntemde dizi sıralandıktan sonra bir defa daha

  taranıyor.

  

 Selection Sort Kodlaması 

 

 1. Dizinin en küç ük elemanının indisini veren işlev

 2. Bu işlevi kullanarak diziyi sıralama

  

   

  5.4  çok Boyutlu Diziler

   çok boyutlu bilgileri veya veri lolarını saklamak için kullanılır.  

  iki boyutlu diziler daha sık kullanılır. örneğin; yıllara ve aylara 

  enflasyon rakamının takibi, matematikteki matriş işlemlerinin gerçeklenmesi,

  öğrenciler ve aldıkları derslerin takibi.

  

 Tanımlama biçimi :   iki türlü yapılabilir.

  

      Tip  Değişken_Adı[ indis1 ][ indis2 ][ indisn ];

  

  örneğin ;

       float Enf[5][12];

  Enf tipi iki boyutlu bir dizidir. Birinci boyut ( satır ) yılları,

  ikinci boyut ( sütun ) ayları gösterir.

  

   1.Ay 2.Ay 3.Ay 4.Ay 5.Ay 6.Ay 7.Ay 8.Ay 9.Ay 10.Ay 11.Ay 12.Ay

  1            

  2              

  3            

  4           

  5            

  

 C dili nde boyut sayısında bir sınır yoktur.Biligisayarın belleği 

 boyutu sınırlar. 

  

  Dizilerin bellekte saklanma biçimi :    

  Erişimin kolay olması için dizinin tü elemanları peşpeşe saklanır.

  Burada önce satır sonra sütunlar (tanımlanış sırasına göre) saklanır  .  

  

  !!!  çok boyutlu dizileri bir işleve gönderirken ilk boyut dışındaki

  boyutların büyüklüklerini vermek zorunludur.

  

  Örnek :   iki boyutlu dizi üzerine.

  

 #include 

 #define SATIR 5

 #define SUTUN 5

 double enbuyuk(double [][SUTUN], int );

 void  matris_oku(double [][SUTUN]);

 main()

 {

   double a[SATIR][SUTUN];

   double b[SATIR];  /* satirlardaki en buyuk elemanlar */

   double c[SATIR];  /* satirlardaki sutunlarin toplami */

   int   i, j;

   matris_oku(a);

   for (i = 0; i < SATIR; i++)

       b[i] = enbuyuk(a,i);

   /* Satirdaki elemanlarin toplamlarinin olusturdugu matris */

   for (i = 0; i < SATIR; i++)

      {

        c[i] = 0;

        for (j = 0; j < SUTUN; j++)

            c[i] = c[i] + a[i][j];

      }

   clrscr();

   for (i = 0; i < SATIR; i++) {

Yorum (yok) :: Yorum yaz! :: Bağlantı

Webdersanesine hos geldiniz.



WEb tasarımı. Kaynak kodları ve dahası Arşivime mutlaka göz atın. (Yazılar alıntıdır)

Bağlantılar

Ana Sayfa
Profilim
Arşiv
Arkadaşlarım
e-posta
Blog RSS
tuzla
ydo

Kategoriler

Arkadaşlar

E.YÜKSEL ÜSTÜNER
serdarpakirel
deadproof
carmencafe
boyacicocuk
icoskun24
yemekpisirmece
ezginil
blogyardimi
emeklilikhaber


Sayfa Güncel Sayfa:1 Toplam:11
| Sonraki Sayfa



webdersanesi

Get your own Chat Box! Go Large!

Daha fazla bilgi yarışması için buraya tıklayın