|
| Niveauer - måske OT Fra : Jens Vestergaard |
Dato : 21-04-05 15:37 |
|
Hejsa,
Det er måske mere "grundlæggende programmering/matematisk forståelse", end
det er VB - men løsningen skal laves i VB, så jeg vover det ene øje.
Fakta:
Jeg har en gruppe mennesker, som kan inddeles i fire kategorier: kat1-kat4
Indenfor hver kategori kan en person have fire niveauer: niv-niv4
For eksempel:
A. Hansen ligger i kat3, hvor han er på niv2 og niv3 - og i kat4, hvor han
er på niv1 og niv3
N. Jensen ligger i kat1, hvor han er på niv4
J. Olsen findes i samtlige kategorier på samtlige niveauer
Problem:
Kan jeg med en enket unik værdi udtrykke personernes placering. Læg mærke
til, at hver enkelt person kan ligge i 1, 2 3 eller 4 kategorier og i hver
kategori på 1, 2 3, eller 4 niveauer. Alle kombinationer er altså mulige.
Jeg skal kunne "regne" både forlæns og baglæns.
--
mvh
Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
Døgnets jernbanenyheder: www.railsoft.dk/medier.asp
| |
Tomas Christiansen (21-04-2005)
| Kommentar Fra : Tomas Christiansen |
Dato : 21-04-05 15:59 |
|
Jens Vestergaard skrev:
> Jeg har en gruppe mennesker, som kan inddeles i fire kategorier:
> kat1-kat4 Indenfor hver kategori kan en person have fire niveauer:
> niv-niv4
....
> Kan jeg med en enket unik værdi udtrykke personernes placering.
Hvis både betydning og antal af kategorier og betydning og antal af
niveauer aldrig ændrer sig, kan du bruge enhver datatype, som kan opdeles
i 4*4=16 enkeltdele, som skal kunne tilgås uafhængig af hinanden.
En Long vil kunne bruges, da der er 32 bit at gøre godt med. Den 1. bit
kan svare til kat1,niv1, den 2. bit kan svare til kat1,niv2, ... den 16.
bit kan svare til kat4,niv4. Værdien 1 kan repræsentere medlemskab og 0
kan repræsentere ikke-medlemskab. Et check på medlemskab af kat3,niv2 kan
se således ud: If AktueltMedlemskab And Kat3Niv2 <> 0 Then
En String vil ligeledes kunne bruges. Du kan lade faste pladser have en
bestemt betydning (som i en Long), eller du kan vælge at optræder et A ét
eller andet sted, betyder det at personen er medlem af kat1,niv1,
optræder et B ét eller andet sted, betyder det at personen er medlem af
kat1,niv2 osv. Et check på medlemskab af kat3,niv2 kan se således ud:
If AktueltMedlemskab Like Kat3Niv2 Then
Den første løsning har den fordel at den fylder meget lidt (det vil endda
kunne pakkes ned i en Integer, som fylder 16 bit), men smule plads er
normalt ikke det store problem i vore dage. Den anden løsning har den
fordel at den lettere kan udvides flere kategorier/niveauer eller noget
helt andet (du har 256 muligheder mod 32 i den første løsning).
> Jeg skal kunne "regne" både forlæns og baglæns.
Uddyb - evt. kom med eksempler på hvad du skal kunne regne på. Mener du
tildele/fratage "medlemskab"?
-------
Tomas
| |
Jens Vestergaard (21-04-2005)
| Kommentar Fra : Jens Vestergaard |
Dato : 21-04-05 19:39 |
|
I news:Xns963FACAF57410tomascdenmark@212.242.40.170,
skrev Tomas Christiansen <toc-01-nospam-removethisword@blikroer.dk>:
> Jens Vestergaard skrev:
>> Jeg har en gruppe mennesker, som kan inddeles i fire kategorier:
>> kat1-kat4 Indenfor hver kategori kan en person have fire niveauer:
>> niv-niv4
> ...
>> Kan jeg med en enket unik værdi udtrykke personernes placering.
>
> Hvis både betydning og antal af kategorier og betydning og antal af
> niveauer aldrig ændrer sig, kan du bruge enhver datatype, som kan
> opdeles i 4*4=16 enkeltdele, som skal kunne tilgås uafhængig af
> hinanden.
>
Først tak for forslag..
>> Jeg skal kunne "regne" både forlæns og baglæns.
>
> Uddyb - evt. kom med eksempler på hvad du skal kunne regne på. Mener
> du tildele/fratage "medlemskab"?
Det jeg gerne vil kunne - nemmest muligt - er at lave en kode, der ...
1) "den ene vej" omsætter f.eks. 4x4 afkrydsningsfelter til en værdi og
2) "den anden vej" omsætter værdien til "checked"/"unchecked" i 4x4
afkrydsningsfelter
Altså
Kat 1: niv1(flueben), niv2(flueben), niv3, niv4
Kat 2: niv1, niv2, niv3, niv4(flueben)
.... ...
Men hvis jeg bruger en streng, kunne værdien naturligvis bare sammensættes
som:
Dim c as CheckBox
Dim sValue as string
For Each c in chkNiveauer
sValue = sValue & c.Value
Next
Og den anden vej..:
For x= 1 to Len(cValue)
chkNiveauer(x).Value = Mid(sValue, x, 1)
Next
Nu tænkte jeg lige højt...
Men det vil vel egentlig fungere udmærket...
Tak for inspirationen! Et lille skub, og det hele ser ganske enkelt ud,
når det kommer til stykket.
--
mvh
Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
Døgnets jernbanenyheder: www.railsoft.dk/medier.asp
| |
Agner (21-04-2005)
| Kommentar Fra : Agner |
Dato : 21-04-05 20:45 |
|
"Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
news:4267ba1a$0$172$edfadb0f@dtext02.news.tele.dk...
> Hejsa,
> Det er måske mere "grundlæggende programmering/matematisk forståelse",
> end
> det er VB - men løsningen skal laves i VB, så jeg vover det ene øje.
>
> Fakta:
> Jeg har en gruppe mennesker, som kan inddeles i fire kategorier: kat1-kat4
> Indenfor hver kategori kan en person have fire niveauer: niv-niv4
>
> For eksempel:
> A. Hansen ligger i kat3, hvor han er på niv2 og niv3 - og i kat4, hvor han
> er på niv1 og niv3
> N. Jensen ligger i kat1, hvor han er på niv4
> J. Olsen findes i samtlige kategorier på samtlige niveauer
>
> Problem:
> Kan jeg med en enket unik værdi udtrykke personernes placering. Læg mærke
> til, at hver enkelt person kan ligge i 1, 2 3 eller 4 kategorier og i hver
> kategori på 1, 2 3, eller 4 niveauer. Alle kombinationer er altså mulige.
>
> Jeg skal kunne "regne" både forlæns og baglæns.
>
>
> --
> mvh
> Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
> Døgnets jernbanenyheder: www.railsoft.dk/medier.asp
Du kan udtryk og code det i hexNotation. Der skal 5 hexCifre til:
For eksempel A. Hansen: &H5600B&
&H5600B& = 0101|0110|0000|0000|1100
Start fra højre: her er 1100 == kat4,kat3,kat2,kat1
idet A.Hansen ligger i kat4 og kat3.
De næste 4 hexCifre står for niveau'erne, sådan, at det første 0000 tilhører
kat1,
det næste 0000 tilhører kat2, det næste 0110 tilhører kat3 og det sidste
0101
tilhører kat4.
Hextallet kan ved hjælp af VB omsættes til en long heltals-værdi. Og kan
altid omsættes tilbage til det oprindelige hextal - &H5600B&
A. Hansen får altså ID-nummeret &H5600B&
Hvis du har A.Hansen og adresse i en Listbox kan du jo holde ID-nummeret i
Listboxens ItemValue.
agner
| |
Agner (22-04-2005)
| Kommentar Fra : Agner |
Dato : 22-04-05 12:27 |
|
Korrektion:
&H5600B& = 0101|0110|0000|0000|1100
skal være:
&H5600C& = 0101|0110|0000|0000|1100
| |
Jens Vestergaard (22-04-2005)
| Kommentar Fra : Jens Vestergaard |
Dato : 22-04-05 14:02 |
|
I news:426802b3$0$692$edfadb0f@dread16.news.tele.dk,
skrev Agner <agner@ingenmail.com>:
> "Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
> news:4267ba1a$0$172$edfadb0f@dtext02.news.tele.dk...
>> Fakta:
>> Jeg har en gruppe mennesker, som kan inddeles i fire kategorier:
>> kat1-kat4 Indenfor hver kategori kan en person have fire niveauer:
>> niv-niv4
>>
>> For eksempel:
[snip]
>
> Du kan udtryk og code det i hexNotation. Der skal 5 hexCifre til:
> For eksempel A. Hansen: &H5600B&
> &H5600B& = 0101|0110|0000|0000|1100
> Start fra højre: her er 1100 == kat4,kat3,kat2,kat1
> idet A.Hansen ligger i kat4 og kat3.
> De næste 4 hexCifre står for niveau'erne, sådan, at det første 0000
> tilhører kat1, det næste 0000 tilhører kat2, det næste 0110 tilhører kat3
og det
> sidste 0101 tilhører kat4.
Jep, det var også lidt det, jeg nåede frem til - med Tomas' hjælp - blot vil
jeg nøjes med 4 'cifre', idet
hver 'ciffer' (gruppe, hvis det er en streng) er god nok til at repræsentere
en kategori,
f.eks. 1000 0100 0000 0111
niv1 i kat1 - niv2 i kat2 - intet i kat3 - niv2,3,4 i kat4
Men tak for input anyway
--
mvh
Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
Døgnets jernbanenyheder: www.railsoft.dk/medier.asp
| |
Agner (21-04-2005)
| Kommentar Fra : Agner |
Dato : 21-04-05 21:12 |
|
ID-nummer for kategori og niveau
- Ikke for personen selvfølgelig.
Skal du ha personen med i nummeret skal der mere til.
| |
|
|