Autor Beitrag
5M17H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: So 17.09.06 10:49 
ausblenden 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 = 5then
    begin
      if not (zahl2 = 5then
      begin
        if not (zahl3 = 5then
        begin
          if not (zahl4 = 5then
          begin
            if not (zahl5 = 5then
              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
ausblenden 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
ausblenden 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 user profile iconKlabautermann: Topic aus Sonstiges (Delphi) verschoben am So 17.09.2006 um 12:12
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 17.09.06 10:56 
Ich würde das ganze einfach umdrehen:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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]
ausblenden volle Höhe 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; //variablendefinition int
begin
  zahl := strtoint (edit1.text);
  if zahl >= 10000 then //wenn zahl größer als 10000
  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 //wenn zahl1 irgendwo im code vorkommt dann
      r := r + 1//zähle r, = richtige, eins hcoh
    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 //WENN code[1] gleich mit zahl1 ist dann
      rs := rs + 1//zähle rs, = richtige stelle, eins hoch
    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  //wenn nicht
    label3.caption := 'Geben Sie Mindestens 10000 ein.'//gib fehlermeldung in label3 aus
end;


Was ist daran falsch? Kommt ne Fehlermeldung.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 17.09.06 13:43 
was du suchst ist doch folgendes

ausblenden 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:
ausblenden 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; //variablendefinition int
begin
 edit1.text := '50371';      //der user gibt '50371'

 if strtoint(edit1.text) >= 10000 then //wenn zahl größer als 10000
 begin
  rs := 0;
  r := 0;
  code := '25649';     //'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  //wenn nicht
   label3.caption := 'Geben Sie Mindestens 10000 ein.'//gib fehlermeldung in label3 aus
end;
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 17.09.06 23:33 
user profile icon5M17H 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.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.