Der Anfänger

Tagebuch einer programmiertechnischen Null

Subscribe to RSS feed

U wie Urlaub

Soderle, nach 3 Wochen Urlaub und viel Arbeit im RL kann ich mich wieder meinem Weltbeherrschungsplan widmen. smile Ich hatte in den letzten Wochen nicht wirklich Zeit, mich mit C/C++ zu beschäftigen. Aber nun sieht es wieder besser aus und ich kann weitermachen. Problematisch wird es wohl mit meinem 4-Gewinnt-Spiel. Der alte Quellcode ist weg. Zugegeben, sehr viel war es ja nicht und außerdem war der für Windows, aber schade ist es trotzdem. Mal sehen, ob es unter Linux ähnliche Bibliotheken für den Netzwerkzugriff gibt. Na ja, geben wird es sie schon, die Frage ist nur, ob und wie sie sich von der Win-Version unterscheiden. Vor einer Weile hatte ich mich mit dem Streichholzcomputer beschäftigt (siehe Links). Um zu verstehen, was mein Computer tatsächlich macht, habe ich mal ein bisschen gegoogelt und viele interessante Dinge herausgefunden. Besonders interessant finde ich Assembler. Wenn man sich näher mit der Hardware beschäftigt, dann wird man mit Begriffen geradezu erschlagen. Auf jeden Fall weiß ich jetzt was ein Bootloader macht, was Interrupts sind und wie man in Assembler "Hallo Welt" ausgibt. smile Hier gibt es einen Seite, die einen englischen Liedtext in momentan 952 verschiedenen Programmiersprachen bzw. Dialekten ausgibt. Unglaublich. Außerdem habe ich festgestellt, dass es gar wunderliche (z.B. esoterische) Programmiersprachen gibt. Eine davon ist Piet; programmieren mit bunten Klötzchen. smile So, genug für heute. Ich mache mich erstmal auf die Suche nach einem Ersatz für die WinSock-Bibliothek. Die brauche ich nämlich für mein 4-Gewinnt-Spielchen. Nur eben für Linux.

Viele Grüße
tatoeff

Desktop

So langsam finde ich mich in Linux zurecht.
Erstaunlich finde ich, wie weit man beispielsweise
den Desktop anpassen kann. Gimp habe ich auch installiert.
Das ist ein wirklich gutes Grafikprogramm. Gibt´s sogar für Windows. smile

Meinen Desktop habe ich mittlerweile so eingerichtet, wie es mir gefällt.
Links ist sozusagen die Startleiste mit den meistgenutzten Programmen. Rechts ist
ein kleines Info-Tool (gkrellm), welches CPU-Auslastung, E-Mails und eine
ganze Menge mehr anzeigt. Das WindowMaker-Theme und die Buttons habe ich von freshmeat.net.


Hier ein Screenshot von meinem neuen Desktop:



Viele Grüße
tatoeff

Alles neu

Alles neu, macht der April. smile
Wie schon erwähnt, habe ich mich von Windows getrennt und
eigentlich gäbe es tausend Dinge zu schreiben, aber dafür
ist es heute zu spät. Ein paar wichtige Sachen muss ich trotzdem
loswerden.

Die Installation war sehr einfach und mit KDE steht auch ein
vertrauter Desktop unter Linux bereit. Der ist allerdings
ziemlich langsam und da ist es doch großartig, dass meine
SuSE-Distribution gleich mehrere Desktops anbietet.
Ich habe mich erstmal für WindowMaker entschieden.
Der ist relativ fix und sieht mit den mitgelieferten Themes
richtig gut aus.

Außerdem musste ich mir natürlich eine neue IDE besorgen, da es
Dev-C++ nur für Windows gibt. Viel Auswahl scheint es allerindgs nicht zu geben. Ich habe spontan das MinGW Developer Studio ausgewählt. Compiler und Bibliotheken sind bei Linux ja dabei, also kann ich quasi wieder loslegen.

Generell ist der Umfang von SuSE ziemlich erstaunlich. Es ist eigentlich
alles dabei und die einzige Begrenzung ist meine Festplatte.
Rund 900 MB hab ich schon belegt, da bleibt leider nicht mehr viel.

Viele Grüße
tatoeff

Blöd

Blöd ist es, wenn man nur mal so sein Betriebssystem neu aufspielen möchte. Noch blöder ist es, wenn man die alte Installation löscht, nur um nachher festzustellen, dass einem die Win98-CD fehlt. smile
Nun ja, sie fehlt nicht direkt, sie ist nur irgendwie verschwunden.

