💻 Bilgisayar, 💾 Programlama

Banka Şubesi Simülasyonu

Bu sene Algoritma ve Programlama dersi almamama rağmen hem birinci sınıflara yardımcı olsun, hem sitemin trafiği artsın :D, hem de internetteki C kaynak kodu örnekleri artsın diye ödev çözümlerini arkadaşlardan toplayıp paylaşıyorum. =)

Şaka bir yana, kodunu paylaştığı için Özlem’e çok teşekkür ediyorum. Umuyorum burada paylaşılanlar birinin işine yarar.

Eğer kaynak kodunu indirmek istemezseniz bir kopyasını aşağıda bulabilirsiniz.

Herkese iyi vizeler.

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

struct musteri
{
    int no;// Müşteri numarası.
    int gelis;//Müşterinin bankaya geldiği dakika.
    int bekleme_suresi;
};

struct gise
{
    int bos_mu;// Gişenin boş olup olmadığını belirtir.
    int hizmet_sure;//Gişenin müşteriye vereceği hizmetin süresi
    struct musteri g_musteri;//Gişede hizmet gören müşteri.
    int top_musteri;//Gişeden hizmet almış toplam müşteri sayısı.
    int top_sure;// Gişeden verilen hizmetlerin toplam süresi.
};

int bos_mu(int on)
{//kuyruk islemi
    if(on==-1)
        return 1;
    else
        return 0;
}

void dairesel_ekle(struct musteri *kuyruk,int *on, int *arka, struct musteri yeni)
{//kuyruk islemi
    if((*arka+1)%MAX==*on)
    {
        printf("Kuyruk doludur..\n");
        return;
    }
    *arka=(*arka+1)%MAX;
    kuyruk[*arka]=yeni;
    if(*on==-1)
    {
        *on=0;
    }
}

struct musteri dairesel_sil(struct musteri *kuyruk,int *on,int *arka)
{//kuyruk islemi
    struct musteri temp;
    temp=kuyruk[*on];
    if(*on==*arka)
    {
        *on=-1;
        *arka=-1;
        return temp;
    }
    if(*on==MAX-1)
    {
        *on=0;
    }
    else
    {
        *on=*on+1;
    }
    return temp;
}

