AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Saubere Programmierung?

Ein Thema von Delphieinsteiger · begonnen am 2. Okt 2007 · letzter Beitrag vom 2. Okt 2007
Antwort Antwort
Delphieinsteiger

Registriert seit: 17. Aug 2007
45 Beiträge
 
#1

Saubere Programmierung?

  Alt 2. Okt 2007, 11:23
Hallo,

ich wollte fragen, ob vieleicht jemand eine saubere Programmierung hierfür weiß:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
K:integer;

Begin
     case x of
     0..96:
Begin
     for K:=0 To 96 Do
     Test1[k]:=Test[k];

     97..192:
Begin
     for K:=97 To 192 Do
     Test1[k]:=Test[k];
usw. in 96- Schritten bis 8000

Ich möchte halt die Werte aus dem Test array in der sich die 8000 Werte befinden immer in 96 Werte aufteilen und dem Test1 array zuweisen.So wie es ist funktioniert auch alles wunderbar, aber ich möchte nicht einen so langen Quelltext haben nur damit ich anhand der mousemovefunktion Werte zuweise.Vieleicht hat jemand eine Idee wie man das eleganter lösen kann.

[edit=SirThornberry]code-Tags durch Delphi-Tags ersetzt - nächstes mal bitte selbst richtig setzen - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 11:27
Delphi beherrscht auch das Multiplizieren von Zahlen.
Delphi-Quellcode:
for K := X * 96 to Min(7999, X * 96 + 95) do
  Test1[K] := Test[K];
Du weist aber schon, dass 0..96 insgesamt 97 Werte sind?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 11:30
Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  K:integer;
Begin
  for k := 0 to 96 do
    Test1[k] := Test[x mod 97];
end;
oder kurz:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  K:integer;
Begin
  Test1[k] := Copy(Test, x mod 97, 97);
end;
Grundsätzlich war bei deinem geposteten Code kein Case notwendig, da du eh immer das gleiche gemacht hast. Da hättest du auch gleich eine Schleife nehmen können. Ich habe deine Aussage nun so interpretiert, dass Test1[] immer von 0..96 geht und Test[] die 8000 Werte enthält. Wenn das aber falsch ist und Test1[] und Test[] jeweils 8000 Werte enthalten und du immer nur die 97 Werte kopiert haben willst, dann so:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  K, lBase:integer;
Begin
  lBase := x div 97;

  for k := 0 to 96 do
    Test1[lBase + k] := Test[lBase + k];
end;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 11:34
Zitat von Muetze1:
Test1[k] := Copy(Test, x mod 97, 97);
Über Test1[] und Test[] hat er uns keine Info gegeben. Das könnte vom String über ein Array bis zu einem Indexer (aka Array-Property) sein.

Zitat:
und du immer nur die 97 Werte kopiert haben willst
In seinem Text schreibt er von 96-er Schritten, programmiert aber 97 beim ersten und 95 beim zweiten.

Zitat:
Delphi-Quellcode:
  lBase := x div 97;

  for k := 0 to 96 do
    Test1[lBase + k] := Test[lBase + k];
end;
8000 ist nicht durch 96 (und 97) teilbar. Dadurch liest (bzw. schreibst) du hinter der Array/String-Grenze.
  Mit Zitat antworten Zitat
Delphieinsteiger

Registriert seit: 17. Aug 2007
45 Beiträge
 
#5

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 11:48
Danke für die Tipps,
aber bleibt bei euren Lösungen nicht die mousemovefunktion ausser Betracht?Ich möchte halt wenn ich mit der maus in dem Pixelbereich von 0..95 komme auch die Werte von 0..95 aus dem Testarray dem Test1array zuweisen.Wenn ich in den Pixelbereich von 96..191 komme auch diese Werte zuweisen.Deswegen hatte ich die Caseanweisung.Oder vertue ich mich da jetzt?Bin leider noch nicht so erfahren.Die Werte hatten jetzt noch nicht gestimmt weil ich nur das prinzip verstehen wollte,es sind auch nicht 8000 sondern 7968 Werte.Halt immer 96 Werte sollen von dem einen in den anderen Array zugewiesen werden.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 12:18
Delphi-Quellcode:
lBase := x div 96;

  for k := 0 to 95 do
    Test1[k] := Test[lBase + k];
end;
  Mit Zitat antworten Zitat
Delphieinsteiger

Registriert seit: 17. Aug 2007
45 Beiträge
 
#7

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 15:59
Danke muetze1,

Jetzt habe ich es verstanden, und es funktioniert auch.Vielen Dank.
  Mit Zitat antworten Zitat
Delphieinsteiger

Registriert seit: 17. Aug 2007
45 Beiträge
 
#8

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 17:31
Zu früh gefreut,
er übernimmt immer nur die ersten 96 Werte,auch wenn ich mich mit der maus in den Bereich von 96..191 befinde.Dann sollten ja eigentlich auch die Werte aus dem Testarray von 96..191 übertragen werden.Aber er überträgt immer nur die Werte von 0..95 egal wo ich mit der maus bin
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 17:40
Delphi-Quellcode:
lBase := 96 * (x div 96);

  for k := 0 to 95 do
    Test1[k] := Test[lBase + k];
end;
  Mit Zitat antworten Zitat
Delphieinsteiger

Registriert seit: 17. Aug 2007
45 Beiträge
 
#10

Re: Saubere Programmierung?

  Alt 2. Okt 2007, 18:18
Super
jetzt funktioniert es wie es soll!

Vielen herzlichen Dank,jetzt sieht mein Programm viel besser aus.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz