Sign in Join
Wiki copytemporary

Revision 1 of 2, by WikiArchive on 11-4-2026. The page as it is now.

Command Line Calculator/de

│ Deutsch (de) │


Zurück zur Konsolenseite.

Kommandozeilenrechner

Das Programm Kommandozeilenrechner ist ein einfacher Taschenrechner für die Konsole (Windows) bzw. für das Terminal (Linux).

Um das Programm zu erstellen, erstellen Sie in Lazarus unter Projekt -> neues Projekt -> Programm ein neues Projekt.

Speichern Sie das Projekt in einem beliebigen Verzeichnis unter dem Namen rechne ab.

Hinweis:

Die bedingte Kompilierung wird für die unterschiedliche Ausgabe an der Konsole (Windows) / am Terminal (Linux) benötigt.

Komandozeilenrechner:

pascal
program Rechne;
    
    {$mode objfpc}{$H+}
    {$IMPLICITEXCEPTIONS OFF}
    
    uses
      SysUtils
      {$IFDEF Windows} ,Windows {$ENDIF};
    
    var
      wrdParameter: word = 0;
      intI: integer;
      intFehler: integer = 0;
      dblZahl1: double = 0.0;
      dblZahl2: double = 0.0;
      dblErgebnis: double = 0.0;
      strEingabe1: string = '';
      strEingabe2: string = '';
      strOperator: string = '';
      strAusgabe: string = '';
    
      // Bedingte Kompilierung für Windows
      {$IFDEF Windows}
      function funAnsiZuOEM(strUebergabe: string): string;
      begin
    
        funAnsiZuOEM := '';
        strUebergabe := Utf8ToAnsi(strUebergabe);
        strUebergabe := strUebergabe + #0;
        CharToOEM(PChar(strUebergabe), @strUebergabe[1]);
        Delete(strUebergabe, Length(strUebergabe), 1);
        Result := strUebergabe;
    
      end;
      {$EndIf}
    
    
      procedure subHilfe;
      begin
      // Bedingte Kompilierung für Windows
      {$IFDEF Windows}
        WriteLn('   Folgende Parameter rufen die Hilfe auf:');
        WriteLn('     ? oder /? oder -? oder --?');
        WriteLn('');
        WriteLn(funAnsiZuOEM('   Es sind folgende Operatoren zulässig:'));
        WriteLn('     Adition         +');
        WriteLn('     Subtraktion     -');
        WriteLn('     Multiplikation  *');
        WriteLn('     Division        / oder :');
        WriteLn('');
        WriteLn(funAnsiZuOEM('   Dem Programm müssen drei Parameter sein.'));
        WriteLn('   z. B.:');
        WriteLn('          3 + 4');
        WriteLn('');
      {$EndIf}
    
    
     // Bedingte Kompilierung für Linux / UNIX
      {$IFDEF UNIX}
        WriteLn('   Folgende Parameter rufen die Hilfe auf:');
        WriteLn('     ? oder /? oder -? oder --?');
        WriteLn('');
        WriteLn('   Es sind folgende Operatoren zulässig:');
        WriteLn('     Adition         +');
        WriteLn('     Subtraktion     -');
        WriteLn('     Multiplikation  *');
        WriteLn('     Division        / oder :');
        WriteLn('');
        WriteLn('   Dem Programm müssen drei Parameter sein.');
        WriteLn('   z. B.:');
        WriteLn('          3 + 4');
        WriteLn('');
      {$EndIF}
    
      end;
    
    
      procedure subFehlermeldung(intParameter: integer);
      begin
    
      // Bedingte Kompilierung für Windows
      {$IFDEF Windows}
        if intParameter = 0 then
        begin
          writeln(funAnsiZuOEM('   Es wurde kein Parameter übergeben!'));
          WriteLn('');
          subHilfe;
          Exit;
        end;
    
        if intParameter < 3 then
        begin
          WriteLn(funAnsiZuOEM('   Es wurden zuwenig Eingaben getätigt!'));
          WriteLn(funAnsiZuOEM('   Es müssen drei Parameter sein.'));
          WriteLn('');
          subHilfe;
        end;
    
        if intParameter > 3 then
        begin
          WriteLn(funAnsiZuOEM('   Es wurden zuviele Eingaben getätigt!'));
          WriteLn(funAnsiZuOEM('   Es müssen drei Parameter sein.'));
          WriteLn('');
          subHilfe;
        end;
      {$EndIf}
    
      // Bedingte Kompilierung für Linux / UNIX
      {$IFDEF UNIX}
        if intParameter = 0 then
        begin
          writeln('   Es wurde kein Parameter übergeben!');
          WriteLn('');
          subHilfe;
          Exit;
        end;
    
        if intParameter < 3 then
        begin
          WriteLn('   Es wurden zuwenig Eingaben getätigt!');
          WriteLn('   Es müssen drei Parameter sein.');
          WriteLn('');
          subHilfe;
        end;
    
        if intParameter > 3 then
        begin
          WriteLn('   Es wurden zuviele Eingaben getätigt!');
          WriteLn('   Es müssen drei Parameter sein.');
          WriteLn('');
          subHilfe;
        end;
      {$EndIf}
    
      end;
    
    
      function funParametertest: boolean;
      begin
    
        Result := False;
        wrdParameter := ParamCount;
    
        // Prüft, ob die Hilfe aufgerufen wurde
        if (wrdParameter = 1) then
        begin
          case strEingabe1 of
            '?', '/?', '-?', '--?':
            begin
              subHilfe;
              Exit;
            end;
          end;
          subFehlermeldung(wrdParameter);
          Exit;
        end;
    
    
        // Prüft, ob das Programm Parameter übergeben bekommen hat
        if wrdParameter = 0 then
        begin
          subFehlermeldung(wrdParameter);
          Exit;
        end;
    
        // Prüft, ob eine falsche Parameterzahl übergeben wurde
        if wrdParameter <> 3 then
        begin
          subFehlermeldung(wrdParameter);
          Exit;
        end;
    
    
        // Prüft, ob das Programm drei Parameter übergeben bekommen hat
        if (wrdParameter > 0) and (wrdParameter < 4) then
        begin
          strEingabe1 := ParamStr(1);
          strOperator := ParamStr(2);
          strEingabe2 := ParamStr(3);
          Result := True;
          Exit;
        end;
    
      end;
    
      procedure Haupt;
      begin
    
        // Ersetzt das Dezimalkomma durch den Dezimalpunkt
        for intI := 1 to Length(strEingabe1) do
          if strEingabe1[intI] = ',' then
            strEingabe1[intI] := '.';
        for intI := 1 to Length(strEingabe2) do
          if strEingabe2[intI] = ',' then
            strEingabe2[intI] := '.';
    
    
        // Konvertiert einen String in eine Zahl
        VAL(strEingabe1, dblZahl1, intFehler);
        if intFehler <> 0 then
        begin
          WriteLn('   Der 1. Parameter ist falsch');
          EXIT;
        end;
    
        // Konvertiert einen String in eine Zahl
        VAL(strEingabe2, dblZahl2, intFehler);
        if intFehler <> 0 then
        begin
          WriteLn('   Der 3. Parameter ist keine Zahl');
          EXIT;
        end;
    
        // Prüft, ob der richtige Operator übergeben wurde
        if (strOperator <> '+') and (strOperator <> '-') and
          (strOperator <> '/') and (strOperator <> ':') and (strOperator <> '*') then
        begin
          WriteLn('   Der 2. Parameter ist falsch');
          EXIT;
        end;
    
        // Führt die Grundrechenarten aus
        case strOperator of
          '+':
            dblErgebnis := dblZahl1 + dblZahl2;
          '-':
            dblErgebnis := dblZahl1 - dblZahl2;
          '/', ':':
            // verhindert eine Division durch 0
            if dblZahl2 = 0.0 then
            begin
              WriteLn(
                '   Eine Division durch Null ist nicht erlaubt!!');
              Exit;
            end
            else
              dblErgebnis := dblZahl1 / dblZahl2;
          '*':
            dblErgebnis := dblZahl1 * dblZahl2;
        end;
    
    
        // Wandelt die Fliesskommazahl in einen String fester Länge um
        STR(dblErgebnis: 20: 6, strAusgabe);
    
        // ersetzt den Dezimalpunkt durch das Dezimalkomma
        for intI := 1 to Length(strAusgabe[intI]) do
          if strAusgabe[intI] = '.' then
            strAusgabe[intI] := ',';
    
        // Gibt das Ergebnis auf der Konsole aus
        WriteLn('   Ergebnis = ', strAusgabe);
    
      end;
    
    begin
      if funParametertest = True then
        Haupt;
    end.

Beispiel für einen Aufruf unter Windows:

pascal
rechne 4 * 3,1

Beispiel für einen Aufruf unter UNIX/Linux (Achtung unter UNIX/Linux muss im Terminal der Multipikator * mit \ maskiert werden):

pascal
rechne 4 \* 3,1

From the Free Pascal wiki, page "Command Line Calculator/de", as the Internet Archive kept it on 2025-03-27. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.