Zum Inhalt springen

Orffi

Mitglieder
  • Gesamte Inhalte

    252
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Orffi

  1. Ich schließe aus Deinem Quelltext, daß Du C++ benutzt. In C++ gibt es die Klassen string und stringstream. Die kannst Du Dir ja mal ansehen, die organisieren den Speicherbedarf selber. HTH Jan PS: Das kann nicht gehen, weil Du für char* ja Speciher beschaffen mußt und Du letztendlich wieder beim Array-Problem bist
  2. Wenn schon, dann so:Ganz einfach, weil es im Standard festgeschrieben ist (siehe Abschnitt 8.3.4 im C++ Standard). Aber Klotzkopp hat den Nagel schon auf den Kopf getroffen und auch eine viel anschaulichere Antwort gegeben. Der Compiler versteht array[5] als *(array + 5), was ja bedeutet, daß man 5 auf seine Ursprungsadresse aufaddiert und davon sich den Inhalt geben läßt. Da man aber schon an der ersten Adresse (*array) schon Daten speichern kann und es auch tut, weil man sonst Speicher verschenken würde, ist array[5] das 6. Datum. Aber nicht verwechseln: type array[5] sind hat nur Platz für 5 Daten; nämlich von array[0]..array[4]. Da der Compiler nur *(array + 5) sieht, darf man auch, wie Klotzkopp schon schrieb, auch 5[array] schreiben, weil es für den Compiler *(5 + array) aussieht. Da wir uns in abelschen mathematischen Gebilden befinden, ist 5+array=array+5. Daß man bei 0 anfängt zu zählen, ist also zum Einen im Standard festgelegt und zum Anderen durch die Vernunft, denn wenn man bei 1 anfangen würde, würde man einen Speicherpaltz verschenken. Natürlich könnte man array[5] als *(array + 5 - 1 ) definieren, aber dann müßte man immer rechnen un das kostet (wenn auch nicht viel) Zeit. Jan
  3. cout und cin sind keine Befehle. Es sind beides Objekte. cout ist vom Typ ostream und cin ist vom Typ istream. << ist der normale Operator zum Verschieben von Bits, wurde aber bei diesen Typen überladen. Jan
  4. Ich dachte immer, daß was der Erfinder zu seiner Sprache sagt, wäre korrekt, aber hier habt alle wahrscheinlich die richtige Ausgabe vom Stroustrup und nur meine ist falsch, wo ketzerisch behaupt wird, daß es c plus plus heißt. Aber bevor ich wieder schuld bin, daß ein Thread geschlossen wird: Ich stimme Manne zu. Zum C++ lernen braucht man keine große Compiler-Umgebungen. Es versperrt den Blick auf ISO-C++, da es in den Entwicklungsumgebungen so viele Erweiterungen gibt, die nicht Standard sind. Aber die Standardkonformität vom BCB ist sehr löblich und es macht keinen Sinn mit einem alten C++-Compiler C++ zu lernen, weil dort vielleicht schöne "Features" wie Templates fehlen. Außerdem hat der BCB ein Kommandozeilenprogramm, so daß man mit einem x-beliebigem Editor seine Programme schreiben kann und sie via Kommandozeile compilieren kann. Bei den ersten Schritten kann man so auf die Entwicklungsumgebung verzichten und wird nicht von "unnötigen Beiwerk" erschlagen. Jan
  5. Das T bei zum Beispiel TEdit steht für Type. Ich kenn aber keine Programmiersprache die C doppelplus heißt, höchstens C plusplus ;-) Nachzulesen im Stroustrup. Aber jetzt zur Frage, welcher Compiler der Bessere ist. Wie schon viele vor mir meinten, ist es sicherlich eine Geschmackssache. Ohne selbst richtig mit MS Visual C++ gearbeitet zu haben, kann ich aber sagen, daß MSVC++ besser geeignet ist, wenn man in den Eingeweiden von Windows 'rumgraben möchte. Im Netz findet man natürlich auch viel mehr Beispiel für MSVC++. Was mich ein wenig an BCB stört, ist, daß die VCL in Pascal geschrieben ist. Ab und zu erinnert der BCB sowieso eher an Delphi, der nur C++-Syntax statt Objekt-Pascal benutzt. Aber ich bin trotzdem (ich habe ja nur Negativpunkte angeführt) sehr, sehr zufrieden mit BCB und, daß er über dermaßen unstabil sein soll kann ich nicht bestätigen. BCB 1.0 war wohl extrem schlecht und auch die 5.0 soll (ich selbst habe nur mit 3.0 und 4.0 gearbeitet) soll vor dem 1. Update ein wenig "wackelig" gewesen sein. HTH Jan
  6. Orffi

    Flächenberechnung

    Zuerst etwas Wichtiges vorweg: Ich bin davon ausgegangen, daß DU die Flächen von regelmäßigen n-Ecken berechnen möchtest. Dann ist auch die Berechnung von alpha klar: alpha = 360/n. Jetzt solltest Du alles zusammen haben, es sei denn Du willst Flächen von nicht regelmäßigen n-Ecken berechnen... HTH Jan
  7. Orffi

    Flächenberechnung

    Normalerweise hätte ich jetzt mit einem Link zu den Online-Seiten vom Bronstein geantwortet, aber die Seiten sind zur Zeit nicht erreichbar, weil die Lizenz ausgelaufen ist und die Neuverhandlungen noch laufen. Flächeninhalt: 0.5n*a*r, wobei n die Anzahl der Ecken ist, a, die Kantenlänge und r der Innenkreisradius. Inkreisradius will heißen: Die Länge vom Mittelpunkt aus zum Rand (nicht zur Ecke, sondern wirklich zur Kante). Also vonder Mitte einen geraden Strich nach oben, unten links, rechts. Wenn Du keinen Inkreisradius hast, dann kannst Du folgende, etwas andere Formel nehmen: 0.25*n*a²cot(alpha/2), wobei alpha folgender Winkel ist: Zwei benachbarte Ecken, von denen jeweils eine Linie zum Mittelpunkt führt. Der Winkel alpha ist der Winkel mit dem sich die beiden Linien im Mittelpunkt treffen. Den sollte man ausrechnen können... HTH Jan
  8. Gut, dann hast du ja auch noch 1,5 Jahre Zeit, die richtige Einstellung zum Studium zu bekommen. Natürlich besteht ein Studium nicht nur aus Auswendiglernen, sondern auch aus Verstehen und Anwenden. Glaube aber nicht, daß man für Verstehen und Anwenden keine Zeit aufwenden muß. Es dauert schon seine Zeit bis man sich seine "Trickkiste" angelegt hat und den mathematischen Blick besitzt. Es ist auch normal, daß man eine Aufgabe bekommt, für die man gerne mal einen Nachmittag braucht. Den Uni-Alltag kann man überhaupt nicht mit dem Schul-Alltag vergleichen. Jan
  9. @Hoernchenmeister81: Ich will Dich ja nicht entmutigen, aber es ist nicht ganz so einfach, wie Du Dir das Vorstellst. Ich weiß nicht, wie gut Du in Mathe bist, aber ich kenne nicht all zu viele Studenten, die ein Mathematikstudium durchziehen und nachmittags arbeiten. In den Semesterferien muß man je nach Uni für seine Prüfungen lernen, denn die liegen außerhalb der Vorlesungszeit. Aber das kann sich je nach Uni unterscheiden, da will ich mich nicht festlegen. Dann zum Thema Doktor: So einfach ist das auch nicht, je nach dem wo Du den Doktor machen willst; an der Uni oder im Betrieb. Es ist auf jeden Fall eine gute Idee sich mal ein Mathematik Vorlesungen anzuhören. Ansonsten wünsche ich Dir viel Erfolg. Jan
  10. Orffi

    Runden Funktion

    Gleich bekomme ich vom Moderator auf dem Kopf, weil es nicht mehr zum Thema gehört, aber trotzdem: Nur weil irgendetwas in irgendeinem Compiler funktioniert ist es noch lange nicht Standard. Ich weiß, daß es in ganz vielen Entwicklungsumgebungen funktioniert, aber daß erhebt die Schreibweise nicht zum Standard und macht sie auch nicht richtig. HTH Jan
  11. Orffi

    Runden Funktion

    "die Include Dateien sind alles *.h Dateien. " Da die Frage für C++ gilt, ist Deine Antwort nicht richtig. In C++ wird, wenn man den Standard mal genau liest, kein .h angehängt. Und zwar bei keiner Standarddatei. Es heißt #include <iostream> und nicht #include <iostream.h> weiter heißt es #include <cmath> und nicht #include <math.h>! HTH Jan
  12. Du bist hier im falschen Forum. "C++: Compiler, IDEs, APIs" wäre das richtige Forum gewesen. Vielleicht verschiebt Dich ein Moderator in das richtige Forum... Zu Deiner Frage: In den Hilfedateien, die mit dem C++Builder mitgeliefert werden, findet sich alles, was Du brauchst, sogar mit Beispielen. Starte einfach den C++Builder und klicke unter Hilfe Index ein. Dort einfach TIniFile eingeben und Du findest alles. HTH Jan
  13. Orffi

    Break

    Was geht denn hier ab? Wenn er die Frage nunmal hat, dann kann er sie ja auch stellen, wenn Du sie zu blöd findest, dann mußt Du ja nicht antworten. Aber das nur am Rande, worum es mir hauptsächlich geht, ist, daß MSDN hier völlig die falsche Adresse ist. Es mag sein, daß man dort eine Antwort findet (vielleicht sogar eine Richtige), aber MSDN ist nicht (ich wiederhole NICHT) die Instanz, die hier die Antworten gibt. Hier muß man im Sprachstandard nachsehen und nirgendwo sonst. Wenn man den nicht bei sich 'rumfliegen hat, dann kann mman auch in einem C++Buch nachsehen, aber nicht bei einem Hersteller von Compilern. Jan
  14. Dir braucht eigentlich keiner Aufschreiben, wie es funktioniert, denn mit dem C++Builder werden die Hilfedateien des MS SDK mitgeliefert. Dort findest Du alle Informationen. Am besten schaust Du Dir einmal an, wie ich GetComputerName benutzt habe und siehst Dir dann die Hilfe im SDK an. Das sollte einige Fragen klären, so daß Du alle API Befehlen benutzen kannst. Jan
  15. Orffi

    Break

    Abgesehen davon, daß ich den Begriff if-Schleife nicht besonders mag, muß man, so denke ich drei Dinge unterscheiden: break return exit break: Der C++ Standard besagt, daß break nur in "iteration statements" oder im switch block auftreten darf. Iteration statements sind while, do-while und for-Schleifen. break steigt aus der Schleife aus, beendet sie also. Wenn es noch eine äußere Schleife gibt wird die natürlich weiter ausgeführt. return: return springt aus der Funktion heraus, zurück zur aufrufenden Funktion. exit: exit ist eine Funktion aus <cstdlib>. exit (rückgabewert) beendet das Programm. Dem Aufrufenden Programm wird als Ergebnis der rückgabewert aus exit übergeben. Es gibt auch noch abort, dies sollte aber vermieden werden, weil híer das Programm nicht normal beendet wird. HTH Jan
  16. Ich habe mal schnell ein Beispiel für GetComputername zusammengekloppt. Es nicht besonders toll, zeigt wohl aber das Entscheidende. char compname[MAX_COMPUTERNAME_LENGTH+1]; unsigned long len = MAX_COMPUTERNAME_LENGTH + 1; if ( ::GetComputerName ( compname, &len ) ) { AnsiString name ( compname, len ); ShowMessage ( name ); } HTH Jan
  17. "generell kann man sagen, dass quick sort eigentlich das schnellste sortierverfahren ist, das existiert. " Und das kann man genau nicht sagen. Das von Dir schon erwähnte Heapsort ist im worst-case-Fall schneller als Quicksort. Quicksort hat im worst-case eine Laufzeit von O(n²) und im average-case O(n log n). Heapsort hat in beiden Fällen die Laufzeit O(n log n)! Es geht aber noch schneller: Wenn bestimmte Bedingungen erfüllt sind, kann ich auch in O(n) sortieren. Siehe Radix/BucketSort. Jan
  18. Du weißt aber schon, wie man Bubble Sort und Quick Sort in C++ programmiert, oder? Wenn dem so ist, dann sollte es ja nicht mehr so schwer sein, die Verfahren einzubinden. Die Frage, welcher Sortieralgorithmus am besten ist, läßt sich so generell nicht sagen. Aber wenn Du zum Beispiel nur 20 Einträge sortieren willst, dann kann man auch ganz gut mit einem Bubble Sort leben. Es lohnt sich manchmal eben nicht, irre viel Zeit und Komplexität in ein Sortierverfahren zu stopfen, das selten aufgerufen wird und keine großen Daten sortieren muß. HTH Jan
  19. Das ist leider nicht richtig. Ein BubbleSort ist immer mit einer Sortierung verbunden. Nur das Minimum zu finden sortiert die Daten nicht und verändert sie, im Gegensatz zu BubbleSort, auch nicht. Jan
  20. Jetzt geht hier aber einiges durcheinander. Wenn ich das Minimum finden möchte, dann muß ich wohl oder übel durch meine ganzen Daten "durchwandern". Es sei denn, ich habe eine Struktur, die beim Einfügen (oder sonstwann) sortiert. Dann kann ich ja wissen, daß das Minimum vorne oder auch hinten steht (je nach dem, wie man sortiert). Mit BubbleSort hat das nicht so viel zu tun. Eine Hashtable ist eine Struktur, die nicht sortiert. Hier weiß man nicht, an welcher Stelle das Minimum gespeichert ist. Also muß ich mir alle Werte anschauen, um das Minimum zu erhalten. Hallo Welt und BubbleSort haben übrigens durchaus ihre Berechtigungen, aber das würde hier wohl zu weit vom Thema wegführen. Jan
  21. Wenn Du BCB benutzt, dann gibt es in der Klasse TApplication eine Eigenschaft Namens ExeName. Dort ist der Name der Datei und der Pfad enthalten. HTH Jan
  22. Ich habe vor langer Zeit auch mal so ein Programm geschrieben. Ist nicht besonders hübsch, aber wen es stört, kann es ja ändern. Heute morgen hatte ich jedenfalls keine Lust dazu. Ich habe meine Funktion, die berechnet werden soll als Klasse implementiert und dann an das Template übergeben. # include <iostream> # include <math> class TIntervall { private: double FIntervall[2]; int FIntervallSwitch; public: TIntervall ( void ); TIntervall ( double, double ); void setIntervall ( double, double ); double getLowerBorder ( void ); double getHigherBorder ( void ); }; TIntervall :: TIntervall ( void ) { FIntervallSwitch = 0; FIntervall[0] = 0.0; FIntervall[1] = 0.0; } TIntervall :: TIntervall ( double a, double b ) { setIntervall ( a, b ); } void TIntervall :: setIntervall ( double a, double b ) { if ( a < b ) FIntervallSwitch = 0; else FIntervallSwitch = 1; FIntervall[FIntervallSwitch%2] = a; FIntervall[FIntervallSwitch%2+1] = b; } double TIntervall :: getLowerBorder ( void ) { return FIntervall[FIntervallSwitch%2]; } double TIntervall :: getHigherBorder ( void ) { return FIntervall[FIntervallSwitch%2+1]; } //--------------------------------------------------------------------------- template <class Function> class TTrapez { public: double integrate ( TIntervall, int ); }; template <class Function> double TTrapez <Function> :: integrate ( TIntervall inter, int n ) { Function f; double ret = f ( inter.getLowerBorder () ) + f ( inter.getHigherBorder () ); double step = ( inter.getHigherBorder () - inter.getLowerBorder () ) / n; for ( int i = 1; i < n; i++ ) ret += 2 * f ( inter.getLowerBorder () + i * step ); return ret * ( step / 2 ); } //--------------------------------------------------------------------------- template <class Function> class TSimpson { public: double integrate ( TIntervall, int ); }; template <class Function> double TSimpson <Function> :: integrate ( TIntervall inter, int n ) { Function f; double ret = f ( inter.getLowerBorder () ) + f ( inter.getHigherBorder () ); double step = ( inter.getHigherBorder () - inter.getLowerBorder () ) / ( 2 * n ); for ( int i = 1; i < ( 2 * n ); i++ ) ret += ( 2 * ( i % 2 ) + 2 ) * f ( inter.getLowerBorder () + i * step ); return ret * ( step / 3 ); } //--------------------------------------------------------------------------- class TSinus { public: double operator() ( double ); }; double TSinus :: operator () ( double x ) { return std::sin ( x ); } //--------------------------------------------------------------------------- int main ( void ) { TTrapez <TSinus> TrapezIntegral; TSimpson <TSinus> SimpsonIntegral; TIntervall intervall ( 0, 1 ); std::cout.precision ( 20 ); std::cout << "Ergebnisse fuer f(x) = sin(x) mit Trapezregel: " << std::endl; for ( int i = 1; i < 11; i++ ) { std::cout << "Fuer n = "; std::cout.width ( 2 ); std::cout << i << ": " << TrapezIntegral.integrate ( intervall, i ) << std::endl; } std::cout << std::endl << "Ergebnisse fuer f(x) = sin(x) mit Simpson-Regel: " << std::endl; for ( int i = 1; i < 11; i++ ) { std::cout << "Fuer n = "; std::cout.width ( 2 ); std::cout << i << ": " << SimpsonIntegral.integrate ( intervall, i ) << std::endl; } return 0; } HTH Jan
  23. Ich muß ein wenig raten, denn Du hast keine Fehlermeldung mitgeschickt. cout und endl sind im Namespace std. Wenn Du die beiden benutzen willst, mußt std::cout und std::endl schreiben. Das könnte ein Fehler sein, wenn das das Problem nicht behebt, dann poste bitte die Fehlermeldung und ein bißchen Code. HTH Jan
  24. Ist es eine Konsolenanwendung? Benutzt Du Win2k als Betriebssystem? Wenn Du beide Fragen mit ja beantworten kannst/mußt, gibt es keine Lösung. Jan
  25. Orffi

    Javadokumentation

    Bruce Eckel stellt auf seinen Seiten auch ein Java-Buch zum download zur Verfügung. http://www.mindview.net/Books Jan

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...