Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - if not | anfrage flasch gestellt?
5M17H - So 17.09.06 10:49
Titel: if not | anfrage flasch gestellt?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| if not (zahl1 = 5) then begin if not (zahl2 = 5) then begin if not (zahl3 = 5) then begin if not (zahl4 = 5) then begin if not (zahl5 = 5) then r := r else r := r + 1; end else r := r + 1; end else r := r + 1; end else r := r + 1; end else rs := rs + 1; |
Und am Ende noch
Delphi-Quelltext
1: 2: 3: 4:
| if not rs = 5 then label3.caption := 'Sie haben '+ inttostr (r) +' richtige und '+ inttostr (rs) +' an der richtigen Stelle.' else label3.Caption := 'Sie haben den Code geknackt: '+ inttostr (zahl1) +''+ inttostr (zahl2) +''+ inttostr (zahl3) +''+ inttostr (zahl4) +''+ inttostr (zahl5) +' !'; |
Allerdings gibt er mir IMMER das letzte 'else' aus allso immer
Delphi-Quelltext
1:
| Sie haben den Code geknackt: XxXxX |
natürlich 'XxXxX' durch die 5 Zahlen ersetzt aber es kommt immer die meldung die nur kommen sollte, wenn ALLES richtig ist.
Moderiert von
Klabautermann: Topic aus Sonstiges (Delphi) verschoben am So 17.09.2006 um 12:12
GTA-Place - So 17.09.06 10:56
Ich würde das ganze einfach umdrehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| r := 0;
if zahl1 = 5 then r := r + 1; if zahl2 = 5 then r := r + 1; if zahl3 = 5 then r := r + 1; if zahl4 = 5 then r := r + 1; if zahl5 = 5 then r := r + 1;
if r < 5 then ShowMessage(IntToStr(r) + ' Richtige') else ShowMessage('Alle richtig'); |
So ist die ganze Abfrage kürze und ohne viel
not und
else.
5M17H - So 17.09.06 11:00
Du hast das Prinzip nicht verstanden:
'r' steht für "richtige", 'rs' steht für "an richtiger stelle".
Man soll einen Code 'hacken' und man gibt eine 5 stellige zahl ein.
Das prog prüft, ob welche richtig sind und ob evtl auch welche an richtiger stelle stehen.
dan zeigt es an wieviele an richtiger stelle, und wieviele richtig.
danach kannst du die eingabe erneuern.
GTA-Place - So 17.09.06 11:08
In meinem Beispiel steht nun r für die richtige Stelle (wenn der Code 55555 ist). Um nun noch zu prüfen, ob wenigstens die Zahlen richtig sind, könntest du das hier probieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| rs := 0;
if Pos(IntToStr(Zahl1), IntToStr(Code)) > 0 then rs := rs + 1; if Pos(IntToStr(Zahl2), IntToStr(Code)) > 0 then rs := rs + 1; if Pos(IntToStr(Zahl3), IntToStr(Code)) > 0 then rs := rs + 1; if Pos(IntToStr(Zahl4), IntToStr(Code)) > 0 then rs := rs + 1; if Pos(IntToStr(Zahl5), IntToStr(Code)) > 0 then rs := rs + 1; |
Achtung: rs steht hier für richtige Zahlen, r für richtige Stelle. Bei Bedarf umdrehen.
Also nochmal komplett mit richtiger Bezeichnung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| r := 0; rs := 0;
if Pos(IntToStr(Zahl1), IntToStr(Code)) > 0 then r := r + 1; if Pos(IntToStr(Zahl2), IntToStr(Code)) > 0 then r := r + 1; if Pos(IntToStr(Zahl3), IntToStr(Code)) > 0 then r := r + 1; if Pos(IntToStr(Zahl4), IntToStr(Code)) > 0 then r := r + 1; if Pos(IntToStr(Zahl5), IntToStr(Code)) > 0 then r := r + 1;
if zahl1 = 5 then rs := rs + 1; if zahl2 = 5 then rs := rs + 1; if zahl3 = 5 then rs := rs + 1; if zahl4 = 5 then rs := rs + 1; if zahl5 = 5 then rs := rs + 1;
if r < 5 then ShowMessage(IntToStr(r) + ' Richtige (davon ' + IntToStr(rs) + ' an der richtigen Stelle)!') else ShowMessage('Alle richtig'); |
5M17H - So 17.09.06 11:19
GTA-Place hat folgendes geschrieben: |
if Pos(IntToStr(Zahl5), IntToStr(Code)) > 0 then
r := r + 1; |
Was bedeutet das 'Pos'?
Oder überhaupt, was bedeutet die ganze bedingung? Könntest du das nochmal beschreiben?
GTA-Place - So 17.09.06 11:56
Du könntest Pos markieren und F1 drücken. Dann erfährst du, dass Pos einen String in einem anderen Sucht und die Position ausgibt. In diesem Fall wird der Code und die eingegebene Zahl in einen String umgewandelt.
5M17H - So 17.09.06 12:06
Danke für die erklärung, aber was bringt mir das?
[edit]
sucht er im ganzen code nach der zahl?
also ich sage 'code = 25649' und der user gibt '50371' ein, sagt er dann '1 richtig'(5) '0 richtige stellen?'
[edit]
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| var code : string; r, rs, zahl, zahl1, zahl2, zahl3, zahl4, zahl5 : integer; begin zahl := strtoint (edit1.text); if zahl >= 10000 then begin zahl := strtoint (edit1.text); rs := 0; r := 0; zahl1 := 2; zahl2 := 5; zahl3 := 1; zahl4 := 8; zahl5 := 5;
code[1] := edit1.text[1]; code[2] := edit1.text[2]; code[3] := edit1.text[3]; code[4] := edit1.text[4]; code[5] := edit1.text[5];
if Pos(inttostr (zahl1), inttostr (zahl)) > 0 then r := r + 1; if Pos(inttostr (zahl2), inttostr (zahl)) > 0 then r := r + 1; if Pos(inttostr (zahl3), inttostr (zahl)) > 0 then r := r + 1; if Pos(inttostr (zahl4), inttostr (zahl)) > 0 then r := r + 1; if Pos(inttostr (zahl5), inttostr (zahl)) > 0 then r := r + 1;
if code[1] = inttostr (zahl1) then rs := rs + 1; if code[2] = inttostr (zahl2) then rs := rs + 1; if code[3] = inttostr (zahl3) then rs := rs + 1; if code[4] = inttostr (zahl4) then rs := rs + 1; if code[5] = inttostr (zahl5) then rs := rs + 1;
if rs < 5 then label3.caption := 'Sie haben '+ inttostr (r) +' richtige und davon '+ inttostr (rs) +' an der richtigen Stelle.' else label3.Caption := 'Sie haben den Code geknackt: '+ inttostr (zahl1) +''+ inttostr (zahl2) +''+ inttostr (zahl3) +''+ inttostr (zahl4) +''+ inttostr (zahl5) +' !'; end else label3.caption := 'Geben Sie Mindestens 10000 ein.'; end; |
Was ist daran falsch? Kommt ne Fehlermeldung.
Delete - So 17.09.06 13:43
was du suchst ist doch folgendes
Delphi-Quelltext
1: 2: 3: 4: 5:
| for i := 1 to length(code) do begin if pos(code[i],edit1.text)>0 then inc(r); if code[i] = edit1.text[i] then inc(rs); end; |
gesamt würd das dann so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var code: string; r, rs, i: integer; begin edit1.text := '50371'; if strtoint(edit1.text) >= 10000 then begin rs := 0; r := 0; code := '25649'; for i := 1 to length(code) do begin if pos(code[i],edit1.text)>0 then inc(r); if code[i] = edit1.text[i] then inc(rs); end;
if rs < 5 then label3.caption := 'Sie haben '+ inttostr (r) +' richtige und davon '+ inttostr (rs) +' an der richtigen Stelle.' else label3.Caption := 'Sie haben den Code geknackt: '+ code+' !'; end else label3.caption := 'Geben Sie Mindestens 10000 ein.'; end; |
GTA-Place - So 17.09.06 15:24
Meine Lösung - nur kürzer ;-).
5M17H - So 17.09.06 22:10
Vielen dank für die Antworten nur: Jetzt versteh ich garnix mehr.
Ich bin anfänger, und wollte eigentlich nur wissen, was an meinem code falsch war, wenn jetzt noch jemand mit 'for' kommt, bitte erklären. Was ist 'inc'. Ich möchte nur sachen in meinen Code übernehmen die ich verstehe, und ich verstehe jetzt garnix mehr.
Könntet ihr das BITTE verständlcih machen?
Christian S. - So 17.09.06 22:15
Hallo!
Bitte verstehe das jetzt nicht falsch. Deine Fragen sind hier immer willkommen und werden auch bestimmt immer beantwortet. Aber ein gut gemeinter Rat: Du solltest schauen, dass Du mal das ein oder andere Grundlagen-Tutorial durchliest. Das ist einfach effektiver, als bei jeder Kleinigkeit hier zu fragen.
Es gibt viele Tutorials auf
http://www.dsdt.info und natürlich mein eigener
Crashkurs Delphi [
http://crashkurs.christian-stelzmann.de]
Grüße
Christian
5M17H - So 17.09.06 22:36
Danke für den Tipp, bis jetzt habe ich allerdings keine lösung in den Tutorials gesehen,
werde mir den Crashcours noch ansehen.
Aber ich weiß nicht so recht ob ihr verstanden habt was ich meine.
Das Programm soll folgendes tun.
Der code ist z.b. '95432'.
Der User hat ein Eingabefeld (edit1).
Dort gibt er eine belibiege zahl >= 10000 ein.
Eingabe des Users ist, sagen wir mal '42834'.
Folgendes kommt im Code for: 4, 2 und die 3.
Davon ist die 3 an der richtigen Stelle.
Also bekommt der User die meldung: 3 Richtige, eine davon an der richtigen Stelle.
Dann kann der User die nächste zahl eingeben... usw.
Der Quelltext, den Grenzgaenger gepostet hat, hat eine vorbestimmte Usereingabe. Das soll so nicht sein.
Ist das so jetzt verständlich oder liege ich total falsch und verstehe jarnischt?
[edit]
das prog läuft ja soweit aber sobald ich auf "Loggen" klicke kommt folgende meldung:
Quelltext
1:
| Im Projekt main.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00453917 im Modul 'main.exe'. Schrieben von Adresse 00000000' aufgetreten. |
JayEff - So 17.09.06 23:33
5M17H hat folgendes geschrieben: |
Danke für den Tipp, bis jetzt habe ich allerdings keine lösung in den Tutorials gesehen,
werde mir den Crashcours noch ansehen. |
Es sind ja auch Grundlagentutorials bzw ein Grundlagencrashkurs, das heist, sie sollen dir das Wissen vermitteln, das du brauchst, um selbst Lösungen für Probleme zu entwickeln, nicht die Lösungen bieten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!