Otopark Ücreti Hesaplaması

Park edilen süre ve araç türüne göre ücret hesaplayan programdır. Başlangıç seviseyiyesine göredir.

Park edilen süre ve araç türüne göre ücret hesaplayan programdır. Başlangıç seviseyiyesine göredir.

Bir otoparkta araç sahiplerinin ödemesi gereken ücret miktarını hesaplamak için bir program istenmektedir. Otoparka park edilen bir araç için aşağıdaki bilgiler programa girilecektir:

- Araç türü (b/B:binek, o/O:minibüs/otobüs, t/T:kamyon/tır)
- Giriş zamanı (ayrı ayrı sayısal değerler olarak gün, ay, saat ve dakika)
- Çıkış zamanı (ayrı ayrı sayısal değerler olarak gün, ay, saat ve dakika)

Veri girişleri sırasında hatalı giriş yapılmayacağı ve çıkış zamanının giriş zamanından sonraki bir zaman olarak girileceği belirtilmektedir.
Süre hesabı yapılırken Şubat ayının 28 gün kabul edileceği ve araç sahibinin ödemesi gereken ücretin aşağıdaki şekilde hesaplanacağı belirtilmektedir: Her araç için giriş birim ücretine ek olarak, her 24 saat için günlük birim ücret ve artan saat(ler) için saatlik birim ücret alınır. Artan dakika 20 dakikadan az ise dikkate alınmaz, fazla ise 1 saat kabul edilir. Giriş birim ücreti 5 TL, günlük birim ücret 20 TL ve saatlik birim ücret 1 TL?dir. B tipi araçlardan 1 birim, O tipi araçlardan 2 birim ve T tipi araçlardan 3 birim ücret alınır.
Buna göre, bir aracın otoparkta kaldığı süreyi (gün, saat ve dakika olarak) ve araç sahibinin ödemesi gereken ücret bilgisini ekrana yazdıran bir program yazınız.

ÖRNEK ÇALIŞTIRMALAR:

Arac tipini giriniz: [b/B:binek, o/O:minibus/otobüs, t/T:kamyon/tır]:
b
Giris gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
19 10 9 20
Cikis gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
19 10 12 41
Otoparkta kaldiginiz sure:
0 gun 3 saat 21 dakika
Odemeniz gereken ucret:
9 TL



Arac tipini giriniz[b/B:binek, o/O:minibus/otobus, t/T:kamyon/tir]:
o
Giris gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
19 10 9 59
Cikis gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
1 12 0 1
Otoparkta kaldiginiz sure:
42 gun 14 saat 2 dakika
Odemeniz gereken ucret:
1718 TL


Arac tipini giriniz[b/B:binek, o/O:minibus/otobus, t/T:kamyon/tir]:
T
Giris gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
1 1 0 0
Cikis gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
1 3 0 0
Otoparkta kaldiginiz sure:
59 gun 0 saat 0 dakika
Odemeniz gereken ucret:
3555 TL


Arac tipini giriniz[b/B:binek, o/O:minibus/otobus, t/T:kamyon/tir]:
B
Giris gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
31 5 23 50
Cikis gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:
1 6 0 5
Otoparkta kaldiginiz sure:
0 gun 0 saat 15 dakika
Odemeniz gereken ucret:
5 TL



ÇÖZÜM:
NOT:Sadece if/else metoduyla çözüm yapıldığı için en etkin çözüm değildir.ama öğreticidir.


#include <stdio.h>//SAVAŞ YILDIZ Ege Üniversitesi Bilgisayar Mühendisliği Algortima ve Programlama 1 dersi 1. ödevidir.

#include <stdlib.h> //05070008569

//Fonksiyonlarından yapabimemiz için gerekli kütüphaneler eklendi

int main()//main fonksiyonunun başlangıcı

