User Tools

Site Tools


inputs_param

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
inputs_param [2017/07/03 16:20] gginputs_param [2017/07/05 11:03] (current) gg
Line 6: Line 6:
  
 Die folgenden Beispiele lesen einen Namen und Alter als Kommandozeilenparameter ein, prüfen die Parameter auf Korrektheit und geben Sie dann wieder aus.\\ Die folgenden Beispiele lesen einen Namen und Alter als Kommandozeilenparameter ein, prüfen die Parameter auf Korrektheit und geben Sie dann wieder aus.\\
-Geprüft wird, ob der Vorname mit einem Grossbuchstaben startet und sonst nur Kleinbuchstaben enthält und ob das Alter zwischen 1 und 99 ist.+Geprüft wird, ob der Vorname mit einem Grossbuchstaben startet und sonst nur Kleinbuchstaben enthält und ob das Alter zwischen 1 und 99 ist und nicht mit einer 0 startet. Es gibt **elegantere Möglichkeiten zu prüfen**, ob eine Zahl zwischen 1 und 99 ist, nämlich könnte man den **String in eine Zahl umwandeln**. Hier wird aber gezeigt, wie man einen String prüft, ob er passt. Auch gibt es **elegantere Möglichkeiten** Fehler auszugeben. Man könnte **Fehler sammeln und alle gemeinsam ausgeben**. Bietet eine Programmiersprache keine vernünftige Möglichkeit einzelne Zeichen zu vergleichen (Bash, Perl), so werden reguläre Ausdrücke verwendet.
  
 ==== Bash ==== ==== Bash ====
Line 52: Line 52:
 Die Datei input.sh mit dem obigen Code erstellen und folgendes ausführen: Die Datei input.sh mit dem obigen Code erstellen und folgendes ausführen:
 <code bash> <code bash>
-chmod +x input.sh # als ausführbar markieren +chmod +x input.sh    # als ausführbar markieren 
-./input.sh        # ausführen+./input.sh Werner 30 # ausführen
 </code> </code>
  
Line 137: Line 137:
 <code bash> <code bash>
 g++ -Wall -g -std=c++14 input.cpp -o input # kompilieren g++ -Wall -g -std=c++14 input.cpp -o input # kompilieren
-./input                                    # ausführen+./input Werner 30                          # ausführen
 </code>  </code> 
  
Line 222: Line 222:
 Die Datei input.go mit obigen Code füllen und folgendes ausführen Die Datei input.go mit obigen Code füllen und folgendes ausführen
 <code bash> <code bash>
-go build input.go # kompilieren +go build input.go  # kompilieren 
-./input           # ausführen+./input  Werner 30 # ausführen
 </code> </code>
  
Line 293: Line 293:
 Die Datei Input.java mit obigen Inhalt erstellen und folgendes Ausführen: Die Datei Input.java mit obigen Inhalt erstellen und folgendes Ausführen:
 <code bash> <code bash>
-javac Input.java +javac Input.java     # kompilieren 
-java Input+java Input Werner 30 # ausführen
 </code> </code>
  
Line 301: Line 301:
  
 ==== Perl ==== ==== Perl ====
 +Ich habe auf die schnelle keinen Weg an den regulären Ausdrücken vorbei gefunden
 === Code === === Code ===
 <code perl> <code perl>
Line 367: Line 368:
 print "Dein Name ist $name und du bist $age Jahre alt\n"; print "Dein Name ist $name und du bist $age Jahre alt\n";
 </code> </code>
 +
 === Ausführen === === Ausführen ===
 +Den obigen Code in die Datei input.pl kopieren und folgendes ausführen
 +<code bash>
 +perl input.pl Werner 30
 +</code>
 +
 +==== PHP ====
 +=== Code ===
 +<code php>
 +<?php
 +
 +function checkName($name) {
 +  // Die Länge des Namens prüfen
 +  if(strlen($name) == 0) {
 +    return false;
 +  }
 +
 +  // prüfen, ob der erste Buchstabe eine Grossbuchstabe ist
 +  if($name[0] < 'A' || $name[0] > 'Z') {
 +    return false;
 +  }
 +  // Sind alle anderen Buchstaben Kleinbuchstaben?
 +  for($i = 1; $i < strlen($name); $i++) {
 +    if($name[$i] < 'a' || $name[$i] > 'z') {
 +      return false;
 +    }
 +  }
 +
 +  // Alle Bedingungen sind erfüllt
 +  return true;
 +}
 +
 +function checkAge($age) {
 +  // Die Länge des Alters prüfen
 +  if(strlen($age) == 0 || strlen($age) > 2) {
 +    return false;
 +  }
 +
 +  // prüfen, ob das Alter mit 1-9 beginnt
 +  if($age[0] < '1' || $age[0] > '9') {
 +    return false;
 +  }
 +  // prüfen, ob die zweite Zahl (falls vorhanden) zwischen 0 und 9 ist 
 +  if(strlen($age) == 2) {
 +    if($age[1] < '0' || $age[1] > '9') { 
 +      return false;
 +    }
 +  }
 +
 +  // Alle Bedingungen sind erfüllt
 +  return true;
 +}
 +
 +// prüfen, ob die Anzahl der Parameter stimmt
 +if(sizeof($argv) != 3) {
 +  echo "Usage: $argv[0] [Name] [Alter]\n";
 +  exit;
 +}
 +
 +// sprechendere Namen verwenden
 +$name = $argv[1];
 +$age  = $argv[2];
 +
 +// die beiden Variablen prüfen
 +if(!checkName($name)) {
 +  echo "Der Name muss mit einem Grossbuchstaben beginnen und darf sonst nur Buchstaben enthalten\n";
 +  exit;
 +}
 +if(!checkAge($age)) {
 +  echo "Das Alter muss mit 1-9 beginnen, darf nur Zahlen enthalten und maximal 99 sein\n";
 +  exit;
 +}
 +
 +echo "Dein Name ist $name und du bist $age Jahre alt\n";
 +</code>
 +
 +=== Ausführen ===
 +Die Datei input.php mit obigen Code befüllen und auf folgendem Weg ausführen.
 +<code bash>
 +php input.php Werner 30
 +</code>
 +
 +==== Python ====
 +Python bietet mit **OptParse** oder **ArgParse** ziemlich gute Module für Programmparameter an. Hier soll aber gezeigt werden, wie es mit Bordmitteln funktioniert.
 +=== Code ===
 +<code python>
 +import sys
 +
 +# Funktion definieren
 +def checkName(name):
 +  # ist die Länge korrekt
 +  if len(name) == 0:
 +    return False
 +
 +  firstCharacter = True
 +  for c in name:
 +    if firstCharacter:
 +      # ist das erste Zeichen ein Grossbuchstabe?
 +      if c < 'A' or c > 'Z':
 +        return False
 +      firstCharacter = False
 +    else:
 +      # sind alle anderen Zeichen Kleinbuchstaben?
 +      if c < 'a' or c > 'z':
 +        return False
 +
 +  # Alle Bedingungen sind erfüllt
 +  return True
 +
 +def checkAge(age):
 +  # ist die Länge korrekt?
 +  if len(age) <= 0 or len(age) > 2:
 +    return False
 +
 +  # Fängt das erste Zeichen zwischen 1 und 9 an?
 +  if age[0] < '1' or age[0] > '9':
 +    return False
 +
 +  # Ist das zweite Zeichen (falls vorhanden) zwischen 0 und 9?
 +  if len(age) == 2:
 +    if age[1] < '0' or age[1] > '9':
 +      return False
 +
 +  # Alle Bedingungen sind erfüllt
 +  return True
 +
 +# Die Anzahl der Parameter prüfen
 +if len(sys.argv) != 3:
 +  print("Usage: "+sys.argv[0]+" [Name] [Alter]")
 +  sys.exit(1)
 +
 +# sprechendere Namen verwenden
 +name = sys.argv[1]
 +age  = sys.argv[2]
 +
 +# Die Parameter prüfen
 +if not checkName(name):
 +  print("Der Name muss mit einem Grossbuchstaben beginnen und darf sonst nur Buchstaben enthalten")
 +  sys.exit()
 +if not checkAge(age):
 +  print("Das Alter muss mit 1-9 beginnen, darf nur Zahlen enthalten und maximal 99 sein")
 +  sys.exit()
 +
 +# Ausgabe
 +print("Dein Name ist "+name+" und du bist "+age+" Jahre alt")
 +</code>
 +=== Ausführen ===
 +Die Datei input.py mit obigen Quelltext füllen und so zum Laufen bringen:
 +<code bash>
 +python3 input.py
 +</code>
 +
 +===== Übungen =====
 +  * Lese eine ganze Zahl als Programmparameter ein und berechne die Fakultät dieser Zahl
 +  * Erweitere die obigen Beispiele um einen weiteren Parameter. Lese zusätzlich das Geburtsdatum ein (inklusive Prüfungen!) und gib es aus
 +  * Baue einen kleinen Taschenrechner, der addieren und subtrahieren kann
 +  * Erweitere den Taschenrechner um die Multiplikation und Division
inputs_param.1499091638.txt.gz · Last modified: 2017/07/03 16:20 by gg