int main()
{

    struct musteri kuyruk[MAX];
    struct gise giseler[3];
    int ilk_gelen,musteri_say=1,sonraki_gelen,gise_sure,zaman,i;
    int max_bekleme_sure=0,cekirdek,toplam_sure,finito=0,uzunluk,max_uzunluk=0,toplam_bekleme=0;
    struct musteri bir_musteri,any_musteri;
    int on=-1;
    int arka=-1;

    printf("Sayi uretici icin cekirdegi giriniz..\n");
    scanf("%d",&cekirdek);
    srand(cekirdek);
    printf("Toplam simulasyon suresini giriniz..\n\n");
    scanf("%d",&toplam_sure);
    printf("Musteriler geliyor..\n\n");

    for(i=0;i<3;i++)
    {
        giseler[i].bos_mu=-1;
        giseler[i].top_musteri=0;
        giseler[i].top_sure=0;
    }

    ilk_gelen=rand()%6;
    zaman=ilk_gelen;

    do
    {
        bir_musteri.gelis=ilk_gelen;
        bir_musteri.no=musteri_say;
        musteri_say++;
        bir_musteri.bekleme_suresi=0;
        dairesel_ekle(kuyruk,&on,&arka,bir_musteri);
        sonraki_gelen=zaman+rand()%6;
        printf("%d.dakikada Musteri#%d bankaya geldi.\n",zaman,musteri_say-1);
    }
    while(sonraki_gelen==ilk_gelen);

    for(i=0;i<3;i++)
    {
        if(bos_mu(on)==0)
        {
            gise_sure=rand()%8+3;
            any_musteri=dairesel_sil(kuyruk,&on,&arka);
            giseler[i].hizmet_sure=gise_sure;
            giseler[i].g_musteri=any_musteri;
            giseler[i].bos_mu=1;
            giseler[i].top_musteri++;
            giseler[i].top_sure+=gise_sure;
            toplam_bekleme+=any_musteri.bekleme_suresi;
            printf("%d.dakikada Musteri#%d Gise#%d'de hizmet almaya baslamistir.\n",zaman,any_musteri.no,i+1);
        }
    }

    for(zaman++;zaman<toplam_sure;zaman++)
    {
        while(sonraki_gelen==zaman)
        {
            bir_musteri.no=musteri_say;
            musteri_say++;
            bir_musteri.gelis=sonraki_gelen;
            bir_musteri.bekleme_suresi=0;
            dairesel_ekle(kuyruk,&on,&arka,bir_musteri);
            sonraki_gelen=zaman+rand()%6;
            printf("%d.dakikada Musteri#%d bankaya geldi.\n",zaman,musteri_say-1);
        }
        for(i=0;i<3;i++)
        {
            if(giseler[i].bos_mu==1)
            {
                giseler[i].hizmet_sure--;
            }
            if(giseler[i].bos_mu==1 && giseler[i].hizmet_sure==0)
            {
                giseler[i].bos_mu=-1;
                printf("%d.dakikada Musteri#%d Gise#%d'yi terk etti.\n",zaman,giseler[i].g_musteri.no,i+1);
            }
        }
        for(i=0;i<3;i++)
        {
            if(bos_mu(on)==0 && giseler[i].bos_mu==-1)
            {
                bir_musteri=dairesel_sil(kuyruk,&on,&arka);
                gise_sure=rand()%8+3;
                bir_musteri.bekleme_suresi=zaman-bir_musteri.gelis;
                if(bir_musteri.bekleme_suresi>max_bekleme_sure)
                    max_bekleme_sure=bir_musteri.bekleme_suresi;
                giseler[i].hizmet_sure=gise_sure;
                giseler[i].g_musteri=bir_musteri;
                giseler[i].bos_mu=1;
                giseler[i].top_musteri++;
                giseler[i].top_sure+=giseler[i].hizmet_sure;
                toplam_bekleme+=bir_musteri.bekleme_suresi;
                printf("%d.dakikada Musteri#%d Gise#%d'de hizmet almaya baslamistir.\n",zaman,bir_musteri.no,i+1);
            }
        }
        uzunluk=(arka-on+2+MAX)%MAX;
        if(uzunluk>max_uzunluk){
            max_uzunluk=uzunluk;
        }
    }

    while(finito==0)
    {
        /*Simulasyon süresi sona erdiğinde aynı dakika içerisinde önce
        eğer varsa gişelerde olan müşterilerin hizmet süreleri birer dakika azaltılır.
        Daha sonra eğer varsa gişelerde hizmeti biten müşteriler gönderilir.
        Eğer varsa kuyrukta bekleyen müşteriler eğer boşalmışsa
        boşalan gişelere gönderilir.
        Hem kuyruk hem de gişeler boşsa döngüden çıkılır.*/

        for(i=0;i<3;i++)
        {
            if(giseler[i].bos_mu==1)
            {
                giseler[i].hizmet_sure--;
            }
            if(giseler[i].bos_mu==1 && giseler[i].hizmet_sure==0)
            {
                giseler[i].bos_mu=-1;
                printf("%d.dakikada Musteri#%d Gise#%d'yi terk etti.\n",zaman,giseler[i].g_musteri.no,i+1);
            }
        }

        for(i=0;i<3;i++)
        {
            if(giseler[i].bos_mu==-1 && bos_mu(on)==0)
            {
                bir_musteri=dairesel_sil(kuyruk,&on,&arka);
                gise_sure=rand()%8+3;
                bir_musteri.bekleme_suresi=zaman-bir_musteri.gelis;
                if(bir_musteri.bekleme_suresi>max_bekleme_sure)
                    max_bekleme_sure=bir_musteri.bekleme_suresi;
                giseler[i].hizmet_sure=gise_sure;
                giseler[i].g_musteri=bir_musteri;
                giseler[i].bos_mu=1;
                giseler[i].top_musteri++;
                giseler[i].top_sure+=giseler[i].hizmet_sure;
                toplam_bekleme+=bir_musteri.bekleme_suresi;
                printf("%d.dakikada Musteri#%d Gise#%d'de hizmet almaya baslamistir.\n",zaman,bir_musteri.no,i+1);
            }
        }
        finito=1;
        for(i=0;i<3;i++){
            if(giseler[i].bos_mu==1){
                finito=0;
            }
        }
        if(bos_mu(on)==0)
        {
            finito=0;
        }
        zaman++;
    }
    printf("\nSimulasyon bitti, sonuclar:\n");
    printf("Herhangi bir zamanda kuyrukta bulunan max kisi sayisi:%d\n",max_uzunluk);
    printf("Kuyrukta en uzun sure bekleyen musterinin bekleme suresi:%d\n",max_bekleme_sure);
    printf("Bir musterinin kuyrukta ortalama bekleme suresi:%.2f\n",(float)toplam_bekleme/(musteri_say-1));

    printf("Gise No\tToplam Musteri Sayisi\tOrtalama Hizmet Verme Suresi\n");
    printf("-------\t---------------------\t----------------------------\n");
    for(i=0;i<3;i++){
        printf("   %d\t\t%d\t\t       \t%.2f\n",i+1,giseler[i].top_musteri,(float)giseler[i].top_sure/giseler[i].top_musteri);
    }

    return 0;
}

Banka Şubesi Simülasyonu 3 yorum aldı.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir