C++: Funcion pointer, Api for Win - poraďte – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++: Funcion pointer, Api for Win - poraďte – C / C++ – Fórum – Programujte.comC++: Funcion pointer, Api for Win - poraďte – C / C++ – Fórum – Programujte.com

 

Huge0
Návštěvník
22. 8. 2007   #1
-
0
-

Nazdárek, pár dotazů (možná i hloupých):

1.) Chtěl bych se zeptat, proč mi nejde uložit operator+ do ukazatele na funkci. Vím, že je masivně přetížený, ale jak mám tedy specifikovat, kterou fci operator+ chci uložit? Nešlo to jak s intem, tak s vlastní třídou s přetypovaným +. Debuger, hlásí cosi o šablonách.
2.) Mám se učit Win32Api, které je pouze pro 32-bitové systémy. Slyšel jsem, že ho dnes již téměř nikdo nepoužívá, jak se jmenuje nové api a kde se ho mám naučit? Funguje i na 32-bitových systémech?
3.) Chtěl bych udělat jeden program pro Win (příp. independet), který se spustí při startu konkrétního jiného programu. Tuším, že budu muset udělat malý zavaděč, který se spustí při startu systému a který bude nějak kontrolovat, zda inkriminovaný (zmíněný) program startuje. Potom budu potřebovat z toho hlavního programu spuštěného zavaděčem zjistit, zda okno hlídaného programu je aktivní či nikoli. Jak na to (s ohledem na výše zmíněný problém ani nevím v jakém api)?
Chtěl bych totiž naprogramovat plánovač projektů v wx-DevC++, kde by si člověk stanovil, kolik času hodlá obětovat určitému projektu a on by mu to pak odpočítával, když by ho měl otevřený. Jestli nějaký takový program znáte, třeba i lepší, klidně se zmiňte.

Každá rada dobrá, díky za jakékoli užitečné informace.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
22. 8. 2007   #2
-
0
-

ad 1) Operator jsou obycejne funkce, takze problem bych v tom nevidel(akorat netusim k cemu jeto dobre):



#include <iostream>

struct A
{
int num;
A(int n=0)
:num(n){};
A operator+(const A& other) const
{ return A(num+other.num);}
};

A operator+(const A& a, const A& b)
{ return A(a.num+b.num);
}

typedef A(*TPlus)(const A&, const A& );

typedef A(A::*TMemPtr)(const A&)const; // poyor na const

int main()
{
TPlus plus = &operator+;
A a1(10), a2(5);
TMemPtr mem = &A::operator+;
std::cout << plus(a1,a2).num << std::endl;
a1.num = 20 ; a2.num = 25;
std::cout << (a1.*mem)(a2).num << std::endl; // pozor na zavorky
return 0;
}


ad 2) Nesouhlasim. Klidne bych se na WinAPI podival(a nekdy se i opravdu divam), ale radeji davam prednost wxWidgets(nebo jakoukoliv jinou GUI knihovnu).
ad 3) No, podle meho by mozna slo vyuzit hakovani, popr. udelat nejaky program ktery pojede na pozadi a bude hledat treba pomoci FindWindow okno toho programu v urcitych casovych intervalech, ale bohuzel nevim jestli se to taktoda realizovat - nemam cas to tedkom hledat a mozna to bude dost neefektivni.

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
22. 8. 2007   #3
-
0
-

ad 3)Neviem ci som ta pochopil ale mozno by si to mal lahsie ak by si spravil nejaky maly spustac, ktory by iba pustil novy proces a ulozil by si cas spustenia a po uplinuti casu by ten novy proces zabil/dal moznost zabit. Ale musel by si pustat dany program vzdy cez tento spustac...
WinAPI nepoznam ale pokial viem ponuka funkcie pre multiprocessing.

Nahlásit jako SPAM
IP: ...–
survik1
~ Moderátor
0
Posthunter
22. 8. 2007   #4
-
0
-

To Huge:
2) Win API mrtvé není a používá se. Ale osobně se mi zdá lepší SDL, které je lehčí na práci a zahrnuje jen to nejpotřebnější (samozřejmě že další a další f-cemi disponují knihovny ke stáhnutí na oficiálním webu).

Nahlásit jako SPAM
IP: ...–
Život je jen hra, která se nedá vyhrát.
olgo0
Věrný člen
22. 8. 2007   #5
-
0
-

