Sign in Join
Wiki copytemporary

Command Line Calculator/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Command Line Calculator/de

OldNewLine
1+│ **Deutsch (de)** │
2+****
3+
4+Zurück zur [[Console/de|Konsolenseite]].
5+
6+
7+
8+# Kommandozeilenrechner
9+
10+Das Programm Kommandozeilenrechner ist ein einfacher Taschenrechner für die Konsole (Windows) bzw. für das Terminal (Linux).
11+
12+Um das Programm zu erstellen, erstellen Sie in Lazarus unter Projekt -> neues Projekt -> Programm ein neues Projekt.
13+
14+Speichern Sie das Projekt in einem beliebigen Verzeichnis unter dem Namen rechne ab.
15+
16+Hinweis:
17+
18+Die bedingte Kompilierung wird für die unterschiedliche Ausgabe an der Konsole (Windows) / am Terminal (Linux) benötigt.
19+
20+Komandozeilenrechner:
21+```
22+program Rechne;
23+
24+ {$mode objfpc}{$H+}
25+ {$IMPLICITEXCEPTIONS OFF}
26+
27+ uses
28+ SysUtils
29+ {$IFDEF Windows} ,Windows {$ENDIF};
30+
31+ var
32+ wrdParameter: word = 0;
33+ intI: integer;
34+ intFehler: integer = 0;
35+ dblZahl1: double = 0.0;
36+ dblZahl2: double = 0.0;
37+ dblErgebnis: double = 0.0;
38+ strEingabe1: string = '';
39+ strEingabe2: string = '';
40+ strOperator: string = '';
41+ strAusgabe: string = '';
42+
43+ // Bedingte Kompilierung für Windows
44+ {$IFDEF Windows}
45+ function funAnsiZuOEM(strUebergabe: string): string;
46+ begin
47+
48+ funAnsiZuOEM := '';
49+ strUebergabe := Utf8ToAnsi(strUebergabe);
50+ strUebergabe := strUebergabe + #0;
51+ CharToOEM(PChar(strUebergabe), @strUebergabe[1]);
52+ Delete(strUebergabe, Length(strUebergabe), 1);
53+ Result := strUebergabe;
54+
55+ end;
56+ {$EndIf}
57+
58+
59+ procedure subHilfe;
60+ begin
61+ // Bedingte Kompilierung für Windows
62+ {$IFDEF Windows}
63+ WriteLn(' Folgende Parameter rufen die Hilfe auf:');
64+ WriteLn('  ? oder /? oder -? oder --?');
65+ WriteLn('');
66+ WriteLn(funAnsiZuOEM(' Es sind folgende Operatoren zulässig:'));
67+ WriteLn(' Adition +');
68+ WriteLn(' Subtraktion -');
69+ WriteLn(' Multiplikation *');
70+ WriteLn(' Division / oder :');
71+ WriteLn('');
72+ WriteLn(funAnsiZuOEM(' Dem Programm müssen drei Parameter sein.'));
73+ WriteLn(' z. B.:');
74+ WriteLn(' 3 + 4');
75+ WriteLn('');
76+ {$EndIf}
77+
78+
79+ // Bedingte Kompilierung für Linux / UNIX
80+ {$IFDEF UNIX}
81+ WriteLn(' Folgende Parameter rufen die Hilfe auf:');
82+ WriteLn('  ? oder /? oder -? oder --?');
83+ WriteLn('');
84+ WriteLn(' Es sind folgende Operatoren zulässig:');
85+ WriteLn(' Adition +');
86+ WriteLn(' Subtraktion -');
87+ WriteLn(' Multiplikation *');
88+ WriteLn(' Division / oder :');
89+ WriteLn('');
90+ WriteLn(' Dem Programm müssen drei Parameter sein.');
91+ WriteLn(' z. B.:');
92+ WriteLn(' 3 + 4');
93+ WriteLn('');
94+ {$EndIF}
95+
96+ end;
97+
98+
99+ procedure subFehlermeldung(intParameter: integer);
100+ begin
101+
102+ // Bedingte Kompilierung für Windows
103+ {$IFDEF Windows}
104+ if intParameter = 0 then
105+ begin
106+ writeln(funAnsiZuOEM(' Es wurde kein Parameter übergeben!'));
107+ WriteLn('');
108+ subHilfe;
109+ Exit;
110+ end;
111+
112+ if intParameter < 3 then
113+ begin
114+ WriteLn(funAnsiZuOEM(' Es wurden zuwenig Eingaben getätigt!'));
115+ WriteLn(funAnsiZuOEM(' Es müssen drei Parameter sein.'));
116+ WriteLn('');
117+ subHilfe;
118+ end;
119+
120+ if intParameter > 3 then
121+ begin
122+ WriteLn(funAnsiZuOEM(' Es wurden zuviele Eingaben getätigt!'));
123+ WriteLn(funAnsiZuOEM(' Es müssen drei Parameter sein.'));
124+ WriteLn('');
125+ subHilfe;
126+ end;
127+ {$EndIf}
128+
129+ // Bedingte Kompilierung für Linux / UNIX
130+ {$IFDEF UNIX}
131+ if intParameter = 0 then
132+ begin
133+ writeln(' Es wurde kein Parameter übergeben!');
134+ WriteLn('');
135+ subHilfe;
136+ Exit;
137+ end;
138+
139+ if intParameter < 3 then
140+ begin
141+ WriteLn(' Es wurden zuwenig Eingaben getätigt!');
142+ WriteLn(' Es müssen drei Parameter sein.');
143+ WriteLn('');
144+ subHilfe;
145+ end;
146+
147+ if intParameter > 3 then
148+ begin
149+ WriteLn(' Es wurden zuviele Eingaben getätigt!');
150+ WriteLn(' Es müssen drei Parameter sein.');
151+ WriteLn('');
152+ subHilfe;
153+ end;
154+ {$EndIf}
155+
156+ end;
157+
158+
159+ function funParametertest: boolean;
160+ begin
161+
162+ Result := False;
163+ wrdParameter := ParamCount;
164+
165+ // Prüft, ob die Hilfe aufgerufen wurde
166+ if (wrdParameter = 1) then
167+ begin
168+ case strEingabe1 of
169+ '?', '/?', '-?', '--?':
170+ begin
171+ subHilfe;
172+ Exit;
173+ end;
174+ end;
175+ subFehlermeldung(wrdParameter);
176+ Exit;
177+ end;
178+
179+
180+ // Prüft, ob das Programm Parameter übergeben bekommen hat
181+ if wrdParameter = 0 then
182+ begin
183+ subFehlermeldung(wrdParameter);
184+ Exit;
185+ end;
186+
187+ // Prüft, ob eine falsche Parameterzahl übergeben wurde
188+ if wrdParameter <> 3 then
189+ begin
190+ subFehlermeldung(wrdParameter);
191+ Exit;
192+ end;
193+
194+
195+ // Prüft, ob das Programm drei Parameter übergeben bekommen hat
196+ if (wrdParameter > 0) and (wrdParameter < 4) then
197+ begin
198+ strEingabe1 := ParamStr(1);
199+ strOperator := ParamStr(2);
200+ strEingabe2 := ParamStr(3);
201+ Result := True;
202+ Exit;
203+ end;
204+
205+ end;
206+
207+ procedure Haupt;
208+ begin
209+
210+ // Ersetzt das Dezimalkomma durch den Dezimalpunkt
211+ for intI := 1 to Length(strEingabe1) do
212+ if strEingabe1[intI] = ',' then
213+ strEingabe1[intI] := '.';
214+ for intI := 1 to Length(strEingabe2) do
215+ if strEingabe2[intI] = ',' then
216+ strEingabe2[intI] := '.';
217+
218+
219+ // Konvertiert einen String in eine Zahl
220+ VAL(strEingabe1, dblZahl1, intFehler);
221+ if intFehler <> 0 then
222+ begin
223+ WriteLn(' Der 1. Parameter ist falsch');
224+ EXIT;
225+ end;
226+
227+ // Konvertiert einen String in eine Zahl
228+ VAL(strEingabe2, dblZahl2, intFehler);
229+ if intFehler <> 0 then
230+ begin
231+ WriteLn(' Der 3. Parameter ist keine Zahl');
232+ EXIT;
233+ end;
234+
235+ // Prüft, ob der richtige Operator übergeben wurde
236+ if (strOperator <> '+') and (strOperator <> '-') and
237+ (strOperator <> '/') and (strOperator <> ':') and (strOperator <> '*') then
238+ begin
239+ WriteLn(' Der 2. Parameter ist falsch');
240+ EXIT;
241+ end;
242+
243+ // Führt die Grundrechenarten aus
244+ case strOperator of
245+ '+':
246+ dblErgebnis := dblZahl1 + dblZahl2;
247+ '-':
248+ dblErgebnis := dblZahl1 - dblZahl2;
249+ '/', ':':
250+ // verhindert eine Division durch 0
251+ if dblZahl2 = 0.0 then
252+ begin
253+ WriteLn(
254+ ' Eine Division durch Null ist nicht erlaubt!!');
255+ Exit;
256+ end
257+ else
258+ dblErgebnis := dblZahl1 / dblZahl2;
259+ '*':
260+ dblErgebnis := dblZahl1 * dblZahl2;
261+ end;
262+
263+
264+ // Wandelt die Fliesskommazahl in einen String fester Länge um
265+ STR(dblErgebnis: 20: 6, strAusgabe);
266+
267+ // ersetzt den Dezimalpunkt durch das Dezimalkomma
268+ for intI := 1 to Length(strAusgabe[intI]) do
269+ if strAusgabe[intI] = '.' then
270+ strAusgabe[intI] := ',';
271+
272+ // Gibt das Ergebnis auf der Konsole aus
273+ WriteLn(' Ergebnis = ', strAusgabe);
274+
275+ end;
276+
277+ begin
278+ if funParametertest = True then
279+ Haupt;
280+ end.
281+```
282+
283+
284+Beispiel für einen Aufruf unter Windows:
285+
286+```
287+rechne 4 * 3,1
288+```
289+
290+
291+Beispiel für einen Aufruf unter UNIX/Linux (Achtung unter UNIX/Linux muss im Terminal der Multipikator * mit \ maskiert werden):
292+
293+```
294+rechne 4 \* 3,1
295+```
296+
297+---
298+*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](/wiki-contact).*

Back to history