Autor |
Beitrag |
5M17H
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: So 17.09.06 10:49
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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'); |
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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]
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.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 17.09.06 13:43
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 17.09.06 15:24
Meine Lösung - nur kürzer  .
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 www.dsdt.info und natürlich mein eigener Crashkurs Delphi
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
|