Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Statische arrays (https://www.delphipraxis.net/199812-statische-arrays.html)

IckyWolf 21. Feb 2019 18:24

Delphi-Version: 5

Statische arrays
 
Hallo,
ich versuche mich schon seit einiger Zeit an dem Spiel Kniffel. Dabei bin ich fast fertig, nur eine Sache funktioniert nicht: Das Pragramm erkennt nicht, ob eine Aufgabe aus dem unteren Block erfüllt wurde. Nach einigem Ausprobieren habe ich festgestellt, dass das Problem nur bei Zahlen, welche noch sortiert werden müssen, auftritt. Mein Verdacht liegt dementsprechend nahe, dass der Sortieralghorhytmus (augfgrund der geringen Anforderung Bubblesort) fehlerhaft ist. Dabei ist mir unverständlich, weshalb ich an der entsprechenden Stelle (siehe Quellcode)kein Statisches array verwenden Kann ( Syntax error, "OF" expected but "[" found) Schon lange habe ich versucht das Problem zu beheben, bis jetzt habe ich jedoch noch keinen Erfolg. Nun bitte ich euch meinen Quellcode zu überprüfen:
Test (hier für "kleine Straße"):
Delphi-Quellcode:
procedure TKniffel.BitBtn_ksClick(Sender: TObject);
var ks:boolean;
    p:integer;
begin
  if schritt=2 then
  begin
    sort(Wuerfel);
    ks:=false;
    if Wuerfel[1]=Wuerfel[2]-1then
      if Wuerfel[1]=Wuerfel[4]-2 then
        if Wuerfel[1]=Wuerfel[5]-3 then ks:=true;

    if Wuerfel[2]=Wuerfel[3]-1 then
      if Wuerfel[2]=Wuerfel[4]-2 then
        if Wuerfel[2]=Wuerfel[5]-3 then ks:=true;

    if ks=true then
      p:=30 else p:=0;


    StringGrid1.Cells[Spieler,11]:=IntToStr(p);

Bubblesort:
Delphi-Quellcode:
procedure sort(Eingabe:array {[1..5]} of Integer);
var n,j,hilfe:Integer;
begin
for n:=5 downto 1 do
    for j:=1 to n-1 do
      if Eingabe[j]>Eingabe[j+1] then
      begin
        hilfe:=Eingabe[j];
        Eingabe[j]:=Eingabe[j+1];
        Eingabe[j+1]:=hilfe;
      end;
end;

hoika 21. Feb 2019 19:30

AW: Statische arrays
 
Hallo,
zumindestens den Syntax-Fehler können wir beheben

type
TEingabe = array [1..5] of Integer;

und als Parameter dann TEingabe benutzen.


Den BubbleSort verstehe ich nicht

for n:=5 downto 1 do
for j:=1 to n-1 do

IckyWolf 21. Feb 2019 20:42

AW: Statische arrays
 
Vielen Dank für die schnelle Hilfe!

Zitat:

type
TEingabe = array [1..5] of Integer;

und als Parameter dann TEingabe benutzen
klappt irgentwie nicht oder ich mach es noch nicht bganz richtig.

Würde es denn überhaupt die Funktionalität des Programmes beeinträchtigen, wenn ich ein dynamisches array benutze?-sonst müsste ich mich ja um diese Stelle nicht weiter kümmern

Ich bin mir nun sicher, die Zahlen werden nicht sortiert, in einem gesondertem Programm funktioniert der Bubblesort jedoch...wahrscheinlich habe ich einen dummen Fehler bei der Übertragung der Variablen:?

Ich werde wohl selbst noch etwas mit dem Programm beschäftigen und später bei Bedarf weitere Fragen stellen.
Wäre nett,wenn ihr mir noch bei dem array helft.

Rollo62 22. Feb 2019 14:19

AW: Statische arrays
 
Dann probier doch einfach mal den Algorithmus von hier.

IckyWolf 27. Feb 2019 09:22

AW: Statische arrays
 
Der Algorhytmus funktioniert.

Jetzt, wo ich den Sortieralgorhytmus nicht als gesonderte Prozedur habe, funktioniert Alles, wie es soll, sodass ich mich jetzt der Gestaltung widme.:coder:In dieser Hinsicht habe ich mich zum Thema Audio abspielen informiert,wobei wieder ein Fehler aufgetreten ist.
Da sich das Programm kompilieren lässt, gehe ich von einem einfachen Syntaxfehler aus, welcher sich mir allerdings nicht erschließen lässt.
Nun bitte ich um eure Hilfe:
Delphi-Quellcode:
sndPlaySound(PChar('Würfelbecher - shaker.wav'),SND_SYNC);
Die mmsystemunit habe ich bereits hinzugefügt, wird die Audiodatei aufgerufen, hält das Programm an (snd_sync scheint zu funktionieren)-statt der gewünschten Datei ist jedoch nur ein Windowshinweiston zu hören.

Tut mir leid, wenn ich vom ursprünglichen Thema abweiche.

sakura 27. Feb 2019 09:31

AW: Statische arrays
 
Siehe var in Parameterliste ;-)

Delphi-Quellcode:
procedure sort(var Eingabe:array {[1..5]} of Integer);
var n,j,hilfe:Integer;
begin
for n:=5 downto 1 do
    for j:=1 to n-1 do
      if Eingabe[j]>Eingabe[j+1] then
      begin
        hilfe:=Eingabe[j];
        Eingabe[j]:=Eingabe[j+1];
        Eingabe[j+1]:=hilfe;
      end;
end;
...:cat:...

sakura 27. Feb 2019 09:33

AW: Statische arrays
 
Zitat:

Zitat von IckyWolf (Beitrag 1426503)
Tut mir leid, wenn ich vom ursprünglichen Thema abweiche.

Neuer Thread, das hilft anderen, wenn diese nach ähnlichen Problemen suchen ;-)

...:cat:...

peterbelow 27. Feb 2019 10:55

AW: Statische arrays
 
Zitat:

Zitat von IckyWolf (Beitrag 1426503)
Der Algorhytmus funktioniert.

Jetzt, wo ich den Sortieralgorhytmus nicht als gesonderte Prozedur habe, funktioniert Alles, wie es soll, sodass ich mich jetzt der Gestaltung widme.:coder:In dieser Hinsicht habe ich mich zum Thema Audio abspielen informiert,wobei wieder ein Fehler aufgetreten ist.
Da sich das Programm kompilieren lässt, gehe ich von einem einfachen Syntaxfehler aus, welcher sich mir allerdings nicht erschließen lässt.
Nun bitte ich um eure Hilfe:
Delphi-Quellcode:
sndPlaySound(PChar('Würfelbecher - shaker.wav'),SND_SYNC);
Die mmsystemunit habe ich bereits hinzugefügt, wird die Audiodatei aufgerufen, hält das Programm an (snd_sync scheint zu funktionieren)-statt der gewünschten Datei ist jedoch nur ein Windowshinweiston zu hören.

Tut mir leid, wenn ich vom ursprünglichen Thema abweiche.

Verwende immer vollständige Pfadangaben für Dateien, nicht nur einen Dateinamen! Der Fehler in deinem Fall kommt einfach daher, dass die Funktion die Datei nicht finden kann, da sie nicht da liegt, wo es nachsieht (current directory).

IckyWolf 2. Mär 2019 18:13

AW: Statische arrays
 
Habe nun den Dateipfad in die Funktion reinkopiert und zusätzlich versucht, die Audiodatei unter C: zu speichern (und den entsprechenden Dateipfad anzugeben), funktioniert allerdings immer noch nicht.:(

Habt ihr vielleicht noch weitere Ideen?
Könnte euch ein größerer Auschnitt aus dem Quellcode helfen?

Dennis07 2. Mär 2019 20:22

AW: Statische arrays
 
Zitat:

Zitat von IckyWolf (Beitrag 1426503)
Delphi-Quellcode:
PChar('Würfelbecher - shaker.wav')

Konstanten sind für gewöhnlich dynamisch zur Kompilierzeit typisiert, sie können also jeden beliebigen Typen haben. Ein Stringliteral kann entweder ein
Delphi-Quellcode:
String
, ein
Delphi-Quellcode:
string [n]
bzw.
Delphi-Quellcode:
ShortString
, ein
Delphi-Quellcode:
PChar
, ein
Delphi-Quellcode:
array of Char
oder ein
Delphi-Quellcode:
array [low .. high] of Char
sein.
Außerdem kann es eine Variation dieser sein (
Delphi-Quellcode:
WideString
,
Delphi-Quellcode:
AnsiString
,
Delphi-Quellcode:
PAnsiChar
,
Delphi-Quellcode:
array of AnsiChar
,
Delphi-Quellcode:
array of WideChar
dynamisch & statisch oder
Delphi-Quellcode:
OpenString
).
Der Typ wird dann automatisch zur Kompilierzeit je nach Kontext der Verwendung zugewiesen. Das Casten von Konstanten kann verwendet werden, wenn du sicherstellen willst, dass eine bestimmte überladene Funktion aufgerufen wird. Ansonsten ergibt das aber wenig Sinn. Wenn die Funktion also einen PChar-Wert als Parameter erwartet, wird
Delphi-Quellcode:
'Was auch immer'
also auch immer zu PChar in diesem Fall ausgewertet.

Siehe hierzu: Deklarierte Konstanten (Embarcadero DocWiki)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr.

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