![]() |
immer zahlen zwischen 1-5
Hallo,
ich habe da ein kleines mahte problem: Der index entält zahlen von 0..13 jetzt möchte ich allerdings das, wenn er bei index 6 ist daraus eine 1 macht und bei index 10 eine 5 und bei index 15 eine 5 und soweiter... also ich möchte immer zahlen zwischen 0..5 erhalten wobei sich die 5 ändern kann geht sowas überhaupt ? ich brauche das ganze für eine scrollfunktion ich hatte es mit mod versucht: index mod 5 allerdings macht er aus 10 leider ein 0 und das ist falsch(bzw. bei der mod funktion richtig aber bei bei meinem ziel falsch)... ich hoffe ihr habt das problem verstanden. |
Re: immer zahlen zwischen 1-5
|
Re: immer zahlen zwischen 1-5
Dieser "Index", ist das eine LIste?
|
Re: immer zahlen zwischen 1-5
index ist der index des objekts und random hilft mir auch nicht weiter hier mal eine beispiel liste:
index 0 = 0 index 1 = 1 index 2 = 2 index 3 = 3 index 4 = 4 index 5 = 5 index 6 = 1 index 7 = 2 index 8 = 3 index 9 = 4 index 10 = 5 index 11 = 1 index 12 = 2 index 13 = 3 index 14 = 4 und soweiter ich kann das nicht den zufall überlassen leider.... es geht dabei um eine zeichen funktion die den entsprechenden index immmer im selben fenster zeichnen soll:
Delphi-Quellcode:
ich hoffe der code zeigt das was ich vorhabe !
if message.Msg = WM_MOUSEMOVE then begin
mx:=( Message.lParam and $FFFF); mY:=((Message.lParam shr 16) and $FFFF); isSel:=PtInRect(Rect(fpos.x,fpos.y,fpos.x + fsize.x,fpos.y+fsize.y),Point(mx,my)); olds:=s; if isSel = True then s:='*' else s:=intTostr(random(100)); end; if ((message.msg = WM_PAINT) or (olds <> s)) then begin if (tfpos.x = -1) then tfpos:=fpos; // if isRect(Fenster) = false then begin // visible:= PtInRect(fenster,fpos); displaycount:=(fenster.bottom-fenster.top) div 20; if index <= gruppenindex*displaycount then visible:=True else visible:=False; if visible = True then begin // if isLetzer = True then ShowMessage(IntTostr(index)); tfpos:=fpos; sx:=fpos.x; // sy:=fpos.y-fenster.top; // if index <= displaycount then sy:=((gruppenindex) mod displaycount) * 20 ; // else // sy:=fpos.y-(fenster.bottom-fenster.top) ; tfpos.y:=sy; fcaption:=IntTostr(index)+'\' + IntToStr(random(300)); // fpaint.ClearRect(rect(sx,sy,fsize.x,fsize.y)); DrawCaption(s,sx,sy,true); fpaint.CopyToDisplay(fpos.x,sy,fsize.x,fsize.y); end end; |
Re: immer zahlen zwischen 1-5
Hallo Michael,
mit dem Operator "mod" bist du auf dem richtigen Weg:
Delphi-Quellcode:
Gruß Hawkeye
function Translate (aValue: Integer): Integer;
begin Result := Succ(Pred(aValue) mod 5); end; |
Re: immer zahlen zwischen 1-5
leider genau das gleiche ergbnis:
bei 5, 10,15,20 kommt 0 rauß und da muss immer 5 rauß kommen bzw. die 5 ist variabel... mir ist für das hauptproblem noch eine andere lösung eingefallen. aber denn noch währe es schön wenn dieses problem noch gelöst werden könnte... edit: ich sehe gerade es geht doch... ich hatte nur den code schnitt genommen und verändert aber nicht als augelagerte funktion ! |
Re: immer zahlen zwischen 1-5
Das Problem bei deiner Liste ist, dass es eine 0 gibt! Aber eben nur eine ...
Deshalb müsstest du extra für Index = 0 eine Abfrage machen... Ansonsten könntest du es mit Mod lösen:
Delphi-Quellcode:
function Translate(x : Integer) : Byte;
begin if x = 0 then Result := 0 else Result := x mod 5; end; |
Re: immer zahlen zwischen 1-5
nein es gibt mehre 0:
index 0 = 0 index 1 = 1 index 2 = 2 index 3 = 3 index 4 = 4 index 5 = 5 index 6 = 0 index 7 = 1 index 8 = 2 index 9 = 3 index 10 = 4 index 11 = 5 index 12 = 0 index 13 = 1 index 14 = 2 so wollte ich es ursrünglich haben.... es gibt mehre 0 und zwar bei jedem block anfang und der wert 5 kann sich ändern !!! wie gesagt ich hatte den Wald voller Bäume nicht gesehn... und dachte dieser weg währe eine lösung für mein HAUPTPROBLEM aber dies habe ich anders gelöst aber das passt hier nicht rein und die beschreibung würde auch zu lang werden glaube ich ! vielen dank für die antworten ! das mit MOD habe ich per zufall herrausgefunden als ich im strg+f7 fenster bichen mit zahlen gespielt hatte: ich wollte letzendlich immer die lezte stelle habe von zaheln z.b.: 11 die 1 von der 12 die 2 von der 10 naja eigentlich die 0 aber das ist ja falsch da wollte ich die 5 raus haben und genau draum hatt das leider nicht funktiniert dieser weg !!! |
Re: immer zahlen zwischen 1-5
Hi,
auch wenn du sagst, dass du das Problem anders gelöst hast, möchte ich kurz sagen, wie das dennoch mit mod funktioniert: einfach mod 6 statt mod 5. Grundsätzlich kannst du also sagen mod (Größte Zahl + 1). Chris |
Re: immer zahlen zwischen 1-5
dass die null auch rauskommen soll, vereinfacht das Problem doch erheblich. Dann musst du nicht mehr mit succ und pred arbeiten. einfach index mod 6
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz