Uebungen  Exercices

14. Input und Output
 Input et output

Die Gliederung dieses Kurses folgt in groben Zügen dem Buch von Nancy Blachman: A Practical Approach.... 
Hinweis: Kapitel 14 lesen!
 L'articulation de ce cours correspond à peu près à celle du livre de Nancy Blachman: A Practical Approach.... 
Indication: Lire le chapitre 14.
WIR94/98/99 // Copyright Rolf Wirz

Aufgabe 1    Problème 1

Studiere die nachfolgenden Beispiele und den Befehl Input:
 Etudie les exemples suivants et l'ordre Input

Remove[MeinReadList];
MeinReadList[fileName_String, 
		thing_:Expression]:= 
	Module[{file, expr, list = {}},
		file = OpenRead[fileName];
		If[ file === $Failed, Return[list] ];
		While[ True,
			expr = Read[file, thing];
			If[ expr === EndOfFile, Break[] ];
			AppendTo[list, expr]
		];
		Close[file];
		list
	];

MeinReadList["C:\work\AAFdaten.txt",  Number]

MeinReadList["f:\Mathe/Daten/AAAdaten",  Number]

Remove[MeinReadList];
MeinReadList[thing_:Expression] :=
	Module[{file, fileName, expr, list = {}},
		fileName = Input["Bitte einzulesende 
		Datei in Anführungszeichen angeben.
		(Das File C:\work\AAFdaten.txt ... 
		sollte vorhanden sein.) -- S.v.p 
		enterer le fichier à lire entre 
		parenthèses.(Le fichier 
		C:\work\AAFdaten.txt doit exister.)"];
		file = OpenRead[fileName];
		If[ file === $Failed, Return[list] ];
		While[ True,
			expr = Read[file, thing];
			If[ expr === EndOfFile, Break[] ];
			AppendTo[list, expr]
		];
		Close[file];
		list
	];
	MeinReadList[Number]

Aufgabe 2    Problème 2

Schreibe eine Funktion, mit der sich das Multiplizieren der Zahlen von 1 bis 12 im Kopf trainieren und korrigieren lässt!
 Ecris une fonction par laquelle on peut exercer et corriger le calcul mental de la multiplication des nombres de 1 à 12 !

Beispiel einer Lösung:
 Exemple d'une solution:

Remove[mult];
mult:=
	Module[{faktor1, faktor2,
	        korrektur, resultat},
	        
	        Clear[resultat];
	        resultat = ".";	        

	  While[ resultat != "y" || resultat !
	  		= "Y" || resultat != "<y>" || 
	  		resultat != "<Y>", faktor1 = 
	  		Random[Integer,{1,12}]; faktor2 
	  		= Random[Integer,{1,12}];
			korrektur = faktor1 faktor2;
			Print["Was gibt ",faktor1,
			" mal ",faktor2,"?"];
			resultat = Input[
	"Bitte Resultat eingeben, oder beenden 
	mit dem Buchstaben y. -- S.V.P entrer le 
	résultat ou terminer à l'aide de y."];
		 If[ resultat == korrektur, 
		        Print[resultat, 
		        " ist richtig, bravo! --- 
		        est juste, bravissimo!"],
			    Print[resultat,
			 	"? - Richtig ist --- 
			 	résultat juste:",korrektur]
			]
		  ];
		  Print["Ende"]
	];
mult

mult

Aufgabe 3    Problème 3

Uebersetze die folgenden Ausdrücke mit Hilfe von Mathematica in C und in Fortran:
  Traduis les expressions suivantes à l'aide de Mathematica dans C et dans Fortran:
a) D[z Exp[z] 
b) a^x 
c) Sin[Pi/5]

Lösung:    Solution:

Map[{CForm[#], FortranForm[#]}&,
{D[z Exp[z], z], a^x, Sin[Pi/5]}]

Aufgabe 4    Problème 4

Schreibe ein C-Programm, ein Fortran-Programm oder ein TeX-Programm, in dem Splice zur Anwendung kommt.
  Ecris un programme C, un programme Fortran ou un Programme TeX, dans lequel on applique Splice

Ein Beispiel: Manipulation von Sourcecode bei TeX
Un exemple: Manipulation de Sourcecode dans TeX

Im folgenden Beispiel wird gezeigt, wie in den Source-Code eines externen Programms (hier in TeX) direkt Mathematica-Ausdrücke eingesetzt und dann von Mathematica übersetzt werden kðnnen. Der externe Programmteil befindet sich im File C:\work\AAATeX.txt. Das übersetzte Programm wird in C:\work\AAA.tex gespeichert !!!!!!!
 Dans l'exemple suivant on montre comme on peut mettre directement des expressions de Mathematica dans le sorce-code d'un programme extérieur (ici dans TeX), ensuite elles peuvent être traduites par Mathematica. La partie extérieure du programme se trouve dans le fichier C:\work\AAATeX.txt. Le programme traduit dans le fichier C:\work\AAA.tex !!!!!!!!

\(TeXForm[Integrate[Sin[2\ x\  + \ 3], x]; \ Sin[x]\  == \ 4\ /\ Tan[y]; 
        \ Print["Hallo!"]]\  >> \ C:\work\AAATeX.mtex\)

!!C:\work\AAATeX.txt

CopyFile["C:\work\AAATeX.txt", "C:\work\AAATeX.mtex"]

\(\(!! C:\work\AAATeX.mtex\)\)

\(TeXForm[MatrixForm[{{1, 2}, {3, 4}}]]\  >> \ C:\work\AAATeX.mtex\)

\(\(!! C:\work\AAATeX.mtex\)\)

Splice["C:\work\AAATeX.mtex"]

Splice["f:\Mathe/Daten/AAA.mtex"]

\(\(!! C:\work\AAATeX.tex\)\)

!!f:\Mathe/Daten/AAA.tex (*win31...*)

Aufgabe 5    Problème 5

Gegeben sei b[c, d]. Schreibe einen Befehl, der c als Subscript und d als Superscript wiedergibt!
  Soit donné b[c, d]. Ecris un ordre qui rend c comme subscript et d comme superscript.

Eine Lðsung:    Une solution:

?Format

Format[b[c_,d_]] := 
  SequenceForm[Subscripted[b[c]],
  Superscript[d]];
b[c, d]

b[3, 5]

c[3, 5]

Was ist passiert?
  Que s'est-il passé?

Aufgabe 6    Problème 6

Schreibe eine Funktion zur Berechnung der Glieder der Fibonacci-Folge bis zum n-ten Glied und speichere die Glieder sowie die Funktion in ein File.
  Ecris une fonction pour calculer les membres de la suite de Fibonacci jusqu'au n-ième membre et mémorise les membres ainsi que la fonction dans un fichier.

Beispiel für das Programm
 Exemple pour le programme

Remove[fib];
fib[0]  = 1;
fib[1]  = 1;
fib[n_Integer]  = fib[n-1]+fib[n-2];
fib[n_]  = 0 ;
?fib

{fib[0],fib[1],fib[2],fib[3],fib[4],fib[5],
  "Test",fib[1.3]}

fib[10]

Speichern der Funktion
 Mémoriser la fonction

\(Save["AAAfib", \ fib]; 
\(! \(! AAAfib\)\)\)

!! AAAfib

<< AAAfib

Save["f:\Mathe/Daten/AAA_fib", fib];
!!f:\Mathe/Daten/AAA_fib   (*win31...*)

Erst rechnen und dann speichern
 D'abord calculer et ensuite mémoriser

\(Table[fib[n], \ {n, \ 0, \ 10}]\  >> C:\work\AAAfib\)

\(\(!! C:\work\AAAfib\)\)

Table[fib[n], {n, 0, 10}] >> 
"f:\Mathe/Daten/AAA_fib";
!!f:\Mathe/Daten/AAA_fib (*win31...*)

Ein Programm zum direkten Speichern der Glieder
 Un programme pour mémoriser directement les menbres

Remove[schreibFib];

schreibFib[fileName_String, zahl_Integer] :=
	Block[{ neufile = OpenWrite[fileName], 
		n = 0},
		While[n<=zahl,
		WriteString[neufile,fib[n]];
		WriteString[neufile,"\t"]; 
		n++];
		(*WriteString[neufile,"\t"];*)
		Close[neufile]];

\(\(	\(schreibFib["f:\Mathe/Daten/AAA_fib", \ 12]; 
    \)
 (*win31 ... *) \)\)

\(\(\(!! f:\Mathe/Daten/AAA_fib\ \) (*win31 ... *) \)\)

\(\(	\(schreibFib["C:\work\AAAfib", \ 12]; \)\)\)

\(\(!! C:\work\AAAfib\)\)

"Putzmaschine" einsetzen
 Employer la "machine de nettoyage"

Remove["Global`@*"]