Der Programmier-Thread

PSN-Name: chrizeliq
das letzte mal das ich c++ unter den fingern hatte ist jetzt erst 2 jahre und ich fand mich relativ schnelle wieder zurecht. zumindest in den basis geschichten ausgabe, schleifen usw.. wenn du hier gleich mit so einem knaller beispiel kommst um die leute zu verschrecken, kann ich nichts dafür. wäre mir auch neu das in den info ergänzungsprüfungen 'syntaxreinheit' verlangt wird. ein einfaches printf häts hier auch schon getan o_O (also mal ganz abgesehen das dein c bsp. in c++ genauso funktioniert... (include anweisung mal außen vor gelassen)) => damit wären wir wieder bei c/c++ geschichte (mit anderen worten dein einführungssatz ist das entscheidende)
printf ist Teil des C-Standards. Klar funktioniert das auch in C++, aber dann programmierst du C in C++. Aber wie wir uns ja alle einig sind, sind C und C++ zwei paar Schuhe...

Btw, jetz bekomm ich, nach mehreren Monaten JavaScript-Programmierung, direkt wieder Lust mal C oder C++ zu programmieren, danke fuer die Diskussion. :ugly:

/edit: gibt es überhaupt noch reine c compiler?
Natuerlich, es gibt ja auch eine Menge C-Programmierer die C++ wegen seiner Komplexitaet verabschaeuen, einer der bekanntesten Vertreter ist Linus Torvalds himself: http://harmful.cat-v.org/software/c++/linus (btw toryu, da faellt mir auf, Linus hat eine aehnlich direkte Ausdrucksweise wie du hehe)

gcc z.B. unterscheidet zwischen g++ und gcc, das sind zwei unterschiedliche Compiler. clang, der C-Compiler von Apple konnte lange Zeit nur mit C und Objective-C umgehen, und erst sehr viel spaeter gab es dann clang++.

Ich glaub unter den bekannteren Compilern ist einzig Microsoft den Schritt gegangen C zu vernachlaessigen und nur noch C++ Compiler anzubieten.
 
PSN-Name: leckt mich an meinem haarigen hintern ihr haufen!
Spielt gerade: perl(pc); div. KOFs (ps3); GT6(ps3); sfIV(div.);
wie selten meine ausdrucksweise als direkt bezeichnet wird :ugly:

auch: die grundlage für meine argumentation war halt, das ich mich an die gestellten anforderungen gehalten hab (hab einfachmal mal dreist meine erfahrungen von studierenden bekannten und arbeit hier einfließen lassen... programmieren ist und bleibt halt nicht immer gleich programmieren => das was du machst geht schon weit über das hinaus, was den leuten beigebracht wird und meines erachtens sogar über das je nach berufsrichtung gefordert wird...(eigentlich kenn ich bei uns nur die forschung (compilerbau uns solche scherze) die echtes talent fordert, der rest geht dann eher in das was ich mache und von mir liebevoll 'tun als würde ich programmieren würde' benannt wird) und auf dem level ist c = c++ bzw. der unterschied zu vernachlässigen (war auch der grund warum ich mich mit meinem begrenzten wissen eingemüscht hab ^^)

@ginjin: komm ja nicht auf die idee einen tag vor der klausur div. übungsaufgaben zu machen und vorher nichtmal ne alphabetsausgabe oder sowas zu basteln wie div. leute die ich so kenne... :ugly:

@c-lust: nicht nur du...
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
Coole Sache! Sehr interessant, aber auch schwer!

Schließe mich dabei mal Ginjin an und suche jetzt ein gutes Buch zu C++, da ich das wahrscheinlich für die Bachelorarbeit draufhaben muss^^ Für C hatte ich ja nen gutes Buch, aber C++? Gibts da auch was?
 
Spielt gerade: BF3, FIFA11, GR:FS
Kann jemand gute Java-Lektüren empfehlen? Mit denen man das Ganze auch versteht? :ugly:

Hab auf der Uni "Software Development", seit Oktober und wir "lernen" Java.

Mein/unser Problem ist nur, dass es die Meisten (inklusive mir) nicht checken. Unser Vortragender macht das auch nicht wirklich gut. Zuerst Ewigkeiten PP-Folien erklären, danach "sollten" wir eine Übung selbstständig lösen, die aber meistens auch niemand kann, bis uns gesagt wird wie wir beginnen sollen. Und bei den Hausübungen ist's auch gleich. Ein paar (die schon Erfahrung mit Java oder anderen Sprachen haben, tun sich da natürlich leichter) können die Aufgaben lösen und der Rest von uns schreibt dann ab (und versucht es zu verstehen) oder lässt es sich von denen erklären.

Ich (und auch anderen geht es gleich) weiß bspw. nie bei Hausaufgaben womit ich beginnen soll, was als nächstes kommt usw...


Ich poste einfach mal das, was gemacht werden soll, vielleicht kann mir ja einer dabei helfen. :D :)

