AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

If Anweisung... Block?

Ein Thema von GanjaGott · begonnen am 12. Dez 2006 · letzter Beitrag vom 13. Dez 2006
Antwort Antwort
Seite 2 von 2     12   
GanjaGott

Registriert seit: 20. Nov 2006
6 Beiträge
 
#11

Re: If Anweisung... Block?

  Alt 12. Dez 2006, 15:30
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 = 'Schlaegerthen pun:=anz*6
  else if ein = 'Messerstecherthen pun:=anz*4
  else if ein = 'Tuersteherthen pun:=anz*6
  else if ein = 'Revolverheldthen pun:=anz*21
  else if ein = 'Besetzungstruppethen pun:=anz*251
  else if ein = 'Spionthen pun:=anz*3
  else if ein = 'Moebelpackerthen pun:=anz*9
  else if ein = 'CIA Agentthen pun:=anz*87
  else if ein = 'FBI Agentthen pun:=anz*48
  else if ein = '´Transporteurthen pun:=anz*51
  else if ein = 'Ninjathen pun:=anz*236
  else if ein = 'Scharfschuetzethen pun:=anz*28
  else if ein = 'Soeldnerthen pun:=anz*1176
  else if ein = '`Schwarzgeldarbeiterthen pun:=anz*4
  else if ein = 'Bodyguardthen pun:=anz*43
  else if ein = 'Polizistthen pun:=anz*54
  else if ein = 'Profikillerthen pun:=anz*176
  else if ein = 'Objektwachethen pun:=anz*21
  else if ein = 'Guardethen pun:=anz*388
  else if ein = 'Problemlöserthen pun:=anz*93
  else if ein = 'Bombenlegerthen 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.
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#12

Re: If Anweisung... Block?

  Alt 12. Dez 2006, 15:34
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 = 'Schlaegerthen pun:=anz*6
    // ...
    else if ein = 'Bollermannthen 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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: If Anweisung... Block?

  Alt 12. Dez 2006, 15:39
ReadKey ...
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#14

Re: If Anweisung... Block?

  Alt 12. Dez 2006, 15:43
Aha, danke
Mein Delphi4 zickt rum und will readkey nicht.

Unit?

Gruß, MJ
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

Re: If Anweisung... Block?

  Alt 12. Dez 2006, 15:52
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)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#16

Re: If Anweisung... Block?

  Alt 12. Dez 2006, 15:55
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;
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#17

Re: If Anweisung... Block?

  Alt 13. Dez 2006, 06:38
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 = 'Schlaegerthen pun:=anz*6
  if ein = 'Messerstecherthen pun:=anz*4
  if ein = 'Tuersteherthen 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
Uwe
  Mit Zitat antworten Zitat
Knarf

Registriert seit: 31. Mai 2004
13 Beiträge
 
#18

Re: If Anweisung... Block?

  Alt 13. Dez 2006, 07:40
Hast so aber mehr Rechenaufwand, denn es wird weiter verglichen, selbst wenn schon ein Treffer dabei war. Außerdem hast du die Semikolons vergessen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: If Anweisung... Block?

  Alt 13. Dez 2006, 08:35
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
Angehängte Dateien
Dateityp: zip vendetta_148.zip (863 Bytes, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: If Anweisung... Block?

  Alt 13. Dez 2006, 13:34
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 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