Avatar billede hclarsen Nybegynder
23. februar 2006 - 15:19 Der er 13 kommentarer og
1 løsning

Hvad gør følgende kode?

function FK : Boolean;
var
x: string;
i: Integer;
begin
  x:=Form1.Edit1.Text;
  Result:=False;
    for i:=1 to Length(y) do //y er en streng - et ord
  if (x[i]='?') and (y[i] in Temp) then //temp er en konstant
  begin


    Result:=True;

    Break;
  end;
end;
Avatar billede nielle Nybegynder
23. februar 2006 - 15:37 #1
Absolut ingen ting - ud over at brænde CPU-tid af!

Hvis man kalder den, bliver den lokale variable Result sat til enten False eller True afhængigt af værdierne af Form1.Edit1.Text, y og Temp (hvor de sidste to er eksternt defineret). Når funktionen afsluttes så bliver den lokale variabel imidlertid prompte smidt væk igen.

Der er en lille mulighed for at funktionen faktisk giver en fejl i stedet - emlig hvis strengen y er længere end det som står i Form1.Edit1.Text.
Avatar billede nielle Nybegynder
23. februar 2006 - 15:41 #2
Ok, det er vist ikke helt sand: Result er ikke lokal :^|

Den leder teksten i Form1.Edit1.Text igennem tegn for tegn. Hvis den finder et ?-tegn på en plads, kigger den på den tilsvarende plads i y. Hvis det tegn så ligger i settet Temp så sættes Result til True og finktionen afsluttes. Hvis dette ikke sker får man enten Result lig med False (eller en fejl).

Det er ikke specielt pæn kode....
Avatar billede hclarsen Nybegynder
23. februar 2006 - 15:56 #3
Hvad gør dette "if (x[i]='?') and (y[i] in Temp"?
Avatar billede hclarsen Nybegynder
23. februar 2006 - 15:59 #4
Iøvrigt, hvad er Result egentlig? Er det blot en indbygget variabel som hænger sammen med boolean?
Avatar billede arne_v Ekspert
23. februar 2006 - 17:32 #5
result er en delphisme

du kan erstatte den med funktions navnet !  (d.v.s. at det er funktions resultatet)
Avatar billede arne_v Ekspert
23. februar 2006 - 17:37 #6
if (x[i]='?') and (y[i] in Temp) then

hvis det i'te element i x er et question mark eller det i'te element i y
er i Temp saa
Avatar billede hclarsen Nybegynder
23. februar 2006 - 18:31 #7
Mange tak skal I have - der er noget mere jeg i tvivl om i en stump kode. Jeg afsætter gerne flere point.

function temp(): string; //hvorfor skal der stå string her?
var
i:integer;
y:integer;
begin
  for i:=1 to 10 do
  begin
    y:=random(12);
      form1.label1.caption := inttostr(y*200);
      application.processmessages;
        sleep(i*40);
      end;
    end;

Hvad er sleep for en indbygget funktion, og hvad gør den i denne sammenhæng, og hvorfor skal i gennemløbe 1..10?
Avatar billede arne_v Ekspert
23. februar 2006 - 18:58 #8
sleep venter et antal millisekunder

for loekken maa vaere programmoerens valg - der er ikke noget i koden
som siger at den ikke kunne vaere 17
Avatar billede hclarsen Nybegynder
23. februar 2006 - 20:20 #9
Hvad gør for-køkken? Er det bare en systematisk nedtrapning?
Mht application.processmessages, hvad gør denne i sammenhængen?
Avatar billede arne_v Ekspert
23. februar 2006 - 20:29 #10
for løkken udfører det samme N gange

application.processmessages betyder mig bekendt "kære windows - check lige om nogle
andre ting skal udføres"
Avatar billede hclarsen Nybegynder
23. februar 2006 - 20:40 #11
Ahh ok - hvorfor er det nødvendigt, at der står string foran proceduren?

Altså vil det sige, at funktionen gennemløbes 10 gange (eller er det 9?), hvor der randomizes, og dette tal ganges med 200, og nedtrapningen sker via sleep, idet sleep afhænger af antallet af udførte procedure?
Avatar billede arne_v Ekspert
23. februar 2006 - 20:53 #12
fordi det er en funktion som returnerer en string

10 gange

der hentes et tilfaeldigt tal 0..11, det ganges med 200 og vises i en label

og den venter laengere og laengere for hvert gennemloeb
Avatar billede hclarsen Nybegynder
23. februar 2006 - 21:09 #13
Mange tak skal du have arne - du må meget gerne lægge et svar
Avatar billede arne_v Ekspert
23. februar 2006 - 21:18 #14
svar
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