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 14:29] 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 143: Line 143:
  
 === Der Code === === Der Code ===
 +<code go>
 package main package main
  
Line 216: Line 217:
   fmt.Println("Dein Name ist "+name+" und du bist "+age+" Jahre alt")   fmt.Println("Dein Name ist "+name+" und du bist "+age+" Jahre alt")
 } }
 +</code>
  
 === Kompilieren und ausführen === === Kompilieren und ausführen ===
 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>
  
 ==== Java ==== ==== 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) < 'A' || name.charAt(0) > 'Z') return false; // Grossbuchstabe an erster Stelle?
 +        for(int i = 1; i < name.length(); i++) // Kleinbuchstaben an allen anderen Stellen
 +          if(name.charAt(i) < 'a' || name.charAt(i) > 'z')
 +            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) < '1' || age.charAt(0) > '9') return false;
 +
 +        // 0-9 an zweiter Stelle? 
 +        if(age.length() == 2) 
 +            if(age.charAt(1) < '0' || age.charAt(1) > '9') return false;
 +
 +        // 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; i++) 
 +            System.out.println(args[i]);
 +
 +        // Anzahl der Parameter prüfen
 +        if(args.length != 2) {
 +            System.out.println("Usage: "+args[0]+" [Name] [Alter]");
 +            return;
 +        }
 +
 +        // Sprechendere Namen verwenden
 +        String name = args[0];
 +        String age  = args[1];
 +
 +        // Prüfen der einzelnen Parameter
 +        if(!in.checkName(name)) {
 +            System.out.println("Der Name muss mit einem Grossbuchstaben beginnen und darf sonst nur Kleinbuchstaben enthalten");
 +            return;
 +        }
 +        if(!in.checkAge(age)) {
 +            System.out.println("Das Alter muss mit 1-9 beginnen, darf nur Zahlen enthalten und maximal 99 sein");
 +            return;
 +        }
 +
 +        // Ausgabe
 +        System.out.println("Dein Name ist "+name+" und du bist "+age+" Jahre alt");
 +    }
 +}
 +</code>
 +
 +=== Kompilieren und ausführen ===
 +Die Datei Input.java mit obigen Inhalt erstellen und folgendes Ausführen:
 +<code bash>
 +javac Input.java     # kompilieren
 +java Input Werner 30 # ausführen
 +</code>
  
 ==== JavaScript ==== ==== JavaScript ====
 Das ist nur über die Browserkonsole möglich. Wird das angefragt, so wird ein Programm nachgereicht. 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>
 +#!/usr/bin/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 =~ /^[A-Z][a-z]*$/) {
 +    # 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 =~ /^[1-9][0-9]*$/) { 
 +    # Parameter passt in den regulären Ausdruck
 +    return 1; # true 
 +  }
 +
 +  return 0; # false
 +}
 +
 +# Anzahl der Argumente prüfen
 +if (@ARGV != 2) {
 +  print "Usage: input.pl [Name] [Alter]\n";
 +  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";
 +</code>
 +
 +=== 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.1499084943.txt.gz · Last modified: 2017/07/03 14:29 by gg