Hilfe ! Ich kann nicht programmieren ...



  • @Hume: Sorry, war auch nicht gerade ontopic, aber Jenni hat sich auch nicht nochmal gemeldet und mir schien's eher, als wolle sie das Programm zugemailt bekommen als C++ lernen, um die Aufgabe zu lösen.



  • Optimizer schrieb:

    Bei welcher Uni lernt man C++ als Einstiegssprache?

    Bei uns z.B. an der RWTH Aachen. Warum sollte es keine Einstiegssprache sein? Naja, mit deinem Gelabere hast du den Thread eh schon totgequatscht.



  • rofl



  • Ich mein auch, dass das kein Problem darstellen sollte.

    Ist doch nicht so schwierig, wenn das sogar Kinder lernen können, was gibt es dagegen einzuwenden?



  • Nichts. Ich finde nur, dass Java geeigneter (nicht besser) zum Einstieg in die Programmierung ist, weil es für Anfänger weniger Stolpersteine bereithält (Arrays, undefiniertes Verhalten, etc.) und insgesamt strenger und eindeutiger ist (Initialisierung von Variablen, Behandeln von Exceptions, etc.).

    btw, ich glaube nicht, dass die von dir zitierten "Kinder" im Allgemeinen C++ so programmieren, wie man es sollte oder OOP richtig anwenden und die Möglichkeiten von C++ ausschöpfen.



  • @Optimizer: Ohne "fortgeschrittenere" Konzepte wie Pointer usw. ist C++ aber auch lammfromm. Reduziere die Sprache C++ auf die paar in Java enthaltenen Features und du hast eine harmlose Sprache.



  • Das stimmt so nicht. Java kennt auch Pointer, auch wenn du nicht an deren Adressen kommst (was ja die eigentliche Sicherheit ist).
    Und Arrays sind wirklich verdammt gefährlich. Nicht, dass ich damit nicht klar komme, aber als Anfänger findet man so einen Fehler einfach nicht, wenn man z.B. [konstruiert]in einer for-Schleife was verplant, über den Index hinausgeht und den Wert einer anderen Variablen versehentlich ändert[/konstruiert].

    Außerdem ist Java typenstrenger, int[], ist in C++ alles ein Zeiger und kann genauso gut auf ein new int zeigen.
    Und wenn man eine Referenz auf ein Array als Parameter übergibt (in Java), lässt sich bei dem Array sogar immer noch die Länge abfragen.
    Wenn du in C++ ein int* kriegst, dann weisst du nicht, was das überhaupt ist, bzw wie weit du mit dem Index gehen kannst.

    Das mit dem reduzieren auf harmlose Sprachmittel funktioniert also nicht, weil ein Array und ein Pointer ist ja nicht gerade was fortgeschrittenes.

    Wie gesagt, ich rede von Stolperfallen für Anfänger. Was ich allerdings in Java echt schlecht finde, ist dass man offenbar Objekte nicht final übergeben kann (oder bin ich zu blöd dafür? 🙄 ).



  • ist doch interessant, dass alle die ihre aufgaben gelöst haben wollen, dem namen nach frauen sind =).



  • E: ein beliebiger Array a
    F: Berechnung von 4 zufälligen Teilmengen aus verschiedenen
    Elementen von a (Wann gibt es mindestens 4 Teilmengen?
    Kontrolle!)
    A: die berechneten Teilmengen jeweils untereinander

    Legende

    E: Eingaben
    F: Funktionen, welche die Eingaben verarbeiten
    A: Ausgaben

    Kann mir mal jemand erklären was hier genau gemacht werden soll?
    Ich versteh das nicht ganz, liegt vllt. auch an den ziemlich kanpp gefassten
    Aufgabestellungen.
    Nein dieses mal mach ich keinem die Hausaufgaben, aber habe Lust es für mich
    persönlich zu machen 🙂



  • Optimizer schrieb:

    Das stimmt so nicht. Java kennt auch Pointer, auch wenn du nicht an deren Adressen kommst (was ja die eigentliche Sicherheit ist).

    Meinst du diesen verstümmelten Mischmasch aus einem Pointer und einer Referenz? Also da fühle ich mich in C++ sicherer.

    Optimizer schrieb:

    Nicht, dass ich damit nicht klar komme, aber als Anfänger findet man so einen Fehler einfach nicht, wenn man z.B. [konstruiert]in einer for-Schleife was verplant, über den Index hinausgeht und den Wert einer anderen Variablen versehentlich ändert[/konstruiert].

    Wo ist der Unteschied? Java schmeißt ne exception und in C++ schmiert das Programm mit einer access-violation ab.

    Optimizer schrieb:

    Wenn du in C++ ein int* kriegst, dann weisst du nicht, was das überhaupt ist, bzw wie weit du mit dem Index gehen kannst.

    Wenn du eine Object-Referenz bekommst weißt du auch nicht was das ist. Zeigerarithmetik kennt Java nicht und deswegen hinkt der letzte Teil des Vergleichs.

    Optimizer schrieb:

    Das mit dem reduzieren auf harmlose Sprachmittel funktioniert also nicht, weil ein Array und ein Pointer ist ja nicht gerade was fortgeschrittenes.

    Knock knock. Man muss Pointer aber nicht benutzen wenn man nicht will.



  • MaSTaH schrieb:

    Meinst du diesen verstümmelten Mischmasch aus einem Pointer und einer Referenz? Also da fühle ich mich in C++ sicherer.

    Völlig unabhängig davon, wie du dich fühlst, sind die Referenztypen in Java faktisch sicherer. Man kann nicht die Adresse manipulieren und wenn man das Zielobjekt ändert (oder auf null setzt) und das Objekt nicht mehr referenziert wird, sammelt es der Garbage Collector auf.
    Und das einzige, was "verstümmelt" ist, ist dass man es nicht dereferenzieren muss.

    MaSTaH schrieb:

    Wo ist der Unteschied? Java schmeißt ne exception und in C++ schmiert das Programm mit einer access-violation ab.

    DAS ist eben nicht gesagt. Darauf kannst du dich nicht verlassen. Stattdessen kannst du auch den Wert von ein paar Variablen in deinem Programm überschreiben oder irgendeinen Mist auslesen.

    MaSTaH schrieb:

    Wenn du eine Object-Referenz bekommst weißt du auch nicht was das ist. Zeigerarithmetik kennt Java nicht und deswegen hinkt der letzte Teil des Vergleichs.

    Ich kann immer abfragen, auf was für einen Typ die Referenz zeigt. Außerdem ist mir nicht ganz klar, was du jetzt meinst. Ich habe von Typensicherheit geredet.

    MaSTaH schrieb:

    Knock knock. Man muss Pointer aber nicht benutzen wenn man nicht will.

    Ähm doch. Mir ist sonst keine Möglichkeit zum dynamischen Binden bekannt. Oder sagen wir es so. Ohne Pointer sind deine Möglichkeiten *sehr* eingeschränkt.



  • wer raw-pointer und raw-arrazs verwendet, der lebt nicht in der heutigen Welt.

    In C++ schreibt man sich ne Klasse die die Arbeit uebernimmt, zB boost::array. Dort fuegt man dann noch asserts ein - und man ist auf der sicheren Seite.

    Also Java ist da nicht wirklich sicherer - nur einfacher. Das einzige was schoen ist, ist dass ein Fehler nur einen Teil des Programmes zum abschmieren bringt.



  • @sirlant:
    - eingabe
    - abspeichern in einen array
    - berechnung von 4 disjunkten teilmengen
    - ausgabe
    mind 4 elemente -> sobal leere Menge ausgeschlossen ist

    bei uns an der FH hat man mit Scheme(lisp dialekt) und c++ angefangen



  • was bedeutet disjunktiv?



  • Shade Of Mine schrieb:

    wer raw-pointer und raw-arrazs verwendet, der lebt nicht in der heutigen Welt.

    In C++ schreibt man sich ne Klasse die die Arbeit uebernimmt, zB boost::array. Dort fuegt man dann noch asserts ein - und man ist auf der sicheren Seite.

    Was sind raw-pointer, raw-arrays und asserts?



  • Wenn du diese Elemente der Sprache direkt benutzt, da dort keine Überprüfungen
    stattfinden. Stattdessen ist es besser Klassen zu verwenden, welche diese direkte
    Arbeit übernehmen und dir eine komfortable und sichere Arbeit mit Arrays ermöglichen.
    Natürlich ist das etwas langsamer, aber dafür sicherer und höchstwarscheinlich
    schneller beim coden (man hat ja weniger Arbeit).



  • SirLant schrieb:

    Natürlich ist das etwas langsamer

    Ein assert() ist eine Überprüfung, die (normalerweise) beim Release ausgeschaltet wird -> nicht langsamer. boost::array und viele Pointer-Wrapper haben keinen Overhead verglichen mit dem rohen Original. Dafür machen std::auto_ptr, boost::scoped_ptr und Konsorten das Programm wesentlich sicherer, indem sie nur die gerade nötigen Operationen erlauben und dann auch vereinfachen.



  • ah...alles klar...jetzt bin ich wieder ein wenig schlauer 🙂
    danke!



  • SirLant schrieb:

    was bedeutet disjunktiv?

    und-terme mit oder-verknüpfung



  • Findet ihr nicht, ihr zieht den Thread ein wenig weit, dafür, dass Jenni sich nicht wieder gemeldet hat? ^^


Anmelden zum Antworten