Orffi
-
Gesamte Inhalte
252 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von Orffi
-
-
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
-
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
-
So weit ich weiß gibt es bei www.pronix.de einen C Kurs. Für Qualität und Richtigkeit überneme ich natürlich keine Haftung
Wenn ich es auf die Schnelle richtig gesehen habe, gibt es dort aber keine Übungen.
HTH
Jan
-
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
-
??? 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
-
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
-
Falsch...
Die Funktion erfüllt schon einen Zweck nur würde man es so nie schreiben.
Jan
-
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
-
@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
-
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
-
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+0Es 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
-
Und was machts Du, wenn jemand mehr als 8192 Zeichen eingeben will? Dann hast Du ein Problem!
Ich empfehle weiterhin string und stringstream, die in Standard-C++ enthalten sind.
Jan
-
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 bistIn ein char* etwas von Tastatur einlesen - das geht ja nicht, oder? -
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
-
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
-
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
-
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
-
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
-
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
-
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
-
@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
-
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
-
"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
-
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
??? Pattern Matching (ein wenig Theorie)
in Algorithmik
Geschrieben
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