Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
public:wettbewerbe:getconnected:crashkurs [2010-02-09 11:00] ignaz angelegt |
public:wettbewerbe:getconnected:crashkurs [2010-02-09 13:09] (aktuell) ben |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Crashkurs Kompileren und Ein-/Ausgabe mit C, C++ und Java ====== | ====== Crashkurs Kompileren und Ein-/Ausgabe mit C, C++ und Java ====== | ||
- | ===== Compilieren auf der Console ===== | + | ===== Kompilieren auf der Console ===== |
Zu erst öffnet man das home-Verzeichnis (Orte => Persönlicher Ordner) und legt ein neues Verzeichnis an (Datei => Ordner anlegen). Unter Linux muss man auf die Groß- und Kleinschreibung achten. Leerzeichen in Namen machen auf der Console Probleme. Es ist daher sinnvoll Datei- und Verzeichnisnamen immer klein zu schreiben und ohne Leerzeichen. | Zu erst öffnet man das home-Verzeichnis (Orte => Persönlicher Ordner) und legt ein neues Verzeichnis an (Datei => Ordner anlegen). Unter Linux muss man auf die Groß- und Kleinschreibung achten. Leerzeichen in Namen machen auf der Console Probleme. Es ist daher sinnvoll Datei- und Verzeichnisnamen immer klein zu schreiben und ohne Leerzeichen. | ||
Zeile 9: | Zeile 9: | ||
Zum Compilieren speichert man zuerst seinen Quellcode ab und öffnet dann eine Console (Anwendungen => Systemwerkzeuge => Terminal). In der Console sollte etwas von der Art | Zum Compilieren speichert man zuerst seinen Quellcode ab und öffnet dann eine Console (Anwendungen => Systemwerkzeuge => Terminal). In der Console sollte etwas von der Art | ||
- | name@rechner(~)$ | + | <code>name@rechner(~)$</code> |
zu sehen sein. Vor dem ``$`` Zeichen sieht man den aktuellen Pfad in runden Klammern. ``~`` bezeichnet das Home-Verzeichnis. Mit | zu sehen sein. Vor dem ``$`` Zeichen sieht man den aktuellen Pfad in runden Klammern. ``~`` bezeichnet das Home-Verzeichnis. Mit | ||
- | cd foo | + | <code>cd foo</code> |
wechselt man in das Unterverzeichnis foo des aktuellen Pfads. (Man kann auch einen absoluten Pfad angeben, hier sollte man aber beachten dass / als Trennzeichen benutzt wird.) Zum Compilieren wechselt man in das Verzeichnis wo die Quelldateien sind. | wechselt man in das Unterverzeichnis foo des aktuellen Pfads. (Man kann auch einen absoluten Pfad angeben, hier sollte man aber beachten dass / als Trennzeichen benutzt wird.) Zum Compilieren wechselt man in das Verzeichnis wo die Quelldateien sind. | ||
Zeile 19: | Zeile 19: | ||
Um C Programme zu übersetzen gibt man | Um C Programme zu übersetzen gibt man | ||
- | gcc -Wall -O2 foo.c | + | <code>gcc -Wall -O2 foo.c</code> |
ein. C++ Programme werden sehr ähnlich übersetzt. | ein. C++ Programme werden sehr ähnlich übersetzt. | ||
- | g++ -Wall -O2 foo.cpp | + | <code>g++ -Wall -O2 foo.cpp</code> |
In beiden Fällen wird eine ausführbare Datei namens a.out erzeugt. -Wall sorgt dafür, dass Warnungen ausgegeben werden und -O2 dafür, dass der Compiler den Code optimiert. (Achtung: Das O ist ein großes O wie in Otto.) Zum Ausführen gibt man | In beiden Fällen wird eine ausführbare Datei namens a.out erzeugt. -Wall sorgt dafür, dass Warnungen ausgegeben werden und -O2 dafür, dass der Compiler den Code optimiert. (Achtung: Das O ist ein großes O wie in Otto.) Zum Ausführen gibt man | ||
- | ./a.out | + | <code>./a.out</code> |
ein. Man kann die Ein- oder Ausgabe auch umlenken. | ein. Man kann die Ein- oder Ausgabe auch umlenken. | ||
- | ./a.out < in.txt > out.txt | + | <code>./a.out < in.txt > out.txt</code> |
Hier ließt das Programm nun die Eingabe aus der Datei in.txt und gibt diese in die Datei out.txt aus. Man muss nicht immer Ein- und Ausgabe umlenken. Alles was nicht umgelenkt ist, ist an die Console gebunden. | Hier ließt das Programm nun die Eingabe aus der Datei in.txt und gibt diese in die Datei out.txt aus. Man muss nicht immer Ein- und Ausgabe umlenken. Alles was nicht umgelenkt ist, ist an die Console gebunden. | ||
- | ./a.out < in.txt | + | <code>./a.out < in.txt |
- | ./a.out > out.txt | + | ./a.out > out.txt</code> |
Durch benutzen der Pfeiltasten kann man Kommandos wiederholen. | Durch benutzen der Pfeiltasten kann man Kommandos wiederholen. | ||
Zeile 42: | Zeile 42: | ||
Java Programme werden wie folgt compiliert. | Java Programme werden wie folgt compiliert. | ||
- | javac Foo.java | + | <code>javac Foo.java</code> |
Zum Ausführen gibt man | Zum Ausführen gibt man | ||
- | java Foo | + | <code>java Foo</code> |
ein. Man beachte, dass man hier den Namen der Hauptklasse angibt und nicht wie beim Compilieren den Namen der Quelldatei. Auch bei Java kann man die Ein- und Ausgabe umlenken. | ein. Man beachte, dass man hier den Namen der Hauptklasse angibt und nicht wie beim Compilieren den Namen der Quelldatei. Auch bei Java kann man die Ein- und Ausgabe umlenken. | ||
- | java Foo < in.txt | + | <code>java Foo < in.txt |
- | java Foo > out.txt | + | java Foo > out.txt |
- | java Foo < in.txt > out.txt | + | java Foo < in.txt > out.txt</code> |
Mit && kann man aus 2 Befehlen einen machen. Dies kann nützlich sein, um sicher zu stellen, dass die ausgeführte Datei immer der aktuellsten Version des Sourcecodes entspricht. Zum Beispiel: | Mit && kann man aus 2 Befehlen einen machen. Dies kann nützlich sein, um sicher zu stellen, dass die ausgeführte Datei immer der aktuellsten Version des Sourcecodes entspricht. Zum Beispiel: | ||
- | g++ -Wall -O2 foo.cpp && ./a.out < in.txt | + | <code>g++ -Wall -O2 foo.cpp && ./a.out < in.txt</code> |
===== C IO ===== | ===== C IO ===== | ||
Zeile 62: | Zeile 62: | ||
Die interessanten Funktionen sind printf und scanf aus dem Header <stdio.h>. | Die interessanten Funktionen sind printf und scanf aus dem Header <stdio.h>. | ||
- | #include <stdio.h> | + | <code>#include <stdio.h> |
- | int main(){ | + | int main(){ |
- | int foo; | + | int foo; |
- | if(scanf("%d", &foo) != EOF) | + | if(scanf("%d", &foo) != EOF) |
- | printf("Ausgabe: %d\n", foo); | + | printf("Ausgabe: %d\n", foo); |
- | else | + | else |
- | printf("Keine Zahl in der Eingabe\n"); | + | printf("Keine Zahl in der Eingabe\n"); |
- | } | + | }</code> |
===== C++ IO ===== | ===== C++ IO ===== | ||
Zeile 75: | Zeile 75: | ||
In C++ kann man die C Funktionen verwenden oder man benutzt cout und cin aus <iostream>. | In C++ kann man die C Funktionen verwenden oder man benutzt cout und cin aus <iostream>. | ||
- | #include <iostream> | + | <code>#include <iostream> |
- | using namespace std; | + | using namespace std; |
- | int main(){ | + | int main(){ |
- | int foo; | + | int foo; |
- | if(cin >> foo) | + | if(cin >> foo) |
- | cout << "Ausgabe: " << foo << endl; | + | cout << "Ausgabe: " << foo << endl; |
- | else | + | else |
- | cout << "Keine Zahl in der Eingabe" << endl; | + | cout << "Keine Zahl in der Eingabe" << endl; |
- | } | + | }</code> |
===== Java IO ===== | ===== Java IO ===== | ||
Zeile 90: | Zeile 90: | ||
Bei Java kann man die Scanner-Klasse verwenden. | Bei Java kann man die Scanner-Klasse verwenden. | ||
- | import java.util.Scanner; | + | <code>import java.util.Scanner; |
- | class Main { | + | class Main { |
- | public static void main(String[]args){ | + | public static void main(String[]args){ |
- | Scanner s = new Scanner(System.in); | + | Scanner s = new Scanner(System.in); |
- | int foo; | + | int foo; |
- | if(s.hasNextInt()){ | + | if(s.hasNextInt()){ |
- | foo = s.nextInt(); | + | foo = s.nextInt(); |
- | System.out.print("Ausgabe: "); | + | System.out.print("Ausgabe: "); |
- | System.out.println(foo); | + | System.out.println(foo); |
- | }else | + | }else |
- | System.out.println("Keine Zahl in der Eingabe"); | + | System.out.println("Keine Zahl in der Eingabe"); |
- | } | + | |
} | } | ||
+ | }</code> | ||