Entwickeln Sie ein Programm, das ausgehend von einer Position auf einem Schachfeld alle möglichen Züge eines Springers (Pferd) errechnet.
zum Beispiel:
Springer sp = new Springer("e5");
String zuege = sp.ermittleZiele();
System.out.println(zuege);
// Ausgabe: g6;f7;g4;f3;c6;d7;c4;d3
Teil Ihres Programmes ist die Klasse Springer mit folgenden Eckdaten:
- Öffentliches Feld spalte, Wertbereich 0 bis 7 für die Spalten a bis h
- Öffentliches Feld reihe, Wertbereich 0 bis 7 für die Reihen 1 bis 8
- Konstruktor, an den die Postition des Springers in der Schreibweise "a1" oder "e5" oder "h8" u ̈bergeben wird; wenn die Startposition ungültig ist, soll eine IllegalArgumentException ausgelöst werden
- Öffentliche Methode ermittleZiele (ohne Parameter), die alle erreichbaren Felder als Zeichenkette zurückgibt; die Felder sind durch Strichpunkte zu trennen, z.B. "b3;c2" oder "g6;f7;g4;f3;c6;d7;c4;d3"

Bis jetzt bin ich so weit (erst am Anfang -.-): http://pastebin.com/ddas0mCW
Hab ich aber auch nicht ganz selbstständig gemacht, sondern heute in der Uni während einer Vorlesung, mit einem der etwas mehr Ahnung hat wie ich.
Zuerst die beiden Felder Spalten und Reihen für das Schachbrett. Danach der Konstruktor. Und mit den for-Schleifen sollte ermittelt werden ob ein Element aus der Spalte und ein Element aus der Reihe enthalten ist?!
Ich hab prinzipiell den gleichen Code wie mein Partner, bei ihm gibt er zumindest schon die Position des Springers aus, also bspw.: "e5". Bei mir passt i-was noch nicht da er immer nur "Error" ausgibt. -.-

Grundsätzlich programmier ich ja gerne, aber wenn ich es nicht kapiere bzw. nicht weiß wie es geht, wie ich beginnen soll, usw. dann steht's mir an...
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
Dir fehlt im Konstruktor noch die Überprüfung, ob das was übergeben wird, auch wirklich dem Muster "a1", "e5" etc. entspricht.

Aktuell packst du, egal was du übergeben bekommst in ein Feld, was jetzt ok ist. Aber halt nix damit anfägt. Du wirfst ja auch keine Exception.

Dann in ermittleZiele..

Was willst du mit der if-Abfrage tun? Du prüfst da nur ob i (ein Integer) gleich dem String aus dem Array zuege ist. Das wird immer falsch sein. Weil du schon zwei nicht vergleichbare Typen vergleichst. Außerdem gibst du maximal nur ein mögliches Feld zurück.

Solange du nämlich nicht rekursiv arbeitest, schmeißt dich ein Return aus der Methode

---------- Beitrag um 15:45 Uhr hinzugefügt ---------- Vorheriger Beitrag um 15:41 Uhr ----------

Wenn du mehr wissen willst, sag Bescheid. Bin leider noch nicht so gut wie chrizel im Erklären :D
 
Spielt gerade: BF3, FIFA11, GR:FS
Ich weiß dass mir noch einiges (eigentlich fast alles) fehlt. :ugly:

Prinzipiell fängt es ja schon damit an, dass ich nicht mal den Konstruktor verstehe. Ich weiß theoretisch, dass er Objekte initialisiert (oder so...^^), aber wie genau ich den programmiere, kA, weil ich ihn einfach noch nicht verstanden habe.

