Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi immer zahlen zwischen 1-5 (https://www.delphipraxis.net/77245-immer-zahlen-zwischen-1-5-a.html)

mimi 16. Sep 2006 19:57


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.

arbu man 16. Sep 2006 19:58

Re: immer zahlen zwischen 1-5
 
hab zwar nicht verstanden was du willst aber Delphi-Referenz durchsuchenrandomDelphi-Referenz durchsuchenrandomize sollten dir helfen

Daniel B 16. Sep 2006 20:00

Re: immer zahlen zwischen 1-5
 
Dieser "Index", ist das eine LIste?

mimi 16. Sep 2006 20:03

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:
   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;
ich hoffe der code zeigt das was ich vorhabe !

Hawkeye219 16. Sep 2006 20:26

Re: immer zahlen zwischen 1-5
 
Hallo Michael,

mit dem Operator "mod" bist du auf dem richtigen Weg:

Delphi-Quellcode:
function Translate (aValue: Integer): Integer;
begin
  Result := Succ(Pred(aValue) mod 5);
end;
Gruß Hawkeye

mimi 16. Sep 2006 22:10

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 !

xZise 16. Sep 2006 22:31

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;

mimi 16. Sep 2006 22:58

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 !!!

CalganX 16. Sep 2006 23:09

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

Cöster 16. Sep 2006 23:19

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.
Seite 1 von 2  1 2      

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