Anonymní profil Anonymní uživatel – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Anonymní uživatel – Programujte.comAnonymní profil Anonymní uživatel – Programujte.com

 

Příspěvky odeslané z IP adresy 89.173.13.–

Anonymní uživatel
C / C++ › nahodne cislo
23. 2. 2008   #66889

Radšej by som to upravil takto:

n = n * 993711 + 523147;
return n >> 16;

vsman
C / C++ › f-ce Sin, Cos ...
23. 2. 2008   #66841

Martin napsal:
Ja bych to chtěl udělat nějak takhle jestli je to možné ?


#include <math.h>
#include <stdio.h>
int main(void)
{
int uh;
scanf("%d", &uh);
double sin (double uh){ return sin(uh);}
/*tady je ta fela*/
return 0;
}

tam pravě nevim jak vypsat hodnotu toho sinu


Co to je za syntax deklarovat funkciu vo funkcii a este k tomu rekurzivnu... :-o

vsman
C / C++ › čas provádění kódu
23. 2. 2008   #66840

Vo windowse je to fukcia GetTickCount() a vracia počet tisícin sekund od spustenia systému.

vsman
C / C++ › nahodne cislo
23. 2. 2008   #66839

unsigned int rnd()
{
static unsigned int n = 1234567890;
n *= 993711;
return n;
}
Náhodné číslo v rozsaju 0-0xffffffff

Pseudonáhodne číslo využíva neusporiadanosť iracionálnych čísel.

Na zvýšenie účinnosti treba zakomponovať chaos.
Napríklad:

n = (n * 993711 + 523147) >> 16;
return n & 0xffff;

Náhodné číslo v rozsaju 0-0xffff


vsman
Assembler › Asm x86, IN/OUT operace
23. 2. 2008   #66838

Aký má zmysel robiť so 16b asm, čo to je za kravinu. To v dnešnej dobe neni použitelné. Treba sa učiť C jazyk a v ňom používať ASM procedúry. Také interrupty ako INT21H a ostatné BIOSovské sú dead.

Pravdepodobne ti nefunguje BIOS, tak skús DOS službu:

MOV AH, 01h
INT 21h

vsman
Assembler › proměnná v souboru
23. 2. 2008   #66837

No snad jedine tak, že to rozparzuješ v C jazyku s fread() ako program, skompiluješ s listingom do ASM a listing skopiruješ do vlastného MASM zdrojáku. Neexistje konkrétne makro, ktoré presne dokáže to čo potrebuješ. Musíš to naprogramovaťa najjednoduchšie je to v C.
Nemá zmysel poúžívať iba MASM. Efektívnejšie je použiť C a v ňom používaťASM procedúry.

vsman
Assembler › Timer
23. 2. 2008   #66836

Každý počítač vlastní špecialny časový číp 8259, ktorý volá HW interrupt 08h +8.2 krát za sekundu. Stačí zistit adresu obslužnej rutiny tohto interruptu a vložiťdo nej vlastný kód a potom ešte zavolat predošĺu rutinu na zabezpečenie kompatibility. Alebo pužiť SW iterrupt 1aH a po návrate je v CX,DX registroch počet taktov od posledného resetu. Lenže takto to funguje iba v 16b DOSe. Vo Windowse s tým sú problémy a nedovoluje prepisovať HW interrupty.
Tak potom:

unsigned long n;
__asm {
call GetTickCount
mov n, eax
}

Vo widnsowse treba použiť jeho funkcie, inak sa to nedá...

vsman
Assembler › Lokalni promenne
23. 2. 2008   #66835

Parametre funkcie zaberaju vzdy 4B. Lokalne premenne sa nevyberaju zo zasobnika s POP a tak moze mat i 1B. Polia zoberu zo zasobnika celu velkost toho pola, cize 'int n[10]' si ukusne 40B. Lenze mam taky dojem, ze i lokalne premmene sa zarovnavaju v zasobniku na 4B, pretoze citanie numerickych hodnot z pameti je rychlejsie z adres delitelnych 4. Niektore CPU dokonca nedokazu z neparnej adresy vobec citat data. Intel sa prisposobi, ale spomaluje to kod. Cize pre optimalizaciu kodu moze kompilator pre 1B premennu vyhradit 4B v zasobniku...

vsman
Assembler › zvlastny uvod main()
23. 2. 2008   #66834

To k : Kompilator jazyka C vklada do kodu specialnu proceduru na kontrolu pretecenia zasobniku. Tato procedura sa vykonava na zaciatku kazdej volanej funkcie. Potom, pred volanim nejakej funkcie kompilator uklada vsetky parametre funkcie do zasobnika a vo funkcii sa hodnoty tych parametrov zo zasobnika citaju. Zasobnik je bufer na rychle predavanie datovych hodnot a v ASM su na nu specialne instrukcie. Ale je zbytocne toto studovat. Pouzitie ASM v C nepotrebuje volat inu fukciu. ASM v C sluzi na zrychlenie nejakych specialnych rutin.
Vlozit ASM do C mozes takto:
void main()
{
int a = 123;

__asm {
mov eax, a
add eax, 200
mov a, eax
}

printf("a=%d\n", a);
}

ASM pricita do premennej 'a' hodnotu 200 a potom normalne s printf sa hodnota vypise...

 

 

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