mozes vytvorit script/program ktorym spustis toho tvojho spiona a nasledne aplikaciu po ukonceni aplikacie skonci aj spion (samozrejmo az po tom co zhromazdi udaje a spise protokol).

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
23. 8. 2007   #6
-
0
-

To survik1:
Otázkou je, jestli chce vyvýjet hry. SDL je primárně určená právě na multimediální aplikace, jenže neobsahuje žádý GUI systém.

Nahlásit jako SPAM
IP: ...–
Huge0
Návštěvník
27. 8. 2007   #7
-
0
-

Díky za odpovědi,
1. Prošel jsem si ten kód a už to asi chápu. Jenom s tím

typedef A(*TPlus)(const A&, const A& );
jsem se ještě nesetkal. Je to trošku matoucí, TPlus totiž vypadá jako deklarace ukazatele na fci, ale ve skutečnosti je to jen zavedení nového typu. K čemu to je? Například chcete generovat pseudonáhodná čísla, ale rand() dělá jen čísla >= 0. Chcete-li náhoné znaménko, máte 2 možnosti:
int cislo = rand() * ((rand % 2) * 2 - 1); // První možnost.

// Nebo si vytvoříte pole ukazatelů na unární fce operator- a operator+ a pak takto:
cislo = znamenko[rand() % 2] rand(); // Efektivnější kód. Efektivita je důležitá!

Našla by se i další využití.

2. Názory dobré, ale co takhle odpovědět na otázku? Je Win32Api jen pro 32-bitové Windows? A jaké GUI používají Windows Vista a další plánované?

3. Není to žádný špion, ale plánovač práce. Šlo by to tedy řešit tak, že bude "špion" asociovaný se sledovanými soubory (.dev) a potom sám spustí wx-DevC++ko s tímto souborem a bude hlídat, jestli běží a jestli je jeho okno aktivní. Ale jak na to?

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
27. 8. 2007   #8
-
0
-

To Huge: ad spion to bol vtip.

a to s typ signed random neni jednoduhsie toto?



int random;
random = rand();

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
27. 8. 2007   #9
-
0
-

To Huge:

Nechápu, co je na typedef matoucího? Pokud s tím máš problém, tak si klidně před každou proměnnou nadl¨klaruj její typ, ale garantuji ti, že u 2. deklarace nasekáš spoustu chyb.

No, dělat na znaménka pole funkcí je trochu brutální, navíc píšeš něco o efektivitě, ale neuvědomuješ si, že druhá možnost bude daleko horší než první - musi se volat další funkce navíc.



int num = rand() % 10+15; // nebo jaky chces interval
if(rand() % 2) num = -num;

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
27. 8. 2007   #10
-
0
-

To Jura: ale ved ten tvoj kod vola rand tiez 2 krat

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
27. 8. 2007   #11
-
0
-

Ano, volá - jednou pro číslo a podruhé pro znaménko. Ale já mluvil o volání přetížených operátorů - to jsou taky jen funkce, které si Huge uložil do pole. Tvůj příklad jsem nepobral - ty losuješ čísla intervalu <0; RAND_MAX), takže neurčíš nijak jeho zaménko.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
27. 8. 2007   #12
-
0
-

no ja som si to (aby som nepisal nejaku blbost) skusil na priklade:



#include <stdlib.h>

int main(){

char s_random = 0;
unsigned char u_random = 0;


printf("rand_max == %u\n", RAND_MAX);
srand((unsigned int)time(NULL));

s_random = u_random = rand();
printf("%d\n%d\n", s_random, u_random);
if(s_random < 0){
printf("zaporne\n");
}
return 0;
}

a vsetko facha.

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
27. 8. 2007   #13
-
0
-

To olgo:
Si děláš srandu, ne? A co když budu chtít losovat čísla od <257; RAND_MAX)?

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
27. 8. 2007   #14
-
0
-

To Jura: tak nepotrebujes zaporne. po ziskani cisla normalne pripocitas 257.

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
27. 8. 2007   #15
-
0
-

Jen si to zkus na svém příkladu, bez toho, aniž bys změnil datový typ s_random, u_random(teď už asi víš, kam mířím, co?).

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
27. 8. 2007   #16
-
0
-

To Jura: no teraz vazne neviem ci si robis srandu, alebo tu nekto druhy vystupuje pod cudzim nickom.

vo svojom druhom prispevku som nacrtol sposob fungovania. s tvojej reakcie na moj kod som usudil ze si ho asi nepochopil (ci bol problem v mojom vyklade alebo na tvojej strane riesit nechcem) tak som ho rozpisal obsirnejsie. samotny kod nema za ucel sluzit ako super-duper flexibilny modul ale stale iba ako demonstracia principu, naco snad bohate staci. velkost premennych pri tejto demonstracii samozrejme nehra ulohu.

btw.: nabuduce si podobne vyryvanie prosim odpusti. ok?

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
27. 8. 2007   #17
-
0
-

To olgo:

Řešíme tu to, že jedním voláním rand() nelze ziskat zápornou hodnotu??
Sorry, ale mi jde o to, že rand() implicitně losuje z intervalu <0, RAND_MAX). Čili nemůžeš z rand(), aniž bys ztratil vylosovanou hodnotu, dostat záporné číslo. Tobě se to ale povedlo, tím že jsi výsledek rand() nacpal do char, díky tomu došlo k přetypování int na char(přeteklo to) a výsledek je úplně jiné číslo(které uživatel třeba ani nechtěl).

>>btw.: nabuduce si podobne vyryvanie prosim odpusti. ok?
Sorry, ale nebylo to myšleno škodolibě. Takže ještě jednou se omlouvám.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
27. 8. 2007   #18
-
0
-

ono je kludne mozne pouzit akykolvek ini celociselny typ (kludne aj int a unsigned int kde nic nepretecie a nic sa nestrati) ja som ale minimalistickej povahy takze mi kludne staci jeden byte.

a výsledek je úplně jiné číslo(které uživatel třeba ani nechtěl).


to cislo bude ale iba orezane a teda na svojej nahodnosti nic nestrati.

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #19
-
0
-

ad 2) WinAPI "pouze" poskytuje prostředky pro programování ve windows. Tzn. pokud chceš aby se tvá aplikace chovala a vypadala "win" (editBoxy, tlačítka, apod) použiješ WinAPI. 32b systémy a 64b se podle mě liší jen rychlostí, takže API by mělo být stejné.

Viz. MSDN

The Windows API can be used in all Windows-based applications. The same functions are generally supported on 32-bit and 64-bit Windows.



Ohledně záporného náhodného čísla) dá se to obejít


int i;
i = rand(4) - 10;

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
28. 8. 2007   #20
-
0
-

To olgo:
Aha, no já měl na mysli, že se tím přetypování snažíš dokázat, že JEDNÍM voláním rand() (bez dalších výpočtů intervalu) lze získat zápornou hodnotu.

To tucna:
No, mělo by to být spíše takto:



int i;
i = rand()%4 - 10;

Ale to není podstatné, já jsem totiž řešil asi úplně něco jiného, než se Olgo snažil demonstrovat.

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
28. 8. 2007   #21
-
0
-

to Jura: jj mělo, sry za překlep

to Olgo: toto jsem nepochopil

to cislo bude ale iba orezane a teda na svojej nahodnosti nic nestrati

...tím myslíš že to číslo sice bude úplně jiné než jsme chtěli ale za to bude taky náhodné takže je vše OK??

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #22
-
0
-

To tucna: ano az nato za nebude tak uplne ine :)

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #23
-
0
-

Olgo můžu vědět kolik je ti let?

Teď už ti dva lidé tady píšou že říkáš blbiny a ty místo toho aby jsi to přiznal (popř. promyslel) dále hloupě argumentuješ. Juro ti psal hned zkraje že ten tvůj zdroják výš je blbost (pokud nechápeš proč, nauč se první programovat (tím myslím PROGRAMOVAT ne rozumět syntaxi)).

Podle mě jsi Pascalista který se naučil syntax c a cítí se jako nějvětší borec, který si nenechá poradit.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #24
-
0
-

To tucna: ja si necham poradit a netvarim sa ako borec lebo nim proste niesom ale ovela viac oko osocovanie by som uvital fakty.

ak je to ako hovoris blbina nerobi mi problem to uznat ale tim ze sem proste len napises ze JE TO BLBINA ma nepresvecis

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #25
-
0
-

To olgo: Doporučuji ti znova přečíst celé téma. Sám ti píšu o pár příspěvků výš že je tvůj "postup" špatný. Záporné číslo se negeneruje tímto způsobem, ale to už se opisuju...Pročti si co říká Juro a já a zamysli se nad tím.