Wie auch immer, ersatzweise habe ich Linux installiert und es ist gar nicht so übel. Mal schauen, ob es damit nicht auch geht. Die Installation war ziemlich einfach und meine Hardware funktioniert auch problemlos. Ich hatte vor ein paar Jahren mal Knoppix angetestet, da ging es nicht so glatt.

Viele Grüße
tatoeff

PS: SuSE 8.2 heißt die Distribution.

Vier gewinnt I

Ich habe mir die Aufgabe gestellt ein Programm zu schreiben, welches die eigene IP herausfindet und ausgibt. Später soll die IP für ein einfaches
Internet-Programm verwendet werden. Das wird (hoffentlich *g*) ein simples
Vier-Gewinnt-Spiel für die Windows-Konsole.

So soll es ablaufen:
  • Spielfeld zeichnen
  • über das Internet Verbindung zu einem Spieler aufnehmen
  • Spiel starten
  • wechselseitig Züge machen/senden/zeichnen
  • erkennen, wann ein Spieler gewonnen hat
  • Spiel beenden


Das Spielfeld wird ein eine einfache Tabelle in dieser Form:
(x und o stehen dabei jeweils für die Spielsteine)

---------
|o| | | | 1
|o|x| | | 2
|o|x|x| | 3
|o|x|x|x| 4
---------
a b c d

Da es in der Konsole läuft, müsste der Spieler A beispielsweise "a1" eingeben, um seinen Stein ins erste Feld links zu setzen. Dann sollte
das Spielfeld neu gezeichnet werden sowie der Zug an den anderen Spieler gesendet und dort ebenfalls gezeichnet werden. Danach wartet das Programm auf den Zug von Spieler B.

Um überhaupt über das Internet spielen zu können, benötigt man die eigene
IP-Adresse. Theoretisch gibt man diese Adresse seinem Gegenspieler (per Mail, per Telefon, per-sönlich) und es kann losgehen. Besser wäre natürlich, wenn man diese Adresse an einen Server sendet wo sie hinterlegt wird. Ein Gegenspieler würde sie dort finden und könnte seinem Programm dann sagen, eben jenen Spieler zu kontakieren. Dies ist mit meinem Wissen aber (noch?) nicht zu machen, daher läuft es auf die umständliche Tour hinaus.

Warum überhaupt ein menschlicher Gegenspieler?
Nun, gäbe es den nicht, dann müsste das Programm ja quasi eine
künstliche Intelligenz haben. Das dürfte noch schwerer werden, als
eine simple Netzwerkfunktion einzubauen.

Der erste Teil meines Programms beschäftigt sich also damit, die eigene IP-Adresse herauszufinden. Das funktioniert über ein Windows-Programm namens "ipconfig.exe". Dies wird von meinem Programm aufgerufen und schreibt seine Ausgabe in die Datei "out.txt". Diese wird wiederum eingelesen und die Zeile (Nr.6), in der die IP-Adresse steht, extrahiert und die IP ausgegeben.

Das funktioniert soweit, hier ist der Quelltext.
ipextract.cpp.txt

Ich hatte anfangs einige Probleme damit, die tatsächliche IP zu extrahieren.
MartinF von coding-board.de hat eine simple Lösung vorgeschlagen. Diese ist wesentlich eleganter als meine und langsam dämmert mir, was "guter" und was "schlechter" Code ist. wink

Viele Grüße
tatoeff






Funktionen

Ich habe mich ein wenig mit Funktionen beschäftigt.
Funktionen sind, so glaube ich, Programmteile, die man von der Hauptfunktion aus aufruft. Wenn man der Funktion einen Parameter übergibt bzw. übergeben kann, dann ist es eine Funktion, ansonsten ist es eine Prozedur. Praktisch ist dies, weil man öfter benötigte Programmteile einmal schreibt und später immer wieder aufrufen kann. Das kleine Programm (Sourcecode) hat neben der Hauptfunktion 3 andere Funktionen. Eine für die Auswahl eines "virtuellen" Registers, eine zum schreiben in das ausgewählte Register und eine zum addieren zweier Register.
Das ist natürlich vollkommen sinnlos, denn mit cin>>a,b; c=a+b; und cout<<c<<endl; (hoffe das ist korrekt) ließe sich das Ganze wesentlich schneller erledigen, aber mir gehts ja um die Funktionen und deren - Achtung Wortspiel - Funktionsweise.

1main.cpp

Viele Grüße
tatoeff

Streichholzcomputer II

