Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Streichholzspiel (https://www.delphipraxis.net/115221-streichholzspiel.html)

bestzeller 8. Jun 2008 13:13


Streichholzspiel
 
Hallo
Ich komme beim Streichholzspiel grad nicht weiter.
Ich versuch Integerzahlen in binäre umzuwandeln und dann die Quersumme zu bilden
z.B
111
011
111

Und dann soll der Computer soviele Streichhölzer abziehen ,dass die Quersumme
eine gerade Zahl ergibt wie ,enn er z.B 3 aus Reihe 3 nimmt.

111
011
100
=222

Nur leider bekomm ich ein EConvertError

Delphi-Quellcode:
unit ExtendQuersumme;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;

    procedure Button1Click(Sender: TObject);
    procedure quersumme(x:array of integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
type feld=array[1..9] of integer;
   var y:feld ;
       y2:feld ;
       y3:feld ;
       qsumme:feld;
type feld2=array [1..3] of integer;
   var h:feld2;
       d:feld2;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function IntToBin(i: int64): string;
var x: integer;
begin
  if i > 0 then begin
    result := '';
    x := 1;
    while i >= x do begin
      result := inttostr((i and x) div x) + result;
      x := x shl 1;
    end;
  end else result := '0';
end;



procedure tform1.quersumme(x:array of integer);
var s,i,l:integer ;
begin
s:=1;
d[1]:=strtoint(inttobin(x[1])) ;
l:=Length(inttostr(d[1]));
 For i:=1 to l do begin
   y[i]:=d[1] div s mod 10;
   s:=s*10;
  end;

s:=1;
d[2]:=strtoint(inttobin(x[2])) ;
l:=Length(inttostr(d[2]));
For i:=1 to l do begin
   y2[i]:=d[2] div s mod 10;
   s:=s*10;
  end;

s:=1;
d[3]:=strtoint(inttobin(x[3])) ;//[b]Hier zeigt er mir den Error an[/b]
l:=Length(inttostr(d[3]));
For i:=1 to l do begin
   y3[i]:=d[3]div s mod 10;
   s:=s*10;
  end;
l:=Length(inttostr(y[1]));
For i:=1 to l do begin
 qsumme[i]:=y[i]+y2[i]+y3[i];
 listbox1.items.add(inttostr(qsumme[i]));
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
h[1]:=3;
h[2]:=7;
h[3]:=4;
quersumme(h);

end;

end.

Amateurprofi 8. Jun 2008 13:54

Re: Streichholzspiel
 
Ich vermute, der Fehler wird ausgelöst, weil du auf x[3] zugreifst.
Der höchste gültige Index für x ist aber 2.

leddl 8. Jun 2008 14:27

Re: Streichholzspiel
 
Zitat:

Zitat von Amateurprofi
Der höchste gültige Index für x ist aber 2.

Um das etwas deutlicher auszuführen: x ist in der Methode Quersumme ein dynamisches Array, daher laufen die Indizes von 0 bis length(x)-1 ;) Hier also von 0 bis 2...

Btw: Du würdest es dir viel einfacher machen, wenn Du deine Variablen treffender benennen würdest :zwinker: Bei dem Buchstabensalat verliert man sonst ganz schnell mal den Überblick ;)

bestzeller 8. Jun 2008 16:29

Re: Streichholzspiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hm..hab jetzt mal das "dynamische" Array weggelassen, aber mein Ergebnis stimmt
nicht bei 3,7,4 also 011,111,100 kommt beim Programm die Quersummer 0123 raus,
obwohl 222 rauskommen sollte.
Vielleicht kann sich das nochmal jemand angucken. Thx im voraus.

----------------------------------------------------------------------
Hat Sich erledigt!^^

bestzeller 8. Jun 2008 18:42

Re: Streichholzspiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bekomm das Spiel gegen den Bot nicht hin manchmal klappts manchmal macht er garnichts :?
Wer nett wenn jemand drüber gucken könnte. Sry für die Unordnung :drunken:

BullsEye 8. Jun 2008 23:13

Re: Streichholzspiel
 
Zitat:

Zitat von bestzeller
Ich bekomm das Spiel gegen den Bot nicht hin manchmal klappts manchmal macht er garnichts :?
Wer nett wenn jemand drüber gucken könnte. Sry für die Unordnung :drunken:

1) Fehlt die Date *.pas
2) Finde ich Recht sinnlos, das man eingeben kann, wie viele Man ziehen will. Dann zieh ich einfach alle und hab gewonnen.
Besser wäre eine voreingestellte auswahlt. Meist ist die 1,2 oder 3
3) Total unübersichtliches Feld
4) Bei Neustart wird das Programm geschlossen.

bestzeller 9. Jun 2008 05:56

Re: Streichholzspiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

1) Fehlt die Date *.pas
2) Finde ich Recht sinnlos, das man eingeben kann, wie viele Man ziehen will. Dann zieh ich einfach alle und hab gewonnen.
Besser wäre eine voreingestellte auswahlt. Meist ist die 1,2 oder 3
3) Total unübersichtliches Feld
4) Bei Neustart wird das Programm geschlossen.

1) Jetzt dürfte die Datei drin sein.
2) Es gibt drei Reihen das heißt ,wenn du alle aus einer Reihe wegnehmen würdest hättest du verloren,
es sei den in den anderen beiden Reihen wären gleichviele Streichhölzer. Denn der, der das letzte
Streichholz nimmt hat gewonnen.
3) Haste vollkommend recht :lol:
4) Also bei mir öffnet der die .exe neu , also liegts beim Pfad der 100%ig falsch sein muss.

BullsEye 9. Jun 2008 10:00

Re: Streichholzspiel
 
Zitat:

Zitat von bestzeller
4) Also bei mir öffnet der die .exe neu , also liegts beim Pfad der 100%ig falsch sein muss.

Shellexecute(handle,'open','C:\Dokumente und Einstellungen\René\Eigene Dateien\DelphiProjekte\Streichholzspiel\Holze\Prho elzer.exe',Nil,Nil,0);

Da ist ein fester Pfad vorgegeben. Besser wäre, wenn du den Pfad nimmst, von dem das Programm gestartet wurde.

Aurelius 9. Jun 2008 10:08

Re: Streichholzspiel
 
Das wäre dann
Delphi-Quellcode:
ParamStr(0)

BullsEye 9. Jun 2008 11:07

Re: Streichholzspiel
 
Zitat:

Zitat von xX0815Xx
Das wäre dann
Delphi-Quellcode:
ParamStr(0)

Der Exacte Code für dieses Programm wäre

Delphi-Quellcode:
  ShellExecute(self.Handle,'open',PChar(ExtractFilePath(ParamStr(0)) + 'Prhoelzer.exe'),
    nil,nil,0);


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.
Seite 1 von 2  1 2      

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