Ono je totiž normální říct "Jo vymyslel jsem špatný postup, máš pravdu tvým způsobem by to fungovalo líp"
Ale ty píšeš "Nenene, to měla být jen ukázka" - v ukázce jde totiž především o naznačené řešení

Už je kvůli tohoto

rand() = Returns a pseudo-random integral number in the range 0 to RAND_MAX.


...by tě mohlo napadnout že se to dělá jinak. A když ti někdo navrhne jak na to, a ty odpovíš že "to děláš dobře, to číslo náhodné bude, jen bude trochu jiné", tak sry ale to už je trochu moc ne?

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #26
-
0
-

To tucna: no nechcem sa s tebou hadat celkovo tu boli navrhnute postupi tusim od styroch ludi pricom ten tvoj bol asi najlepsi zato moj dovolim si tvrdit najrychlejsi aj ked uznavam za urcitych okolnosti nepouzitelny.

ad nahodne zaporne cisla: uz len s tohto vlakna je vidiet ze si to kazdy robi po svojom a hovorit teda o tom "akym sposobom sa generuje zaporne nahodne cislo" je trochu ...

ad ukazka: ona totiz funguje. a vygeruje nahodne znamienkove cislo. za tie jednobytove typy si mozes dosadit akekolvek ine celociselne typy a bude to fungovat (okrem pripadu ked RAND_MAX nebude rovnaky alebo vecsi ako rozsah datoveho typu)

A když ti někdo navrhne jak na to, a ty odpovíš že "to děláš dobře, to číslo náhodné bude, jen bude trochu jiné", tak sry ale to už je trochu moc ne?


nie som si isti ci vies co sa v danej chvily stane a ked ano tak som asi ozaj blbi lebo stale nechapem co ti na tom vadi

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #27
-
0
-

To olgo: napiš tvým způsobem vygenerování náhodného čísla z intervalu <-5;5>

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #28
-
0
-



#include <stdlib.h>

int main(){

short int random;

srand((unsigned int)time(NULL));
random = rand();
random%=6;
printf("%d\n", random);
return 0;
}

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #29
-
0
-

Tak nevím, děláš si srandu? :D

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #30
-
0
-

To tucna: mohol by si byt trochu konkretnejsi?

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #31
-
0
-

Aha takže neděláš, ok. Zkoušel jsi to spustit?

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #32
-
0
-

To tucna: ano

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #33
-
0
-

A opravdu ti to generuje záporná čísla?? (jaký máš kompilátor?)

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #34
-
0
-

gcc 3.4.6
inak tu je vypis:


bash-3.1# ./rand5
1
bash-3.1# ./rand5
-3
bash-3.1# ./rand5
-3
bash-3.1# ./rand5
5
bash-3.1# ./rand5
5
bash-3.1# ./rand5
-5
bash-3.1# ./rand5
-5
bash-3.1# ./rand5
2
bash-3.1# ./rand5
2
bash-3.1# ./rand5
-5
bash-3.1# ./rand5
-1
bash-3.1# ./rand5
-5

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #35
-
0
-

V tom případě bych tě požádal, aby jsi slovně popsal jak ten tvůj kód funguje

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #36
-
0
-

- inicializacia
- vygenerovanie neznamienkoveho nahodneho cisla
- priradenie do znamienkoveho typu (cisla vecsie ako polovica sa perevedu na zaporne preto je nutne aby RAND_MAX pokryval cely rozsah typu)
- ziskanie zvysku

co je za problem ide ti to ci nie?

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #37
-
0
-

sry nešlo mi to s short int. Po změně na char jede.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #38
-
0
-

a v com to kompilujes ked to nepozna short int?

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
k
~ Anonymní uživatel
144 příspěvků
28. 8. 2007   #39
-
0
-

A naco to robite tak komplikovane ? ved staci rand()%(2*x) - x a mate cisla z mnoziny {-x,...,x}. Taktiez vacsi mozny rozsach x kedze to nepchame do 16bit(short) ale do 32(int)
Mna by skor zaujimalo da sa urobit algoritmus bez podmienok co by generoval cisla z mnoziny {-x,...,-y} U {x,...,y}, kde x, y su z N ?

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
28. 8. 2007   #40
-
0
-

gcc 3.3.1. short int samozřejmě zná, jen to s ním negenerovalo záporná čísla ;)

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
28. 8. 2007   #41
-
0
-

to k:
řešíme něco jiného, přečti si to celé ;)

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #42
-
0
-

To k: termin kompikovane je dost relativni. pre stroj je to o dost jednoduhsie.

Taktiez vacsi mozny rozsach x kedze to nepchame do 16bit(short) ale do 32(int)


to robis naschval?

ja mam RAND_MAX 2 147 483 647 kad dobre pocitam tak je to 2^31-1 a je to teda pre mna nepouzitelne (bez jeho zmeny samozrejme)

btw.: uz ste niekto pisal program co by potreboval tak velky rozsah nahodnych cisel?

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
k
~ Anonymní uživatel
144 příspěvků
28. 8. 2007   #43
-
0
-

To tucna: Ja som si to cele precital a vy tu neriesite vlastne nic :). Riesilo sa tu zo zaciatku ako jednym volanim rand() ziskat nahodne znamienkove cisla z danej mnoziny (TO NIE SU INTERVALY!!!!!! :) ), vlastne ten poziadavok na mnozinu tam ani nebol, to len dakdo spomenul ze povodnym olgovym kodom sa to neda. Co bolo vyriesene, uz dost vyssie, a od vtedy sa hadate uplne o nicom :)

To olgo: To som si akosi neuvedomil, sorry mas pravdu :). A pre stroj su jednoduche obidva, len pre cloveka je jednocduchise pochopit bez pretekania :)

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
28. 8. 2007   #44
-
0
-

To olgo:
Hmm, tak já mám na svém překladači jinou hodnotu RAND_MAX, nejmenší možnou:). To by možná ysvětlovalo, proč se dostaneš na záporná čísla.
Pokud se nemýlím, tak v kryptografii se používají i delší a pokud se pletu, tak mě někdo jistě opraví.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #45
-
0
-

To k: lenze ti aj nasobis aj delis lenze ja len delim :)

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #46
-
0
-

to k: no neřekl bych že neřešíme nic. Snažíme se olgovi říct že generovat nah. čísla způsobem který popsal je fakt blbost :)

RAND_MAX je definovaná v <cstdlib> a standartně je rovna 32767. Takže taky koukám :)

Kryptografie - o délce použitého klíče většinou vypovídá údaj přímo v názvu. Např "128b RSA"

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
28. 8. 2007   #47
-
0
-

To olgo:
Aha, už jsem asi pochopil na co spoléháš-že rozsah RAND_MAX je vždy větší než je rozsah typu cílové proměnné, je to tak správně?

To k:
Mna by skor zaujimalo da sa urobit algoritmus bez podmienok co by generoval cisla z mnoziny {-x,...,-y} U {x,...,y}, kde x, y su z N ?
Tohle asi bez podmínek nepůjde..

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #48
-
0
-

To Jura:

To by možná ysvětlovalo, proč se dostaneš na záporná čísla.


sice neviem cim som si vysluzil nalepku debil ale skus to brat tak ze to neni nahodni ukaz ale cieleny vysledok

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Jura
~ Anonymní uživatel
637 příspěvků
28. 8. 2007   #49
-
0
-

To olgo:

Nikdo z tebe debila nedělá. Kromě toho teď nevím na co nárážíš. Já mám na svém překladči nejmenší možný RAND_MAX(podobně jako tucna), který je shodou okolností roven SHRT_MAX, tím pádem nikdy, samozřejmě pokud nezměním typ cílové proměnné na menší, nemůžu dostat zápornou hodnotu.

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
28. 8. 2007   #50
-
0
-

Olgo: nikdo netrdí že jsi debil. Tvé řešení je jen zárážející (a tvé lpění na něm též :) - to co jsi udělal prostě není algoritmizování problému, tvé řešení funguje v jazyce x s překladačem y. Ale na jiném jazyce a celkově v jiných podmínkách fungovat nemusí!

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
28. 8. 2007   #51
-
0
-

Tak v tomto musim podporit olga, mne sa INT_MAX == RAND_MAX. Asi by nebolo odveci povedat ake mame prekladace (ja gcc-4.1)

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
28. 8. 2007   #52
-
0
-

To tucna: mas pravdu len by som to poopravil na urcitych platformach a v jazykoch dost nizkych na to aby do toho prekladace moc nekecali a dost benevolentnych na to aby bol vysledny kod dielom programatora a nie prekladaca.

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
tucna0
Návštěvník
28. 8. 2007   #53
-
0
-

Olgo: jsem rád že jsme se konečně pochopili a domluvili :)

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
28. 8. 2007   #54
-
0
-

To Juro, k: Proč sem motáte překladače? Ten s tím nesouvisí RAND_MAX je prostě jen konstanta definovaná jak jsem psal.

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
28. 8. 2007   #55
-
0
-

To tucna:A kde je ta konstanta definovana ? V libc. A libc je sucastou coho ? Pomozem ti citataom z stranky gcc:
The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, as well as libraries for these languages.
Preto sem pchame kompilery...

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
28. 8. 2007   #56
-
0
-

To tucna:
Asi jsem to blbě napsal, spíše by se hodilo ve svém protředí(vč. hl. souborů, atd.),ale i to je sporné - navíc sem to dával do souvisloti se shortem a ten je závislý na překladači, paltformě,atd. To proto, že sem zdůvodňoval, proč mi nevylosuje Olgův příklad zápornou hodnotu. Toť vše. Už nemám sílu se tu moc dohadovat.

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
28. 8. 2007   #57
-
0
-

k: napíšu to ještě jednou - ta konstanta je definovaná v souboru stdlib (cstdlib). Takže každý kdo má alespoň poznámkový blok dokáže tu konstantu přepsat jak potřebuje. Ju?

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
28. 8. 2007   #58
-
0
-

Ano? A skusal si ju menit? Asi nie, ze. Lebo inak by sa to nepovedal. Ta hodnota, RAND_MAX, je natvrdo zakodovana v zdrojaku funkcie rand() to co je v *.h ma "len" informativnu hodnotu a rand() na nu z vysoka dlabe, ona sa riadi tym co jej bolo dane pri kompilacii.
btw. v glibc je definovana takto:
/* The largest number rand will return (same as INT_MAX). */
#define RAND_MAX 2147483647
a ako chces dostat zmenenu hodnotu makra do skompilovanej kniznice bez toho aby si ju rekompiloval?

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
29. 8. 2007   #59
-
0
-

Můj stdlib

#define	RAND_MAX	0x7FFF


...po změně na
#define	RAND_MAX	0x8FFF


...vypsal pomocí cout RAND_MAX
36863


A vzhledem k tomuto řádku
#include <stdlib.h>


...se není ani čemu divit, že?

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
29. 8. 2007   #60
-
0
-

Ty si ma vobec nepochopil... Ja si mozem nastavit v stdlib.h RAND_MAX aj na -50 ak chcem, no rand() sa na to vyserie. Ja som hovoril o tom, ze rand() bude nadalej vracat hodnoty z {0,...,povodny_rand_max}. RNAD_MAX, moze mat kazdy iny s tym suhlasim, zavisy to na implemetacii standartnej c kniznice. A ten co to implementoval napisal rand() tak aby vracala take a take hodnoty, a to co je v stdlib.h bolo pouzite _LEN A LEN PRI KOMPILACII TEJ KNIZNICE_. Skompilovany rand() ti absolutne dalbe na to co je v stdlib.h ak ja si prepisem RAND_MAX na 5, tak mi bude rand() vracat aj tak cislo z {0,...,2^31} (2^31 na mojom systeme). Uz si to pochopil ? Na kery kkt si ja budem menit konstanty ked nebudu mat vobec ale vobec ziadny efekt az na to ze printf-nem nieco ine ?
S prepacenim tu teraz ty potis blaboly, sam si tu volakoho kritizoval ze nedokaze priznat chybu, mal by si sa zamyslet teraz pre zmenu nad sebou.

Nahlásit jako SPAM
IP: ...–
tucna0
Návštěvník
29. 8. 2007   #61
-
0
-

ok, to jsem se do toho zamotal, ještě teď jsem z té diskuze nějak "přepracovaný" :)

Máš pravdu ;)

Nahlásit jako SPAM
IP: ...–
sn3d0
Věrný člen
29. 8. 2007   #62
-
0
-

ach jaj :D uz ldho som sa takto nepobavil na ziadnom flame-e :D

Nahlásit jako SPAM
IP: ...–
shutdown -h now
tucna0
Návštěvník
29. 8. 2007   #63
-
0
-

Musím říct, že teď už mi to taky příjde zábavné. Pěkně jsem se u toho na brigádě odreagovával :)

Nahlásit jako SPAM
IP: ...–
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, 68 hostů

Podobná vlákna

Win 32 API — založil radvis

Win API — založil Midnight

Win 32 api Dialogy — založil whysper

WIN API WM_PAINT — založil unk

Psaní Win API — založil matesz

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ý