Native Zeichenketten (C-Strings)... sind in C/C++ char-arrays. D.h. die Deklaration char msg[80]; kann Zeichenketten bis zur Länge 79 enthalten. (Direkte Zuweisungen wie msg="hallo!" sind jedoch nicht möglich, stattdessen müsste strcpy(msg,"hallo!") aus <cstring> benutzt werden.) Gespeichert als: H a l l o! 0... End-Of-String-Markierung Bei z.b. der Ausgabe mit cout << "And the winner is: " << name << "\n"; wird das Ende der Zeichenkette durch die 0-Markierung automatisch erkannt und berücksichtigt.
Felder aus C-Strings Spezialsyntax für einen C-String unspezifizierter Maximallänge: char *s; reserviert keinen Speicherplatz für die chars! Beispiele für C-String-Felder: char s[4][80]; 4 Strings (s[0]... s[3]) à maximal 79 Zeichen char *s[10]; 10 C-Strings unspezifizierter Max.länge char *s[]; unspez. Anzahl von C-Strings unspez. Maximallänge Populäre Anwendung der letzten Deklaration: int main(int argc, char *argv[]) {... } Oft zu finden als Formalparameter in Funktionen, so dass der Funktionsaufrufende für die Übergabe eines echten C-Strings Sorge trägt.
Kommandozeilen-Parameter Bei Deklaration int main(int argc,char *argv[]) und dem Starten mit./a.out tic tac toe erhalten wir die folgende Zuweisungen der int-variablen argc und des C-String-Feldes argv: argc 4 argv[0] a.out argv[1] tic argv[2] tac argv[3] toe Hier wurde ohne -o compiliert.
Übergabe von Zahlen Obacht: Der Programm-Aufruf./a.out 0.01 liefert argv[1] "0.01", aber "0.01" 0.01 Zur Konvertierung C-String Zahl können zwei Funktionen aus <cstdlib> benutzt werden: atof("0.01") 0.01 (als double) atoi("4711") 4711 (als int)
T-Übung 5 Ändern Sie Ihr Sieb-Programm aus T-Übung 3: Die Obergrenze N soll nicht mehr im Programm fest vorgegeben (oder über cin eingelesen) werden, sondern als (erster) Kommandozeilenparameter übergeben werden (atoi(argv[1])). Wurde beim Aufruf gar kein Kommandozeilenparameter angegeben (argc < 2) dann soll eine Fehlermeldung ausgegeben und das Programm abgebrochen (return 1;) werden.
Bedingte Compilierung: #ifdef Schließt man Code-Teile in #ifdef Schalter : #endif bzw. #ifdef Schalter : #else : #endif ein, so wird der Code im #if-zweig nur compiliert, wenn das als Schalter gewählte Symbol definiert wurde. Das kann mit einem vorangehendem #define erfolgen oder mit der Option -D beim Compilieren.
#ifdef-beispiel Innerhalb einer entsprechenden Schleife: #ifdef TRAPEZ v=v+(f(a+i*h)+f(a+(i+1)*h))/2; #else /* Rechteck */ v=v+f(a+i*h); #endif Mit g++ int.c -o int.exe -Wall sieht der Compiler nichts von der Trapezformel, mit g++ int.c -o int.exe -Wall -DTRAPEZ dagegen nichts von der Rechteckformel. Die Entscheidung findet während des Compilierens statt, nicht während des Programmlaufs.
xmgrace Entwicklung der Version 5 stagniert nahezu, Version 6 steckt seit 2006 im Alpha-Stadium, aber aufbauend auf Version 5.1.22 gibt es die neuen Forks QtGrace GraceGTK auch mit fertigen Windows-Binaries. xmgrace ist auch in der Linux-artigen Umgebung Cygwin für Windows verfügbar. Version 5.1.22 in 2008, Version 5.1.23 in 2012
Animierte Plots mit xmgrace Grundprinzip: Mittels der Option -pipe wird der übliche interaktive Modus ersetzt durch fortlaufendes Einlesen von Daten und xmgrace-@-befehlen von stdin. Im eingelesenen Datenstrom werden dann wiederholt die vorherigen Daten gelöscht (@kill), durch neue ersetzt, der Plot neu gezeichnet (@redraw) und ggf. kurz gewartet (@sleep). Beispielprogramm: http://pls.physlab.uni-due.de/tutorium/aniplot.cpp Etwas unpraktisch: Während die Befehle/Daten aus dem Eingabestrom abgearbeitet werden, ist gar keine interaktive Benutzung möglich, auch z.b. das Schließen oder Vergrößern/Verkleinern des Fensters nicht. Benötigte Einstellungen müssen vorher gesetzt werden. -geometry BreitexHöhe setzt die Fenstergröße. -world x min y min x max y max setzt die Achsenskalen. -autoscale none verhindert, dass nach Ende des Eingabestroms ein Autoscale durchgeführt wird. -noask verhindert, dass das Beenden von xmgrace (während -pipe nur noch über <Strg>-C im Kommandofesnter bzw. C-g C-g im Emacs möglich, nicht mehr über den -Knopf) bestätigt werden muss.
T-Übung 6 Ändern Sie Ihr Programm aus der Mechanik-Computeraufgabe 3 b) so ab, dass die Entwicklung des Phasenraumvolumens (401 Punkte) in jedem Zeitschritt xmgrace-konform ausgegeben wird und so dynamisch dargestellt werden kann.