# [Powershell] Taschenrechner programmieren



## He-man 123 (9. März 2011)

Hallo zusammen, 

ich bin gerade dabei einen Taschenrechner zu programmieren. Dieser funktioniert soweit auch. 
Mein Problem ist , dass bei der Eingabe keine Sonderzeichen akzeptiert werden sollen. Also nur die Eingabe von Zahlen , sowie "+"und "-" zulässig sein sollen.  Bei beispielsweise Buchstaben und Sonderzeichen soll eine Fehlerausgabe und der Programmabbruch erfolgen. 
Kann mir da jemand weiterhelfen?

Vielen Dank Schonmal!

Hier mein mal bisheriges Skript : 


```
Write-Host "Geben Sie zwei Zahlen ein" -ForegroundColor Red
Write-Host "Wählen Sie eine der vier möglichen Rechenoperationen aus:" -ForegroundColor Green
Write-Host "1: Zahl1 : Zahl2 = Ergebnis"
Write-Host "2: Zahl1 + Zahl2 = Ergebnis"
Write-Host "3: Zahl1 - Zahl2 = Ergebnis"
Write-Host "4: Zahl1 * Zahl2 = Ergebnis"


$Zahl1 = Read-Host "Bitte geben Sie die erste Zahl ein" 
$Zahl2 = Read-Host "Bitte geben Sie die zweite Zahl ein"
[int]$Eingabe = Read-Host "Wählen Sie eine Rechenoperation"
$Zahl1 = $Zahl1.Replace(",",".")
$Zahl2 = $Zahl2.Replace(",",".")
$Zahl1 = [double] $Zahl1
$Zahl2 = [double] $Zahl2



#Zulässige Rechenoperationen definiert	

	switch ($Eingabe) {
1 {$Ergebnis = $Zahl1 / $Zahl2}
2 {$Ergebnis = $Zahl1 + $Zahl2}
3 {$Ergebnis = $Zahl1 - $Zahl2}
4 {$Ergebnis = $Zahl1 * $Zahl2}
}

			

#Fehlerausgabe bei Division durch 0 und Programmabbruch

if(($Zahl2 -eq 0) -and ($Eingabe -eq 1)){
	
	$antwort = "Es darf nicht durch 0 geteilt werden";
	[System.Windows.Forms.MessageBox]::Show($antwort, "Ungültige Eingabe"); break 
		}
			
			

#Eingabe Rechenoperation darf nicht kleiner 1 und größer 4 sein.

if(($Eingabe -lt 1) -or ($Eingabe -gt 4) -or ($Eingabe -gt 10)){
	
	$antwort = "Die Eingabe liegt nicht im Wertebereich 1-4";
	[System.Windows.Forms.MessageBox]::Show($antwort, "Ungültige Eingabe"); break
	}
	

#stimmt die Eingabe mit dem Muster überein, so erfolgt die Berechnung und Ausgabe des Ergebnisses	

else{

	if($Eingabe -eq 1){

		$antwort = "           <" + $Zahl1 + "> : <" + $Zahl2 + ">   =   <" + $Ergebnis + ">           ";
		[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A durch B");
   		}
	if($Eingabe -eq 2){
	
		$antwort = "           <" + $Zahl1 + "> + <" + $Zahl2 + ">   =   <" + $Ergebnis + ">           ";
		[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A plus B");
		} 
	if($Eingabe -eq 3){

		$antwort = "           <" + $Zahl1 + "> - <" + $Zahl2 + ">   =   <" + $Ergebnis + ">           ";
		[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A minus B");
		}
		
	if($Eingabe -eq 4){
	
		$antwort = "           <" + $Zahl1 + "> * <" + $Zahl2 + ">   =   <" + $Ergebnis + ">           ";
		[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A mal B");
		}
	

}
```


lg 

He-man 123


----------



## deepthroat (9. März 2011)

Hi.

Bsp:

```
$a = 0
$b = 0
$op = 0

if (![int]::TryParse($Eingabe, [ref]$op) -or $op -lt 1 -or $op -gt 4) {
  echo "Ungültige Eingabe."
  return 1
}

# $Zahl1 = $Zahl1.Replace(",",".") ist unnötig.
if (![double]::TryParse($Zahl1,
      [System.Globalization.NumberStyles]::Float -bor [System.Globalization.NumberStyles]::AllowThousands,
      [System.Globalization.CultureInfo]::CurrentCulture::NumberFormat,
      [ref]$a) {
  echo "Keine gültige Zahl: $Zahl1"
  return 1
}
```
Gruß


----------



## He-man 123 (9. März 2011)

Hi , 
danke für deine schnelle antwort. 
Da ich noch nicht so viel Ahnung habe , weiss ich nicht , wie ich das in meinen Code implementieren soll. Könntest du mir dabei vielleicht helfen oder näher das näher erklären?


----------



## deepthroat (9. März 2011)

Hi.


```
Write-Host "Geben Sie zwei Zahlen ein" -ForegroundColor Red
Write-Host "Wählen Sie eine der vier möglichen Rechenoperationen aus:" -ForegroundColor Green
Write-Host "1: Zahl1 : Zahl2 = Ergebnis"
Write-Host "2: Zahl1 + Zahl2 = Ergebnis"
Write-Host "3: Zahl1 - Zahl2 = Ergebnis"
Write-Host "4: Zahl1 * Zahl2 = Ergebnis"

$a = 0
$b = 0
$op = 0

$Zahl1 = Read-Host "Bitte geben Sie die erste Zahl ein"
if (![double]::TryParse($Zahl1,
      [System.Globalization.NumberStyles]::Float -bor [System.Globalization.NumberStyles]::AllowThousands,
      [System.Globalization.CultureInfo]::CurrentCulture::NumberFormat,
      [ref]$a)) {
  echo "Keine gültige Zahl: $Zahl1"
  return 1
}

$Zahl2 = Read-Host "Bitte geben Sie die zweite Zahl ein"
if (![double]::TryParse($Zahl2,
      [System.Globalization.NumberStyles]::Float -bor [System.Globalization.NumberStyles]::AllowThousands,
      [System.Globalization.CultureInfo]::CurrentCulture::NumberFormat,
      [ref]$b)) {
  echo "Keine gültige Zahl: $Zahl1"
  return 1
}

$Eingabe = Read-Host "Wählen Sie eine Rechenoperation"
if (![int]::TryParse($Eingabe, [ref]$op) -or $op -lt 1 -or $op -gt 4) {
  echo "Ungültige Eingabe."
  return 1
}

# $Zahl1 = $Zahl1.Replace(",",".") ist unnötig.

switch ($op) {
1 {$Ergebnis = $a / $b}
2 {$Ergebnis = $a + $b}
3 {$Ergebnis = $a - $b}
4 {$Ergebnis = $a * $b}
}

echo "Ergebnis: $Ergebnis"
```
Ein/Ausgabe (deutsches System):

```
Geben Sie zwei Zahlen ein
Wählen Sie eine der vier möglichen Rechenoperationen aus:
1: Zahl1 : Zahl2 = Ergebnis
2: Zahl1 + Zahl2 = Ergebnis
3: Zahl1 - Zahl2 = Ergebnis
4: Zahl1 * Zahl2 = Ergebnis
Bitte geben Sie die erste Zahl ein: 24.493,4942
Bitte geben Sie die zweite Zahl ein: 494
Wählen Sie eine Rechenoperation: 3
Ergebnis: 23999.4942
```
Gruß


----------



## He-man 123 (9. März 2011)

Vielen dank für deine Hilfe  
klapprt jetzt prima.

lg


----------

