Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C++ - simulace obchodu na principu fronty

Opravdu nikdo neví? :D Trochu jsem to upravil a jsem ve stavu, že to probíhá, ale ne úplně - program skončí a neodbaví všechny zákazníky...

#include <iostream>
//#include <stdio.h>
#include <cstdlib>
#include <ctime>

using namespace std;

const int cashes = 3;
const int customers = 5;
const int max_items = 3;

struct cus{ //zakaznik
	int id;
	int items;
	cus *next;
};

struct queue{ //fronta
	cus *head, *tail;
	int size;
};

bool isEmpty(queue arr[]){ //kontrola pole, jestli je prazdne
	for(int i = 0; i < cashes; ++i){
		if(arr[i].size == 0){
			return true;
		}else{
			return false;
		}
	}
}

void init(queue arr[]){ //inicializace pole na zacatku

	for(int i = 0; i < cashes; ++i){
		arr[i].head = arr[i].tail = NULL;
		arr[i].size = 0;
	}

}

int main(){
	queue *arr = new queue[cashes];
	init(arr);

	int total = 0; //poradi zakazniku

	srand(time(NULL)); //pro urceni nahodneho cisla nakupu

	do{

		//generovani noveho zakaznika
		if(total <= customers){
			cus *newC = new cus; //novy zakaznik
			newC->id = total;
			newC->items = rand() % (max_items + 1);

			cout << "G" << newC->id << "[" << newC->items << "]" << " ";

			++total;


			//urceni nejkratsi fronty a zarazeni zakaznika
			int qMin = 0; //index nejkratsi fronty
			int lMin = arr[0].size; //delka nejkratsi fronty
			for(int i = 0; i < cashes; ++i){
				if(lMin > arr[i].size){
					lMin = arr[i].size;
					qMin = i;
				}
			}

			//zarazeni zakaznika na konec nejkratsi fronty
			//cus *next_assist = new cus;

			if(arr[qMin].tail == NULL){
				arr[qMin].tail = newC;
			}else{
				arr[qMin].tail->next = newC;
				arr[qMin].tail = newC;
			}

			//overim, jestli je head NULL
			if(arr[qMin].head == NULL){
				arr[qMin].head = arr[qMin].tail;
				arr[qMin].tail = NULL;
			}

			arr[qMin].size+=1; //zvetsim velikost pole +1

			cout << "V" << newC->id << "[F" << qMin << "]" << " ";

		}

		//"odbaveni" zakaznika na pokladne
		for(int i = 0; i < cashes; ++i){ //prochazim pokladny a hledam, jestli je na headu hodnota - zakaznik
			if (arr != NULL && arr[i].head != NULL) {
				if (arr[i].head->items == 0){
				    cout << "O" << arr[i].head->id << "[" << arr[i].size -1 << "] ";
					cus *remove = new cus;
					remove = (cus *)&arr[i].head;
					arr[i].head = arr[i].head->next;
					delete remove;
					arr[i].size = (arr[i].size - 1);
				}else{
					arr[i].head->items = (arr[i].head->items - 1);
					cout << "K" << arr[i].head->id << "[" << arr[i].head->items << "] ";
				}
			}
		}
		//delete next_assist;
	}while(isEmpty(arr) == false);

	return 0;
}

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny