Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 15. 03. 2011 09:42

Marecus
Zelenáč
Příspěvky: 4
Reputace:   
 

C++ projekt škola

Code:

Problém
V obchodě  jsou pokladny (předpokládejme, že jejich počet není omezen), u každé z nich může být 
fronta maximálně pro N zákazníků (např. N = 7). Všechny pokladny jsou na začátku uzavřeny. Zákazníci, kteří si nakoupí, jdou k pokladnám. Pokud není k dispozici pokladna, kam by se postavili do fronty (není žádná otevřená nebo jsou všechny už otevřené plné), je otevřena další pokladna. Doba strá-
vená u pokladny je pro všechny zákazníky stejná a trvá jednu časovou jednotku. Pravidelně přicházejí 
noví zákazníci k pokladnám  v počtu nejvýše  Z v jedné časové jednotce (např.  Z = 10)  a staví se do 
front u pokladen tak, že nejdříve zaplní první frontu, pak další, … Pokud u některé pokladny není zá-
kazník, pokladna je opět je uzavřena. Simulujte průběh zpracování front u pokladen pro M zákazníků 
obchodu (např. M = 1000).
Implementace
 Čísla N, M, Z deklarujte jako globální konstanty.
 Každou pokladnu reprezentujte frontou implementovanou v poli. Nepoužívejte třídy (fronta bude 
reprezentována jako struktura).
 Otevřené pokladny reprezentujte jako jednosměrný seznam implementovaný pomocí ukazatelů, 
jehož prvky jsou fronty. Otevření pokladny implementujte jako vložení nové fronty na konec seznamu. Uzavření pokladny implementujte jako odebrání prvku (fronty) ze seznamu.
 Prvek fronty implementujte jako strukturu, která bude obsahovat identifikaci zákazníka (číslo 
typu int).
 Průběh zpracování front u pokladen reprezentujte cyklem while, který bude ukončen, pokud 
budou všechny  pokladny uzavřené (fronty  budou  prázdné a odebrané ze seznamu). V každém 
kroku cyklu (jedné časové jednotce) bude všem  otevřeným pokladnám (frontám) buď  odebrán
jeden zákazník, nebo pokud bude fronta prázdná, bude odebrána ze seznamu. Pokud celkový po-
čet zákazníků vygenerovaných během simulace nedosáhl M, bude  náhodně vygenerována další
skupina zákazníků (nejméně 1, nejvýše Z, celkem nejvýše M). Identifikátorem zákazníka je pořadí, 
ve kterém byl vygenerován (první zákazník bude mít identifikátor 1, poslední M). Zákazníci se poté se zařadí do fronty tak, že nejdříve zaplní první frontu, pak další, … Pokud není místo v žádné 
z front v seznamu, vytvoří se na konci seznamu další fronta.
Na výstupu zobrazte odděleny mezerou tyto operace:
 Vygenerování nového zákazníka ve formě G#1, kde #1 je identifikace. Třetí zákazník vytisknut ve 
tvaru G3.
 Otevření nové pokladny (vložení nové fronty na konec seznamu) ve formě F#1, kde #1 je pořadí 
fronty v seznamu počítáno od jedničky.
 Vložení zákazníka do fronty ve formě V#1*F#2+, kde #1 je identifikace zákazníka, #2 je  pořadí
fronty v seznamu počítáno od jedničky. Pokud bude vložen třetí zákazník do první fronty v seznamu, bude na výstupu V3*F1+.
 Odebrání zákazníka z fronty ve tvaru O#1*F#2+, kde #1 je identifikace zákazníka, #2 je pořadí fronty v seznamu počítáno od jedničky. Pokud bude odebrán třetí zákazník z první fronty, bude na vý-
stupu O3[F1].
 Uzavření pokladny (odebrání fronty ze seznamu) ve formě U#1, kde #1 je pořadí fronty 
v seznamu počítáno od jedničk

Potřeboval bych poradit jak udělat  ( Prvek fronty implementujte jako strukturu, která bude obsahovat identifikaci zákazníka (číslo
typu int).)

Code:

Toto je fronta.h
#pragma once

#include <iostream>


using namespace std;



const int N = 7;
const int Z = 10;
const int M = 1000;


struct Pokladna;
{
        struct Zakaznik;
        {
            
        
        }
        

        int Hlava;

        int Ocas;
};


void PokladnaIni(Pokladna& P);


void Vlozeni(Pokladna& P,);


void Odebrani(Pokladna& P);


bool JePrazdna(Pokladna P);


bool JePlna(Pokladna P);

Offline

 

#2 15. 03. 2011 10:22 — Editoval RePRO (15. 03. 2011 10:52)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ projekt škola

Ahoj,
o jaký jazyk se jedná? C++ nebo C? Já bych to řešil asi takto:

Code:

// Fronta
struct Pokladna
{
        Zakaznik * prvni;
        Pokladna * dalsi;
};

No a potom něco takového:

Code:

struct Zakaznik
{     
         string zakaznik;
         Zakaznik dalsi;
};

metoda pro vkládání (jedná se o metodu, která patří k Pokladna):

Code:

bool push_back(Zakaznik * p) {
        
        if (prvni == NULL) {
            prvni = p;
        }
        else {
            Zakaznik * it = prvni;
            
            while (it->dalsi != NULL) {
                  it = it->dalsi;
            }
            it->dalsi = p;
        }
        return true;
}

bool insert(Zakaznik x) {
        
        this->push_back(x);
        
        return true;
}

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 15. 03. 2011 10:40

Marecus
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: C++ projekt škola

Jedná se o C++

Offline

 

#4 15. 03. 2011 10:54

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ projekt škola

Nevím, jak dál pokračovat, protože asi dvakrát jsem si přečetl zadání a mám v tom absolutní guláš. Potřeboval bych naťuknout někým jiným.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#5 15. 03. 2011 11:29

Marecus
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: C++ projekt škola

Jo nejsi sám kdo má guláš v tom zadání.

Offline

 

#6 15. 03. 2011 13:34

sL1
Příspěvky: 41
Reputace:   
 

Re: C++ projekt škola

VŠB, Algoritmy II, doc. Dvorský, co? xD

Offline

 

#7 15. 03. 2011 13:50

Marecus
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: C++ projekt škola

Jojo, ale zadam jen o radu ne o udelani celeho programu ;)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson