Autor Beitrag
Mühli
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 10.02.11 15:57 
Hallo! Ich bin noch ein ziemlicher Anfänger beim Programmiern mit Delphi und ich hab jetzt ein Problem. Ich hab ein Array dass von 0-99 läuft. die Variable auf der ich es speichere ist x und diese wird mit jedem Klick auf den speichern Button um 1 erhöht und ins Array gespeichert. So weit so gut. Doch jetzt möchte ich keine doppelten Namen, etc. also habe ich eine y Variable erstellt. Was muss ich jetzt machen um mit der y Variable alle Array Felder also Array[0-99] auf diesen Namen zu überprüfen. Welche Schleife muss ich verwenden?


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Do 10.02.2011 um 16:48
shadow123
Hält's aus hier
Beiträge: 6
Erhaltene Danke: 1



BeitragVerfasst: Do 10.02.11 16:17 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
found := false;
for i := 0 to 99 do
begin
  if arr[i] = y then
  begin
    found := true;
    break;
  end;
end;

if not found then
  /* füge hinzu */


Meinst du sowas?

Für diesen Beitrag haben gedankt: Mühli
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 10.02.11 16:24 
dafür verwendet man ne while-schleife, da kann man das found in die abbruch-bedingung schreiben und braucht ned so hässlich mit einem unsauberen break hantieren.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.

Für diesen Beitrag haben gedankt: Tankard
Mühli Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 10.02.11 17:51 
user profile iconshadow123 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
found := false;
for i := 0 to 99 do
begin
  if arr[i] = y then
  begin
    found := true;
    break;
  end;
end;

if not found then
  /* füge hinzu */


Meinst du sowas?


Hatte es schon selber herausgefunden aber danke für deine Antwort (:
shadow123
Hält's aus hier
Beiträge: 6
Erhaltene Danke: 1



BeitragVerfasst: Do 10.02.11 18:29 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
dafür verwendet man ne while-schleife, da kann man das found in die abbruch-bedingung schreiben und braucht ned so hässlich mit einem unsauberen break hantieren.


Das kommt doch auf's selbe hinaus...
Sieh es doch mal so, wenigstens hab ich kein goto/gosub verwendet :rofl:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if needbeer then
  goto tavern
else if drunken then
  gosub bank
else if not money then
  gohome
else
  throw puke;
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 10.02.11 18:32 
kommt nicht aus selbe hinaus. bei der schleife weiß ich genau wann die terminieren könnte ohne mir den schleifenrumpf einmal angesehen zu haben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
i := 0;
found := false;
while (i < 100AND NOT found do begin
  if arr[i] = y then
    found := true;
  inc(i);
end;


lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.

Für diesen Beitrag haben gedankt: Tankard
Tankard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Administrator
Beiträge: 217
Erhaltene Danke: 96



BeitragVerfasst: Do 10.02.11 18:35 
user profile iconshadow123 hat folgendes geschrieben Zum zitierten Posting springen:

Das kommt doch auf's selbe hinaus...


das hier auch, wuerde aber so bestimmt keiner machen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if arr[0]=y then found:=true;
if arr[1]=y then found:=true;
.
.
.
if arr[99]=y then found:=true;
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 10.02.11 18:45 
@elundril: außerdem hat die for-schleife einen performance-vorteil ;)
einerseits prüft sie ne bedingung je durchlauf (-->bis zu 100 mal in dem fall) weniger andrerseits lässt die sich vom compiler besser optimieren.
macht also schon sinn und wird auch meist so gemacht.
Tankard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Administrator
Beiträge: 217
Erhaltene Danke: 96



BeitragVerfasst: Do 10.02.11 18:48 
user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
@elundril: außerdem hat die for-schleife einen performance-vorteil ;)
einerseits prüft sie ne bedingung je durchlauf (-->bis zu 100 mal in dem fall) weniger andrerseits lässt die sich vom compiler besser optimieren.
macht also schon sinn und wird auch meist so gemacht.



