Generování náhodných N proměnných – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Generování náhodných N proměnných  – C / C++ – Fórum – Programujte.comGenerování náhodných N proměnných – C / C++ – Fórum – Programujte.com

 

Klianer0
Newbie
4. 3. 2011   #1
-
0
-

Dobrý den, pokouším se vytvořit cyklus na generování náhodných N proměnných, které jsou typu (moje struktura).
Přikládám sem moje řešení, které mi bohužel nefunguje. A prosím o radu, jak by se tato situace dala vyřešit. Děkuji



using namespace std;

const int velikost = 5;

struct mojestruktura
{
int Data[velikost];
int Head;
int Tail;
};

int main()

{
srand( time(0) );

for ( int i=0; i < 50; i++ )
{
char random = (char) (rand() % ('z' - 'a')) + 'a';
mojestruktura random;
cout << random << endl;
}

return 0;
}


Nahlásit jako SPAM
IP: 158.196.45.–
nervak0
Věrný člen
4. 3. 2011   #2
-
0
-

Není v popisu chyby něco jako, že proměnná toho jména už existuje ? :)

Generování proměnných je nesmysl, co přesně chceš udělat ?

Nahlásit jako SPAM
IP: 213.211.51.–
Klianer0
Newbie
4. 3. 2011   #3
-
0
-

Asi na to jdu špatně .. Mno Chci si vlastně vytvořit pole o velikosti N a prvky toho pole budou fronty... K vytvoření fronty používám strukturu mojestruktura pak si inicializuji nějakou proměnnou a typu mojestuktura a tuto proměnou pak využívám při operacích s frontou, jako je vkládání prvků atd ...

Nahlásit jako SPAM
IP: 158.196.45.–
nervak0
Věrný člen
4. 3. 2011   #4
-
0
-

mojestruktura pole[N];

// nebo
// mojestruktura *pole = new mojestruktura[N];
for (int i = 0; i < N; i++) {
pole[i].neco = cosi;
}

Nahlásit jako SPAM
IP: 213.211.51.–
Klianer0
Newbie
4. 3. 2011   #5
-
0
-

JJ tohle by bylo děkuji, mno a jak tam ted implementovat těch N front ? Napadlo mě to udělat, takovým způsobem abych nemusel deklarovat vždy každou frontu zvlášť pro nějakou proměnnou, použít pouze jednu proměnnou a hlavu a ocas fronty vždy dát od sebe ob počet definovaných členů fronty.

Vypadá to nějak takhle:



QueueInArray Q;
int velikost_fronty = 20; // definujusi velikost fronty
const int pocet = 20; // defunuji počet přepážek
QueueInArray prepazka[pocet]; // deklaruji si pole přepážek o dané velikosti, pole je typu Queue in Array

void prepazky()
{
QueueInit(Q);
for ( int j=0; j<pocet; j++) // přiřadí každé přepážce frontu o 100 prvcích
{
prepazka[j] = Q;
cout << "Vygenerovana prepazka cislo: " << j << " Hlava fronty " << j << ":" << " " << Q.Head << " Ocas fronty " << j << ": " << " " << Q.Tail << endl;
Q.Head += velikost_fronty;
Q.Tail += velikost_fronty;
}
}


Je to špatná myšlenka ?
Děkuji

Nahlásit jako SPAM
IP: 158.196.45.–
Klianer0
Newbie
4. 3. 2011   #6
-
0
-

Tak uz jsem to nějak vytvořil, ale mám další problémek ....
Potřebuji aby se vygenerované fronty postupně zaplnili zákazníky. DO by taký problém zas nebyl, ale stěžuje mi to fakt že ke každému zákazníku mám další 3 informace, které potřebuji pro danou položku ve frotě mít k dispozici a přistupovat k nim.
Tyto 3 informace si ukládám do další struktury s názvem informace ...

Jak bych tyhle 3 informace tedy mohl vlozit do prvního políčka v nějaké frontě abych k nim pak mohl přistupovat ? ..
Napadlo mě uložit si všechny 3 proměnné z dané struktury do pole např:



id = zakaznik.id;
pocee = zakaznik.price;
cis = zakaznik.cislo;

int polee[3] = { id , pocee, cis };


a pak udělat tohle: Vloz(pole[j], polee); kde j je index označující fontu

Děkuji,

Nahlásit jako SPAM
IP: 158.196.45.–
nervak0
Věrný člen
4. 3. 2011   #7
-
0
-

Nejdřív mě zajímá Head a Tail. Má to být spojový seznam, nebo jak je chceš používat?

Nahlásit jako SPAM
IP: 213.211.51.–
Klianer0
Newbie
4. 3. 2011   #8
-
0
-

Má to být fronta (queue) ..

Nahlásit jako SPAM
IP: 158.196.45.–
nervak0
Věrný člen
5. 3. 2011   #9
-
0
-

Fronta znamená jen to, že přidáváš na konec a odebíráš ze začátku. Budu tedy předpokládat, že Head a Tail máš správně jako int a nebudem toto řešit.

Do fronty vlož celou tu strukturu zakaznik (případně ukazatel na ni).

bool Vloz(fronta &f, zakaznik z);

bool Vyjmi(fronta &f, zakaznik &z);
...
Zakaznik z;
Vloz(prepazky[cisloprepazky], z);

Nahlásit jako SPAM
IP: 213.211.51.–
Klianer0
Newbie
5. 3. 2011   #10
-
0
-

JJ head a tail je int .. Jen nevím jestli jsi v tom příkladu zahrnul i ty 3 věci které potřebuji o daném zákazníkovi vedet např: ID, číslo přepážky a počet transakcí ... K tamto hodnotám po vlození do fornty ( jako prvního zákazníka ) potrebuji pak přistupovat. Ozázka zni jak k nim pristupovat, a jestli to jde vubec ulozit do pole ... Demostruji můj záměr na tvem přikladu



bool Vloz(fronta &f, zakaznik z);
bool Vyjmi(fronta &f, zakaznik &z);
...
Zakaznik z;
zakaznik[a].idd = a;
zakaznik[a].pocet_tran = pocet_transakci;
zakaznik[a].cislo_prepazky = cislo_prepazky;

Vloz(prepazky[cisloprepazky], zakaznik[a]); // tohle by melo udelat to že se výš zmíněné 3 proměnné uloži do nějake fonty pod
// nějakým id zakaznik, který má u sebe tyto 3 infromace ... Jde to takhle ??



Muj kod vypadá takhle: bohužel to vyhazuje chybu : v kodu oznacena(****) error C2059: syntax error : ']'


void vlozDoFronty()
{
int pocet_zakazniku = 5;
int id, pocee, cis;

//vlozeni vygenerovaného zakaznika do fronty
for ( int j = 0; j < pocet_prepazek; j++)
{
for ( int z = 1; z <= pocet_zakazniku; z++)
{
const int t = 3;
int id = zakaznik[z].idd;
int tran = zakaznik[z].pocet_tran;
int cislo = zakaznik[z].cislo_prepazky;

int info[t] = {id, tran, cislo};


if ( j == cis-1)
{
Put(pole[j], info[t]); // ****tady je ta chba
cout << "V" << id <<"F"<<"["<< z <<"]" << endl;
}
}
}

}



Nahlásit jako SPAM
IP: 158.196.45.–
nervak0
Věrný člen
5. 3. 2011   #11
-
0
-

V té frontě jsou zákazníci, tak tam vkládej zákazníky.

const int POCET_FRONT = 10;

const int MAX_ZAKAZNIKU = 5;

struct zakaznik
{
int a;
int b;
};

struct fronta
{
int head;
int tail;
zakaznik zakaznici[MAX_ZAKAZNIKU];
};

fronta prepazky[POCET_FRONT];

bool Put(fronta &f, zakaznik z)
{
if (Plna(f))
return false;
f.zakaznici[f.tail++] = z;
return true;
}
zakaznik z;

z.a = 123;
z.b = 456;
Put(prepazky[cisloprepazky], z);

Nahlásit jako SPAM
IP: 213.211.51.–
KIIV
~ Moderátor
+43
God of flame
5. 3. 2011   #12
-
0
-

evidentne se zoufale snazis vyhnout ukazatelum.. nebo o nich vubec nevis?
mozna by stalo za to zvazit i pouziti objektu.. preci jen poskytuji trosku vetsi miru abstrakce, nez kdyz se to snazis spatlat takhle

pripadas mi jako bys stavel auto bez znalosti funkce sroubu, treni.. ( a mozna i motoru :) )

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Klianer0
Newbie
5. 3. 2011   #13
-
0
-

Nervak, aha uz mi to pomalu dochází, jen jak bych to co jsi napsal aplikoval pro N zákazníků ? V tvém případě jsis vytvořil zákazníka z a dal mu hodnoty z.a a z.b následně jsi ho tam hezky vložil to úplně chápu. ALe ztrácím se v tom, že těch zákazníků mám N a generuji kazdemu zakazniku náhodně u jaké přepážky bude a kolik požadavků u ní bude mít.

Myslím něco jako že si první náhodně vygeneruju x zákazníků a k nim si vygeneruju náhnodný počet počtu požadavků z.a= NahodnyPočet a a číslo transakce z.b = nahodnyPočet. A pak si vsechny ty zakazniky ulozim do fronty odpovídající dané transakci ... transakce č5 = fronta 5 ..> vložim do fronty č.5 na prvni poličko daného zakaznika


