Beispiele für Strings

Ähnliche Dokumente
Mathematische Anwendersysteme Einführung in MuPAD

Einführung in MATLAB Blockkurs DLR:

2 Teil 2: Nassi-Schneiderman

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Java: Eine kurze Einführung an Beispielen

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Programmierkurs Python I

Syntax der Sprache PASCAL

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

Zweiter Teil des Tutorials. Workspace M-files Matrizen Flow Control Weitere Datenstrukturen Gemeinsames Beispiel erarbeiten

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

INFORMATIK FÜR BIOLOGEN

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Programmierkurs Python I

5. Übung - Kanalkodierung/Programmierung

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Java Anweisungen und Ablaufsteuerung

Intensivübung zu Algorithmen und Datenstrukturen

2.2 Einfache Datenstrukturen

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Grundlagen der Programmierung

Programmierkurs Python I

Datentypen: integer, char, string, boolean

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

WS2018/ Oktober 2018

Java I Vorlesung Imperatives Programmieren

Arithmetik in der tcsh

Algorithmen und ihre Programmierung -Teil 2-

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Vorkurs Informatik WiSe 16/17

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Javakurs für Anfänger

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Einführung in die Programmierung mit VBA

Informatik I Übung, Woche 40

Vorkurs Informatik WiSe 17/18

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Martin Unold INFORMATIK. Geoinformatik und Vermessung

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi

Einstieg in die Informatik mit Java

Programmiertechnik 1 FOR-SCHLEIFEN

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Übersicht Shell-Scripten

3. Grundanweisungen in Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Steuerung von Programmabläufen. Lehrstuhl für Angewandte Mathematik Sommersemester Mai und 15. Mai 2008

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

Tag 2 Repetitorium Informatik (Java)

Programmiertechnik 1 FOR-SCHLEIFEN

WS2017/ Oktober 2017

4.4 Imperative Algorithmen Prozeduren

System.out.println("TEXT");

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Algorithmen und ihre Programmierung

2 Programmieren in Java I noch ohne Nachbearbeitung

Arbeitsblätter für Algorithmierung und Strukturierung

Mathematische Anwendersysteme Einführung in MuPAD

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Einstieg in die Informatik mit Java

WS2018/ Oktober 2018

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Java Ablaufsteuerung (Beispiele)

Einfache Bedingte Ausführung

Informatik I Übung, Woche 40

Kontrollstrukturen und Logik

Kontrollstrukturen. Verzweigungen Einfache Mehrfache Wiederholungen Eine Sequenz durchlaufen Wiederhole bis Solange. Tue

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Grundlagen der Programmierung

Einstieg in die Informatik mit Java

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

if ( Logischer Operator ) { } else { Anweisungen false

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

C.3 Funktionen und Prozeduren

Annehmende Schleife do while

Programmieren mit statistischer Software

MuPAD: Bezeichner, Zuweisungen, Datentypen, Objekte,... MuPAD: Zerlegen von Objekten in seine Bestandteile. Ein erstes Beispiel

KOP / FBS - Programmierung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Transkript:

Mathematische Anwendersysteme Einführung in MuPAD Tag 9 Programmieren in MuPAD 24.2.2005 Gerd Rapin Übersicht Strings Bedingungen Schleifen Gültigkeitsbereich von Variablen Umgang mit Strings Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.1/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.2/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.3/?? Strings Zeichenketten (engl. strings) sind eine geordnete Aneinanderreihung von Zeichen. Zeichen sind z.b. Buchstaben, Ziffern, Sonderzeichen,... Mit ihnen kann man in MuPAD Texte gestalten. Sie sind wichtig für die Ausgabe der Ergebnisse. Sie haben den Datentyp DOM_STRING. Sie werden innerhalb der Begrenzer " angegeben. Beispiele für Strings >> text1:="dies ist ein String." "Dies ist ein String." >> text2:="dies ist noch ein String." "Dies ist noch ein String." >> domtype(text1) DOM_STRING Zugriff Mit dem Indexoperator können einzelne Zeichen einer Zeichenkette extrahiert werden oder auch geändert werden. >> text1[0], text1[3], text1[4] "D", "s", " " >> text1[3]:="i": text1 "Diei ist ein String." Die extrahierten Teile sind wieder Strings. Wichtig: Der Index beginnt bei. Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.4/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.5/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.6/??

Operationen für Strings I Zusammenhängen von Strings > A:="Letzte ": B:="Vorlesung": A.B "Letzte Vorlesung" Ausgabe von Zeichenketten >> print(unquoted,a.b) Letzte Vorlesung Strings können nicht addiert oder multipliziert werden. >> A+B Error: Illegal operand [_plus] Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.7/?? Operationen für Strings II length gibt die Anzahl der Zeichen in einer Zeichenkette an. > a:=length(a.b); A.B[a] 16 Error: Invalid index [string] Beliebige MuPAD-Objekte können durch expr2text in einen String verwandelt werden. >> expr2text(xˆ2+2), expr2text([1,2,3]) "xˆ2 + 2", "[1, 2, 3]" >> a:=expr2text("hallo"); a[0] "\"hallo\"" "\"" Weitere Befehle zur Manipulation von Strings findet man in der Bibliothek stringlib. Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.8/?? Anwendungen Geben Sie alle Bezeichner in alphabetischer Reihenfolge an! Erstellen Sie eine Liste aller Bezeichner! >> A:=map(anames(All),expr2text) >> L:=[op(A)] >> sort(l) Schreiben Sie eine Funktion, die eine Zeichenkette rückwärts berechnet. >> revers:= A->_concat(A[length(A)-i] $ i=1..length(a)) >> revers("hallo") "ollah" Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.9/?? Größter gemeins. Teiler (ggt) Implementierung Programmieren Berechnung des ggt von natürlichen Zahlen mit Hilfe des euklidischen Algorithmus Idee: Es gilt Algorithmus: Wiederhole, bis Ist Ist, so, so. für und. ggt:= proc(a,b) /* Bestimme den ggt von a und b */ begin while (a<>b) do if (a>b) then a:=a-b; else b:= b-a end_while; return(a); Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.10/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.11/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.12/??

Logische Ausdrücke Es gibt die drei logische (Boolschen) Werte, FALSE und UNKNOWN. Sie haben die Datentypen DOM_BOOL. Gleichungen, Ungleichungen oder Größenvergleiche (<,>,<=,>=) können durch bool zu oder FALSE ausgewertet werden. Logische Ausdrücke >> bool( 3 <= 4) >> bool( =) >> bool("as"<="b") >> bool(<>unknown) Verknüpfungen Logische Ausdrücke können durch logisches und (and), logisches oder (or) oder logisches nicht (not) miteinander verknüpft werden. >> and FALSE, or FALSE FALSE, >> and UNKNOWN, or UNKNOWN UNKNOWN, >> not, not UNKNOWN FALSE, UNKNOWN Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.13/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.14/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.15/?? Wahrheitstabellen Schleifen Schleifen II and FALSE UNKNOWN FALSE UNKNOWN FALSE FALSE FALSE FALSE UNKNOWN UNKNOWN FALSE UNKNOWN or FALSE UNKNOWN FALSE FALSE UNKNOWN UNKNOWN UNKNOWN UNKNOWN Wir kennen bereits Schleifen durch den $-Operator. Darüber hinaus gibt es aber noch das Konstrukt for bzw. end_for. for i from 1 to 4 do x:= iˆ2; print(unquoted, "Das Quadrat von",i,"ist",x) end_for Die Schleifenvariable durchläuft die Werte und. Dabei wird alles zwischen do und end_for für jedes einmal durchlaufen. Ergebnisse, die in jedem Schleifenschritt berechnet werden, werden nicht auf dem Bildschirm ausgegeben. Die Ausgabe wird durch den print-befehl erzielt.,, Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.16/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.17/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.18/??

Etwas Zahlentheorie Wir geben für die natürlichen Zahlen wieviele Zahlen Teiler haben. >> Liste:=[i $ i=1..1000]: >> anz_teiler:= n -> nops(numlib::divisors(n)) : >> Liste2:=map(Liste,anz_teiler): >> for i from 1 to 50 do print(i,nops(select(liste2, x -> (x = i)))) end_for: >> numlib::divisors(840) an, Alternative Schleifenkonstruktionen Schleifen abwärts zählen for j from 4 downto 2 do print(x,xˆj); end_for Schrittweite modifizieren for j from 3 to 10 step 2 do print(x,xˆj); end_for Repeat Eine andere Schleifenvariante ist die repeat-schleife: x:=1.1: repeat i:=x; x:=iˆ2; print(i,x) until x>100 end_repeat: Die Befehle zwischen repeat und until werden so lange wiederholt, bis die Bedingung (hier wahr wird. ) Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.19/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.20/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.21/?? while So ähnlich wie die repeat-schleife funktioniert die while-schleife. x:=2: while x<=100 do i:=x; x:=iˆ2; print(i,x) end_while: Die Befehle zwischen while und end_while werden so lange wiederholt, wie die Bedingung (hier ) wahr ist. Verzweigung Ein wichtiges Werkzeug jeder Programmiersprache sind Verzweigungen. Je nach Wert oder Bedeutung von Variablen werden unterschiedliche Befehle ausgeführt. In MuPAD gibt es das if-konstrukt und das case-konstrukt. Beispiel for i from 2 to 100 do if isprime(i) then print(i,"ist Primzahl") else print(i,"ist keine Primzahl") end_for: Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.22/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.23/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.24/??

if-konstrukt Die Verzweigung if hat die folgende Struktur: if Bedingung then Befehle1 else Befehle2 Ist die Bedingung wahr, so wird Befehle1 ausgeführt, ansonsten Befehle2. Befehle in den Befehlsfolgen sind durch : oder ; zu trennen. Der else Aufruf ist optional. Berechnung von Primzahlzwillingen T:=[]: anz:=0: for i from 2 to 10000 do if (isprime(i) and isprime(i+2)) then anz:=anz+1; T:=T.[[i,i+2]]; : end_for: print("anzahl = ",anz); Case Hat man eine Verzweigung mit mehreren Alternativen, so kann man entweder geschachtelte if Konstrukte verwenden, oder das Konstrukt case verwenden. case var of wert1 do.. of wert2 do..... otherwise... end_case Case funktioniert wie die switch Anweisung in C. Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.25/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.26/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.27/?? Erklärung Ist keines der of-zweige richtig, so wird die Befehlssequenz zwischen otherwise und end_case ausgeführt. Durch den Befehl break kann ein vorzeitiges Verlassen der case-anweisung bewirkt werden. Stimmt der Wert von var mit einem der Werte wert1, wert2 überein, werden von da an alle nachfolgenden Befehle ausgeführt (auch von anderen of). ( fall-through ) Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.28/?? Beispiel: Betrag /* Berechnen des Betrags für Zahlen */ betrag:=proc(a) begin case(domtype(a)) of DOM_INT do of DOM_RAT do of DOM_FLOAT do if a> 0 then y:=a: else y:=-a: : break; of DOM_COMPLEX do y:=sqrt(re(a)ˆ2+im(a)ˆ2); break; otherwise print("falscher Eingabetyp"); end_case: return(y); Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.29/?? Gültigkeit von Variablen Mit der Gültigkeit von Variablen ist die Bestandsdauer von Variablen bzw. der Werten dieser Variablen gemeint. Beim interaktiven Gebrauch von MuPAD sind alle Variablen global, d.h. die den Variablen zugewiesenen Werte bleiben für die gesamte Laufzeit von MuPAD erhalten bis sie geändert werden. Man kann auf die Variablen jederzeit zugreifen und die Werte der Variablen ändern. Daneben gibt es aber auch lokale Variablen, die nur innerhalb einer Prozedur gültig sind. Nach Beenden der Prozedur werden diese Variablen wieder gelöscht. Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.30/??

Gültigkeit von Variablen II In MuPAD sind in Prozeduren definierte Variablen standardmäßig global. Die interaktiv erstellten Variablen sind sowieso global. Mit dem Schlüsselwort local können in Prozeduren lokale Variablen erzeugt werden. local steht zwischen proc() und begin. Die lokalen Bezeichner sind vom Typ DOM_VAR (nicht wie erwartet DOM_IDENT). Die Input-Argumente von Prozeduren sind lokale Variablen. Goldene Regel Die Verwendung von globalen Variablen in Prozeduren ist schlechter Programmierstil und sollte vermieden werden. Beispiele Ein Beispiel mit globalen Variablen >> a:=b: f:=proc() begin a:=1+aˆ2: >> f();f();f(); Ein Beispiel mit lokalen Variablen >> a:=b: f:=proc() local a; begin a:=2 >> f(), a Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.31/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.32/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.33/?? Rekursives Beispiel Berechnung der Fakultät /* Berechnung der Fakultät */ fakultaet := proc(n) begin if domtype(n)=dom_int then if n=1 then return(1) else n*fakultaet(n-1) else print("falscher Datentyp"); Symbolische Rückgabe >> fakultaet(9), x!; fakultaet(x) 362880, fact(x) "Falscher Datentyp" Viele Systemfunktionen wie fact, geben den Prozeduraufruf symbolisch zurück, wenn er nicht auszuwerten ist. Die Auswertung kann dann später erfolgen. Fakultät II /* Berechnung der Fakultät */ fakultaet2 := proc(n) begin if testtype(n,type::nonnegint) then if n=1 then return(1) else n*fakultaet2(n-1) else return(procname(args())); Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.34/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.35/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.36/??

Erklärungen Durch args() erhält man die Folge der Argumente. args(0) ist die Anzahl der Argumente. Durch args(i) erhält man das -te Element. Mit den obigen Befehlen kann man Prozeduren mit einer beliebigen Anzahl von Argumenten programmieren. procname ist der Name der Prozedur. Testen des Typs Durch den Aufruf testtype(objekt, Typenbezeichner) wird getestet, ob ein Objekt dem Typenbezeichner entspricht. Rückgabewert ist oder FALSE. Prinzipiell kann man auch domtype zum Überprüfen des Typs benutzen. Die Typenbezeichner sind aber differenzierter. Übersicht der verfügbaren Typenbezeichner erhält man durch? Type. Beispiele >> testtype(sqrt(3),type::real) FALSE >> testtype(float(sqrt(3)),type::real) >> testtype(3,type::real) >> select([ i $ i=100..120], testtype,type::prime) [101, 103, 107, 109, 113] Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.37/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.38/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.39/?? Mandelbrot-Menge Die Mandelbrot-Menge ist die Menge von Punkten bei denen die Folge, die durch definiert ist, beschränkt ist. Programm - Mandelbrot mandel:=proc(x,y) local m,a,b,t,max_it; begin if not (testtype(x,type::real) and testtype(x,type::real)) then procname(x,y) else MAX_IT:=150; m:=0; a:=x; b:=y; while (sqrt(xˆ2+yˆ2)<2 and m<max_it) do t:=x; x:=a+xˆ2-yˆ2; y:=b+2*t*y; m:=m+1; end_while; Plot - Mandelbrot return(float(m/max_it)); ; Plotten plotte_mandel:=proc() begin mandelhill:=plot::function3d( mandel(x,y),x=-2.2..1.2, y=-1.5..1.5, Grid=[100,100]); plot(mandelhill); Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.40/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.41/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.42/??

Programmierregeln Falls möglich, nur lokale Variablen benutzen. Programme vollständig kommentieren. Das heißt zum einen das eine Kommentarzeile zu Beginn steht, was das Programm macht und wieviele und welche Eingabeparameter es erhalten darf und was die Prozedur zurückgibt. Zusätzlich sollten auch alle wesentlichen Operationen kommentiert werden. Werte explizit mit return() zürückgeben. Programme übersichtlich gestalten, z.b. Schleifen oder Verzweigungen einrücken. Letztes Beispiel I gadisch:=proc(x,basis) /*--------------------------------------------------- Berechnung der g-adischen Darstellung einer natürlichen Zahl x und einer Basis b Rückgabe des Ergebnis als Liste! ----------------------------------------------------*/ local T,T_r,i; /* lokale Variablen*/ begin /* Beginn lokale Prozedur */ /* Abfangen der Eingabe */ if domtype(x)<>dom_int or domtype(basis)<>dom_int then print("falscher Datentyp"); return() ; if (x<0) or (basis<1) then print("falsches Vorzeichen"); return() ; Letztes Beispiel II T:=[]; /* leere Liste */ /* Beginn Schleife */ while x>0 do T:=T.[x mod basis]; print(unquoted,expr2text(x)." : ".expr2text(basis )." =".expr2text(x div basis)." Rest ".expr2text(x mod basis)); x:=(x div basis); end_while; /* Umkehren der Liste */ T_r:=[(T[nops(T)-i+1]) $ i=1..nops(t)]: /* Rückgabe der Liste */ return(t_r); Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.43/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.44/?? Gerd Rapin Mathematische Anwendersysteme: Einführung in MuPAD p.45/??