Add some basic stuff
This commit is contained in:
parent
c1b0bd45e8
commit
e0bdb8a875
1 changed files with 74 additions and 1 deletions
|
@ -28,4 +28,77 @@ Es gibt noch viele weitere Tools, die wir verwenden können, aber das hier sind
|
|||
- ... Und viele weitere, um Konzepte Hands-on zu lernen!
|
||||
|
||||
** Grundlegende Datenstrukturen
|
||||
Wir wissen ja bereits, dass ein Array in C eine festgelegte maximale Größe besitzt. Wie kann es dann sein, dass es in Python Listen gibt, die von außen genauso funktionieren wie arrays, aber keine begrenzte Länge haben und wo immer wieder neue Sachen dazugetan, oder alte Sachen entfernt werden? Hierzu schauen wir uns Linked Lists (verkettete Listen) und Doubly-Linked-Lists (Doppelt verkettete Listen) an, und implementieren solche Strukturen in C und java.
|
||||
Wir wissen ja bereits, dass ein Array in C eine festgelegte maximale Größe besitzt. Wie kann es dann sein, dass es in Python Listen gibt, die von außen genauso funktionieren wie arrays, aber keine begrenzte Länge haben und wo immer wieder neue Sachen dazugetan, oder alte Sachen entfernt werden? Hierzu schauen wir uns Linked Lists (verkettete Listen) und Doubly-Linked-Lists (Doppelt verkettete Listen) an, und implementieren solche Strukturen in C und java. Manchmal würden wir auch lieber mit strukturierteren Daten arbeiten, zum Beispiel einem Datentypen, wo du über einen Kategorienamen auf die Daten zugreifen kannst, z. B. so: ~{"username": "BladeOfENAT", "Alter": 21, "Premium": true}~. Das nennt man ein Dictionary und wir werden auch ein solches implementieren, und uns anschauen, wie man damit in Java (und python in den "Pseudo"code beispielen auch) arbeiten kann. Am Ende besprechen wir auch die Baumdatenstruktur und überlegen, was für Operationen man darauf anwenden könnte.
|
||||
|
||||
** Programmieren
|
||||
Natürlich darf das Programmieren bei einem Programmierkurs nicht fehlen. Wir werden im Detail die Syntax von Java und C besprechen, und uns auch anschauen, wie wir Pseudocode als Werkzeug benutzen können, um uns zu helfen, Vorlagen für den späteren Code zu schreiben und so den Prozess vereinfachen. Wir werden insgesamt 2 Projekte schreiben. Eins iterativ während des lernens um Dinge direkt üben zu können, eins danach, als Abschlussprojekt. Das erste ist eine To-Do Liste (iteratives Projekt im Kurs) und ein Textbasiertes Spiel (Abschlussprojekt)
|
||||
|
||||
* Programmieren
|
||||
** Was sind compiler, wie compile ich Code und was genau macht das eigentlich alles?
|
||||
Bevor wir mit dem Programmieren beginnen, brauchen wir noch eine Möglichkeit, diesen auch ausführbar zu machen. Dafür benutzt man einen /Compiler/. Im Hintergrund sind dann auch noch Dinge wie ein Linker beteiligt, aber da machen wir uns später Gedanken drum. Wir werden im Grunde mit 2 Compilern arbeiten:
|
||||
+ gcc (der GNU C Compiler, aus GCC, der GNU Compiler Collection, für C Programme)
|
||||
+ Java SDK (Java Software development kit. Java braucht mehr als nur einen einfachen compiler, deswegen ist hier das ganze kit mit dabei.)
|
||||
*** Installation
|
||||
**** GCC
|
||||
GCC auf Windows ist gelinde gesagt extrem nervig. Die eifnachste Methode wäre zweifelsfrei, auf einer kleinen Platte Linux zu installieren. Dort ist GCC meist vorinstalliert, ansonsten reicht ein einziger Befehl und du hast alles. Für Windows sollte dieses (zugegebermaßen ziemlich alte) Tutorial aber auch funktionieren: https://www.youtube.com/watch?v=x-2ZCkS3OHY&list=PLNmsVeXQZj7q4shI4L__SRpetWff9BjLZ. Der Text Editor ist bei C mehr oder weniger egal, du solltest halt etwas benutzen wie [[https://notepad-plus-plus.org/downloads/][NotePad++]] (sehr minimalistisch) oder [[https://code.visualstudio.com/][Visual Studio Code]] (beliebt für große Softwareprojekte). VSCode kannst du wahrscheinlich auch so konfigurieren, das da ein C Compiler mit eingebaut wird (z. B. Clang oder GCC).
|
||||
**** Java SDK
|
||||
Der *Mit Abstand* beste Weg in Java zu programmieren ist es, einfach [[https://www.jetbrains.com/de-de/idea/][IntelliJ IDEA]] zu benutzen. Das Programm hat einen eigenen Code Checker, Java Compiler, Java Laufzeit und Text Editor in einem (und wird genauso auch in der Prüfung benutzt).
|
||||
|
||||
** Textausgabe
|
||||
Jetzt können wir endlichen anfangen zu Programmieren. Und es gibt kaum etwas einfacheres als Textausgabe. Einmal zwei Beispiele (Erst C, dann java). Was genau die einzelnen Code Segmente
|
||||
#+BEGIN_SRC C
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
printf("Hello World!\n");
|
||||
return 0;
|
||||
}
|
||||
#+END_SRC
|
||||
Was genau die include Anweisung und die Funktionsdefinition so machen, besprechen wir später.
|
||||
|
||||
#+BEGIN_SRC java
|
||||
public class HelloWorld {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello World!");
|
||||
}
|
||||
}
|
||||
#+END_SRC
|
||||
Alternativ könnte statt System.out.println auch so etwas wie ~System.out.print~, ~System.out.printf~ oder weitere verwenden. println ist im Grunde das gleiche wie print, nur mit einem ~%n~ am Ende, und ~printf~ entspricht dem ~printf~ aus C, aber das gehen wir im Detail gleich auch noch drauf ein.
|
||||
|
||||
** Grundlegende Datentypen
|
||||
Computer arbeiten mit Werten in Binärdarstellung. Deswegen muss es beim ausführen des Programms Weisen geben, wie die Unterschiede zwischen einer positiven Zahl, negativen Zahl, ganzen Zahl, Kommazahl, text, etc. dargestellt werden kann. Dafür gibt es die /primitiven Datentypen/ bzw. Die /Wertdatentypen/. Im Speicher werden die alle gleich abgelegt, deswegen muss der Compiler und später das Betriebssystem anhand von uns bereitgestellter Informationen entscheiden, wie es die Daten interpretieren soll. Hier ein Liste der wichtigsten Datentypen:
|
||||
+ int (integer): Ganze Zahl. In C und Java normalerweise 32bit, gibt's aber auch in 16bit Variante (short) bzw. 64bit Variante (long).
|
||||
+ float: Kommazahl. Sollte eigentlich nie benutzt werden! Die Genauigkeit von 32bit floats (Standard) ist sehr gering und führt oft zu Rundungsfehlern. Besser: double. Quasi der Gleiche Datentyp, aber mit 64 bit und also Doppelter (double) Genauigkeit.
|
||||
+ char: Im Computer eigentlich nichts weiter als eine 8Bit Zahl. Wird vom Computer entweder als Buchstabe oder Zahl interpretiert.
|
||||
+ String: In C nur eine Kette von Chars, die mit dem besonderen bit ~'\0'~ (/Nullbit/) beendet wird. In Java und fast allen anderen modernen Programmiersprachen ein eigener Datentyp.
|
||||
+ bool: manchmal auch boolean (je nach Sprache, in C ist es bool, in java boolean). In C musst du dafür ~bool.h~ includieren. Beinhaltet nur ein paar typedefs. In Java ein eigener Datentyp. Allgemein gilt: ~true = 1~ und ~false = 0~. Primitiver Wert, der dafür benutzt wird anzugeben, ob etwas wahr oder falsch ist. Extrem nützlich.
|
||||
|
||||
In diesen Datentypen können wir quasi alles speichern was wir wollen. Hier ein Beispiel, erst in C, dann in Java.
|
||||
#+BEGIN_SRC C
|
||||
#include <stdio.h>
|
||||
#include <bool.h>
|
||||
|
||||
int main() {
|
||||
int beine = 4;
|
||||
int besonderes_bein = 1;
|
||||
char spezies = "Pferd";
|
||||
bool error_status = false; // char error_status = 0
|
||||
|
||||
printf("Das %s, hat %d Beine\n", spezies, beine + besonderes_bein); // STDOUT: Das Pferd hat 5 Beine
|
||||
return error_status; // return 0
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
Die Kommentare dienen dazu, zu verdeutlichen, was genau sich hinter den typedefs und Variable verbirgt. Unsere Java version sieht etwas anders aus:
|
||||
|
||||
#+BEGIN_SRC java
|
||||
public class Beispiel {
|
||||
public static void main(String[] args) {
|
||||
int beine = 4;
|
||||
int besonderes_bein = 1;
|
||||
String spezies = "Pferd";
|
||||
boolean das_hier_ist_nur_ein_beispiel = true; // Diese Variable ist hier völlig sinnlos. Dient nur dazu,die Sytax zu demonstrieren
|
||||
printf("Das %s, hat %d Beine%n", spezies, beine + besonderes_bein); // STDOUT: Das Pferd hat 5 Beine
|
||||
}
|
||||
}
|
||||
#+END_SRC
|
||||
|
|
Loading…
Reference in a new issue