du programmiest oefters in c nech. die machen sowas. ich finde lesbarkeit des codes wichtiger als preformance. solche sachen mach ich nur wenn die geschwindigkeit wichtg ist.
aber bei normalen anwendungen hat man das problem nicht. man wartet eher auf den user, als anders rum.
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 10.02.11 19:14 
nö. hauptsächlich delphi. c kann ich nur theoretisch gut. um wirklich gut zu sein müsste man es mehr machen.
man findet aber for..to..break konstrukte wirklich häufig. (auch in den standart-datein von delphi)
klar wartet man meist auf den user. aber lass das mal in ner liste sein, davon mehrere und das noch verschachtelt. dann wartet der user auf das programm. und ab da wirds mist ;)
und bei kleinen schleifen wie der obigen ist das auch noch ok. da leidet die lesbarkeit (m.M.n.) nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19345
Erhaltene Danke: 1753

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.02.11 20:08 
user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
und bei kleinen schleifen wie der obigen ist das auch noch ok. da leidet die lesbarkeit (m.M.n.) nicht.
Vorausgesetzt man macht die Methoden nicht zu lang. Wenn da eine Methode IndexOf ist, die aus praktisch nur der Schleife besteht, ist das überhaupt kein Problem.

Wenn man sowas in eine 1000 Zeilen Methode in die Mitte packt, ist es mit der Lesbarkeit vorbei... (aus beiden Gründen ;-))
shadow123
Hält's aus hier
Beiträge: 6
Erhaltene Danke: 1



BeitragVerfasst: Do 10.02.11 21:05 
user profile iconTankard hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
@elundril: außerdem hat die for-schleife einen performance-vorteil ;)
einerseits prüft sie ne bedingung je durchlauf (-->bis zu 100 mal in dem fall) weniger andrerseits lässt die sich vom compiler besser optimieren.
macht also schon sinn und wird auch meist so gemacht.



du programmiest oefters in c nech. die machen sowas. ich finde lesbarkeit des codes wichtiger als preformance. solche sachen mach ich nur wenn die geschwindigkeit wichtg ist.
aber bei normalen anwendungen hat man das problem nicht. man wartet eher auf den user, als anders rum.


Man sollte immer auf die Performance achten :wink:
Was denkst du wieviel Mehraufwand du hast wenn deine "Mini"-Anwendung auf einmal eine richtige Enterprise-Anwendung wird mit ca. 600 User ständig aktiv am arbeiten mit Millionen von Datensätzen sind... Dann wird diese unscheinbare for-Schleife zu einem Segen :zustimm:
Im übrigen hat die while-Schleife 2 Instruktionen mehr, und das ist nicht wenig wenn diese z. B. Milliarde mal ausgeführt werden muss ...
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 10.02.11 21:31 
user profile iconTankard hat folgendes geschrieben Zum zitierten Posting springen:
du programmiest oefters in c nech. die machen sowas. ich finde lesbarkeit des codes wichtiger als preformance. solche sachen mach ich nur wenn die geschwindigkeit wichtg ist.
aber bei normalen anwendungen hat man das problem nicht. man wartet eher auf den user, als anders rum.

Ich empfinde Lesbarkeit auch als wichtig. Groß- und Kleinschreibung ist schon was tolles. ;)

Für diesen Beitrag haben gedankt: elundril, jaenicke
Pr0g3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
BeitragVerfasst: Do 10.02.11 21:48 
man kann seinen tag auch sinnvoller gestalten als über so was zu diskutieren :mahn: :wink:
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 10.02.11 22:22 
Wenn jeder sich das gedacht hätte, dann würden wir eventuell noch in Höhlen wohnen und gerade mal halbwegs das Feuer beherrschen. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19345
Erhaltene Danke: 1753

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.02.11 22:44 
Wo kämen wir hin, wenn alle sagten "wo kämen wir hin" und keiner ginge um nachzuschauen? :D