You are a C++Coder Expert,I have something to ask you.
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.
Ö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