...aber wenn ich schon wieder Quelltexte darin sehe die als Variablennamen v,i,m,n... verwenden und dann damit ein komplizierter Algorithmus aufgebaut wird, wundere ich mich nicht wenn ich mir so manchen Quelltext von frisch gebackenen Informatikern ansehe...
ich red ja nicht von for Schleifen. da ist es ja noch Ok. Ich reden von Variablen die mit aussagekräftigen Namen wie k,q,p gesegnet sind. Das trägt nicht unbedingt zum leichteren Verständis bei insbesondere wenn es sich um kompliziertere Algorithmen handelt. Das wirft meiner Meinung nach noch ein etwas negatives Licht auf das ansonst recht gut geschriebene Buch.
hmm, dazu fällt mir eine Stelle im Linux Kernel Coding Style ein:
"C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable "tmp", which is much easier to write, and not the least more difficult to understand."
[...]
"Local variable names should be short, and to the point. If you have some random integer loop counter, it should probably be called "i". Calling it "loop_counter" is non-productive, if there is no chance of it being mis-understood. Similarly, "tmp" can be just about any type of variable that is used to hold a temporary value. If you are afraid to mix up your local variable names, you have another problem, which is called the function-growth-hormone-imbalance syndrome. See next chapter."
kurze Namen a la i,j für Schleifen und tmp & Co sind ja ok. Aber für Lehrzwecke ist das absolut nicht geeignet. Schliesslich soll man den Code ja auch verstehen, ohne vorher mit 'n Textmarker alle Variablen markiert zu haben, oder? Und die Wartbarkeit des Codes bleibt ab einer gewissen Grösse auch auf der Strecke.
>int gcd(int u, int v){while( u > 0 ){if( u < v ) {int t = u; u = v; v = t; }u = u - v;}return v;} > >Oder so, auszug aus nem code den ich Gestern geschrieben habe: > >foreach $S1 (@S1){foreach $I1 (@I1){if ($I1 eq $S1){`rm -f $Dir_Incoming1/$m/$I1`; print "Removing old log $Dir_Incoming1/$I1\n"; }}} > >Nix für ungut, aber an sowas müsst ihr euch im wahren Leben gewöhnen.
so ein Blech! Sitzt Du im Büro auch auf einem Nagelbrett? Denn Schrott verstehst Du doch selber schon in zwei Monaten nicht mehr! Was bitte spricht dagegen, den Code in mehrere Zeilen aufzuteilen? Habt Ihr im Büro nur 'n Braillezeile am PC oder was? *kopfschüttel*
Ich würde wahrscheinlich gar nicht erst bei euch anfangen, weil ihr mich nicht bezahlen könntet.
Wenn ihr schon mal guten Perl Programmieren begegnet wärt, dann wäre obiges für euch normal, denn wir lieben Einzeiler, oder schreibst du in eine Konsole dann auch:
{ { } }
Also Jungs, wenn ihr auch mal Geld fürs Programmieren bekommt und zwar anständig, dann reden wir weiter.
Dann sag mal bitte was der Vorteil von Deinem Einzeiler ist? Soll das später lesbarer sein? Oder wollt Ihr Papier sparen wenn Ihr Euern Quellcode audrucken müsst? Oder was?
Der Vorteil ist, dass du es ganz einfach in die Konsole eingeben kannst, mit so nem Einzeiler erledigst du Sachen, für die andere ein ganzes Programm schreiben müssen, aber ich denke eher, du hast noch nie einen Perl Einzeiler gesehen, ich rede z.B. von:
Von dergewöhnliche am Fr, 18. April 2003 um 22:24 #
Schonmal Perl programmiert? Man, wer nimmt schon Perl? Perl und seine Hilfskonstrukte fürs OOP? Für was soll denn Perl nun der Bringer sein? Ein paar HTML-Seiten parsen? Mach ich in der Bash, den Rest erledigt ein C-Prog und wenn ich bock auf scripten habe nehme ich Python ;-). Ehrlich ich habe mir 3 Jahre Perl reingezogen, aber dir Sprache ist von hinten bis vorne reines Flickwerk.
Am Anfang des Patterns nach .* zu suchen ist unsinnig. Das dann auch noch zu matchen auch. Der `.' gehoert escaped und das Ende des Dateinamens muss man bei der Suche mit $ markieren.
Des weiteren macht - wie mein Vorposter schon richtig bemerkt hat - ein ls -1 /var/log/*.gz das selbe einfacher, lesbarer und performanter.
Und du bekommst wirklich Geld fuers programmieren? Traurig.
Man euer IQ liegt auch nicht höher als 10 oder, ich hab das als Beispiel genommen, wie ein Einzeiler aussieht.
Ich sollte mich mit Leuten wie euch gar nicht unterhalten.
>>>>Am Anfang des Patterns nach .* zu suchen ist unsinnig.
Es hat niemand die Aufgabe gestellt, das die gesuchte Datei ein gz Archiv sein soll. Wenn ich nach nem gz Archiv suche, dann mache ich das so: ~m/.gz/g, ihr hättet sofort ne 6 bei mir, weil ich Sachen annehmt, die nicht dastehen. Im Zweifelsfalle wird sowas nachgefragt, wenn im Pflichtenheft nicht eindeutig definiert -- Anfänger.
P.S. ja ls *.gz tut eben nicht das gleiche, wie ich oben definiert hatte, denn mein perl Einzeiler sucht alles was .gz hat
P.S. ja ls *.gz tut eben nicht das gleiche, wie ich oben definiert hatte, denn mein perl Einzeiler sucht alles was .gz hat
... und noch ein bisschen mehr, wobei 'bisschen' hier schon sehr stark untertrieben ist. Der regulaere Ausdruck, der Deine Spezifikation (bzw. einen entscheidenen Teil davon) erfuellt, muss lauten /\.gz/ (wobei hier "/" und "/" natuerlich nicht zum Ausdruck gehoeren, sondern ihn hier nur der Uebersichtlichkeit halber begrenzen).
Das Gleiche wie Dein "Einzeiler" wuerde dieser Befehl in der Shell bewirken: ls -1 /var/log/*.gz*
Die Klammern in Deinem Ausdruck sind nicht nur voellig ueberfluessig, sondern sogar kontraproduktiv.
Wenn ich nach nem gz Archiv suche, dann mache ich das so: ~m/.gz/g
Aehnlicher Fehler wie oben schon beschrieben (korrekt waere /\.gz$/) und ausserdem unnoetige Verwendung von Modifizierern.
[x] Deine Software ist closed source.
Asche auf mein Haupt, jetzt hab ich nen Troll gefuettert.
wenn Du für Dich so'n Einzeiler verbrichst ist das ok. In Programmen, und ganz besonders in komplizierten Abschnitten, schreibt man das eben nicht als Einzeiler (und dazu noch ohne Bemerkungen). Andere müssen den Code später schnell begreifen und ggf. ändern können. Das ist viel produktiver und steigert die Qualität der Software. Ein Verstoss gegen die Standards ist ein Abmahngrund!
int gcd(int u, int v){while( u > 0 ){if( u < v ) {int t = u; u = v; v = t; }u = u - v;}return v;} Und welöchen Vorteil hast du da? Ist das Programm schneller? Schützt du die Umwelt weil du weniger Speicher verbrauchst? Werden die binaries kleiner? Wird es schneller compiliert?
Wohl eher nicht. In einer ein-Mann Softwareklitsch kann man das schon so machen wenn man will, aber in einem grossen Projekt in dem viele Entwickler arbeiten wäre sowas wohl eher, ich sag mal, kontraproduktiv und würde recht schnell zu einer Verkleinerung des Teams führen.
Ich hab Zugriff auf ein 8GB großes CVS, glaubst du, dass ich in einem 1 Mann Betrieb arbeite?
>>>Ist das Programm schneller? Schützt du die Umwelt weil du weniger Speicher verbrauchst? Werden die binaries kleiner? Wird es schneller compiliert?
Verarschen kann ich mich selbst.
Der Vorteil der Zeile ist, wie ich es oben schon erwähnt habe, man sieht, die komplette Aktion in einer Zeile, wer eine Zeile mit so einem simplen Code nicht lesen kann, der dürfte bei uns nicht mal als Praktikant anfangen :-)
Es kommt natürlich immer auf die Schwierigkeit einer Routine an, ich sag ja nicht, dass mein ganzer Code so geschrieben wird, aber sowas einfaches wie da oben, while if und noch nicht mal else, da frag ich mich dann schon, wo ihr da Probleme damit habt?
Aber lassen wir das, ich muss wieder was arbeiten.
Dir ist in Deinem Durcheinander wohl aufgefallen, dass Du beim Ausprinten einen Teil des Pfades unterschlagen hast (Stichwort: $m) -> wie war das mit dem Praktikanten in Eurer Firma.
Abschliessend hoffe ich nicht, dass Eurer ganzes 8 GB Repository mit solchen Fehlern gespickt ist!
> int gcd(int u, int v) > { > while( u > 0 ) > { > if( u < v ) { t = u; u = v; v = t; }
Das wuerde ich aber etwas anderst schreiben. Bis man merkt, dass t nur ein dummy ist, und dass hier ein "swap" ausgefuehrt wird, braucht man schon mindestens 5 sek Bedenkzeit (was relativ lang ist). Warum benutz der nicht std::swap? Oder nennt t besser dummy, oder tmp?
> u = u - v;
was soll das denn? jeder c/c++ programmierer schreibt da u -= v;
> } > return v; > }
Ich finde die folgende Loesung besser (die Einrueckung muss man sich denken):
template T gcd(T x, T y) { while( x > 0 ) { if( x < y ) std::swap(x,y); x -= y; } return y; }
Funzt auch mit long, char, short und auch mit eigenen Integer-Klassen.
Hmm, ich bin zwar kein C-Programmierer, jedoch frage ich mich, dass hier bei allen Verbesserungen des Algorithmus usw. nicht an das wichtigste gedacht wird: Kommentare
Wenn ihr mal ein 2-3 Jahre altes Programm von Euch selbst anschaut, dann seit ihr bestimmt froh, wenn ich wisst, warum ihr gerade in Zeile 1345 eine for-Schleife habt und nicht schon 10 Zeilen vorher bzw. was die for-Schleife hier macht. Das gleiche könnte man mit if, while, case, count,...........machen, aber bitte: Kommentieren
In meinem aktuellen Projekt habe ich etwa 2mal so viele Zeilen Kommentare im Quelltext als wirklichen Code, aber dafür weiss ich in 10 Jahren noch, warum ich eine scheiss if-Funktion für statische Indexwerte verwendet habe und nicht gleich eine case-Funktion.
Wenn man sich an die Grundregeln guten Programmierstils hält und logische Zusammenhänge in extra Funktionen packt, kann man zum grössten Teil auf Kommentare verzichten! Der Kommentar im Code soll ja nicht dazu gedacht sein, den Algorithmus zu erklären. Für sowas schreibt man eine Dokumentation.
Jede Variable und jedes Konstrukt in einen Kommentar zu kleiden, ist ein typischer Anfängerfehler. Schaut man sich BSD, Linux oder generell GPL-Code an, wo Experten am Werk waren (zum Beispiel im Kernel), sieht man das dort nur sehr massvoll von Kommentaren gebrauch gemacht wird...
Und ich kann Dir massig Coding zeigen, wo niemand mehr weiß, was das Zeug macht und wofür es gebraucht wird. Keiner getraut es sich zu löschen, da dann eventuell irgendetwas nicht mehr läuft. Kommentare sind wichtig, man braucht nicht zu übertreiben, aber ich hasse es, wenn hinter einer Variablendeklaration nicht wenigstens ein Text steht, wofür die nun gut sein soll. Wer schon mal C-Coding eines japanischen Programmierers mit jp. Variablennamen verstehen mußte, der weiß wovon ich rede. Dumm ist nur, wenn der Kommentar dann auch in jp. verfaßt ist.
"Algorithmen in C++" ist zwar nicht mehr ganz so taufrisch (habe hier die 1. Auflage von 1995), trotzdem ein Super Buch von dem Algorithmen-König Sedgewick :)
Handelt es sich bei dem hier beschriebenen Buch von 1999 um einen Nachdruck der ersten Auflage oder findet man dort neues?
Quark. Das einzig wahre ist Niklaus Wirths Algorithmen & Datenstrukturen ;-) Sedgewick ist schon sowas wie ein Standard. Da er viele Sachen so übernimmt (C->C++) frage ich mich wann er richtig abschreibt und dann C++-> Java herausbringt. Oder gibts das schon ? Gruss Frank
Unter Amazon.de gibt es hauptsächlich negative Rezensionen zu dem Buch. Angeblich lassen sich die meisten Beispiele ohne Modifizierungen nicht einmal kompilieren. Außerdem würde man sehen, daß es von einem Pascal-Programmierer geschrieben wurde.
Neulich kommt der Azubi zu mir, er versteht die Lösung im Sedgewick nicht. Angeschaut: Kann man auch nicht verstehen, die Lösung ist fehlerhaft. Arrays fangen in C eben bei 0 an, was dem Author wohl nicht so bewußt war. Offensichtlich wurde die Beispiele für C nie getestet, sondern einfach nur runtergeschrieben.
Aehnliche Erfahrungen hab ich mit dem Sedgewick auch gemacht. Aber selbst in der Pascalausgabe (war aber zugegebenermassen eine alte Ausgabe) sind einige Beispiele nicht lauffaehig, da der Code fehlerhaft ist.
Ferner ist der Code sehr verkuerzt abgedruckt, ueberhaupt nicht kommentiert und der Zusammenhang mit dem beschreibenden Text erschliesst sich einem Anfaenger auch nur sehr schwer.
Empfand ich damals als sehr frustrierend, das Ganze. Wenn man allerdings etwas fortgeschrittener ist, wird das Buch lesbarer und ist dann auch nicht uninteressant.
Hab waehrend des Studiums mal diese 'Algorithmen in ...' Serie angelesen und war nicht so besonders begeistert.
Wesentlich lesbarer fand' ich 'Algorithmen mit Perl' von O'Reilly. Das Buch ist (wie gewohnt von O'Reilly) gut lesbar, geht angemessen auf die Hintergruende ein und bringt gute implementationsbeispiele (fuer Perl entsprechend).
*augenverdreh* Wie kann man nur so negativ denken. Jetzt gibt es endlich mal freie und absolut erstklassige Schriften (die u.a. von Distributionen vertrieben und auch verbessert werden duerfen). So schlecht finde ich Vera Serif auch nicht, zumindest kann man es besser lesen als Luxi oder Nimbus und am wichtigsten sind doch auch Sans und Monotype. Keine Ahnung was Legaturen sind, da kannst du dich ja selbst informieren.
Deutsche Umlaute sind auf jeden Fall dabei, ich weiss nicht wie vollstaendig das ist. Da die Fonts frei sind, koennen die ja noch komplettiert werden in Zukunft. Probier es doch einfach aus. Oder schreib fi und fl aus (was auch immer das ist), dann kann ich dir sagen ob es richtig angezeigt wird.
Die Begeisterung kann ich nicht teilen. Die serifenlose Schrift wirkt eigenwillig, beinahe in Richtung "MS Comic". Und die Vera-Serifenschrift wünsche ich meinem ärgsten Feind nicht.
Auch Euch, dem PL-Team, ein schönes Osterfest! Ob nun mit Familie und Eiersuchen oder mit Freunden auf Osterflucht oder vor dem Keyboard - viel Spass und gute Erholung. Ausserdem einen Riesen-Dank für Eure Site und den Aufwand, die Zeit und die Liebe, die ihr in Euer Projekt hier steckt.
Mal sehen, ob ich mir demnächst wenigestens mal wieder einen Kurztipp aus den Fingern saugen kann. ;-)
Hy! ich möchte mir in nächster Zeit auch ein Buch über Algorithmen in C kaufen. Es wird ja eigentlich von allen der Sedgewicks empfohlen. Bei der Suche im Internet habe ich jetzt aber entdeckt, das es auch ein "Algorithmen mit C" von O'Reilly gibt. Eigentlich habe ich mit O'Reilly Büchern immer sehr gute Erfahrung gemacht. Kennt jemand eines der beiden Bücher oder im Idealfall beide und kann was dazu sagen? Wo ist mein Geld besser angelegt?
Ich kenne nur Algo. in C++ von Sed. u. bin der Meinung das das nur für sehr erfahrene Programmierer o. für Studenten ist. Bei mir lag es die ersten Jahre auch nur in der Ecke langsam benötige ich es ab und zu mal zB wenn man binäre baume durchfahren will. Ausserdehm ist es sehr trocken, also ich würde dir nur dazu raten wenn du ein Profi bist. Falls nicht fang mit etwas simplerem an da ist dein Geld viel besser investiert.
Hy! ich studiere Informatik, kann so ein Buch also durchaus gebrauchen. Es stellt sich nur die Frage Sedgewicks (den fast jeder empfiehlt) oder von O'Reilly (dessen Bücher mich bisher immer überzeugt haben).
erstmal den Standardtip, gehe zur Uni-Bibliothek und leihe Dir beide aus. Teilweise liegt es doch sehr am eigenen Stil, welches Buch einem mehr nuetzt. Falls es nicht unbedingt "C" sein muss, sondern eher Algorithmen im Mittelpunkt stehen sollen, fand ich "Introduction to Algorithms" von Cormen et al. recht gut.
Ja klar das Buch ist nix für Anfänger. Steht ja auch mehrfach auf den ersten Seiten, das es wohl auch als Lehrbuch fürs 2-3. Semester Informatik gedacht ist. Da darf man nun nicht gleich fertige Quelltexte ewarten, sonders muss das ganze wirklich als Lehrbuch betrachten um verschiedene Algorithmen zu verstehen. Wer fertig codierte Algorithmen braucht kann sich ja die verschieden Beispiel-Quelltexte die man so im Netz findet anschauen.
Ich finde das Sedgewick zurecht einen guten Namen hat und kann das Buch nur jedem empfehlen der sich intensiver mit der Materie beschäftigen will/muss.
Aber die Quelltexte sind doch drin. Sie sind allerdings fehlerhaft. Da schaut man sich den Algorithmus an, versucht ihn zu verstehen und schaut sich dann zur Kontrolle noch den Sourcecode an - und fällt auf die Nase. Gerade wenn ein Buch damit Werbung macht, daß die Beispiele nicht in Pseudocode, sondern in einer bestimmten Sprache sind kann man IMHO schon fehlerfreien Code erwarten.
Algorithmen in Java Algorithmen in c# Algorithmen in python ...
Bringt nur nicht viel, wenn im Grunde genommen immer noch in dem Stil programmiert wird, den man sich mal vor 30 Jahren angewoehnt hat. Mir wäre ein ausgereiftes Buch mit Pascal-Code allemal lieber, als die halbherzige Übersetzung einer Übersetzung.
Ich bin ja immer noch ein grosser Pascal Freak. Weiss einer ob man mit freien Compilern alte Turbo Pascal Programme compilieren kann? Welchen Ersatz gibt es für crt usw. Oder compilieren die tadellos? Wie viel Anpassungsaufwand ist notwendig und welchen Compiler ratet ihr mir? Kylix? Freepascal/Lazarus? GNU Pascal ecc.
spreche aus Erfahrung, habe das Buch für Prüfung in Alg+Datenstrukturen benutzt und war überhaupt nicht angetan. Meine subjetive Meinung ist, daß es ein wirklich schlechtes Buch ist, besonders bei komplexeren Alg. , von den abgedruckten Codefragmenten rede ich lieber erst gar nicht. Habe die Prüfung trotzdem bestanden,aber die 50 EUR kann man anders verwenden. Kenne den Wirth nicht, aber schlechter kann der bestimmt nicht sein.
Meistens sind Bücher dieser Art schlecht, weil sie dem Fortgeschrittenen nichts bieten. Akademische Bücher sind da nicht immer die Ausnaheme, aber meistens taugen frei im Web verfügbare Skripte recht viel.
Buchtechnisch eine kleine ausnahme ist das braindump buch von Christian Ullenbohm "Java ist auch eine Insel", war auch mal aus dem Netz einfach zu laden. Leider schreibt der nicht über C++ und für reine anfänger ein bisschen zu viel. Es gibt so viele schlechte Programmierlernbücher, manche mit elementaren Konzepten, die eher langweilen. Oder reine Referenzen, die aber meistens auch alles andere als komplett sind. Was mich mehr interessiert ist, wie ich ein Problem lösen kann.
... Buch über Algorithmen ist sowieso "Introduction to Algorithms" von Cormen und Konsorten. Besser geht's nicht. Fehlt nur noch eine gute deutsche Übersetzung.
Naja, wers unübersichtlich mag
x, y und z verwendet man übrigens in der Regel für double Werte.
Ich reden von Variablen die mit aussagekräftigen Namen wie k,q,p gesegnet sind.
Das trägt nicht unbedingt zum leichteren Verständis bei insbesondere wenn es sich um kompliziertere Algorithmen handelt. Das wirft meiner Meinung nach noch ein etwas negatives Licht auf das ansonst recht gut geschriebene Buch.
"C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable "tmp", which is much easier to write, and not the least more difficult to understand."
[...]
"Local variable names should be short, and to the point. If you have some random integer loop counter, it should probably be called "i". Calling it "loop_counter" is non-productive, if there is no chance of it being mis-understood. Similarly, "tmp" can be just about any type of variable that is used to hold a temporary value. If you are afraid to mix up your local variable names, you have another problem, which is called the function-growth-hormone-imbalance syndrome. See next chapter."
http://purists.org/linux/
kurze Namen a la i,j für Schleifen und tmp & Co sind ja ok. Aber für Lehrzwecke ist das absolut nicht geeignet. Schliesslich soll man den Code ja auch verstehen, ohne vorher mit 'n Textmarker alle Variablen markiert zu haben, oder? Und die Wartbarkeit des Codes bleibt ab einer gewissen Grösse auch auf der Strecke.
- Jens
int gcd(int u, int v)
{
while( u > 0 )
{
if( u < v ) { t = u; u = v; v = t; }
u = u - v;
}
return v;
}
int gcd() {
int t;
..
int gcd(int u, int v){while( u > 0 ){if( u < v ) {int t = u; u = v; v = t; }u = u - v;}return v;}
Oder so, auszug aus nem code den ich Gestern geschrieben habe:
foreach $S1 (@S1){foreach $I1 (@I1){if ($I1 eq $S1){`rm -f $Dir_Incoming1/$m/$I1`; print "Removing old log $Dir_Incoming1/$I1\n"; }}}
Nix für ungut, aber an sowas müsst ihr euch im wahren Leben gewöhnen.
>int gcd(int u, int v){while( u > 0 ){if( u < v ) {int t = u; u = v; v = t; }u = u - v;}return v;}
>
>Oder so, auszug aus nem code den ich Gestern geschrieben habe:
>
>foreach $S1 (@S1){foreach $I1 (@I1){if ($I1 eq $S1){`rm -f $Dir_Incoming1/$m/$I1`; print "Removing old log $Dir_Incoming1/$I1\n"; }}}
>
>Nix für ungut, aber an sowas müsst ihr euch im wahren Leben gewöhnen.
so ein Blech! Sitzt Du im Büro auch auf einem Nagelbrett? Denn Schrott verstehst Du doch selber schon in zwei Monaten nicht mehr! Was bitte spricht dagegen, den Code in mehrere Zeilen aufzuteilen? Habt Ihr im Büro nur 'n Braillezeile am PC oder was? *kopfschüttel*
- Jens
Absoluter Boedsinn! Wenn du das erst meinst, bist du zweifellos verrueckt!
Typische Perl-Pfuscher +bäh+.
Wenn ihr schon mal guten Perl Programmieren begegnet wärt, dann wäre obiges für euch normal, denn wir lieben Einzeiler, oder schreibst du in eine Konsole dann auch:
{
{
}
}
Also Jungs, wenn ihr auch mal Geld fürs Programmieren bekommt und zwar anständig, dann reden wir weiter.
Soll das später lesbarer sein? Oder wollt Ihr Papier sparen wenn Ihr Euern Quellcode audrucken müsst? Oder was?
perl -e 'opendir LOG, "/var/log"; while($list=readdir(LOG)){if($list=~m/(.*).gz/){print "$list\n";}}'
Schon mal Perl programmiert?
Man, wer nimmt schon Perl? Perl und seine Hilfskonstrukte fürs OOP?
Für was soll denn Perl nun der Bringer sein? Ein paar HTML-Seiten parsen?
Mach ich in der Bash, den Rest erledigt ein C-Prog und wenn ich bock
auf scripten habe nehme ich Python ;-).
Ehrlich ich habe mir 3 Jahre Perl reingezogen, aber dir Sprache ist von
hinten bis vorne reines Flickwerk.
mfg knutschi
Des weiteren macht - wie mein Vorposter schon richtig bemerkt hat - ein ls -1 /var/log/*.gz das selbe einfacher, lesbarer und performanter.
Und du bekommst wirklich Geld fuers programmieren? Traurig.
Ich sollte mich mit Leuten wie euch gar nicht unterhalten.
>>>>Am Anfang des Patterns nach .* zu suchen ist unsinnig.
Es hat niemand die Aufgabe gestellt, das die gesuchte Datei ein gz Archiv sein soll. Wenn ich nach nem gz Archiv suche, dann mache ich das so: ~m/.gz/g, ihr hättet sofort ne 6 bei mir, weil ich Sachen annehmt, die nicht dastehen. Im Zweifelsfalle wird sowas nachgefragt, wenn im Pflichtenheft nicht eindeutig definiert -- Anfänger.
P.S. ja ls *.gz tut eben nicht das gleiche, wie ich oben definiert hatte, denn mein perl Einzeiler sucht alles was .gz hat
... und noch ein bisschen mehr, wobei 'bisschen' hier schon sehr stark untertrieben ist.
Der regulaere Ausdruck, der Deine Spezifikation (bzw. einen entscheidenen Teil davon) erfuellt, muss lauten /\.gz/ (wobei hier "/" und "/" natuerlich nicht zum Ausdruck gehoeren, sondern ihn hier nur der Uebersichtlichkeit halber begrenzen).
Das Gleiche wie Dein "Einzeiler" wuerde dieser Befehl in der Shell bewirken: ls -1 /var/log/*.gz*
Die Klammern in Deinem Ausdruck sind nicht nur voellig ueberfluessig, sondern sogar kontraproduktiv.
Wenn ich nach nem gz Archiv suche, dann mache ich das so: ~m/.gz/g
Aehnlicher Fehler wie oben schon beschrieben (korrekt waere /\.gz$/) und ausserdem unnoetige Verwendung von Modifizierern.
[x] Deine Software ist closed source.
Asche auf mein Haupt, jetzt hab ich nen Troll gefuettert.
wenn Du für Dich so'n Einzeiler verbrichst ist das ok. In Programmen, und ganz besonders in komplizierten Abschnitten, schreibt man das eben nicht als Einzeiler (und dazu noch ohne Bemerkungen). Andere müssen den Code später schnell begreifen und ggf. ändern können. Das ist viel produktiver und steigert die Qualität der Software. Ein Verstoss gegen die Standards ist ein Abmahngrund!
- Jens
Und welöchen Vorteil hast du da?
Ist das Programm schneller? Schützt du die Umwelt weil du weniger Speicher verbrauchst? Werden die binaries kleiner? Wird es schneller compiliert?
Wohl eher nicht. In einer ein-Mann Softwareklitsch kann man das schon so machen wenn man will, aber in einem grossen Projekt in dem viele Entwickler arbeiten wäre sowas wohl eher, ich sag mal, kontraproduktiv und würde recht schnell zu einer Verkleinerung des Teams führen.
>>>Ist das Programm schneller? Schützt du die Umwelt weil du weniger Speicher verbrauchst? Werden die binaries kleiner? Wird es schneller compiliert?
Verarschen kann ich mich selbst.
Der Vorteil der Zeile ist, wie ich es oben schon erwähnt habe, man sieht, die komplette Aktion in einer Zeile, wer eine Zeile mit so einem simplen Code nicht lesen kann, der dürfte bei uns nicht mal als Praktikant anfangen :-)
Es kommt natürlich immer auf die Schwierigkeit einer Routine an, ich sag ja nicht, dass mein ganzer Code so geschrieben wird, aber sowas einfaches wie da oben, while if und noch nicht mal else, da frag ich mich dann schon, wo ihr da Probleme damit habt?
Aber lassen wir das, ich muss wieder was arbeiten.
Das hast Du mit Deiner Supercodezeile doch schon getan.
Dir ist in Deinem Durcheinander wohl aufgefallen, dass Du beim Ausprinten einen Teil des Pfades unterschlagen hast (Stichwort: $m) -> wie war das mit dem Praktikanten in Eurer Firma.
Abschliessend hoffe ich nicht, dass Eurer ganzes 8 GB Repository mit solchen Fehlern gespickt ist!
Aber er wollte ja nur sehen ob es jemand merkt... *gg*
> {
> while( u > 0 )
> {
> if( u < v ) { t = u; u = v; v = t; }
Das wuerde ich aber etwas anderst schreiben. Bis man merkt, dass t nur ein dummy ist, und dass hier ein "swap" ausgefuehrt wird, braucht man schon mindestens 5 sek Bedenkzeit (was relativ lang ist). Warum benutz der nicht std::swap? Oder nennt t besser dummy, oder tmp?
> u = u - v;
was soll das denn? jeder c/c++ programmierer schreibt da u -= v;
> }
> return v;
> }
Ich finde die folgende Loesung besser (die Einrueckung muss man sich denken):
template
T gcd(T x, T y)
{
while( x > 0 )
{
if( x < y )
std::swap(x,y);
x -= y;
}
return y;
}
Funzt auch mit long, char, short und auch mit eigenen Integer-Klassen.
template< typename T >
Kommentare
Wenn ihr mal ein 2-3 Jahre altes Programm von Euch selbst anschaut, dann seit ihr bestimmt froh, wenn ich wisst, warum ihr gerade in Zeile 1345 eine for-Schleife habt und nicht schon 10 Zeilen vorher bzw. was die for-Schleife hier macht. Das gleiche könnte man mit if, while, case, count,...........machen, aber bitte:
Kommentieren
In meinem aktuellen Projekt habe ich etwa 2mal so viele Zeilen Kommentare im Quelltext als wirklichen Code, aber dafür weiss ich in 10 Jahren noch, warum ich eine scheiss if-Funktion für statische Indexwerte verwendet habe und nicht gleich eine case-Funktion.
Der Kommentar im Code soll ja nicht dazu gedacht sein, den Algorithmus zu erklären. Für sowas schreibt man eine Dokumentation.
Jede Variable und jedes Konstrukt in einen Kommentar zu kleiden, ist ein typischer Anfängerfehler. Schaut man sich BSD, Linux oder generell GPL-Code an, wo Experten am Werk waren (zum Beispiel im Kernel), sieht man das dort nur sehr massvoll von Kommentaren gebrauch gemacht wird...
Handelt es sich bei dem hier beschriebenen Buch von 1999 um einen Nachdruck der ersten Auflage oder findet man dort neues?
Das einzig wahre ist Niklaus Wirths Algorithmen & Datenstrukturen ;-)
Sedgewick ist schon sowas wie ein Standard.
Da er viele Sachen so übernimmt (C->C++) frage ich mich wann er richtig abschreibt und
dann C++-> Java herausbringt.
Oder gibts das schon ?
Gruss Frank
Angeblich lassen sich die meisten Beispiele ohne Modifizierungen nicht einmal kompilieren. Außerdem würde man sehen, daß es von einem Pascal-Programmierer geschrieben wurde.
Siehe hier die Kommentare.
Etwas besser schneidet da schon das Buch in Pascal mit dem Titel "Algorythmen", das man hier nachlsesen kann.
Und wie man hier lesen kann, versucht er sich nun nach "Algorythmen", "Algorythmen in C" und "Algorythmen in C++" nun am Buch "Algorythmen in Java".
bye
Markus
Ferner ist der Code sehr verkuerzt abgedruckt, ueberhaupt nicht kommentiert und der Zusammenhang mit dem beschreibenden Text erschliesst sich einem Anfaenger auch nur sehr schwer.
Empfand ich damals als sehr frustrierend, das Ganze. Wenn man allerdings etwas fortgeschrittener ist, wird das Buch lesbarer und ist dann auch nicht uninteressant.
nufap
Gruss, Gernot
nufap
Wesentlich lesbarer fand' ich 'Algorithmen mit Perl' von O'Reilly. Das Buch ist (wie gewohnt von O'Reilly) gut lesbar, geht angemessen auf die Hintergruende ein und bringt gute implementationsbeispiele (fuer Perl entsprechend).
Jeff
Btw: Seit gestern ist übrigens das erste Release von den Bitream Vera Fonts draußen.
Downloaden kann man sie hier.
Sind Legaturen auch dabei?
Wie kann man nur so negativ denken. Jetzt gibt es endlich mal freie und absolut erstklassige Schriften (die u.a. von Distributionen vertrieben und auch verbessert werden duerfen). So schlecht finde ich Vera Serif auch nicht, zumindest kann man es besser lesen als Luxi oder Nimbus und am wichtigsten sind doch auch Sans und Monotype.
Keine Ahnung was Legaturen sind, da kannst du dich ja selbst informieren.
Aber fi, fl, etc. interessieren mich eigentlich.
Mal sehen, ob ich mir demnächst wenigestens mal wieder einen Kurztipp aus den Fingern saugen kann. ;-)
Jochen
ich möchte mir in nächster Zeit auch ein Buch über Algorithmen in C kaufen.
Es wird ja eigentlich von allen der Sedgewicks empfohlen. Bei der Suche im Internet habe ich jetzt aber entdeckt, das es auch ein "Algorithmen mit C" von O'Reilly gibt.
Eigentlich habe ich mit O'Reilly Büchern immer sehr gute Erfahrung gemacht. Kennt jemand eines der beiden Bücher oder im Idealfall beide und kann was dazu sagen? Wo ist mein Geld besser angelegt?
Thx
cc
ich studiere Informatik, kann so ein Buch also durchaus gebrauchen.
Es stellt sich nur die Frage Sedgewicks (den fast jeder empfiehlt) oder von O'Reilly (dessen Bücher mich bisher immer überzeugt haben).
erstmal den Standardtip, gehe zur Uni-Bibliothek und leihe Dir beide aus. Teilweise liegt es doch sehr am eigenen Stil, welches Buch einem mehr nuetzt. Falls es nicht unbedingt "C" sein muss, sondern eher Algorithmen im Mittelpunkt stehen sollen, fand ich "Introduction to Algorithms" von Cormen et al. recht gut.
erschien 2002.
Ob hier der Quellcode fehlerfrei ist kann ich aber noch nicht sagen,
da ich noch keine Zeit gefunden habe mir das Buch durchzulesen.
Wer fertig codierte Algorithmen braucht kann sich ja die verschieden Beispiel-Quelltexte die man so im Netz findet anschauen.
Ich finde das Sedgewick zurecht einen guten Namen hat und kann das Buch nur jedem empfehlen der sich intensiver mit der Materie beschäftigen will/muss.
bye
Markus
Algorithmen in c#
Algorithmen in python
...
Bringt nur nicht viel, wenn im Grunde genommen immer noch in dem Stil programmiert wird, den man sich mal vor 30 Jahren angewoehnt hat. Mir wäre ein ausgereiftes Buch mit Pascal-Code allemal lieber, als die halbherzige Übersetzung einer Übersetzung.
Ich bin ja immer noch ein grosser Pascal Freak. Weiss einer ob man mit freien Compilern alte Turbo Pascal Programme compilieren kann? Welchen Ersatz gibt es für crt usw. Oder compilieren die tadellos? Wie viel Anpassungsaufwand ist notwendig und welchen Compiler ratet ihr mir? Kylix? Freepascal/Lazarus? GNU Pascal ecc.
Wenn es schön sein soll: FreePascal, wenn es portabel über Architekturen sein soll: GNU Pascal, wenn es nichts werden soll: Kylix.
Gruss, Gernot
überhaupt nicht angetan.
Meine subjetive Meinung ist, daß es ein wirklich schlechtes Buch ist,
besonders bei komplexeren Alg. , von den abgedruckten Codefragmenten rede ich
lieber erst gar nicht.
Habe die Prüfung trotzdem bestanden,aber die 50 EUR kann man anders verwenden.
Kenne den Wirth nicht, aber schlechter kann der bestimmt nicht sein.
Buchtechnisch eine kleine ausnahme ist das braindump buch von Christian Ullenbohm "Java ist auch eine Insel", war auch mal aus dem Netz einfach zu laden. Leider schreibt der nicht über C++ und für reine anfänger ein bisschen zu viel. Es gibt so viele schlechte Programmierlernbücher, manche mit elementaren Konzepten, die eher langweilen. Oder reine Referenzen, die aber meistens auch alles andere als komplett sind. Was mich mehr interessiert ist, wie ich ein Problem lösen kann.