Wie programmiere ich einen Algorithmus

Dev-C++ ist kein Compiler, sondern eine IDE. Der von Dev-C++ verwendete Compiler ist der GCC.
 
Entweder du hast schonmal mit C++ gearbeitet ( wie du gesagt hast ), dann weisst du, welchen Compiler/welche IDE du verwenden solltest oder du benutzt die Boardsuche, denn diese Frage wurde schon oft genug gestellt.
 
Original von lightsaver
ach und bei dir klingt es immer so, als wär ein algorithmus was besonderes. letztendlich ist alles was du syntaktisch korrekt schreibst ein algorithmus. also selbst "while(true)" wäre einer (wenn auch eine unsinnige endlosschleife ;)

Nö, oder?

"Das Verfahren darf nur endlich viele Schritte benötigen (Terminierung, siehe auch Zeitkomplexität)."
 
wieso nö? ich hab das so gelernt, dass ein algo an sich erstmal nur eine beschreibung ist. es ist natürlich klar, dass while(true) nicht sinnvoll ist solange es für sich alleine steht, das habe ich aber auch geschrieben. letztendlich wird der computer die schleife aber solange ausführen, bis er entweder abstürzt oder der prozess anderweitig beendet wird. also tut die zeile genau das, was sie beschreibt.

klar kann man da nun noch irgendwelche spitzfindigkeiten in der definition suchen und wird sie auch finden, aber es geht hier ja nur darum, einem "anfänger" aufzuzeigen, in welcher richtung sein gedankengang falsch war. und dafür reicht das beispiel ;)
 
Afaik ist bedingung für einen Algorithmus, das dieser in endlicher Zeit terminiert - und das tut while(true){} nicht. Bin mir aber nicht 100%ig sicher.
 
Hallo,
Original von Gnome
Afaik ist bedingung für einen Algorithmus, das dieser in endlicher Zeit terminiert - und das tut while(true){} nicht. Bin mir aber nicht 100%ig sicher.
Es gibt keine wirkliche einheitliche Definition von Algorithmus, ist also alles mehr oder weniger schwammig und man kann sich darüber wunderbar streiten.

Wenn aber ein Algorithmus in endlicher Zeit terminiert, nennt man diesen auch terminierenden Algorithmus. Es gibt einige Algorithmen, die aber nicht terminierend sind, z.B. die Tiefensuche kann unter Umständen unendlich lange benötigen ohne das Ergebnis zu finden.
Steuerungssysteme, Betriebssysteme etc. sollen hingegen nicht terminieren, wobei normale nicht terminierende Algorithmen nur beschränkt Sinn machen.

Ansonsten ist ein Algorithmus einfach nur eine Handlungsvorschrift zum Lösen eines Problems, wobei while(True) { } an sich in meinen Augen noch kein Algorithmus darstellt, da dieses keine Handlungsvorschrift zum Lösen eines Problems ist.
Ansonsten wäre ne normale Schleife die alle Zahlen von 1 bis n summiert bereits ein Algorithmus.

Aber du willst jetzt nciht wirklich Walsh-transformationen und Gewichtungen der SBoxen mit monoalphabetischer Substitution gleichsetzen, oder?
Das Prinzip ist nahezu das gleiche, man nimmt einen Wert und ersetze diesen durch einen anderen. Bei der mono. Sub. macht man dies mit Buchstaben, bei S-Boxen z.B. mit einzelnen Bytes.
Gut, bei einer monoalphanetischen Substitution ist die Zuordnug was ich wie ersetze bereits der Schlüssel, während bei den meisten Algorithmen diese S-Boxen fest sind (eine Ausnahme ist z.B. Blowfish), aber ich sagte ja nur das Prinzip sei das gleiche.
Natürlich haben die S-Boxen in AES & Co. schon einen anderen Sinn, sie stellen nicht lineare Elemente dar um so lineare/differentielle Kryptoanalyse zu verhindern und müssen sehr sehr sorgfältig gewählt werden.

Aber im ursprünglichen Posts bezog ich mich aufs angebliche Verstehen von Algorithmen. Viele Leute, die behaupten die modernen Algorithmen verstanden zu haben, begründen den Einsatz von S-Boxen damit, dass dieses ja auch ganz gut bei der monoalphabetischen Substitution klappt (gleiches Prinzip). Bei sowas kann natürlich auch keine Hinterfragung entstehen, warum gerade genau solche S-Boxen? (Mal davon abgesehen, dass das eh nur wenige Menschen auf der Welt dies verstehen würden).
Aber bis man einen Algorithmus wirklich richtig verstanden hat, dauert das ganz schön lange. Ich würde von mir nicht behaupten, dass ich irgendeinen modernen (symmetrischen) Algorithmus schon vollständig verstanden habe, da selbst die Wahl von guten S-Boxen extrem schwierig ist und jede Menge von Know-How erfordert.