Wie gestern bereits geschrieben, habe ich mich mit dem "Knowhow-Computer" beschäftigt. Es hat zwar ein paar Stunden gedauert, aber ich habe es tatsächlich geschafft, eine Potenz-Funktion zu schreiben. Als "Tastatur" werden die Register 1 und 8 verwendet. Für x^y stände also x im Register 1 und y im Register 8. Als "Bildschirm" dient Register 2. Dort wird das Rechenergebnis ausgegeben. Ich glaube das Programm verhält sich mathematisch korrekt. Einzig 0^y kann man nicht rechnen. Da hängt sich der Streichholzcomputer quasi auf. smile
Grob gesagt macht er folgendes (x^y): Er prüft ob y = 0 bzw. 1 ist. Falls ja macht die Rechnerei keinen Sinn und er stoppt wenn y=0 ist bzw. gibt bei y=1 einfach x aus ( 2^1 = 2). Falls y größer als 1 ist, prüft er ein "Flagbit" in Register 7, kopiert dann x vom Register 1 in Register 2, zieht 1 von Register 8 (y) ab, multipliziert Register 1 und 2 (also x*x), schreibt das Ergebnis in Register 2, setzt das "Flagbit" und springt wieder zum Anfang. Wenn y = 0 ist dann steht das Endergebnis in Register 2, ansonsten wird das "Flagbit" geprüft und wieder Register 1 (x) mit Register 2 multipliziert.

Am Ende gibts den "Sourcecode" als Download. Wenn ich Zeit finde, werde ich das auch noch dokumentieren und etwas sauberer programmieren.

Potenz.khc

Frohe Ostern
tatoeff

Streichholzcomputer

Auf der Suche nach Erlärungen zur Funktionsweise eines Computers bin ich über einen alten Bekannten gestolpert. Wolfgang Back moderierte lange Zeit die Sendung Computerclub im WDR. Auf seiner Homepage beschreibt er einen Computer der auf dem Papier funktioniert und u.a. Streichhölzer benutzt. Das Ganze gibts auch als Software für Windows. Der "Knowhow-Computer" arbeitet mit 5 Befehlen und 8 Registern.
Damit kann man einfache Rechenaufgaben erledigen. Momentan bin ich dabei eine Potenz-Funktion zu schreiben. Mal sehen, wieviel Stunden ich dafür brauche...

Viele Grüße
tatoeff

Variablen & Schuhe

Ich wühle mich derzeit durch den Online-Kurs der Uni Marburg. Mittlerweile weiß ich was Variablen sind. Wenn ich es richtig verstehe, dann verhält sich Programmierer zu Variable wie Mann zu Frau im Schuhladen; mit beiden kann man praktisch nix anfangen. Interessant wird es erst, wenn die Frau ein Paar Schuhe hat. Dann kann Mann mit ihr ausgehen, kommunizieren oder ähnliches. So ähnlich geht es dem Programmierer wohl auch. Wenn man der Variable einen Wert zugewiesen hat, dann kann man beisielsweise damit rechnen. Man kann, so habe ich gelernt, einer Variable auch mehrere Werte zuweisen. Das Ganze nennt sich dann Array und ist ziemlich praktisch. Die Variable "TAG" könnte also die Werte "MONTAG", "DIENSTAG", "MITTWOCH" usw. enthalten. Im Programm sagt man dann einfach "TAG[2]" und schon steht da "DIENSTAG". Die Frau mit den neuen Schuhen ist also quasi je nach Lust und Laune ein Blondine, Brünette oder Rothaarige. Wie praktisch. smile

Außerdem habe ich eine sehr nützliche Funktion in meiner IDE endtdeckt. Mit dem WebUpdate lassen sich sog. DevPacks herunterladen und komfortabel installieren. So lässt sich auf einfache Weise z.B. eine 3D-Engine integrieren. Allerdings habe ich mit den Begriffen noch so meine Schwierigkeiten. Ich glaube grundsätzlich spricht man von Bibliotheken, die bestimmte Funktionen bereitstellen, welche im Endeffekt auch "nur" normalen Programmcode enthalten.

[Update]: Tag[2] wäre nicht "DIENSTAG" sondern "MITTWOCH", weil der Index nicht bei 1, sondern bei 0 beginnt. Pfff...

Viele Grüße
tatoeff

Frage an Profis

Richtig sicher war ich mir bezüglich meiner Entscheidung C++ zu erlernen
ja nicht. Also hab ich gestern kurzerhand mal ein paar Profis gefragt.
Ich glaube der Tenor ist: Lern eine objektorientierte Sprache und evtl. noch eine Scriptsprache.
Das bringt mich nicht wirklich weiter, aber irgendie muss es ja losgehen und deshalb bleibe ich bei C++ und benutze Dev-C++ als IDE.

Grüße
tatoeff
February 2012
S M T W T F S
January 2012March 2012
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29