• Keine Ergebnisse gefunden

– Praktikumsaufgabe 6 –

N/A
N/A
Protected

Academic year: 2021

Aktie "– Praktikumsaufgabe 6 –"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Betriebssysteme I

– Praktikumsaufgabe 6 –

Thema: Numerische Berechnungen im Shellskript, Brace Expansion

Zielstellung: Erlernen des Einsatzes einfacher numerischer Ausdr¨ucke und Berechnungen in der Bash, Verwendung von Feldern, Beherrschung des Mechanismus der Ersetzung ge- schweifter Klammern (Brace Expansion)

1. a) Schreiben Sie ein Shellskript, das die Grundrechenarten mit 2 Operanden be- herrscht. Der zu berechnende Ausdruck soll in Infixschreibweise in Form von drei Parametern ¨ubergeben werden. Der Aufruf sieht also etwa so aus:

robge@isys121:~> ./calc 12345679 \* 72 888888888

Das Skript soll die G¨ultigkeit des Operatorsymbols testen, also nur die Zeichen +,-,*,/ zulassen, alle anderen sollten mit einer deskriptiven Fehlermeldung ab- gewiesen werden. L¨osungen der Art

#!/bin/bash echo $(($1$2$3))

sind also unterkomplex.

b)* Erweitern Sie das Skript um einen Potenzierungsoperator, der das Caret-Symbol (^) als Operationssymbol nutzt. Nutzen Sie dabei nicht den Potenzierungsopera- tor der Bash!

robge@isys121:~> ./calc 2 ^ 31 2147483648

Hinweise:

• Variablen in der Bash sind dynamisch getypt, sie nehmen je nach initialer Zuwei- sung Zeichenketten oder Integer-Werte auf.

• Arithmetische Operationen (auch Zuweisungen!) m¨ussen entweder in(())stehen, oder ihnen muss das Schl¨usselwortletvorangestellt sein.let sum=$a+$bist also

¨aquivalent zu ((sum=$a+$b)).

• Achtung: Bei let d¨urfen keine Leerzeichen zwischen Operanden und Operator stehen

• Das Symbol f¨ur die Multiplikation (’*’) setzt sofort die Dateinamensexpansion in Gang; es muss sowohl bei der ¨Ubergabe als Parameter als auch innerhalb des Shellskriptes gesondert behandelt werden.

2. a) Schreiben Sie ein Shellskript, das die ersten 100 Fibonacci-Zahlen ausgibt. Die Reihe ist folgendermaßen definiert:

fib(n) =

0 : n= 0

1 : n= 1

fib(n−1) + fib(n−2) : n≥2

©Robert Baumgartl, 2008-20 – 1 – 9. Dezember 2021

(2)

Betriebssysteme I

Literatur: http://de.wikipedia.org/wiki/Fibonacci-Folge

b)* Implementieren Sie ein Shellskript, das zu einem gegebenen n die zugeh¨orige Fibonacci-Zahl ermittelt. Nutzen Sie eine Funktion, die rekursiv gerufen wird.

3.* Schreiben Sie ein Shellskript, das das Sieb des Eratosthenes implementiert. Schreiben Sie dann ein C-Programm und ermitteln Sie den Geschwindigkeitsgewinn, indem Sie die Zeit f¨ur das Durchsuchen der Zahlen von 1 bis 1.000.000 f¨ur beide Versionen ermitteln.

Hinweis:Sie ben¨otigen f¨ur den Algorithmus ein eindimensionales Array, was die Bash interessanterweise bietet.

Literatur: http://de.wikipedia.org/wiki/Sieb des Eratosthenes

4. Zur flexiblen Generierung von Listen kennt die Shell den Mechanismus der Brace Ex- pansion. Innerhalb von geschweiften Klammern angegebene und durch Komma ge- trennte Morpheme werden kombiniert mit den außerhalb der Klammer stehenden Mor- phemen. Der Mechanismus erkl¨art sich am besten mit einigen Beispielen:

robge@ipaetz2:~> echo B{ie,oh,ir,aumaschi}ne Biene Bohne Birne Baumaschine

robge@ipaetz2:~> echo {a,b,c,d}{1,2,3,4}

a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4 d1 d2 d3 d4 robge@ipaetz2:~> echo {a..d}{1..4}

a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4 d1 d2 d3 d4 robge@ipaetz2:~> cp foo.{txt,bak}

robge@ipaetz2:~> ls foo*

foo.bak foo.txt

Schreiben Sie (kurze) Brace-Ausdr¨ucke zur Generierung

a) aller Zeichenketten, die aus vier Kleinbuchstaben bestehen b) aller Zeichenketten, die aus 1-3 Buchstaben bestehen

c) aller Rechner der Labore 136c und 146a (isys101 . . . isys121, isys6, isys8, isys10 . . . isys29),

d)* bb bbbb aa aabb aabbbb aaaa aaaabb aaaabbbb e) Was generiert der Ausdruck b{ar{d,n,k},ed}s?

©Robert Baumgartl, 2008-20 – 2 – 9. Dezember 2021

Referenzen

ÄHNLICHE DOKUMENTE

W¨ ahlen Sie jeweils Teilmengen von R so als Definitionsbereich und Zielbereich aus, dass durch die Zuordnung x → x 2 + x − 6 eine weder injektive noch surjektive Funktion,

– Two regular expressions may be concatenated; the resulting regular expression matches any string concatenating two substrings that match the subexpressions. – Two regular

– Auch f¨ur komplexere Strukturen als regul¨are Sprachen – G¨angig f¨ur die Beschreibung von Programmiersprachen.. Beispiel: Auszug der Grammatik

Du kannst nach literalen Zeichenketten suchen und weisst, dass bei regul¨ aren Aus- dr¨ ucke standardm¨ assig Gross- und Kleinschreibung unterschieden werden.. Du kannst regul¨

Im Folgenden werden die beiden Pre- und Post-Operatoren innerhalb etwas komplexerer Ausdr¨ ucke verwendet.. Hinweis: Bei der

Im folgenden Programm haben sich in den logischen Ausdr¨ ucken wieder ein paar kleine Fehler eingeschlichen. Die nachfolgende Ausgabeanweisung (printf()) gibt immer an, f¨ ur welche

Da rechts aber eine Variable steht, k¨ onnte man die Ausd¨ ucke schachteln, denn der Wert einer Zuweisung ist das Ergebnis. Das ++ bezieht sich auf j, i wird um den neuen Wert von

Welche Klammern sind f¨ ur das Einklammern von arithmetischen und logischen Ausdr¨ ucken in der Programmiersprache C erlaubt. (): ja []: nein