İZSU Su Faturası Hesaplama Programı

İlk algoritma ödevimiz ve benim çözümüm…

#include <stdio.h>
#include <stdlib.h>

int main()
{
  printf("Umut BENZER\n");
  printf("05-06-7670\n");
  printf("Aylık Satış Raporu\n\n");

  int abonetipi;
  int okuay;
  int okugun;
  int guncelsayac;
  int oncekigun;
  int oncekisayac;

  int aydakigun=31;     // Girilen ayda kac gun oldugunu tutacak. Varsayilan olarak 31 atali.
  int oncekiay;       // Bunun nedeni bir yildaki aylarin cogunun 31 cekmesi. Etkilik acisindan
  int oncekiaydakigun=31; // ay sadece 31 cekmiyorsa ileride case dongusunde bir sarta girilecek.

  int kacgungecti;
  int tuketim;

  float kademe1;
  float kademe2;
  float kademe3;

  float kademe1fiyat;
  float kademe2fiyat;
  float kademe3fiyat;
  float kademe4fiyat;

  float fiyat;
  float kalan;      // Ileride kalan = tuketim gececek. Bunun nedeni ekrana bu ay 0.000 ton harcadiniz yerine
              // 0 ton harcadiniz yazdirmak. Yoksa tek float degiskeni de kullanabilirdim.

  printf("Abone tipi kodunu giriniz:\n");
  scanf("%d",&abonetipi);
  if (abonetipi>4 || abonetipi<1)
  {
    printf("Abone tipi hatali. Program sonlanacak.");
    return 0;
  }

  printf("Sayacin okundugu ay:\n");
  scanf("%d",&okuay);
  if (okuay>12 || okuay<1)
  {
    printf("Ay girdisi hatali. Program sonlanacak.");
    return 0;
  }

  printf("Sayacin okundugu gun:\n");
  scanf("%d",&okugun);
  switch (okuay)          // 1  OC 31
  {                 // 2  SU 28
    case 4:             // 3  MA 31
    case 6:             // 4  NI 30
    case 9:             // 5  MA 31
    case 11:            // 6  HA 30
      aydakigun = 30;       // 7  TE 31
      break;          // 8  AG 31
    case 2:             // 9  EY 30
      aydakigun = 28;       // 10 EK 31
  }                 // 11 KA 30
                    // 12 AR 31
  if (okugun<1 || okugun>aydakigun)
  {
    printf("%d. ayda %d. gun yok. Program sonlanacak.",okuay,okugun);
    return 0;
  }

  printf("Guncel sayac degeri:\n");
  scanf("%d",&guncelsayac);

  // ve sayac 0'dan az olamaz degil mi? En azindan bizim evdeki sayacda yok
  if (guncelsayac<0)
  {
    printf("Sayac eksi deger almaz. Sizi sistemden atiyoruz.");
    return 0;
  }

  printf("Bir onceki ay sayacin okundugu gun:\n");
  scanf("%d",&oncekigun);

  oncekiay = okuay - 1;
  if (oncekiay==0) oncekiay = 12;  // Eger güncel ay ocaksa, bir onceki ay araliktir.
  switch (oncekiay)         // 1  OC 31
  {                 // 2  SU 28
    case 4:             // 3  MA 31
    case 6:             // 4  NI 30
    case 9:             // 5  MA 31
    case 11:            // 6  HA 30
      oncekiaydakigun = 30;   // 7  TE 31
      break;          // 8  AG 31
    case 2:             // 9  EY 30
      oncekiaydakigun = 28;   // 10 EK 31
  }                 // 11 KA 30
                    // 12 AR 31
  if (oncekigun<1 || oncekigun>oncekiaydakigun)
  {
    printf("%d. ayda %d. gun yok. Program sonlanacak.",oncekiay,oncekigun);
    return 0;
  }

  printf("Eski sayac degeri:\n");
  scanf("%d",&oncekisayac);

  if (oncekisayac>guncelsayac)
  {
    printf("Gecen ayin sayac degeri simdikinden buyuk. Program sonlancak.");
    return 0;
  }

  // ve sayac 0'dan az olamaz degil mi? En azindan bizim evdeki sayacda yok
  if (oncekisayac<0)
  {
    printf("Sayac eksi deger almaz. Sizi sistemden atiyoruz.");
    return 0;
  }

  printf("\n*** Ciktilar ***\nAbone tipi: ");
  switch (abonetipi)
  {
    case 1:
      printf("Konut");  //Oncelikle ev kullanicilarini yazalim, cunku en cok onlardan var. Etkinlik meselesi.
      kademe1 = 13.0/30.0;
      kademe2 = 7.0/30.0;
      kademe3 = 8.0/3.0;

      kademe1fiyat = 1.19;
      kademe2fiyat = 3.09;
      kademe3fiyat = 5.00;
      kademe4fiyat = 6.13;
      break;
    case 2:
      printf("Konut disi");
      kademe1 = 0;
      kademe2 = 1.0/3.0;
      kademe3 = 1.0/3.0;

      kademe2fiyat = 4.13;
      kademe3fiyat = 4.75;
      kademe4fiyat = 6.53;
      break;
    case 3:
      printf("Resmi daire");
      kademe1 = 0;
      kademe2 = 0;
      kademe3 = 0;

      kademe4fiyat = 3.55;
      break;
    case 4:
      printf("Okul-Hastane");
      kademe1 = 0;
      kademe2 = 0;
      kademe3 = 0;

      kademe4fiyat = 2.84;
      break;
  }

  printf("\n\nOnceki sayac okuma bilgileri\n AY: %d, GUN: %d, SAYAC DEGERI: %d\n",oncekiay,oncekigun,oncekisayac);
  printf("\nSimdiki sayac okuma bilgileri\n AY: %d, GUN: %d, SAYAC DEGERI: %d\n\n",okuay,okugun,guncelsayac);

  kacgungecti = oncekiaydakigun - oncekigun + okugun;
  printf("Son sayac okunmasindan bu yana %d gun gecti.\n",kacgungecti);

  tuketim = guncelsayac - oncekisayac;
  printf("Bu ayin tuketim miktari: %d ton.\n",tuketim);
  // kalan degiskeni float tuketim int, cunku ekranda x.0000 ton yazmasini istemiyorum.

  kalan = tuketim;

  kademe1=kademe1*kacgungecti;
  kademe2=kademe2*kacgungecti;
  kademe3=kademe3*kacgungecti;

  if (kalan>kademe1) {
    // Eger program buraya geliyorsa demek ki bir kismi kademe1'den ucretlendirilecek, kalani 2'ye aktarilacak.
    fiyat = kademe1 * kademe1fiyat;
    kalan = kalan - kademe1;    // Kalan kismi kademe 2'ye gonder
    if (kalan>kademe2) {  // Odeme kademe 3'e de sarkacak.
      fiyat = fiyat + kademe2 * kademe2fiyat;
      kalan = kalan - kademe2; // Kalan kismi kademe 3'e gonder.
      if (kalan>kademe3) { // Odeme kademe 4'e de sarkacak, aboooo
        fiyat = fiyat + kademe3 * kademe3fiyat + (kalan - kademe3) * kademe4fiyat;
      } else {
        fiyat = fiyat + kalan * kademe3fiyat;
      }
    } else { // Odeme kademe 2 de tamamlaniyor.
      fiyat = fiyat + kalan * kademe2fiyat;
    }
  } else {   // Burada parantez olmasina gerek yok, farkindayim ama diger turlu kafam karisiyor.
    fiyat = kalan * kademe1fiyat; // Odemenin tamami 1.Kademeden gerceklesitiriyor...
  }

  float kdv;
  kdv = fiyat*8.0/108.0;
  printf ("KDV %8: %f\n",kdv);
  printf ("KDV DAHIL %f YTL ODENMESI GEREKIYOR.",fiyat);

  return 0;
}

Bu kaynak koduyla 100 almış bulunmaktayım. 🙂

👋 🚨 Yeni yazılardan haberdar olmak ister misiniz? 👇