WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   borland pascal problem =D (http://www.wcm.at/forum/showthread.php?t=229309)

Mr.Spock 13.07.2008 12:19

borland pascal problem =D
 
hallo leute,
ich hab da ein kleines problem,
ich bin noch anfänger im programmieren allgemein und wollte mal ein stadt-land-fluss game in borland pascal schreiben,
der berechnet die ergebnisse nämlich nicht so wie ich es will =),
der folgende code beinhaltet die berechnung der punktzahl beider spieler bei einer disziplin ,z.B. Stadt.

Code:

case q of ' ': begin
              if a=' '
              then begin end
              else begin n:=n+20; end;
              end
        else  begin
              if a=' '
              then begin m:=m+20; end
              else
              begin
              if q=a then begin m:=m+5;
                                n:=n+5;
                          end
                else begin m:=m+10;
                            n:=n+10;
                          end;
              end;
              end;
end;

folgende logik soll dahinterstehen:
es handelt sich ja um eine case anweisung mit 2 grundmöglichkeiten, die erste ist wenn Spieler 1 nichts eingegeben hat [' '], die folge hab ich verzweigt nämlich wenn Spieler 2 auch nichts eingeben hat passiert gar nichts, also werden keine punkte vergeben, tritt der andere Fall ein, dass Spieler 2 etwas geschrieben hat bekommt er 20 Punkte (so is das doch bei Stadt Land Fluss oder? http://forum.chip.de/images/smilies/wink.gif )
jetzt sind wir schon bei 2 grundmöglichkeit der case verzweigung , das else bedeutet ja, dass Spieler was geschrieben hat, die folge is dann auch wieder verzweigt, nämlich wenn dann Spieler 2 nix geschieben hat kriegt er 20 punkte, andernfalls (wenn beide was geschrieben haben) dann 1. wenn die wörter gleich sind bekommt jeder 5 punkte; 2. wenn sie sich unterscheiden 10 punkte.
nach diesem system hab ich auch alle anderen disziplinen (Land, Fluss,...) ausrechnen lassen

so das wars der erläuterung die ihr wahrscheinlich sowieso nicht braucht http://forum.chip.de/images/smilies/bw_smilies/2.gif
aber trotzdem zeigt das program bei jedem spielvorgang 60 punkte für beide Spieler an :/
kann mir irgendwer helfen und mir tipps geben, is zwar jetzt kein weltbewegendes problem aber wär trotzdem nett http://forum.chip.de/images/smilies/wink.gif

pong 14.07.2008 08:34

Verwende aussagekräftige Variablennamen, dann lässt sich hier vielleicht auch was machen

pong

geoliver 14.07.2008 10:11

laß mal die unnötigen begin und ends weg. Dann wirds übersichtlicher
z.B:

case q of ' ' : if a <> ' ' then n:=n+20;
else ..... usw

CornedBee 14.07.2008 12:55

Für 2 Fälle sollte außerdem kein Case verwendet werden.

SuperDef 14.07.2008 17:08

Hallo Mr.Spock,

ich versuche mal, dir weiterzuhelfen.

Wenn ich das richtig deute verwendest du folgende Variablen:

q -> Eingabe Spieler 1 -> Typ: string(?)
a -> Eingabe Spieler 2 -> Typ: string(?)
m -> Punkte Spieler 1 -> Typ: word (?)
n -> Punkte Spieler 2 -> Typ: word (?)

dann könnte dein Programm so aussehen:

Code:

if (q=a) then
  if (q<>'') then begin
                    m:=m+5;
                    n:=n+5;
                  end;

{Wenn die Eingaben beider Spieler gleich sind und nicht leer sind
dann bekommt jeder Spieler 5 Punkte}


if (q<>a) then begin
{Wenn die Eingaben unterschiedlich sind, dann...}

              if (q='') then n:=n+20;
              {wenn Spieler 1 nichts eingibt bekommt Spieler2 20 Punkte}

              if (a='') then m:=m+20;
              {wenn Spieler 2 nichts eingibt bekommt Spieler1 20 Punkte}

              if ((q<>'') and (a<>'')) then begin
                                            m:=m+10;
                                            n:=n+10;
                                            end;
              {wenn beide Spieler etwas eingegeben haben bekommen beide
                10 Punkte}
              end;

Ich hoffe, dir damit weitergeholfen zu haben. Da du noch Anfänger bist habe ich versucht, den Code möglichst einfach und logisch zu gestalten. Es ginge natürlich auch noch eleganter und kompakter :D

SuperDef

Mr.Spock 14.07.2008 21:55

Hallo SuperDef,
zunächst einmal vielen Dank für deine Hilfe, dein Programvorschlag hat geklappt!! :)

Zitat:

Wenn ich das richtig deute verwendest du folgende Variablen:

q -> Eingabe Spieler 1 -> Typ: string(?)
a -> Eingabe Spieler 2 -> Typ: string(?)
m -> Punkte Spieler 1 -> Typ: word (?)
n -> Punkte Spieler 2 -> Typ: word (?)
ja, genau, nur das m und n bei mir vom Typ integer sind, aber ich denk mal das macht nicht den Unterschied.
Aber trotzdem würde ich gerne wissen, warum das bei mir nicht ging, lag es daran, das man für die Unterscheidung von 2 Fällen nicht case nehmen sollte, wie CornedBee es gesagt hat? Außerdem musste ich dort die Eingaben der beiden Spieler als Char definieren, weil er bei string eine Fehlermeldung ausspukte, vielleicht lags daran. Zu allen Überfluss hab ich eben bermerkt, dass ich an einer anderen Stelle des Programs die Variablen der beiden Spieler vertauscht hab xD
Naja jetzt hab ich es ja richtig,
also nochmals vielen dank an alle!!

Sesa_Mina 14.07.2008 23:52

m, n, a, q...

Ein Tip von mir:

Benenne Variablen möglichst eindeutig.

Also z.B.
strSpieler_1_Input
strSpieler_2_Input
intSpieler_1_Punkte
intSpieler_2_Punkte

Dann kennst dich auch noch in 6 Monaten aus was was is.

Mag zwar mehr Tipparbeit sein aber es lohnt sich.


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag