inputs_param
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| inputs_param [2017/07/03 13:32] – [Beispiele] gg | inputs_param [2017/07/05 11:03] (current) – gg | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| ===== Beispiele ===== | ===== Beispiele ===== | ||
| - | 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 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 ==== | ||
| + | === Der Code === | ||
| <code bash> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| Line 48: | Line 49: | ||
| </ | </ | ||
| - | ==== C++ ==== | + | === Ausführen |
| + | Die Datei input.sh mit dem obigen Code erstellen und folgendes ausführen: | ||
| + | <code bash> | ||
| + | chmod +x input.sh | ||
| + | ./input.sh Werner 30 # ausführen | ||
| + | </ | ||
| + | ==== C++ ==== | ||
| + | === Der Code === | ||
| <code cpp> | <code cpp> | ||
| #include < | #include < | ||
| Line 125: | Line 133: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | === Kompilieren und Ausführen === | ||
| + | <code bash> | ||
| + | g++ -Wall -g -std=c++14 input.cpp -o input # kompilieren | ||
| + | ./input Werner 30 # ausführen | ||
| + | </ | ||
| + | |||
| + | ==== Golang ==== | ||
| + | |||
| + | === Der Code === | ||
| + | <code go> | ||
| + | package main | ||
| + | |||
| + | import " | ||
| + | import " | ||
| + | |||
| + | func checkName(name string) bool { | ||
| + | // Länge prüfen | ||
| + | if(name == "" | ||
| + | return false | ||
| + | } | ||
| + | |||
| + | // Prüfen, ob erstes Zeichen ein Grossbuchstabe ist | ||
| + | if(name[0] < ' | ||
| + | return false | ||
| + | } | ||
| + | |||
| + | // Prüfen, ob alle anderen Zeichen Kleinbuchstaben sind | ||
| + | for i := 1; i < len(name); i++ { | ||
| + | if(name[i] < ' | ||
| + | return false | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Sind alle Bedingungen erfüllt? | ||
| + | return true | ||
| + | } | ||
| + | |||
| + | func checkAge(age string) bool { | ||
| + | // Länge prüfen | ||
| + | if(age == "" | ||
| + | return false | ||
| + | } | ||
| + | |||
| + | // Prüfen ob erstes Zeichen zwischen 1 und 9 ist | ||
| + | if(age[0] < ' | ||
| + | return false | ||
| + | } | ||
| + | |||
| + | // Prüfen, ob zweites Zeichen zwischen 0 und 9 ist | ||
| + | if(len(age) == 2) { | ||
| + | if(age[1] < ' | ||
| + | return false | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Sind alle Bedingungen erfüllt? | ||
| + | return true | ||
| + | } | ||
| + | |||
| + | func main() { | ||
| + | if(len(os.Args[1: | ||
| + | fmt.Println(" | ||
| + | return | ||
| + | } | ||
| + | |||
| + | // sprechendere Namen verwenden | ||
| + | name := os.Args[1] | ||
| + | age := os.Args[2] | ||
| + | |||
| + | // den Namen prüfen | ||
| + | if(!checkName(name)) { | ||
| + | fmt.Println(" | ||
| + | return | ||
| + | } | ||
| + | // das Alter prüfen | ||
| + | if(!checkAge(age)) { | ||
| + | fmt.Println(" | ||
| + | return | ||
| + | } | ||
| + | |||
| + | // Ausgabe | ||
| + | fmt.Println(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === Kompilieren und ausführen === | ||
| + | Die Datei input.go mit obigen Code füllen und folgendes ausführen | ||
| + | <code bash> | ||
| + | go build input.go | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | ==== Java ==== | ||
| + | === Der Code === | ||
| + | <code java> | ||
| + | public class Input { | ||
| + | private boolean checkName(String name) { | ||
| + | // kürzere Schreibweise diesesmal | ||
| + | if(name.isEmpty()) return false; // Länge prüfen | ||
| + | if(name.charAt(0) < ' | ||
| + | for(int i = 1; i < name.length(); | ||
| + | if(name.charAt(i) < ' | ||
| + | return false; | ||
| + | |||
| + | // Sind alle Bedingungen erfüllt? | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | private boolean checkAge (String age) { | ||
| + | // Länge prüfen | ||
| + | if(age.isEmpty() || age.length() > 2) return false; | ||
| + | |||
| + | // 1-9 an erster Stelle? | ||
| + | if(age.charAt(0) < ' | ||
| + | |||
| + | // 0-9 an zweiter Stelle? | ||
| + | if(age.length() == 2) | ||
| + | if(age.charAt(1) < ' | ||
| + | |||
| + | // Sind alle Bedingungen erfüllt? | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | // Vorgriff Objektorientiertes Programmieren | ||
| + | Input in = new Input(); | ||
| + | |||
| + | for(int i = 0; i < args.length; | ||
| + | System.out.println(args[i]); | ||
| + | |||
| + | // Anzahl der Parameter prüfen | ||
| + | if(args.length != 2) { | ||
| + | System.out.println(" | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | // Sprechendere Namen verwenden | ||
| + | String name = args[0]; | ||
| + | String age = args[1]; | ||
| + | |||
| + | // Prüfen der einzelnen Parameter | ||
| + | if(!in.checkName(name)) { | ||
| + | System.out.println(" | ||
| + | return; | ||
| + | } | ||
| + | if(!in.checkAge(age)) { | ||
| + | System.out.println(" | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | // Ausgabe | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === Kompilieren und ausführen === | ||
| + | Die Datei Input.java mit obigen Inhalt erstellen und folgendes Ausführen: | ||
| + | <code bash> | ||
| + | javac Input.java | ||
| + | java Input Werner 30 # ausführen | ||
| + | </ | ||
| + | |||
| + | ==== JavaScript ==== | ||
| + | Das ist nur über die Browserkonsole möglich. Wird das angefragt, so wird ein Programm nachgereicht. | ||
| + | |||
| + | ==== Perl ==== | ||
| + | Ich habe auf die schnelle keinen Weg an den regulären Ausdrücken vorbei gefunden | ||
| + | === Code === | ||
| + | <code perl> | ||
| + | # | ||
| + | |||
| + | use strict; | ||
| + | use warnings; | ||
| + | |||
| + | sub checkName { | ||
| + | # Parameter auslesen | ||
| + | my $name = shift; | ||
| + | |||
| + | # Länge prüfen | ||
| + | if(length($name) eq 0) { | ||
| + | return 0; # false | ||
| + | } | ||
| + | |||
| + | # reguläre Ausdrücke verwenden | ||
| + | if($name =~ / | ||
| + | # Parameter passt in den regulären Ausdruck | ||
| + | return 1; # true | ||
| + | } | ||
| + | | ||
| + | return 0; # false | ||
| + | } | ||
| + | |||
| + | sub checkAge { | ||
| + | # Parameter auslesen | ||
| + | my $age = shift; | ||
| + | |||
| + | # Länge prüfen | ||
| + | if(length($age) eq 0 || length($age) gt 2) { | ||
| + | return 0; # false | ||
| + | } | ||
| + | |||
| + | # reguläre Ausdrücke verwenden | ||
| + | if($age =~ / | ||
| + | # Parameter passt in den regulären Ausdruck | ||
| + | return 1; # true | ||
| + | } | ||
| + | |||
| + | return 0; # false | ||
| + | } | ||
| + | |||
| + | # Anzahl der Argumente prüfen | ||
| + | if (@ARGV != 2) { | ||
| + | print " | ||
| + | exit; | ||
| + | } | ||
| + | |||
| + | # sprechendere Namen verwenden | ||
| + | my $name = shift @ARGV; | ||
| + | my $age = shift @ARGV; | ||
| + | |||
| + | # Parameter prüfen | ||
| + | if(!checkName($name)) { | ||
| + | print "Der Name muss mit einem Grossbuchstaben beginnen und darf sonst nur Kleinbuchstaben enthalten\n"; | ||
| + | exit; | ||
| + | } | ||
| + | if(!checkAge($age)) { | ||
| + | print "Das Alter muss mit 1-9 beginnen, darf nur Zahlen enthalten und maximal 99 sein\n"; | ||
| + | exit; | ||
| + | } | ||
| + | |||
| + | # Ausgabe | ||
| + | print "Dein Name ist $name und du bist $age Jahre alt\n"; | ||
| + | </ | ||
| + | |||
| + | === Ausführen === | ||
| + | Den obigen Code in die Datei input.pl kopieren und folgendes ausführen | ||
| + | <code bash> | ||
| + | perl input.pl Werner 30 | ||
| + | </ | ||
| + | |||
| + | ==== 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] < ' | ||
| + | return false; | ||
| + | } | ||
| + | // Sind alle anderen Buchstaben Kleinbuchstaben? | ||
| + | for($i = 1; $i < strlen($name); | ||
| + | if($name[$i] < ' | ||
| + | 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] < ' | ||
| + | return false; | ||
| + | } | ||
| + | // prüfen, ob die zweite Zahl (falls vorhanden) zwischen 0 und 9 ist | ||
| + | if(strlen($age) == 2) { | ||
| + | if($age[1] < ' | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Alle Bedingungen sind erfüllt | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | // prüfen, ob die Anzahl der Parameter stimmt | ||
| + | if(sizeof($argv) != 3) { | ||
| + | echo " | ||
| + | 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"; | ||
| + | </ | ||
| + | |||
| + | === Ausführen === | ||
| + | Die Datei input.php mit obigen Code befüllen und auf folgendem Weg ausführen. | ||
| + | <code bash> | ||
| + | php input.php Werner 30 | ||
| + | </ | ||
| + | |||
| + | ==== 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 < ' | ||
| + | return False | ||
| + | firstCharacter = False | ||
| + | else: | ||
| + | # sind alle anderen Zeichen Kleinbuchstaben? | ||
| + | if c < ' | ||
| + | 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] < ' | ||
| + | return False | ||
| + | |||
| + | # Ist das zweite Zeichen (falls vorhanden) zwischen 0 und 9? | ||
| + | if len(age) == 2: | ||
| + | if age[1] < ' | ||
| + | return False | ||
| + | |||
| + | # Alle Bedingungen sind erfüllt | ||
| + | return True | ||
| + | |||
| + | # Die Anzahl der Parameter prüfen | ||
| + | if len(sys.argv) != 3: | ||
| + | print(" | ||
| + | sys.exit(1) | ||
| + | |||
| + | # sprechendere Namen verwenden | ||
| + | name = sys.argv[1] | ||
| + | age = sys.argv[2] | ||
| + | |||
| + | # Die Parameter prüfen | ||
| + | if not checkName(name): | ||
| + | print(" | ||
| + | sys.exit() | ||
| + | if not checkAge(age): | ||
| + | print(" | ||
| + | sys.exit() | ||
| + | |||
| + | # Ausgabe | ||
| + | print(" | ||
| + | </ | ||
| + | === Ausführen === | ||
| + | Die Datei input.py mit obigen Quelltext füllen und so zum Laufen bringen: | ||
| + | <code bash> | ||
| + | python3 input.py | ||
| + | </ | ||
| + | |||
| + | ===== Ü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, | ||
| + | * Erweitere den Taschenrechner um die Multiplikation und Division | ||
inputs_param.1499081562.txt.gz · Last modified: 2017/07/03 13:32 by gg
