Sign in Join
Wiki copytemporary

Command Line Calculator/de: what changed

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

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