Avatar billede poull Nybegynder
08. november 2000 - 11:51 Der er 11 kommentarer og
1 løsning

Case sensitive type


Hvordan kan man definere en type som indeholder tegn og samtidigt skal den være case sensitive
Et lille eksempel

Type
  TTegn = (a, b, A, B);

her siger den at der ikke er forskle på a og A, men det skal der være
Avatar billede borrisholt Novice
08. november 2000 - 11:55 #1
Ikke på den måde du angiver der .. I det a og A er det samme i Delphi verden ....

Du kan lave en set type .. Den kan du lave case sensitive

JEns b
Avatar billede borrisholt Novice
08. november 2000 - 12:06 #2
alla det her :

Type
  TTegn = set of char;
var
  Tegn : TTegn = [\'a\' .. \'z\' , \'A\' .. \'Z\'];


Jens B
Avatar billede speedy Nybegynder
08. november 2000 - 18:56 #3
Hvad indeholder \"Tegn\" så ?? Indeholder den EN af de værdier der er angivet, eller indeholder den ALLE ??

Bare nysgerrig ??

/SpEeDy
Avatar billede borrisholt Novice
08. november 2000 - 18:58 #4
En eller flere ....

Så ka du skrive noget som det her :
if \'a\' in tegn then
  showMessage(\'borrisholt er go\');

Jens B
Avatar billede poull Nybegynder
09. november 2000 - 10:00 #5
Grunden til at den skulle være case sensitive er at jeg vil kunne gøre følgende:

Type
  TTegn = (a, b, A, B);
Var
  Tegn: TTegn;
begin
  Tegn := a;
  Tegn := Succ(Tegn);
end;

og så skal tegn være = b osv
Avatar billede borrisholt Novice
09. november 2000 - 10:35 #6
poull>

Jeg tror der er noger elemetært du ikke har fat i omkring Set type ....

Kig på det følgende kode ... Det laver nøgagtigt det samme :

type
  InstalledSuite = (BackOffice, DataCenter, AdvancedServer, SmallBusinessServer, SmallBusinessServerRestrictive, TerminalServices);
  InstalledSuites = set of InstalledSuite;

procedure TForm1.Button1Click(Sender: TObject);
var
  Suites : InstalledSuites;
begin
  Suites := [BackOffice];
  Suites := Suites + [DataCenter];

  if BackOffice in Suites then
    ShowMessage(\'BackOffice in Suites\');
  if AdvancedServer in Suites then
    ShowMessage(\'AdvancedServer in Suites\');
end;

type
  eInstalledSuites = Integer;

procedure TForm1.Button2Click(Sender: TObject);
var
  eSuites : eInstalledSuites;
begin
  eSuites := 0;
  eSuites := (eSuites or integer(BackOffice));
  eSuites := (eSuites or integer(AdvancedServer));
  if (eSuites  and integer(BackOffice)) <> 0 then
    ShowMessage(\'BackOffice in Suites\');
  if (eSuites  and integer(AdvancedServer)) <> 0 then
    ShowMessage(\'AdvancedServer in Suites\');
  (*
  Grundet Pascals meget typefaste natur skal
  vi here selv lave overstyringen til en Integer);
  *)
end;

Det skulle give dig et inblik i hvad en set type etenligt er ...

Jens B
Avatar billede borrisholt Novice
09. november 2000 - 10:40 #7
udover det så bliver din enum datatype omdannet til integeres. Således bliver
BackOffice til 0. DataCenter til 1 etc.

Jens B
Avatar billede poull Nybegynder
09. november 2000 - 10:46 #8
jeg kigger lige på dit tilsyneladende gode eksempel lidt senere og så svarer jeg derefter
Avatar billede poull Nybegynder
09. november 2000 - 11:47 #9
Der er lige et par ting jeg skal have afklaret først

Kan eInstalledSuites indholde flere værdier?

Hvad er grunden til at lave en type af integer, kan man ikke bare have variablen af integer?

eSuites := (eSuites or integer(BackOffice));
Hvad gør or (tildeler integerværdien af BackOffice hvis der eSuites ikke har nogen værdi)

if (eSuites  and integer(BackOffice)) <> 0 then
Ligeså hvad gør and godt for her (jeg kender godt and, men hvorfor have både eSuites og integer(BackOffice) med.
Avatar billede borrisholt Novice
09. november 2000 - 12:10 #10
I eksemplet som jeg har lavet så sker der det samme ved button1Click og ved Button2click. Det er du vel med på ?


Med adndre ord så indeholder variablerne eSuites  og Suites  nøjagtigt det samme.

I dette konkrete tilfælde så indeholder de BÅDE BackOffice og DataCenter.

Gurnden til at jeg lavede på to måder var for at illustere hvad en Set type er !

En set type ER en integer. Hverken mere eller mindre ....

InstalledSuite er det der hedder en eNumerral type. Hver af de værdier en hver i sær en integer, fortløbende nummeret fra 0 (med mindere du angiver andet)

eSuites := (eSuites or integer(DataCenter)); og Suites := Suites + [DataCenter]; laver det samme ! Jeg tror iøvrigt du misforstår de de \'or\'
Her er ikke tale om et logist or hovr man siger den eller den, men der imod et bitvis or den følgende tabel er givet:
Skal læses som \"0 or 0 er 0\"  \"0 or 1 er 1\" etc.
or  0  1
  0 0  1
  1 1  1

det er det der sket ... Din set type bliver omdannet til en Integer, og så udfører man nogle bit operationer på den integer.
Hver af dine enherder i din enumerale type bliver som før skrevet også omdannet til integers og således kan man udføre sine operationer.

Fidusen er at and og or er hinandens resiprokke. dvs hvis du først siger c := c or b, så har c en ny værdi, hvis du så
derefter udfører en and på c med b så har c sin oprindelige værdi. Derfor alt det der and sjov ....

\"Hvad er grunden til at lave en type af integer, kan man ikke bare have variablen af integer? \"

Det har jeg også gjort ! Jeg har bare pakket den ind i et pænere og mere beskrivende navn !

Jeg tror du skulle læse lidt på bit vise operatorer ... :-)

Jens B
Avatar billede poull Nybegynder
09. november 2000 - 15:11 #11
Jeg takker for en god forklaring og derfor øger jeg lige pointene til 50 selvom det engelig var et simpelt spørgsmål :-)
Avatar billede borrisholt Novice
09. november 2000 - 15:16 #12
Tak Poull > Jeg har lavet et lille projekt til dig der viser hvordan binære operatorer virker .. Hvis du lige skriver til mig så sender jeg dig det ...

Så kan du selv pille i det indtil det går i stykker :-))

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester