"1-Bitne" baze podataka sa 1 poljem i vise kolona.

opkoracujem

Zainteresovan član
Banovan
Poruka
171
Kod:
         POLJE 1 POLJE 2 POLJE 3   . . .
KOLONA 1 stavka  stavka  stavka
KOLONA 2 stavka  stavka  stavka
. . .    .   .   .

Radi se o 1 polju, jer je u pitanju 1-bitna baza. Svaka stavka ima ili jednu ili drugu od 2 vrednosti (recimo 1 i 0).

1 Bajt nosi 8 polja. To bi znacilo da bi tabela od 1024 polja imala 128 bajtova.

Bajt moze da prikaze jednu od 256 vrednosti. Ako bajt predstavimo sa B256 tabela bi snimljena u fajlu izgledala ovako: B256 B256 B256 B256 B256 B256 . . . pre ovih bajtova postojao bi "count" ili "sizeof" ili "lenght" (kako ocete) bajt, koji predstavlja broj stavki u tabeli, kojeg bi program prvog ucitao da bi znao kolko posle da cita. Ali to je manje bitno sad.

Treba mi kod koji ce razbiti bajt u 8 bitova, to jest, omoguciti mi da tumacim 1 bajt (vrednost od 0 do 255) u 8 vrednosti (0|1 0|1 0|1 0|1 ...)... odnosno, algoritam.

Dalje, treba mi forumula za racunanje broja mogucih kombinacija u brojevnom sistemu sa n cifara za nc kodnih mesta, u koliko su sva kodna mesta popunjena.

Broj cifara: (dekadni) 10, (binarni) 2, (oktalni) 8...
Kodno mesto: (broj) 10 1 = kodno mesto 1, 0 = kodno mesto 2. Broj 321: kodno mesto 1 = 3, kodno mesto 2 = 2, kodno mesto 3 = 1. Kodna mesta su mesta za broj.

Dakle, treba mi recimo (primer) info. o tome koliko je mogucih kombinacija razlicito rasporedjenih 1 i 0 u binarnom broju sa 8 kodnih mesta, koliko sa 4, itd... znaci, treba formula a ne konkretan podatak. Hvala vam.

___ ___ ___ ___ ___ ___ ___ ___ ___ ___

evo za sta ce mi to:

Pravim .dll koji obavlja poslove oko unosa podataka u konzolu. E sad, tu ima naprednijih malo mogucnosti (boje slova, ne dozvoljavanje da se unesu brojevi/slova (ako treba samo brojeve pisati), ne dozvoljavanje korisniku da unese vise cifara/slva nego sto je fixed lenght of that text box, auto-complete (ako ukucam M da mi ponudi "OV" da bi bilo "MOV" (lupam primer), auto-correct, correct-case, trimming (brisanje suvisnih space-ova), editovanje, copy-paste, menjanje insertation point-a itd.), i koji ce mi biti spreman da mi bude pri ruci kad god pozelim da napravim nesto i skracivati mi vreme jer ga vec imam gotovog.

Najveci mi je problem oko toga da ocu kad ukucam 1 2 3 slova on odma ponudi sa strane u jednom delu konzole "informacije o tome sta mogu napisati/sta sam vec pisao" tj. kao auto-komplit. Pretraga klase koja cuva te podatke o tome bi trebala biti djavolski brza, a optimizovana za to da program nikad ne prekoraci 1 Mb memorije. Ono sto pravi najvecu zabunu je sto bi postojala jedna don't allow error komponenta, koja ti brani da uneses nesto sto nebi bio validan podatak. Recimo, kad bih uneo "M" (a moguce reci su MIX i MOVE) to mi nebi dozvolilo da unesem posle M nista drugo osim ili I ili O, ako ukucam X sve bi izgledalo kao da nista nisam ukucao.

E sad, da bih napraivo tu komponentu, koja je opcionalna (ne mora se koristiti za svaki Text Box, imalo bi verzija koje su brze, ali je ne podrzavaju, optimizacija itd...) trebao bih imati referencu na neku tablu koja "zna" sta sledece mogu da napisem, a sta ne... i puni neki class podacima o tome sta nije dozvoljeno cim joj se prosledi ono sto sam do sada ukucao, a taj drugi class opet brani unos nepravilnih podataka.

Za "taj drugi klass" bih stavio nesto ovako, sto ima tacno ovakvu tabelu: 32 bajta (od kojih svaki bit znaci 'da li je slovo sa tim ANSI kodom dozvoljeno uneti', dje je "taj asni kod" u stvari offset bita u bitovima od pocetka tabele (recimo u 4tom bajtu od pocetka tabele, 8 bit bi signalizovao da li je space bar dozvoljeni pritisnuti, posto je ANSI kod za space = 32). Dalje, u istoj tabeli bi zatim bilo posle ta 32 jos 128 bajtova, od kojih bi svaki redom predstavljao "koja slova je nedozvoljeno pritisnuti", radi nekih drugih opcija, to jest, sadrzao bi iste informacije kao i ona tabla od 32 bajta, s tim sto je ova sad bolja za nesto, a ona je bila bolja (brza) za nesto drugo. Izmedju ove 2 table bi bio jedan bajt koji indicira "da li je vise znakova dozvoljeno ukucati nego sto je nedozvoljeno ili je vise nedozvoljeno nego sto je dozvoljeno", pa bi prema tome u slucaju da je on postavljen (vise je nedozvoljeno) tabla od 128 bitova oznacavala samo "sta je dozvoljeno" (obrnuto od gornjeg slucaja). Tako bi informacije o tome koji se od 256 mogucnosti (znakova) smeju uneti stala u samo 128 bajtova + 1 prekidac (ovaj sto znaci cega je vise).

Svaki bajt u toj tabeli koji je postavljen bi sadrzao broj (ANSI kod) znaka koji je dozvoljen/nedozvoljen, a bajtovi bi bili poredjani jedan do drugog.

Ta tabela od 128 bajtova bi sluzila za prikazivanje auto-complete liste, tj. da ga ubrza... al to je sad duga prica.

OVAJ DRUGI DEO NE MORATE CITATI
 
Dakle, treba mi recimo (primer) info. o tome koliko je mogucih kombinacija razlicito rasporedjenih 1 i 0 u binarnom broju sa 8 kodnih mesta, koliko sa 4, itd... znaci, treba formula a ne konkretan podatak. Hvala vam.

Pretvaranje dekadnog u binarni broj: delis sa 2 i pamtis ostatak kao (na primer) niz, kad dodjes do kraja pogledas niz unazad i to ti je binarni broj, probaj na papiru.

Broj mogucih kombinacija: 2 na n (gde je n broj cifara) 2 na 8 je 256, 2 na 10 1024 i td.
 
Poslednja izmena:
Pretvaranje dekadnog u binarni broj: delis sa 2 i pamtis ostatak kao (na primer) niz, kad dodjes do kraja pogledas niz unazad i to ti je binarni broj, probaj na papiru.
ja delio 1572:2 i to mi ispalo 786, a ostatci su bili ovim redosledom na dole: 1,1,0 ,
sto bi znacilo da je obrnuto 011, ali to NE MOZE biti taj broj, a i proverio sam na Winblowsovom calculatoru, nije to to. Jel ja ovo nisam dobro shvatio? Molim te objasni mi u cemu sam gresio ili sta sam propustio, ako primecujes...
 
ja delio 1572:2 i to mi ispalo 786, a ostatci su bili ovim redosledom na dole: 1,1,0 ,
sto bi znacilo da je obrnuto 011, ali to NE MOZE biti taj broj, a i proverio sam na Winblowsovom calculatoru, nije to to. Jel ja ovo nisam dobro shvatio? Molim te objasni mi u cemu sam gresio ili sta sam propustio, ako primecujes...

Sto si se odmah uhvatio za veliki broj?
Evo uzmi recimo 12 dekadno, da vidis princip:

12/2 = 6 i ostatak je 0
6/2 = 3 i ostatak je 0
3/2=1 i ostatak je 1
1
znaci unazad je 1100
provera:
0x2 na 0 +
0x2 na 1 +
1x 2 na 2 (4) +
1x 2 na 3 (8) = 12

20 dekadno:
20/2 = 10 i ostatak 0
10/2 = 5 i ostatak 0
5/2 = 2 i ostatak 1
2/2 = 1 i ostatak 0
1
znaci: 20 dekadno = 10100 binarno

ok?
 
Bilo koji bajt ORovan sa 00001000b (ako je 1 4ti bit[1]) ce postaviti (set) ili reset (ako je vec postavljen) 4ti bit (postaviti = da bude 1), a vrednosti ostalih sacuvati.

Bilo koji bajt ANDovan s' 11110111b (ako je 1 4ti bit[1]) ce obrisati (clear) ili ponovo obrisati (...?) bit br. 4, a ostale ce sacuvati.

Bilo koji bajt(destination) ANDovan sa 00001000b(source) (ako je 1 4ti bit[1]) ce dati:
1. vrednost vecu od nule ako je i u bajtu koji je ANDovan taj bit postavljen, 2. ...ako nije dati vrednost 0.

[1] "4ti" ako prvi bit racunamo kao "bit 1", a "3ci" ako prvi bit racunamo kao bit "0", moze biti i "5ti" ili "4ti", zavisi da li gledamo sa leve strane ili desne, e sad, neka od tih strana je u big-endian, a neka druga u little-endian. Ja ne znam tacno koja je za koji, zato sam pitao gore.

Onde se ne misli na AND i OR koji su za bitove (u C++-u i C-u & i |), a ne na one logicke, kako li se zovu... (u C++-u i C-u && i ||). U IA-32 se AND i OR koriste za logicke skokove, kao i TEST i CMP itd...
Recimo, ovako izgleda u C++-u:

Kod:
if (a == b)
{ 
/* Nema potrebe za zagradama ako je u bloku samo 1 
    izraz, ali mogu da stoje..
        */
    b = 4;
}

u assembly:

Kod:
mov EAX, a        ;stavlja a u registar, EAX, EAX je sada a.
cmp EAX, b 
    ;Recimo samo to da ne vrsi oduzimanje, 
;ali ukoliko bi rezultat operacije oduzimanja a - b  bio 0
;onda postavlja odredjeni bit u jednom ... registru, zovimo 
;ga (taj bit, mada se moze tumaciti kao poseban registar...)
;ZF, na 1.

je LL1    ;  //JumpIfEqual 
    ;ukoliko je bit ZF 1 onda se desava nesto kao
;C-ovo goto na lokaciju oznacenu nalepnicom LL1.
;I ukoliko ... jos nesto ali to je nebitno za ovaj primer....
;za ovaj primer.

jmp LL2        ;"goto" na LL2.
LL1:
mov b, 4        ;"b = 4", stavlja 4 u b.
LL2:
;>>>>

ili recimo:

Kod:
if ((al > bl) || (bl > cl)) //al bl i cl su registri unutar nekih drugih registara...
{
    cl = 4;
}

za C++, je u assembly:

Kod:
cmp al, bl
    ;cmp [destination], [source] 
;    ovde je al destinacija (bl "izvor").
;    ...
    ;ako je al manji od bl, onda bi rezulatat bio negativan
;sto znaci da ce ZF biti obrisan (0) a jedan drugi, CF, 
;ce biti postavljen. Ukoliko je al vece od bl, onda 
;ni ZF ni CF nisu postavljeni... jer rezultat nebi bio ni 0
;ni broj izvan ranga... dakle, obrisani su.

ja LL1    ;  //JumpIfAbove
    ;ako ni ZF ni CF, (ni jos nesto 
;nebitno za ovaj primer...) onda se desava kao "goto" 
;LL1 u C-u.

jmp LIzlaz    ;"goto" LIzlaz.
LL1:
cmp bl, cl
ja LL2:
jmp LIzlaz
LL2:
mov cl, 4
LIzlaz:

E ubi me ako znam zasto sam pisao ovaj primer, i jedva sam ga sastavio jer tek ucim ovaj MSAM (nije to jedini assembly) i td... , al neka stoji:mrgreen:
 

Back
Top