Ansonsten freut es mich natürlich, wenn jmd. meine Posts intressant findet. Habe den oberen Posts auch noch etwas erweitert (unter Edit).
 
hi leute habe gerade eure neuen antworten gelesen. Das es eine Erweiterung vom IDE Dev-C++ gibt wusste ich nicht aber den Sreenshots zu urteilen ist es ganz gut. So wie ich das auf der Seite verstanden habe (mein Englisch ist nicht das beste:-)) kann man mit wxDev-C++ auch Hintergrunddesigns und so machen oder?

Vielen Dank.
 
Hallo,
als Anfänger sollte man lieber erst klein Anfangen und die Basics lernen.

Dabei ist C ein ganz guter Anfang, lad dir Dev-C++ runter und arbeite z.B. mit diesem Buch: C von A bis Z
Dort erlernst du erstmal die Basics, die in jeder Programmiersprache wieder vorkommen.

Ist natürlich die Frage wie weit du in die C-Welt eintauchen willst. Möchtest du nur die Basics haben, brauchst du das ganze mit den Pointer etc. nicht. Evt. hast du auch vor, auf z.B. C# oder Java umzusteigen, dann ist das mit den Pointern eh alles nahzu überflüssig und man braucht nur if, while, for etc.

Aber ansonsten: Zu diesem Thema gabs schon X-Themen hier im Board, wie fängt man mit dem Programmieren an, welche Sprache etc., deswegen bitte hier keine neue Diskussion anfangen, da sich das eh alles nur wiederholt. Am besten einfach mal die Boardsuche bemühen, findest bestimmt diverse Themen dazu.
 
hallo.
ich habe schon kenntnisse in C++ aber nur minimal.
soll ich mit Dev-C++ anfangen oder soll ich gleich die erweiterung nehmen?
 
Ich kenne die Erweiterung zwar nicht, ihre Name lässt aber darauf schliessen, dass es sich lediglich um eine Version mit Unterstützung für wxWidgets handelt und von daher sollte die "einfache" Version von Dev-C++ mehr als ausreichend sein. Wirklich eine Rolle spielt es beim Lernen jedenfalls nicht. Bevor man grafische Programme mit Widgets schreibt, sollte man erstmal die Basics beherrschen und die kannst du auf beiden gleichermaßen lernen.
 
ok. habe mir die grundversion von Dev-C++ geladen.
ich habe probiert eine console application zu machen (eine Hello world app) und ich habe es doch noch drauf. außer die strings bekomme ich nicht mehr hin habe ja auch schon lange nicht mehr geproggt.

kann ich einen algorithmus mit einer console application schreiben oder muss es eine Windows Application sein?

Muss ich bei einer Windows Application andere Befehle verwenden als bei einer Console Application?
Ich habe nämlich versucht in einer windows application mit cout zu arbeiten dann hat mir das programm einen fehler angezeigt.
 
In einer Windowsapplikation hat das Programm erstmal kein STDOUT (wo die COUT Ausgabe hin kann). Aber der Fehler sollte eigentlich eher daher stammen, dass Du nicht alle Header (#include<iostream>) hattest (ich nehme an, dass Du Dir die Fensteranwendung vom Assistenten hast generieren lassen ;) ) . Sonst bekommt man erstmal einfach nur keine Konsolenausgabe zu sehen - kompilieren und laufen sollte das Programm aber ohne Probleme.

Intern - zumindest wenn es nicht um NET geht, unterscheiden sich Console und Fensterprogramme nur in einem kleinen Flag (Markierung) - ist die Markierung gesetzt, startet Windows zusäzlich zu der Anwendung noch das "schwarze Fenster" dazu und "bindet" es praktisch an die Anwendung. Somit ist es möglch, auch in Anwendungen mit grafischer Oberfläche zusätzlich eine Ausgabe in die Konsole zu machen.

Aber Du bringst hier Begriffe durcheinander, denn
ann ich einen algorithmus mit einer console application schreiben oder muss es eine Windows Application sein?
es ist egal.Kann auch eine Anwendung sein, die ihre Ausgabe über das Blinken der Läpchen auf der Tastatur macht und die Eingabe über ein USB Stick einliest (überspitzt gesagt). Ein Algorithmus ist eine abstrakte Anweisungsfolge und hängt von solchen "materiellen" Dingen nicht ab.
 
Zurück
Oben