Donnerstag, 24. Oktober 2013
C# Threads (POS1: 4BHIF)
Abgabename: 2013_4bhif_aufgabe3_name_vorname.zip
Im folgenden Code werden Primzahlen berechnet. Ihre Aufgabe ist es aus diesem Code eine Multithreaded Version zu entwickeln. Die Anzahl der Threads und der Höchstwert der Primzahlen soll über Befehlszeilenargumente einstellbar sein. Testen Sie das Programm mit verschiedenen Höchstwerten und Threadanzahlen. (Zumindestens einmal mit einer Anzahl die den Prozessoren des Systems entsprechen) Erzeugen Sie mit den Ergebnissen eine Tabelle die die Zeiten gegen die der Single-Thread-Version vergleicht. (manuell z.B. in Excel oder auch im Programm)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Diagnostics; namespace Primzahlen { class Program { static void Main(string[] args) { Stopwatch watch = new Stopwatch(); int maxPrim = 0; int number = 0; int tests = 0; watch.Start(); Prim(1600000, out maxPrim, out number, out tests); watch.Stop(); Console.WriteLine("Es wurden {0} Primzahlen gefunden", number); Console.WriteLine("Die höchste gefundene Primzahl ist {0}", maxPrim); Console.WriteLine("Die Laufzeit betrug {0:F0} Millisekungen", watch.ElapsedMilliseconds); Console.WriteLine("Es wurden {0} Vergleiche durchgeführt", tests); } private static void Prim(int max, out int maxPrim, out int number, out int tests) { List<int> prims = new List<int>(); int i = 5; tests = 0; prims.Add(2); prims.Add(3); while (i < max) { int maxTeiler = (int)Math.Sqrt(i) + 1; int j = 0; while (true) { int n = prims[j]; int rest = (i % n); ++tests; if (rest == 0) break; //keine Primzahl if(n >= maxTeiler) { prims.Add(i); break; } ++j; } i += 2; } number = prims.Count; maxPrim = prims[number - 1]; } } }
Beispieltabelle für Ausgabe:
max Primzahl nr. Primzahlen ein Thread zwei Threads vier Threads 100000 9592 44ms 60ms 80ms 200000 17984 95ms 98ms 104ms 400000 33860 223ms 227ms 230ms ... 51200000 3068712 106000ms 61300ms 32940ms
Montag, 21. Oktober 2013
Testen und erweitern von text_analyzer.py (POS1: 2BHIF)
Ziel dieser Aufgabe ist es, fremden Code zu testen, zu verstehen und zu erweitern. Dazu werden Sie
text_analyzer.py
von zwei Mitschülern testen und um unten beschriebene Funktionalität erweitern. Schreiben Sie dazu ein Modul test_text_analyzer
, welches die Funktionen vom Modul text_analyzer
importiert und testet.
Protokollieren Sie die Testläufe und beschreiben Sie die eventuell gefundenen Fehler in einer Textdatei
errors.txt
. Haben Sie Fehler entdeckt, so korrigieren Sie diese, sodass die Tests fehlerfrei laufen.
Sollten Ihre Tests Fehler enthalten, so korrigieren sie diese ebenfalls (solche Fehler werden Sie u.U. erst finden, wenn Sie das zweite Programm testen).
Ergänzen Sie die Funktionalität von
text_analyzer
um die Funktion read_sentences(file)
, welche aus der geöffneten Datei file
(d.h. die Datei muss vor dem Aufruf dieser Funktion geöffnet werden) Zeilen liest und in der selben Form wie die bereits bestehende Funktion input_sentences()
liefert.
Ändern/Ergänzen Sie
text_analyzer
um ein main
, welches prüft, ob Dateinamen auf der Kommandozeile angegeben wurden, diese Dateien der Reihe nach öffnet und das (End-)Ergebnis der Funktionen analyze_words(lst)
und sort_letters(dic)
ausgibt. Weiters sollen auch die Häufigkeiten der Worte, absteigend sortiert nach Häufigkeit (genau wie sort_letters(dic)
) ausgegeben werden (braucht man eine neue Funktion?). Dabei soll die Ausgabe formatiert sein (also nicht nur die Listen bzw. Dictionaries ausgeben).
Werden keine Dateinamen angegeben, so ist wieder von der Konsole zu lesen.
Die Option
-h
gibt eine kurze Hilfe aus.
Die Einteilung der Gruppen finden Sie in der Schule unter
/home/teachers/hp/public/2bhif/2013_2bhif_aufgabe5_gruppeneinteilung.pdf
.
Labels: Aufgabe, POS1-2, Python, Testen
Freitag, 11. Oktober 2013
Aufgabe newprog.py (POS1: 2BHIF)
Neue Programmdateien haben im Allgemeinen eine ziemlich fixe (Anfangs-)Struktur. So wird immer ein Programmkopf (Kommentar) benötigt, der den Namen des Autors und andere Informationen enthält. Für Python sieht das z.B. so aus:
""" author: Maier Maria matnr: d84123 file: newprog.py desc: Erstellen eines Programmgerüsts aus einer Vorlage. date: 2010-10-22 class: 5AHDVK catnr: 23 """
Schreiben Sie ein Pythonprogramm newprog.py
, welches aus einer Vorgabedatei so ein Programmgerüst erzeugt. In dieser Vorgabedatei gibt es Wörter, die dann von newprog.py
durch die entsprechenden Werte ersetzt werden. Obiges Gerüst ist aus folgender Vorgabedatei entstanden:
""" author: AUTOR matnr: EVIDENZNUMMER file: DATEINAME desc: ZWECK date: DATUM class: KLASSE catnr: KATALOGNUMMER """ if __name__ == '__main__': pass
Für die Ersetzungen soll ein Dictionary verwendet werden, z.B.:
ersetzungen = { "DATEINAME": progname, "ZWECK": zweck, "DATUM": datum, "AUTOR": "Maier Maria", "KATALOGNUMMER": "23", "EVIDENZNUMMER": "d84123", "KLASSE": "5AHDVK" }
progname
, zweck
, datum
müssen natürlich vorher bestimmt werden (eingegeben).
Zur Bestimmung des Datums verwenden Sie strftime()
:
from time import strftime datum = strftime("%F")
strftime()
kennt verschiedenste Formatangaben und liefert die aktuelle Uhrzeit bzw. Datum formatiert zurück. Hilfe mit help(strftime)
in Python bzw. man strftime
von der Shell (liefert die Beschreibung der C-Funktion, aber die Formatangaben gelten auch für Python).
Die Vorgabedatei und der Name der zu erzeugenden Datei sind auf der Kommandozeile anzugeben, z.B.:
~/work/tmp > python newprog.py vorgabe.py meinNeuesProgramm.py ~/work/tmp >
Wird keine Vorgabedatei angegeben, so wird eine Standardvorgabedatei verwendet:
~/work/tmp > python newprog.py meinNeuesProgramm.py ~/work/tmp >
Falls meinNeuesProgramm.py
schon existiert, dann darf diese Datei nicht überschrieben werden:
~/work/tmp > python newprog.py meinNeuesProgramm.py 'meinNeuesProgramm.py' already exists! ~/work/tmp >
Sie können dazu folgende Funktion verwenden (Aufrufbeispiel im Home-Verzeichnis):
>>> from os.path import exists >>> exists(".bashrc") True >>> exists(".bashrc__") False >>>
Labels: Aufgabe, POS1-2, Python
Mittwoch, 9. Oktober 2013
Musterlösung zu Aufgabe 2 "Denksport mit Python, erste Anwendung von Mercurial" (POS1: 2BHIF)
#!/usr/bin/env python3 """ File: pythagorean_triple.py Desc: Ein Programm zur Bestimmung eines pythagoräischen Tripel (a2+b2=c2 für a < b < c), wobei a+b+c == 1000. Created: 2013-09-23, Harald R. Haberstroh """ from sys import argv from math import sqrt if __name__ == '__main__': summe = 1000 if len(argv) == 2: summe = int(argv[1]) for a in range(1, summe // 3): for b in range(a + 1, summe // 2): a2 = a * a b2 = b * b c2 = a2 + b2 c = sqrt(c2) if a < b < c and a + b + c == summe: print(a, b, int(c)) print(int(a * b * c))
#!/usr/bin/env python3 """ File: sumdigits2pow1000.py Desc: calculate the sum of the digits of 2**1000 (exponent can be changed with commandline argument) Created: 2013-09-23, Harald R. Haberstroh """ from sys import argv if __name__ == '__main__': if len(argv) == 2: exponent = int(argv[1]) else: exponent = 1000 print(sum(list(map(int, list(str(2 ** exponent))))))
#!/usr/bin/env python3 """ File: sumdigitsfact.py Desc: calculate the sum of the digits of 100! (100 can be changed with commandline argument) Created: 2013-09-23, Harald R. Haberstroh """ from sys import argv def fact(n): """n!""" f = 1 for i in range(1, n + 1): f *= i return f if __name__ == '__main__': if len(argv) == 2: n = int(argv[1]) else: n = 100 print(sum(list(map(int, list(str(fact(n)))))))
Die Palindrom-Beispiele sind ganz ähnlich und wurden daher in ein Programm gepackt, bei dem man als Parameter auf der Kommandozeile die Anzahl der Stellen angeben kann (4, 6, 8). Zusätzlich kann noch '-l' angegeben werden, um eine Liste der Produkte zu erhalten. Die Ergebnisliste ist nicht ganz vollständig, denn es wird das Ergebnis des Produkts als Schlüssel verwendet. Damit gehen Lösungen wie zum Beispiel 111111 = 143 * 777 = 231 * 481 = 259 * 429 verloren.
#!/usr/bin/env python3 """ File: palindrome.py Desc: largest palindrome of product of two n/2-digit numbers with n digits Created: 2013-09-23, Harald R. Haberstroh """ from sys import argv def checkPalindrom(s): """ checks whether string is a palindrome """ l = len(s) for i in range(l // 2): if s[i] != s[l - i - 1]: return False return True def genPalindrom(n): """ build palindrome out of products """ # Dictionary only for list of palindromes not for maximum palindromes = {} products = [] maxPalindrome = 0 maxPalindromeFactors = "" for i in range(10**((n - 1) // 2), 10 ** (n // 2)): for j in range(10**((n - 1) // 2), 10 ** (n // 2)): product = str(i * j) if checkPalindrom(product): if not product in palindromes: palindromes[product] = str(i) + " * " + str(j) + " = " + product products.append(product) if int(product) > maxPalindrome: maxPalindrome = int(product) maxPalindromeFactors = str(i) + " * " + str(j) + " = " + product return maxPalindromeFactors, palindromes if __name__ == '__main__': n = 2 if len(argv) > 1: n = int(argv[1]) maxPalindrome, palindromes = genPalindrom(n) if "-l" in argv: lstPalindromes = list(palindromes.values()) lstPalindromes.sort() for palindrome in lstPalindromes: print(palindrome) print("largest palindrome: %s" % maxPalindrome)
Labels: Lösung, POS1-2, Python
Musterlösung zu Wiederholung Python (POS1: 2BHIF)
""" text_analyzer.py Task 1: Repeat previous material (1st class) 2012-09-10, Harald R. Haberstroh (hp@htlwrn.ac.at) """ def input_sentences(): '''returns al list of sentences/lines''' lst = [] eof = False while not eof: try: line = input("Satz: ") lst.append(line) except EOFError: eof = True return lst def _remove_punctuation(string): '''helper removes all punctuation marks within string''' for punctuation in '''"',;.:-''': string = string.replace(punctuation, " ") return string def split_sentences(lst): '''split a list (lst) of sentences into list of list of words''' wordlist = [] for sentence in lst: wordlist.append(_remove_punctuation(sentence).split()) return wordlist def purge_bad_words(lst): '''remove all bad words (length less than 2 chars, words containing non alphabetic chars) ''' for sublist in lst: idx = 0 while idx < len(sublist): if not len(sublist[idx]) >= 2 or not sublist[idx].isalpha(): del(sublist[idx]) else: idx += 1 return lst def analyze_words(lst): '''returns a dictionary of words (with the number of occurrences) of the list of list of words''' dict = {} for sublist in lst: for word in sublist: word = word.lower() if word in dict: dict[word] += 1 else: dict[word] = 1 return dict def analyze_letters(lst): '''returns a dictionary of letters (with the number of occurrences) of the list of list of words''' dict = {} for sublist in lst: for word in sublist: for char in word.lower(): if char in dict: dict[char] += 1 else: dict[char] = 1 return dict def purge_analyzed_letters(dic): '''remove umlauts''' for umlaut in "äöüß": if umlaut in dic: del(dic[umlaut]) return dic def _key(tupl): '''returns 2nd element of tuple for sorting''' return tupl[1] def sort_letters(dic): '''returns a sorted list of tuples of letters, sorted by number of letters''' tuples = list(dic.items()) tuples.sort(key=_key, reverse=True) return tuples def test_input(): '''returns a fixed list of sentences for testing purposes''' return ['Maxi und Mini verliefen sich im Wald, aber bald.', '10 alte Fledermäuse flogen im Wald', 'Hat die alte Meisterhexe...', "Seid's gewesen. Denn als Geister...", 'Erst hervor der alte Meister.'] if __name__ == '__main__': #lst = input_sentences() lst = test_input() print('split_sentences(lst)') wordlist = split_sentences(lst) print(wordlist) print('\npurge_bad_words(wordlist)') wordlist = purge_bad_words(wordlist) print(wordlist) print('\nanalyze_words(wordlist)') print(analyze_words(wordlist)) print('\nanalyze_letters(wordlist)') dic = analyze_letters(wordlist) print(dic) print('\npurge_analyzed_letters(dic)') dic = purge_analyzed_letters(dic) print(dic) print('\nsort_letters(dic)') sorted_letters = sort_letters(dic) print(sorted_letters) print('\n\n*** task 9 ***\n') print('''"abcdef".index("c")''') # ValueError: substring not found print('''ValueError: substring not found''') print('''"abcdef".index("g")''') # ValueError: substring not found print('''ValueError: substring not found''') print('''"abcdef".index("de")''') print("abcdef".index("de")) print('''"c" in "abcdef" ''') print("c" in "abcdef") print('''"g" in "abcdef" ''') print("g" in "abcdef") print('''"de" in "abcdef" ''') print("de" in "abcdef") print('''"abcdef"[2:4]''') print("abcdef"[2:4]) print('''"abcdef"[2:]''') print("abcdef"[2:]) print('''"abcdef"[-1]''') print("abcdef"[-1]) print('''"abcdef"[2:-1]''') print("abcdef"[2:-1]) print('''[1, 2, 3, 4, 5].index(3)''') print([1, 2, 3, 4, 5].index(3)) print('''[1, 2, 3, 4, 5].index(9)''') # ValueError: 9 is not in list print('''ValueError: 9 is not in list''') print('''[1, 2, 3, 4, 5][5]''') # IndexError: list index out of range print('''IndexError: list index out of range''') print('''[1, 2, 3, 4, 5][2:4]''') print([1, 2, 3, 4, 5][2:4]) print('''[1, 2, 3, 4, 5][-2]''') print([1, 2, 3, 4, 5][-2]) print('''[1, 2, 3, 4, 5][5:9]''') print([1, 2, 3, 4, 5][5:9]) print('''[1, 2, 3, 4, 5][4:]''') print([1, 2, 3, 4, 5][4:]) print('''len("abc") + len(range(3)) + len({1, 2, 3}) + len({1: 2, 2: 3})''') print(len("abc") + len(range(3)) + len({1, 2, 3}) + len({1: 2, 2: 3}))
Labels: Lösung, POS1-2, Python
Dienstag, 8. Oktober 2013
C# programmieren (POS1: 4BHIF)
Abgabename: 2013_4bhif_aufgabe2_name_vorname.zip
Verwenden Sie eine Projektmappe und teilen Sie die Aufgaben in Projekte oder machen Sie ein einziges Projekt, bei dem man aber irgendwie auswählen kann, welche Teilaufgabe gestartet wird.
Sie haben nun schon zwei Jahre Java und ein Jahr Python programmiert. Nun geht es darum das bereits erworbene Können möglichst schnell auf die Sprache C# zu übertragen. Dazu sind kurze einfache Aufgabenstellungen gut geeignet. Es folgt nun eine Liste von Aufgabenstellungen für Konsolenprogramme. Sie dürfen Ihre Progrämmchen auch mit einer GUI versehen, gefordert ist das jedoch nicht.
- Hello World
Richten Sie Ihr Visual Studio so ein, dass alle Ihre Dateien automatisch einen Header mit Ihrem Namen, Klasse usw. enthalten.
Erstellen Sie dann ein "Hello World"-Programm. Dieses Programm soll "Hello World!" ausgeben, wenn keine Kommandozeilenparameter angegeben wurden, anderenfalls sollen die Parameter als Namen interpretiert werden, die dann gegrüßt werden. Dabei sollen immer zwei Namen paarweise ausgegeben werden (siehe Beispiel).
Aufrufhello.exe Toni Barbara Klaus
AusgabeHello Toni und Barbara! Hello Klaus!
- ISBN/EAN
Schreiben Sie eine Methode, welche die Prüfziffern von ISBN (Internationale Standardbuchnummer) bzw. EAN (European Article Number) prüfen kann. Dabei wird die Prüfziffer (als String) eingegeben, von welcher die Prüfziffer als Rückgabewert ausgegeben wird.int GetCheckDigit(string isbnWithoutCheckDigit);
Daraus leitet sich eine zweite Methode ab, welche einen String inklusive Prüfziffer prüft:bool CheckISBN(string isbn);
Diese Methode entfernt alle Trennzeichen (Leerzeichen, Bindestriche).
Algorithmus:s = z1 + z2 * 2 + z3 * 3 + ... + z9 * 9
p = s mod 11
- Falls p gleich 10, dann ist die Prüfziffer "X" sonst die Ziffer selbst.
- Römische Zahlen
Schreiben Sie Methoden zum Umrechnen von ganzen Zahlen (1 bis 3000) in Römische Zahlen und umgekehrt. Die römischen Ziffern haben folgende Bedeutung:I ... 1 V ... 5 X ... 10 L ... 50 C ... 100 D ... 500 M ... 1000
Beachten Sie, dass nur jeweils drei gleiche Ziffern hintereinander geschrieben werden. Stattdessen wird die nächst größere Einheit benutzt und eine Einheit abgezogen (XC = 90, XCIX = 99, IX = 9, VIII = 8).
Die Prototypen sollen sein:string IntToRoman(int number); int RomanToInt(string romanNumber);
- Unit Tests
Erstellen Sie für die obigen beiden Aufgaben Unit-Tests. Lesen Sie dazu Verifying Code by Using Unit Tests. - Wörter suchen
Laden Sie sich die gepackte Wortliste herunter. Die Datei enthält nur eine Textdateideutsch.txt
, welche eine sortierte Liste von Wörtern, jeweils ein Wort in einer Zeile enthält (stammt von Firefox). Achtung: der Zeilenumbruch besteht nur aus'\n'
(Unix) und die Kodierung ist UTF-8.
Schreiben Sie eine MethodeGetWordList(string word)
, welche eine Liste von Worten liefert, die mit dem Stringword
beginnen.
Implementieren Sie sowohl lineare als auch binäre Suche und vergleichen Sie diese.
Verwenden Sie unterschiedliche Datenstrukturen (die zwei Typen von C#-Arrays und Collections) und vergleichen Sie die Lösungen punkto Laufzeit und Speicherbedarf.
Schreiben Sie eine weitere MethodeGetWordListEnding(string ending)
, welche eine Liste von Worten liefert, die mitending
endet. Ist hier binäre Suche möglich? - Unit Tests
Erstellen sie für die obige Aufgabe passende Unit Tests. - Laufzeitmessungen
Schreiben Sie ein Programmruntime
, welches die Laufzeiten der unterschiedlichen Implementierungen vonGetWordList(string word)
undGetWordListEnding(string ending)
ermittelt. Verwenden Sie die Wortanfänge "Distanz", "Erdbi" und "Finanzind" und die Endungen "gulierung", "dcomputer" und "chsdor".
Das Programm soll bei jedem Test folgende Informationen ausgeben:
Anzahl der gefundenen Worte und die Laufzeit.
Bilden Sie die Mittelwerte für die einzelnen Methoden (binäre/sequentielle Suche) bzw. die Implementierungen mit Arrays oder Collections.
Wie sind die Ergebnisse zu interpretieren? - 25 im Quadrat
Auf zwölf quadratischen Kärtchen sind die Zahlen 1 bis 12 gedruckt. Diese Kärtchen sollen so in einem Quadrat angeordnet werden, sodass ein 4x4-Quadrat in der Mitte frei bleibt (die Kantenlänge beträgt also 4).
- Ermitteln Sie eine Anordnung der Karten, sodass die Summe aller Karten einer Kante (4 Karten) jeweils den Wert 25 ergibt.
- Ermitteln Sie die Anzahl der Lösungen.
- Ermitteln Sie alle Lösungen (es sind sehr viele!).
Montag, 7. Oktober 2013
Aufgabe Python Kommandozeile, Textdateien lesen (POS1: 2BHIF)
Schreiben Sie folgendes Pythonprogramm:
cut.py
, welches einen bestimmten Zeilenbereich der Eingabe (Text) ausgibt (und den Rest unterdrückt). Die Eingabe kann aus beliebig vielen Dateien, die als Kommandozeilenparameter angegeben werden, oder aus der Standardeingabe (Tastatur oder Eingabe umlenkung mit <) bestehen.
Für jede Datei soll dann der als Optionen angegebene Zeilenbereich ausgegeben werden.
Aufruf
cut.py [-f N] [-t N] [-h] [file]...Falls keine Optionen angegeben werden, dann sollen die ersten 10 Zeilen jeder Datei (oder Standardeingabe) ausgegeben werden.
Optionen
- -f N
- Der Zeilenbereich beginnt ab Zeile N. Entfällt diese Option, dann beginnt die Ausgabe bei der ersten Zeile.
- -t N
- Der Zeilenbereich endet bei Zeile N (inklusive). Entfällt diese Option, dann endet die Ausgabe bei der Zeile 10.
- -h
- Es soll eine kurze Hilfe mit ihrem Namen ausgegeben werden. Zum Beispiel:
cut.py [-f N] [-t N] [file]... -f N ... from line N (default 1) -t N ... to line N (default 10) Print given lines of each file. (c) 2012, Harald R. Haberstroh
Es soll keine weitere Ausgabe erfolgen!
Beispiel
Gegeben sei die Datei1.txt
mit dem Inhalt (Zeilennummern nur zur Orientierung, nicht Inhalt der Datei):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, |
hh@knuth:~$ cut.py -h cut.py [-f N] [-t N] [file]... -f N ... from line N (default 1) -t N ... to line N (default 10) Print given lines of each file. (c) 2012, Harald R. Haberstroh hh@knuth:~$ cut.py 1.txt Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo hh@knuth:~$ cut.py -f 3 -t 12 1.txt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. hh@knuth:~$ cut.py -t 3 1.txt Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
Beispiele für fehlerhafte Angaben
Eine ungültige Option wird angegeben:hh@knuth:~$ cut.py -x 23 1.txt
-t
:
hh@knuth:~$ cut.py -f 23 -t 1.txt
hh@knuth:~$ cut.py -f 23 -t 12 1.txt
hh@knuth:~$ cut.py doesntexist.txt
Labels: Aufgabe, POS1-2, Python
Abonnieren Posts [Atom]