In ermittleZiele hab ich mich vertan, sollte ja eigentlich eine for-each-Schleife sein, hab das jetzt aktualisiert. Hab die for-Schleifen jetzt so umgeändert:
for(char i : spalten) ...
for(char j : reihen)...
Hatte die vorige Schleife aus einer PP-Folie abgeschrieben, aber erst jetzt gecheckt dass das Array auch ein Integer war, hier hab ich ja 2 char Arrays.

Die if-Abfrage war nicht meine Idee, wie gesagt, ich hab hauptsächlich von ihm abgeschrieben. :(

Er meinte, damit soll überprüft werden, ob die Position wo der Springer steht gültig ist. Also ob sie auf dem Schachbrett existiert und einem Buchstaben aus spalte und einer Zahl aus reihen besteht.

Das größte Problem bei mir ist einfach, dass ich keinen Startpunkt finde wo und wie ich beginnen soll.
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
Der Konstruktor wird einfach beim Start der Klasse aufgerufen und dort kann man halt Werte setzen.

In deinem Fall startet man die Klasse halt mit dem Argument "a5" oder so und speichert diese direkt im Konstruktor, um damit später arbeiten zu können.

for(char i : spalten) was soll das machen? Das geht so definitiv nicht. Spalten ist ein Array. Du fragst das ganze Feld ab.

Du solltest dir vorher wirklich genau überlegen, wie du deinen Algo aufziehen willst. Dann hast du schonmal ne grobe Orientierung.

Womit programmierst du? Mit einem Texteditor? Falls ja, dann wechsel mal auf Eclipse. Das sagt dir sofort, wenn du Mist baust und gibt Tipps, um sie zu beseitigen.

Aber mal dein Programm:

Code:
public class Springer {
               
        // Felder fuer Spalten und Reihen erstellen
        char[] spalten = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
        char[] reihen = {'1', '2', '3', '4', '6', '7', '8'};
       
        char[] zuege;
       
       
        public Springer(String zuege) throws IllegalArgumentException {
                this.zuege = zuege.toCharArray();
                if(zuege.length != 2) throw new IllegalArgumentException();
                //Hier dann die anderen Fälle abfragen (Also ob das wirklich nur von a bis h geht usw.)
        }
Das wäre schonmal was für den Konstruktor. Fehlt natürlich noch etwas. Was deine Methode angeht...

Du musst ja wissen, welche Felder du von einem bestimmten aus erreichen kannst. Also wenn du in Reihe b stehst, kannst du maximal zwei Reihen vor oder zurück. Dann je nachdem eine oder zwei Spalten nach links/rechts. Wenn ich mcih nicht irre, sollte es von jeder Position maximal acht Möglichkeiten geben. Dabei musst du aber aufpassen, dass du in den Arraygrenzen bleibst.
 
Spielt gerade: BF3, FIFA11, GR:FS
Konstruktor hab ich jetzt dank YT-Video verstanden. :D

Die For-Schleife war für meinen Zweck Mist, das stimmt. Aber so eine Schleife haben wir schon mal verwendet.

Das mit dem Überlegen sagt sich so einfach, aber als Anfänger tu ich mir genau da sau schwer. Wenn ich's dann mal bei jemandem sehe, dann ist das größtenteils auch verständlich, aber selber drauf kommen klappt bei mir (noch) nicht... Ich glaub ich sollte mich sowieso mal mit Java intensiver befassen.
In 2-3 gibt's ne kleine mündliche Prüfung und ein Beispiel zu programmieren....

Und ich programmiere schon mit Eclipse. ;)

Hab jetzt gerade mal drüber geschaut wie es ein anderer gemacht hat. :rolleyes:

Bei dem besteht der Konstruktor nur aus:
Code:
 public Springer(String sp)
        {
                this.sp = sp ;
        }
Der hat auch gleich ein String Array erstellt und nicht so wie ich 2 char Arrays. Und hat dann eben gleich alle Positionen auf dem Brett angegeben, also a1, a2, ... b1, b2... usw.
 
Spielt gerade: BF3, FIFA11, GR:FS
Wie habt ihr damit angefangen? Irgendwelche Tipps wie ich am Besten lernen soll (Bücher, Tutorials, etc.)?

Kommt das dann einfach mit der Zeit bzw. Übung damit man weiß wie man beginnt und dann Schritt für Schritt weiter macht? Von den letzten Aufgaben hab ich so gut wie keine selbstständig lösen können. :(

Mir bleibt ja jetzt sozusagen eigentlich wieder nichts anderes übrig, als abzuschreiben und versuchen es zu verstehen....
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
Also ich habe es damals in der schule gelernt. Dabei fing man wirklich bei null an und hat uns ganz langsam die Basics beigebracht. Guck mal nach netten online-tutorials. Das Problem der meisten Bücher ist leider, dass sie nur ne portable Doku sind. Das programmieren bringen einem die wenigsten bei. Letztlich gehört viel Übung, Erfahrung und auch Interesse hinzu. Du musst mit code spielen, ihn verändern, gucken was passiert usw
 
Spielt gerade: BF3, FIFA11, GR:FS
Also ich habe es damals in der schule gelernt. Dabei fing man wirklich bei null an und hat uns ganz langsam die Basics beigebracht. Guck mal nach netten online-tutorials. Das Problem der meisten Bücher ist leider, dass sie nur ne portable Doku sind. Das programmieren bringen einem die wenigsten bei. Letztlich gehört viel Übung, Erfahrung und auch Interesse hinzu. Du musst mit code spielen, ihn verändern, gucken was passiert usw
Ich würde es ja auch gerne lernen, aber unser Vortragender mach das irgendwie total lasch, sagen auch die anderen.
Klopft uns da die Theorie anhand ein paar PP-Folien runter, dann sollen wir selbstständig ein Bsp. lösen und als HÜ dann auch wieder...nur wissen die Meisten eben nie wie anfangen usw. bis er uns hilft...

Anfangs ging es ja noch, da hab ich mich ja bei den einfach Sachen noch locker ausgekannt. Hab danach dann auch noch einfach die Übungen zu Hause noch mal gemacht, weil's Spaß gemacht hab. Aber ab der 3ten oder 4ten Vorlesung/Übung wurde es dann schon schwieriger alles zu verstehen. Und der Stoff baut ja auf dem Gelernten immer weiter auf und wenn man dann mal was nicht verstanden hat tut man sich sehr schwer. Jetzt steh ich eben bei den letzten HÜs schon ziemlich an sie selbst lösen zu können. :(
 
Wie habt ihr damit angefangen? Irgendwelche Tipps wie ich am Besten lernen soll (Bücher, Tutorials, etc.)?
Ein guter Programmierer wirst du nicht durch Buecher oder Tutorials. Diese koennen dir nur Grundlagen vermitteln und eine Richtung aufzeigen. Das gleiche gilt fuer Uni, Lehrer, etc... im Grunde haben die meisten keinen Plan von gar nix, sonst wuerden sie nicht den schlechten Job machen den sie machen. Du musst das Licht am Ende des Tunnels selber finden. Es ist alles nicht so schwer, wenn du logisch denkst und deine Blockade im Hirn aufloest. Alle Features die Programmiersprachen haben, haben irgendeinen praktischen Nutzen, sonst gaebe es sie nicht.

Ein guter Programmierer wirst du, wenn du eines machst: programmieren. Programmiere was das Zeug haellt, denke dir irgendwelche Programme oder Spiele aus und mach es einfach. Nutze die Grundlagen die du gelernt hast und versuche sie anzuwenden. Auch wenn es am Anfang nicht klappt oder du viele Fehler machst, das ist genau der Punkt, du lernst daraus. Und programmiere nicht nur in Java... lerne alle Programmiersprachen von denen du hoerst... Smalltalk, Haskell, Lisp... sind alles interessante Sprachen.

Ich habe z.B. mit 13 oder 14 Jahren schon versucht C++ zu programmieren, hatte keinen Plan von gar nix und habe Pointer nicht verstanden. Aber das war mir egal, ich habe trotzdem Programme geschrieben, die sind zwar ab und zu abgestuertzt weil ich nichts von Speicherverwaltung wusste, aber umso besser verstand ich es nachher und ich habe aus meinen Fehlern gelernt, nicht durch irgendwelche abstrakten Buecher. Buecher lesen ist doch langweilig.

Wenn ich bei mir die letzten 12 Jahre zurueckdenke, dann gab es immer wieder Situationen wo ich gemerkt habe, dass ich einen Level weiter gekommen bin vom Kenntnisstand her. Und das waren immer Situationen bei denen ich groessere Projekte programmiert habe.
 
Top