Zum Inhalt springen

Orffi

Mitglieder
  • Gesamte Inhalte

    252
  • Benutzer seit

  • Letzter Besuch

Beiträge von Orffi

  1. Um eine defintive Aussage zu geben, ist es zu wenig Text. Ich weiß zum Beispiel nicht was \pi nun genau ist. Es ist vom Prinzip her eine worst-case Abschätzung. Man möchte wissen, wie der Baum schlimmstenfalls aussehen kann.

    Die Höhe eines Baumes ist der größte Abstand von der Wurzel zu irgendeinem Knoten. Wenn ich die Elemente von \pi untereinander Schreibe, dann habe habe ich die Höhe |\pi|. Wenn ich nun alle \pi_i, i\in{1,..,n} untereinander schreibe, dann hätte ich die Summe \sum_{i=1}^n\|\pi_i\|Und höher, das leuchtet wohl ein, kann der Baum nicht sein.

    Wenn man sich die Breite des Baumes ansieht, dann ist bei einem binären Baum (sagt der Text was über die Baumart aus??) der Höhe n die Breite n+1. Wenn ich jetzt meinen Baum aus \pi_1 aufbaue und dann an jedes Blatt den Baum \pi_2 anhänge, dann komme ich auf die Breite des Baumes. Wenn ich zwei Bäume der Breite 3 und 4 habe, dann habe ich bei dem neuen Baum die Breite 12. Man kann das beweisen, vollständige Indunktion ist die Methode der Wahl, ist aber nicht sonderlich spannend.

    HTH

    Jan

  2. int main () oder int main (void) ist korrekt in C und C++. main() oder main (void) ist in C korrekt, allerdings nur dort (ANSI-Standard); bei C99 und C++ ist dies nicht zulässig. Richtig schön sind die beiden letzten Varianten (ohne int) sowieso nicht (schlechter Stil) und man sollte die ersten beiden Varianten verwenden, die auch in C++ und C99 zulässig sind.

    Zu void:

    void kann man sich als einen Datentyp vorstellen, dessen Wertemenge leer ist. Wie themaster schon meinte, benutzt man void, wenn eine Funktion keinen Wert zurückliefert (in Pascal wäre es eine Prozedur). Wenn Du eine Funktion schreiben würdest, die einen Text ausgibt, möchtest Du ja nicht unbedingt einen Rückgabewert haben. (Beachte: printf liefert int zurück)

    Zu public:

    public ist kein C! public bedeutet in C++, daß man auf eine Funktion "von außen" zugreifen kann. Es gibt public, private und protected. Wenn man eine Klasse programmiert, möchte man nicht, daß Variablen direkt verändert werden können, weil die Werte zum Beispiel nur einen bestimmten Wertebereich liegen sollen. Dann würde man die Variablen als private deklarieren. Man kann also nicht von außen auf die Variablen zugreifen, sondern nur das Objekt selbst kann die Werte verändern. Um sie zu verändern braucht man nun eine Funktion, die sollte public sein, damit sie auch von außen aufgerufen werden kann. In dieser Funktion kann man nun testen, ob der Wert für die Variable ein gültiger ist. Wenn dem so ist, kann man die Variable in der Funktion mit einem neuen Wert belegen. Wenn man Klassenhierachien (führt jetzt viel zu weg vom Thema) hat, dann benötigt man (wenn man dann will) protected.

    return:

    Mit return springt man aus einer Funktion zurück zur aufrufenden Funktion. Wenn man return x schreibt, wird der Wert x zurückgegeben. x muß den gleichen Datentyp haben, wie der Datentyp, der als Rückgabetyp bei der Funktion angegeben wurde.

    HTH

    Jan

  3. Wo ist das Problem, wenn die erste Null ist :confused:

    Natürlich war es eine rhetorische Frage von Klotzkopp, aber um keine Mißverständnisse aufkommen zu lassen: Man darf sehr wohl 0/x mit x!=0 berechnen. Das Ergebnis ist 0. Ist ja auch logisch. Wenn ich eine Tafel Schokolade an 3 Kinder (gerecht) verteilen will, bekommt jeder ein Drittel. Wenn ich aber gar keine Tafel Schokolade habe, dann kann ich auch keine Schokolade verteilen, also 0/3=0

    HTH

    Jan

  4. In solchen Fällen empfehle ich eher Bücher, die völlig abgehoben von irgendwelchen Entwicklungsumgebungen die Sprache erklären. ich persönlich bin ein großer "Fan" von Bruce Eckel, "Thinking In C++". Wie der Titel schon erahnen läßt ist das Buch in Englsich geschrieben. Es gibt, so weit ich weiß, keine übersetzung, läßt sich aber leicht lesen. Es gibt es auch online als PDF-Datei, wenn Du vorher 'reinschauen willst, bevor Du es kaufst.

    http://www.mindview.net/Books/DownloadSites Von dort gehen die Mirror Sites ab, wo Du das Buch herunterladen kannst.

    HTH

    Jan

  5. ??? Wie Du kennst die Funktionen, kannst sie aber nicht anwenden? Aber egal, wenn Du eh in C++ programmierst, dann solltest Du die Typen ifstream und ofstream benutzen...

    Zum Beispiel:

    ofstream out ("test.txt");

    string txt ="hallo welt";

    out << txt;

    HTH

    Jan

  6. Einige haben es ja schon herausbekommen: die Funktion liefert das kleinste Element in einem Array zurück.

    Es stimmt, die for-Schleife ist in Wahrheit eine while-Schleife, aber sie hätte bei weitem nicht so verwirrt. Die Funktionsweise beruht darauf, daß bei einer &&-Verknüpfung der 2. Teil nicht mehr ausgeführt wird, wenn der erste Teil schon false ist, da bei && ja beide Teile true sein müssen, daß mit insgesamt true herauskommt. Wenn der erste Teil schon false ist, barucht man den 2. Teil nict mehr: es kommt auf jeden Fall false heraus. Deswegen wird auch das ganze Array durchgearbeitet.

    Jan

  7. Hallo zusammen!

    Eigentlich könnte das folgende Rätsel auch in das Java-Forum passen, aber da es nicht ernst gemeint ist, habe ich es hier gepostet. Was macht folgende Funktion:

    
    protected static int function ( int v[] )
    
    {
    
        int I = 0, l = v.length - 1;
    
    
        for(;!(v[I]>=v[l--]&&++l==I++);
    
    
        return v[l];
    
    }[/code]

    Aber nicht einfach in den Compiler stopfen und schauen, was passiert...

    Viel Spaß

    Jan

  8. @Crush

    Du vergißt eine Kleinigkeit: In den 70er Jahren gab es noch keinen Pentium Pro. Also dauerte "damals" die Rechnung auch länger und deshalb machte es aus der Sicht von "damals" auch Sinn, auf die "Rechnung" -1 zu verzeichten.

    Wobei ich dabei bleibe, daß 0,00000000025 immer noch nicht 0 ist und nicht jeder hat einen 1GHz Rechner zu Hause 'rumfliegen.

    Jan

  9. Mit Standard C geht es überhaupt nicht. Wenn Du "Features" Deiner Entwicklungsumgebung benutzen willst, dann solltest Du sagen, was Du benutzt, zum Beispiel MSVC++ oder BCB. Dann ist dies aber das falsche Forum, es würde in das IDE-Forum gehören.

    HTH

    Jan

  10. Und genau das würde dann der Kompiler machen.

    Aha, was der Compiler nicht alles so macht. Das müßt ihr mir dann schon mal erklären, wie er Berechnungen zur Compilezeit durchführt, die er aber erst zur Laufzeit durchführen kann. Wenn ich nämlich ein dynamisches Array habe, dann kann ich doch noch nicht zur Compilezeit wissen, von welchem Wert ich 1 abziehen soll.

    Man könnte genauso gut array[5] = *array+1 - *array+5 nehmen und in *array+0

    Es fehlen die Klammern.... *(array+1) ist das 2 Element im Array, *array+1 ist das erste Element im array plus 1 (array[0]+1).

    Zum Thema Unwissenheit:

    "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."

    -> stimmt nicht ganz, einfach immer vor der Eingabe von dem Zähler 1 abziehen und bei der Ausgabe draufrechnen und das Programm kann den Index unverändert übernehmen: Zeitdifferenz nahezu gegen 0.

    Ich frage mich ja ehrlich ob Du den Unterschied zwischen 0 und nahezu gegen 0 kennst? Ich persönlcih sehe nämlich keinen Unterschied zwischen "kostet ein bißchen Zeit" und kostet Zeit die nahezu gegen 0 geht.

    Ich finde, ihr redet an dem Problem vorbei. Die Frage ist doch, warum fängt man bei 0 an zu Zählen !?!

    Und um das zu begründen müßte man in die "Tiefe der Zeit" hinabsteigen, und sich fragen, ab wann und warum angefangen worden ist, mit 0 zu zählen.

    Natürlich konnte man erst bei 0 anfangen zu zählen, als diese "entdeckt" worden ist. Aber auch heute wird nicht generell bei 0 angefangen zu Zählen. Viele definieren die natürlichen Zahlen so: N={1,2,3...} (und es liegt sicherlich nicht daran, daß sie die 0 nicht kennen). Die Diskussion geht also schon in die richtige Richtung.

    Jan

  11. 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:

    In ein char* etwas von Tastatur einlesen - das geht ja nicht, oder?
    Das kann nicht gehen, weil Du für char* ja Speciher beschaffen mußt und Du letztendlich wieder beim Array-Problem bist
  12. Ganz einfach: Es ist so wie es ist.

    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

  13. 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

  14. 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

  15. 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

  16. 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

  17. Original geschrieben von Hoernchenmeister81

    Naja mal sehen, ist ja noch eineinhalb Jahre hin...

    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

  18. @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

  19. 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

  20. "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

  21. 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

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...