1.1) Bir kargo şubesine gelmiş olan N kişinin geliş sıralarına göre kuyruk oluşturduklarını düşününüz. Her birinin işleminin 30 saniye ile 300 sn. arasında random bir zaman aldığını varsayınız. Bunun için öncelikle list veri yapısı ile yığın, ardından oluşturduğunuz yığın ile de kuyruk yapısı tasarlayınız. Her bir kişiye numara vererek ve her birine random birer işlem süresi atayarak N elemanlı bir kuyruk oluşturunuz. Her bir kişinin işi biterek kuyruktan çıkarıldığında işlem tamamlanma süresini (işlem süresi dahil ne kadar süre kuyrukta kaldığını) liste halinde yazdırınız. Ayrıca, N kişi için ortalama işlem tamamlanma süresini de hesaplayıp yazdırınız.

2023-05-09by@jumpthe11-Mwydh&@cpp.Model: gpt-3.5
jumpthe11-Mwydh

You are a C++Coder Expert,I have something to ask you.

Avatar
jumpthe11-Mwydh

1.1) Bir kargo şubesine gelmiş olan N kişinin geliş sıralarına göre kuyruk oluşturduklarını düşününüz. Her birinin işleminin 30 saniye ile 300 sn. arasında random bir zaman aldığını varsayınız. Bunun için öncelikle list veri yapısı ile yığın, ardından oluşturduğunuz yığın ile de kuyruk yapısı tasarlayınız. Her bir kişiye numara vererek ve her birine random birer işlem süresi atayarak N elemanlı bir kuyruk oluşturunuz. Her bir kişinin işi biterek kuyruktan çıkarıldığında işlem tamamlanma süresini (işlem süresi dahil ne kadar süre kuyrukta kaldığını) liste halinde yazdırınız. Ayrıca, N kişi için ortalama işlem tamamlanma süresini de hesaplayıp yazdırınız.

Avatar
Avatar

Öncelikle, bu soru için bir kişi sınıfı tasarlamalıyız. Bu sınıfın içinde kişinin numarası ve işlem süresi bilgileri olacak.

class Kisi {
public:
    int numara;
    int islemSuresi;
};

Daha sonra, N kişi için bir kuyruk oluşturmalıyız. Bunun için queue veri yapısını kullanabiliriz. Kuyruğa kişileri eklemeden önce, her bir kişiye rastgele bir numara ve işlem süresi atamalıyız.

queue<Kisi> kuyruk;
srand(time(NULL)); // Rastgele sayı üretmek için seed ayarlıyoruz
for(int i = 0; i < N; i++) {
    Kisi kisi;
    kisi.numara = i + 1;
    kisi.islemSuresi = rand() % 271 + 30; // 30 - 300 arasında rastgele bir sayı oluşturuyoruz
    kuyruk.push(kisi);
}

Şimdi, kuyruktan kişileri çıkartarak işlem sürelerini hesaplayacağız. Bunun için bir liste veri yapısı kullanabiliriz. Her bir kişi işlemi bittiğinde, listeye numarası ve işlem tamamlanma süresi bilgileri eklenir.

list<pair<int, int>> islemTamamlanmaSuresi;
int toplamTamamlanmaSuresi = 0;

while(!kuyruk.empty()) {
    Kisi kisi = kuyruk.front();
    kuyruk.pop();

    int islemBaslamaZamani = zaman; // İşlem başlama zamanını kaydediyoruz
    zaman += kisi.islemSuresi; // İşlem süresi kadar zaman artıyor
    int tamamlanmaSuresi = zaman - islemBaslamaZamani; // İşlem tamamlanma süresi hesaplanıyor
    toplamTamamlanmaSuresi += tamamlanmaSuresi; // Toplam tamamlanma süresine ekleniyor

    islemTamamlanmaSuresi.push_back(make_pair(kisi.numara, tamamlanmaSuresi)); // Listeye eklenecek çift oluşturuluyor
}

double ortalamaTamamlanmaSuresi = (double)toplamTamamlanmaSuresi / N; // Ortalama tamamlanma süresi hesaplanıyor

Son olarak, işlem tamamlanma sürelerini ve ortalama tamamlanma süresini yazdırıyoruz.

cout << "Islem tamamlanma sureleri:" << endl;
for(auto it = islemTamamlanmaSuresi.begin(); it != islemTamamlanmaSuresi.end(); it++) {
    cout << "Kisi #" << it->first << ": " << it->second << " saniye" << endl;
}
cout << "Ortalama tamamlanma suresi: " << ortalamaTamamlanmaSuresi << " saniye" << endl;

Tüm kod bloğu şu şekilde olacaktır:

#include <iostream>
#include <queue>
#include <list>
#include <cstdlib>
#include <ctime>

using namespace std;

class Kisi {
public:
    int numara;
    int islemSuresi;
};

int main() {
    int N = 10; // Kişi sayısı
    queue<Kisi> kuyruk;
    srand(time(NULL));
    for(int i = 0; i < N; i++) {
        Kisi kisi;
        kisi.numara = i + 1;
        kisi.islemSuresi = rand() % 271 + 30;
        kuyruk.push(kisi);
    }

    list<pair<int, int>> islemTamamlanma