KIIV: O ukazatelech něco vím, ale zřejmě nevím přesně v jakém připadě je použit. Snažím se právě v těhle věcech trošku zorientovat ..

Nahlásit jako SPAM
IP: 158.196.45.–
KIIV
~ Moderátor
+43
God of flame
5. 3. 2011   #14
-
0
-

spis dej vedet presny zadani.. pak te aspon muzem navigovat k presnemu reseni...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Klianer0
Newbie
5. 3. 2011   #15
-
0
-

Dobře, chci vytvořit simulaci pomocí fronty. Simulovat se má dění například v bance.
1) Chci vytvořit nějakých N přepážek, kde každá přepážka má svoji frontu. (fronta je implementovaná jako datová struktura)
2) Abych frontu mohl naplnit zákazníky, musím si vygenerovat nějakých N zákazníků, kde každému zákazníku přiřadím svoje id, počet transakcí a typ transakce.
3) Zákazníky rozdělím do fronty podle typu transakce např: fonta 5 je pro transakci číslo 5 = přepážka č 5
4) Začnu simulovat zpracování jednotlivých zákazníků

* Prvkem fronty je zákazník, kterého reprezentuje datová struktura zákaznici, ve které jsou proměnné (id, počet transakcí a typ transakce), které mi blíže popisují informace o daném zákazníku.

Nahlásit jako SPAM
IP: 158.196.45.–
KIIV
~ Moderátor
+43
God of flame
5. 3. 2011   #16
-
0
-

matne vzpominam ze sme v modelovani a simulaci meli za ukol vyuzit takovou mensi knihvnu co delal jeden z prednasejicich
http://www.fit.vutbr.cz/~peringer/SIMLIB/
ale tusim ze nebylo uplne snadne ji rozjet .. jinak programovani s tim jako takovy snadny docela bylo

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Klianer0
Newbie
5. 3. 2011   #17
-
0
-

** Změněno



Zjistil jsem ze byl Problem v tom typu a uz mi to trosku funguje a muzu pokracovat dale.
Děkuji vsem za trpělivost


Nahlásit jako SPAM
IP: 158.196.45.–
Klianer0
Newbie
12. 3. 2011   #18
-
0
-

DObrý den, tak stále jeste bádám jak tu simulaci mám vlastně vyřešit. Problém už neni se samotným programováním, ale s úvahou.
Situace je taková: Na uřad (v jedné časové jednotce) dojde zákazník, s náhodným počtem transakcí a s náhodným typem transkací. Potom si stoupne do fronty odpovídající typu transakce ( fronta =5 = transakce 5 ) to vše v jedné časové jednotce.
V další časové jednotce dojde další zákazník, který udělá to samé, ale přitom se zpracuje jedna jedna transakce u zakaznika 1;
V dalším časové jednotce přijde další zákazník, znovu to samé a zpracuje se další transakce prvního zákazníka, a první transakce druhého zákazníka. a furt dokola ...

Příklad výstupu:
VygenerovaniZakaznika[id][pocet_transakci] ZarazeniDoFronty[id]
VygenerovaniZakaznika[id+1][pocet_transakci] ZarazeniDoFronty[id] ZpracovaniTransakceUzakaznika1[id]
VygenerovaniZakaznika[id+2][pocet_transakci] ZarazeniDoFronty[id] ZpracovaniTransakceUzakaznika1[id] ZpracovaniTransakceUzakaznika2[id]

Pokud jsou zpracovny všechny transakce zakaznika z fronty vyjmu.

Nenapadá me cyklus kterým bych tohle mohl realizovat,

Nedosel jsem bohuzel na nic lepšího než to udělat takovým stylem, že si vygneruji urcitý počet zákazníků, ty hned po vygenerování vložím podle požadavků do jim odpovídajících front. A pak zavolám funkci vyprázdni fontu, kde postupnne obsluhuji zakazniky s x pozadavky. Jakmile obslouzim vsechny zakazniky ve frontě 1, přejdu na další frontu.

Bohužel mě nenapadá myšlenkový pochod jak danou situaci realizovat, tak aby se x front vyprazdnovali naráz ... Tj uředník v každé frontě dělal svoji práci a obsluhoval zákazníky, jakmile byjednoho obslouzil nasledoval by další ...

Dalo by se něco takého realizovat, případně jak ? :) děkuji

Nahlásit jako SPAM
IP: 88.102.103.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 154 hostů

Podobná vlákna

Generovani nahodnych cisel — založil jouda

Generovaní náhodných čísel v C — založil slaby_ucen46

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý