Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi If Anweisung... Block? (https://www.delphipraxis.net/82397-if-anweisung-block.html)

GanjaGott 12. Dez 2006 15:30

Re: If Anweisung... Block?
 
danke, hab den quelltext jetzt nochmal editiert, aber wie kann ich das jetzt mit dem repeat machen? könnte mir es vielleicht mal jemand in den quellcode einfügen sowie es sein muss? danke im voraus :)

Delphi-Quellcode:
program Vendetta;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
ein : string;
anz, pun : integer;

begin
writeln ('Vendetta - Einheitenpunktezaehler');
  writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner):');
   readln (ein);
  writeln ('Bitte gebe Die Anzahl der Einheiten an:');
  readln (anz);
  if ein = 'Schlaeger' then pun:=anz*6
  else if ein = 'Messerstecher' then pun:=anz*4
  else if ein = 'Tuersteher' then pun:=anz*6
  else if ein = 'Revolverheld' then pun:=anz*21
  else if ein = 'Besetzungstruppe' then pun:=anz*251
  else if ein = 'Spion' then pun:=anz*3
  else if ein = 'Moebelpacker' then pun:=anz*9
  else if ein = 'CIA Agent' then pun:=anz*87
  else if ein = 'FBI Agent' then pun:=anz*48
  else if ein = '´Transporteur' then pun:=anz*51
  else if ein = 'Ninja' then pun:=anz*236
  else if ein = 'Scharfschuetze' then pun:=anz*28
  else if ein = 'Soeldner' then pun:=anz*1176
  else if ein = '`Schwarzgeldarbeiter' then pun:=anz*4
  else if ein = 'Bodyguard' then pun:=anz*43
  else if ein = 'Polizist' then pun:=anz*54
  else if ein = 'Profikiller' then pun:=anz*176
  else if ein = 'Objektwache' then pun:=anz*21
  else if ein = 'Guarde' then pun:=anz*388
  else if ein = 'Problemlöser' then pun:=anz*93
  else if ein = 'Bombenleger' then pun:=anz*281
  else pun:=0;
  writeln;
  writeln;
  if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden')
  else writeln ('Die Gesamtpunktzahl betraegt: ',pun,' ');
  writeln;
  writeln;
  writeln;
  readln;
  end.

Maja Jessica 12. Dez 2006 15:34

Re: If Anweisung... Block?
 
Und klappt?

So in etwa:

Delphi-Quellcode:
var
...
c : string;

begin
  repeat
    writeln ('Vendetta - Einheitenpunktezaehler');
    writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner): ');
    readln (ein);
    write ('Bitte gebe die Anzahl der Einheiten an: ');
    readln (anz);
    if ein = 'Schlaeger' then pun:=anz*6
    // ...
    else if ein = 'Bollermann' then pun:=anz*281
    else pun:=0;
    writeln;
    writeln;
    if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden')
    else  write ('Hier die Gesamtpunktzahl:'); write (pun);
    writeln;
    write('Nochmal (j/n): ');
    readln(c);
    writeln;
  until (c = 'n');
end.
Es gab dochmal unter Pascal7.0 eine Funktion, die auf eine Tasteneingabe direkt reagierte.
(ohne Enter drücken zu müssen)
Ich komme ich im Moment nicht darauf. Keypressed? ReadChar? (in der Unit CRT?)

MJ

marabu 12. Dez 2006 15:39

Re: If Anweisung... Block?
 
ReadKey ...

Maja Jessica 12. Dez 2006 15:43

Re: If Anweisung... Block?
 
Aha, danke :)
Mein Delphi4 zickt rum und will readkey nicht. :(

Unit?

Gruß, MJ

xZise 12. Dez 2006 15:52

Re: If Anweisung... Block?
 
Auch wenns schon gelöst wurde:
Dein Problem bestand darin:
Zitat:

Wenn ein gleich "Schlaeger" ist, dann ist "pun" die Multiplikation aus "anz" und "6"
Wenn ein gleich "Messerstecher" ist, dann ist "pun" die Multiplikation aus "anz" und "4"
...
Also überprüft er beides, weil es sich für den Computer nicht ausschließen lässt, dass beides ausgelöst werden könnte.
Dann hast du das gemacht:

Zitat:

Wenn ein gleich "Schlaeger" ist, dann ist "pun" die Multiplikation aus "anz" und "6"
Wenn ein gleich "Messerstecher" ist, dann ist "pun" die Multiplikation aus "anz" und "4"
...
Wenn ein gleich "Bombenleger" ist, dann ist "pun" die Multiplikation aus "anz" und "281"
ansonsten (!) soll "pun" "0" sein.
Dann ist es logisch das es "0" ergibt, weil "ein" ist ja nicht "Bombenleger", und dann macht er das, was er (da) ansonsten machen soll.

Der letzte war dann richtig:

Zitat:

Wenn ein gleich "Schlaeger" ist, dann ist "pun" die Multiplikation aus "anz" und "6"
anonsten wenn ein gleich "Messerstecher" ist, dann ist "pun" die Multiplikation aus "anz" und "4"
...
ansonsten wenn ein gleich "Bombenleger" ist, dann ist "pun" die Multiplikation aus "anz" und "281"
ansonsten (!) soll "pun" "0" sein.
Ist es "Schläger"? Nein, also was soll er ansonsten machen:
Ist es "Messerstecher"? Nein, also was soll er ansonsten machen:
...
Ist es "Bombenleger"? Nein, also was soll er ansonsten machen:
"pun" soll "0" sein

;)

PS: Ich hasse es, wenn man den Code der dahinter steckt nicht versteht, weil dann steht man in null komma nichts wieder auf der Matte (obwohl das Problem ähnlich ist)

marabu 12. Dez 2006 15:55

Re: If Anweisung... Block?
 
Hallo MJ,

wir missverstehen uns. Ich wollte dir nur den Namen der Funktion aus DOS-Zeiten in Erinnerung rufen. Unter Win32 musst du für solche Dinge ReadConsoleInput() benutzen.

Freundliche Grüße

PS: Falls es gebraucht wird...

Delphi-Quellcode:
var
  hStdIn: THandle;

function ReadKey: Char;
var
  ir: TInputRecord;
  evtCount: Cardinal;
begin
  Result := #0;
  repeat
    ReadConsoleInput(hStdIn, ir, 1, evtCount);
    if (evtCount = 1)
    and (ir.EventType = 1)
    and (ir.Event.KeyEvent.bKeyDown)
    and (ir.Event.KeyEvent.AsciiChar <> #0) then
      Result := ir.Event.KeyEvent.AsciiChar;
  until Result <> #0;
end;

var
  c: Char;

begin
  hSTDIN := GetStdHandle(STD_INPUT_HANDLE);
  repeat
    c := ReadKey;
    Write(c);
  until c = #27;
end;

uwewo 13. Dez 2006 06:38

Re: If Anweisung... Block?
 
Also wenn ich es richtig verstehe brauchst Du überhaupt keine else Anweisung,
Du solltest lediglich deine Variable pun initialisieren.

Delphi-Quellcode:
var
ein : string;
anz, pun : integer;

begin
  pun := 0;
  writeln ('Vendetta - Einheitenpunktezaehler');
  writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner):');
  readln (ein);
  writeln ('Bitte gebe Die Anzahl der Einheiten an:');
  readln (anz);
  if ein = 'Schlaeger' then pun:=anz*6 
  if ein = 'Messerstecher' then pun:=anz*4 
  if ein = 'Tuersteher' then pun:=anz*6 
  ...
  ...
  if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden')
  else writeln ('Die Gesamtpunktzahl betraegt: ',pun,' ');
  writeln;
  writeln;
  writeln;
  readln;
  end.
Macht doch Sinn, oder?

Dein pun ist am Anfang 0 trifft keine if Abfrage zu bleibt es auch so!

Uwe

Knarf 13. Dez 2006 07:40

Re: If Anweisung... Block?
 
Hast so aber mehr Rechenaufwand, denn es wird weiter verglichen, selbst wenn schon ein Treffer dabei war. Außerdem hast du die Semikolons vergessen. ;)

marabu 13. Dez 2006 08:35

Re: If Anweisung... Block?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

hier mein Vorschlag:

Delphi-Quellcode:
var
  fn: TFileName;
  n, iFaktor: Integer;
  sTyp: String;

begin
  if (ParamCount <> 2)
  or not TryStrToInt(ParamStr(2), n)
  or (n < 0) then
  begin
    WriteLn(Usage);
    Halt;
  end;

  fn := ChangeFileExt(ParamStr(0), '.txt');
  sTyp := ParamStr(1);

  with TStringList.Create do
  try
    LoadFromFile(fn);
    Sorted := True;
    if TryStrToInt(Values[sTyp], iFaktor) then
      WriteLn(iFaktor * n);
  finally
    Free;
  end;
end.
Lässt sich leicht auf interaktiv umbauen. Die Steuerdatei steckt im Anhang.

Freundliche Grüße

inherited 13. Dez 2006 13:34

Re: If Anweisung... Block?
 
Letzt verwirrt ihn doch nicht total! Es ist schon genug neuer Stoff für ihn dazu gekommen und er wird froh sein wenn er das versteht, da müsst ihr nicht mit eurem tollen Wissen prahlen, sondern eher, wie xZise, versuchen, das Neue zu erklären :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.
Seite 2 von 2     12   

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