{

    char Arac_tipi;                                                   //Gerekli değişkenler tanımlandı.

    int Giris_gun,Giris_ay,Giris_saat,Giris_dakika;

    int Cikis_gun,Cikis_ay,Cikis_saat,Cikis_dakika;

    int Giris_birim_ucret=5,Gun_birim_ucret=20,Saat_birim_ucret=1;  //Bazılarına ilk değer atamaları yapılması gerekti.

    int giris_dakikasi=0,bekleme_dakikasi=0,cikis_dakikasi=0;      //Değer kontrolü ve hesaplamalar için.

    int Fark_gun,Fark_saat,Fark_dakika;

    int Toplam_ucret=0;

    //Kullanıcıdan Araç Tipini girmesini istedik.Ve girilen değer alındı.

    printf("Arac tipini giriniz[b/B:binek, o/O:minibus/otobus, t/T:kamyon/tir]:n");

    fflush(stdin);        //tampon bellegi temizlemek icin cagirildi

    scanf("%c",&Arac_tipi);



    printf("Giris gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:n");

    scanf("%d %d %d %d",&Giris_gun,&Giris_ay,&Giris_saat,&Giris_dakika);//Giriş zamanı ile ilgili veriler girildi.



    printf("Cikis gun, ay, saat ve dakikasini aralarinda bosluk birakarak giriniz:n");

    scanf("%d %d %d %d",&Cikis_gun,&Cikis_ay,&Cikis_saat,&Cikis_dakika);//Çıkış zamanı ile ilgili veriler girildi.

 //---------------------------------------------------------------------

        giris_dakikasi= Giris_gun*1440+Giris_saat*60+Giris_dakika;//Girilen değerlerin hepsi dakikaya dönüştürüldü.Ve toplandı.

        //if((Giris_ay==1)) yani; Ocak ayındaysa zaten ilk ay olduğu için dakika eklenmez

        //Ocak:O Şubat:Ş Mart:M Nisan:N Mayıs:M Haziran:H Temmuz:T Ağustos:A Eylül:E Ekim:E Kasım:K Aralık ayına gerek yok.

//Konular (while,switch/case) henüz işlenmediği için bu şekilde if yapımasından puan kırılmayacağı söylendiği için bu şekilde tasarlanmıştır.

        if((Giris_ay==2)) {giris_dakikasi+=31*1440; }//Şubat   ayındaysa Ocak dakikaları eklenir.

        if((Giris_ay==3)) {giris_dakikasi+=59*1440; }//Mart    ayındaysa O+Ş  dakikaları eklenir.

        if((Giris_ay==4)) {giris_dakikasi+=90*1440; }//Nisan   ayındaysa O+Ş+M  dakikaları eklenir.

        if((Giris_ay==5)) {giris_dakikasi+=120*1440;}//Mayıs   ayındaysa O+Ş+M+N dakikaları eklenir.

        if((Giris_ay==6)) {giris_dakikasi+=151*1440;}//Haziran ayındaysa O+Ş+M+N+M  dakikaları eklenir.

        if((Giris_ay==7)) {giris_dakikasi+=181*1440;}//Temmuz  ayındaysa O+Ş+M+N+M+H  dakikaları eklenir.

        if((Giris_ay==8)) {giris_dakikasi+=212*1440;}//Ağustos ayındaysa O+Ş+M+N+M+H+T dakikaları eklenir.

        if((Giris_ay==9)) {giris_dakikasi+=243*1440;}//Eylül   ayındaysa O+Ş+M+N+M+H+T+A  dakikaları eklenir.

        if((Giris_ay==10)){giris_dakikasi+=273*1440;}//Ekim    ayındaysa O+Ş+M+N+M+H+T+A+E  dakikaları eklenir.

        if((Giris_ay==11)){giris_dakikasi+=304*1440;}//Kasım   ayındaysa O+Ş+M+N+M+H+T+A+E+E  dakikaları eklenir.

        if((Giris_ay==12)){giris_dakikasi+=334*1440;}//Aralık  ayındaysa O+Ş+M+N+M+H+T+A+E+E+K  dakikaları eklenir.

 //----------------Giriş anının dakika formatı bulundu----------------------------------------------------

        cikis_dakikasi= Cikis_gun*1440+Cikis_saat*60+Cikis_dakika;//Girilen değerlerin hepsi dakikaya dönüştürüldü.Ve toplandı.

        //if((Giris_ay==1)) yani; Ocak ayındaysa zaten ilk ay olduğu için dakika eklenmez

        //Ocak:O Şubat:Ş Mart:M Nisan:N Mayıs:M Haziran:H Temmuz:T Ağustos:A Eylül:E Ekim:E Kasım:K Aralık ayına gerek yok.



        if((Cikis_ay==2)) {cikis_dakikasi+=31*1440; }//Şubat   ayındaysa Ocak dakikaları eklenir.

        if((Cikis_ay==3)) {cikis_dakikasi+=59*1440; }//Mart    ayındaysa O+Ş  dakikaları eklenir.

        if((Cikis_ay==4)) {cikis_dakikasi+=90*1440; }//Nisan   ayındaysa O+Ş+M  dakikaları eklenir.

        if((Cikis_ay==5)) {cikis_dakikasi+=120*1440;}//Mayıs   ayındaysa O+Ş+M+N dakikaları eklenir.

        if((Cikis_ay==6)) {cikis_dakikasi+=151*1440;}//Haziran ayındaysa O+Ş+M+N+M  dakikaları eklenir.

        if((Cikis_ay==7)) {cikis_dakikasi+=181*1440;}//Temmuz  ayındaysa O+Ş+M+N+M+H  dakikaları eklenir.

        if((Cikis_ay==8)) {cikis_dakikasi+=212*1440;}//Ağustos ayındaysa O+Ş+M+N+M+H+T dakikaları eklenir.

        if((Cikis_ay==9)) {cikis_dakikasi+=243*1440;}//Eylül   ayındaysa O+Ş+M+N+M+H+T+A  dakikaları eklenir.

        if((Cikis_ay==10)){cikis_dakikasi+=273*1440;}//Ekim    ayındaysa O+Ş+M+N+M+H+T+A+E  dakikaları eklenir.

        if((Cikis_ay==11)){cikis_dakikasi+=304*1440;}//Kasım   ayındaysa O+Ş+M+N+M+H+T+A+E+E  dakikaları eklenir.

        if((Cikis_ay==12)){cikis_dakikasi+=334*1440;}//Aralık  ayındaysa O+Ş+M+N+M+H+T+A+E+E+K  dakikaları eklenir.

 //-----------------Çıkış anının dakika formatı bulundu----------------------------------------------------

    bekleme_dakikasi = cikis_dakikasi-giris_dakikasi; //Bekleme süressinin kaç dakika olduğu bulunur.

    Fark_gun=bekleme_dakikasi/1440 ;          //Dakika formatındaki sürenin kaç günü içerdiği bulunur.

    Fark_saat=(bekleme_dakikasi%1440)/60 ;   //Dakika formatındaki sürenin kaç saati içerdiği bulunur.

    Fark_dakika=(bekleme_dakikasi%1440)%60 ;//Dakika formatindaki sürenin 0-60 dakika aralığındaki değeri bulunur.



    printf("Otoparkta kaldiginiz sure:n"); //Otoparkta kalınan süre ekrana bastırılır.

    printf("%d gun %d saat %d dakika n",Fark_gun,Fark_saat,Fark_dakika);



    if((Arac_tipi=='b')||(Arac_tipi=='B')) //Araç Tipi Binekse

    {

        Toplam_ucret = Giris_birim_ucret*1 + Fark_gun*Gun_birim_ucret*1 + Fark_saat*Saat_birim_ucret*1 ;

        //1 birim ücret alınacağı için sabit değerleri göstermelik olarak 1 ile çarpıldı.Toplam ücret hesaplandı.

        if(Fark_dakika<20)//Dakika dilimi kontrolü yapılır.Dakika dilimi 20'den azsa fazlalık zaman ücrete tabi tutulmaz.

          printf("Odemeniz gereken ucret: %dn",Toplam_ucret);//Ve toplam ücret ekrana bastırılır.

        else{

             Toplam_ucret+=Saat_birim_ucret;//20'den küçük değilse fazlalık zaman 1 saatlik ücret olarak tahsis edilir.

             printf("Odemeniz gereken ucret: %dn",Toplam_ucret);// Ve toplam ücret ekrana bastırılır.

            }//else sonu

    }//if((Arac_tipi=='b')||(Arac_tipi=='B')) sonu

    else{ if((Arac_tipi=='o')||(Arac_tipi=='O')){//Araç Tipi  minibüs/Otobüs ise



               Toplam_ucret = Giris_birim_ucret*2 + Fark_gun*Gun_birim_ucret*2 + Fark_saat*Saat_birim_ucret*2 ;

               //2 birim ücret alınacağı için sabit değerler  2 ile çarpıldı.Toplam ücret hesaplandı.

               if(Fark_dakika<20)//Dakika dilimi kontrolü yapılır.Dakika dilimi 20'den azsa fazlalık zaman ücrete tabi tutulmaz.

               printf("Odemeniz gereken ucret: %dn",Toplam_ucret);//Ve toplam ücret ekrana bastırılır.

               else{

               Toplam_ucret+=2*Saat_birim_ucret;//20'den küçük değilse fazlalık zaman 1 saatlik ücret olarak tahsis edilir.

               printf("Odemeniz gereken ucret: %dn",Toplam_ucret);//Ve toplam ücret ekrana bastırılır.

               }//else sonu

          }//if((Arac_tipi=='o')||(Arac_tipi=='O')) sonu

         else{//Hatali giriş söz konusu olmadığı için zaten geriye kamyon/tır Araç Tipi kaldığı için kontrole(if/else'e)gerek yoktur.

               Toplam_ucret = Giris_birim_ucret*3 + Fark_gun*Gun_birim_ucret*3 + Fark_saat*Saat_birim_ucret*3 ;

               //3 birim ücret alınacağı için sabit değerler  3 ile çarpıldı.Toplam ücret hesaplandı.

               if(Fark_dakika<20)//Dakika dilimi kontrolü yapılır.Dakika dilimi 20'den azsa fazlalık zaman ücrete tabi tutulmaz.

               printf("Odemeniz gereken ucret: %dn",Toplam_ucret);//Ve toplam ücret ekrana bastırılır.

               else{

               Toplam_ucret+=3*Saat_birim_ucret;//20'den küçük değilse fazlalık zaman 1 saatlik ücret olarak tahsis edilir.

               printf("Odemeniz gereken ucret: %dn",Toplam_ucret);//Ve toplam ücret ekrana bastırılır.

               }//else sonu

             }//else sonu

         } //else{ if((Arac_tipi=='o')||(Arac_tipi=='O')) sonu

return 0;

}//main fonksiyonunun sonu

  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

ben daha degisik bir yoldan yapmıstım burdaki arkadas da ilgilenmis bizim ödevle :gul::gul::gul::gul:

Yukarı Git