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 13:32] – [Beispiele] gginputs_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:
 </code> </code>
  
-==== C++ ====+=== Ausführen === 
 +Die Datei input.sh mit dem obigen Code erstellen und folgendes ausführen: 
 +<code bash> 
 +chmod +x input.sh    # als ausführbar markieren 
 +./input.sh Werner 30 # ausführen 
 +</code>
  
 +==== C++ ====
 +=== Der Code ===
 <code cpp> <code cpp>
 #include <iostream> #include <iostream>
Line 125: Line 133:
 } }
 </code> </code>
 +
 +=== Kompilieren und Ausführen ===
 +<code bash>
 +g++ -Wall -g -std=c++14 input.cpp -o input # kompilieren
 +./input Werner 30                          # ausführen
 +</code> 
 +
 +==== Golang ====
 +
 +=== Der Code ===
 +<code go>
 +package main
 +
 +import "os"
 +import "fmt"
 +
 +func checkName(name string) bool {
 +  // Länge prüfen
 +  if(name == "") {
 +    return false
 +  }
 +
 +  // Prüfen, ob erstes Zeichen ein Grossbuchstabe ist 
 +  if(name[0] < 'A' || name[0] > 'Z') {
 +    return false 
 +  }
 +
 +  // Prüfen, ob alle anderen Zeichen Kleinbuchstaben sind
 +  for i := 1; i < len(name); i++ {
 +    if(name[i] < 'a' || name[i] > 'z') {
 +      return false 
 +    }
 +  }
 +
 +  // Sind alle Bedingungen erfüllt?
 +  return true 
 +}
 +
 +func checkAge(age string) bool {
 +  // Länge prüfen
 +  if(age == "" || len(age) > 2) {
 +    return false 
 +  }
 +
 +  // Prüfen ob erstes Zeichen zwischen 1 und 9 ist 
 +  if(age[0] < '1' || age[0] > '9') {
 +    return false 
 +  }
 +
 +  // Prüfen, ob zweites Zeichen zwischen 0 und 9 ist
 +  if(len(age) == 2) {
 +    if(age[1] < '0' || age[1] > '9') {
 +      return false 
 +    }
 +  }
 +
 +  // Sind alle Bedingungen erfüllt?
 +  return true
 +}
 +
 +func main() {
 +  if(len(os.Args[1:]) != 2) {
 +    fmt.Println("Usage: "+os.Args[0]+" [Name] [Alter]")
 +    return
 +  }
 +
 +  // sprechendere Namen verwenden
 +  name := os.Args[1]
 +  age  := os.Args[2]
 +
 +  // den Namen prüfen
 +  if(!checkName(name)) {
 +    fmt.Println("Der Name muss mit einem Grossbuchstaben beginnen und darf sonst nur Kleinbuchstaben enthalten")
 +    return
 +  }
 +  // das Alter prüfen
 +  if(!checkAge(age)) {
 +    fmt.Println("Das Alter muss mit 1-9 beginnen, darf nur Zahlen enthalten und maximal 99 sein")
 +    return
 +  }
 +
 +  // Ausgabe
 +  fmt.Println("Dein Name ist "+name+" und du bist "+age+" Jahre alt")
 +}
 +</code>
 +
 +=== Kompilieren und ausführen ===
 +Die Datei input.go mit obigen Code füllen und folgendes ausführen
 +<code bash>
 +go build input.go  # kompilieren
 +./input  Werner 30 # ausführen
 +</code>
 +
 +==== 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 ====
 +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.1499081562.txt.gz · Last modified: 2017/07/03 13:32 by gg