Alle Beiträge von Klotzkopp
-
bitweises Schieben
@Crush und nic_power: Bleibt bitte beim Thema. Oder macht im Sonstige-Forum einen neuen Thread auf, so was wie "Die bizarre Schönheit der Assemblersprache im Wandel der Architekturen" @blast: Unsere beiden Assembler-Freaks haben jetzt zwar technisch bis ins kleinste erklärt, was bitweises Schieben ist, aber ein Aspekt ist bisher IMO zu kurz gekommen: Was das ganze soll. Bitweises Schieben bedeutet, bei einer Zahl im Dualsystem alle Stellen nach links oder rechts zu verschieben. Das ändert den Wert immer um den Faktor zwei bzw. 1/2 (je nach Schieberichtung). 10 << 1 ergibt 20 10 >> 1 ergibt 5 10 << 2 ergibt 40 10 >> 2 ergibt 2 Im letzten Fall zeigt sich die Besonderheit, dass Bits, die aus dem Wertebereich der Zahl "herausgeschoben" werden, verloren sind. Das gilt auch für das obere Ende. Man könnte also auch einfach *2 bzw /2 (oder 4, 8, usw.) schreiben. Ein Beispiel, bei dem Schieben sinnvoller ist als Multiplizieren: unsigned long l = 123456; for( int b = 0; b <= 31; b++ ) { if( l & ( 1 << b ) ) { printf( "Bit %d ist gesetzt\n", b ); } } [/CODE] Wenn man nicht mit Schieben arbeitet, wird das Ausrechnen der Zweierpotenz schwieriger, weil man in einer Schleife multiplizieren muss: [CODE] unsigned long l = 123456; for( int b = 0; b <= 31; b++ ) { unsigned long zweierpotenz = 1; for( int i = 0; i < b; i++ ) { zweierpotenz *= 2; } if( l & zweierpotenz ) { printf( "Bit %d ist gesetzt\n", b ); } } Alternativ könnte man auch eine Potenzfunktion aus einer mathematischen Bibliothek einbinden. Das wäre aber unter der Haube auch nicht besser als die Multiplikationsschleife.
-
Internet abfragen
Nimm nicht den logischen Und-Operator (&&), sondern den bitweisen (&), dann sollte es gehen.
-
Internet abfragen
Wininet.h / Wininet.lib
-
Magisches Quadrat in C++
@Crush: Deine Variante unterscheidet sich zumindest so weit, dass bei Dir diese wiederholte Prüfung, ob ein Feld schon besetzt ist, nicht nötig ist. Dafür hast Du eine c%n-Prüfung drin.
-
Visual C++ 6.0, erweitertes Kombinationsfeld
Welche Farbe hast Du denn beim Anlegen der ImageList als Maske angegeben?
-
Visual C++ 6.0, erweitertes Kombinationsfeld
Hast Du mal versucht, mit CImageList::SetBkColor die Hintergrundfarbe der Imagelist auf CLR_NONE zu ändern?
-
Magisches Quadrat in C++
// Bestimmung der anderen Felder while( true ) { // Regel 1 feld[i][k]=x; if( x == n*n ) { // fertig break; } // Regel 2 i++; k++; bool feldgefunden = false; while( !feldgefunden ) { // regel 4 if( i >= n ) i = 0; if( i < 0 ) i = n-1; if( k >= n ) k = 0; if( k < 0 ) k = n-1; // regel 3 if( feld[i][k] != 0 ) { i++; k--; } else { feldgefunden = true; } } x++; }; [/CODE]
-
Datenbanl abfrage via JAVA und SQL
Wie hast Du statement deklariert bzw. erzeugt?
-
Magisches Quadrat in C++
Ich kann nur wiederholen, was ich schon in meinem ersten Beitrag dieses Thread gesagt habe: Sag uns, was für einen Algorithmus Du verwendest! Offensichtlich gibt es mehr als einen Algorithmus, um ein magisches Quadrat zu erzeugen, denn der, den Du verwendest, unterscheidet sich von dem, den Crush weiter oben implementiert hat. Wie sollen wir Dir helfen, die "Regeln" für Deinen Algorithmus in C umzusetzen, wenn Du uns nicht sagst, wie die Regeln im Klartext lauten?
-
Borland 5.5 Compiler
Das Programm lässt sich bei mir compilieren - bis auf eine Warnung, dass der a zugewiesene Wert nicht verwendet wird. Überprüf noch mal die CFG-Dateien.
-
Templates aufrufen!
Indem Du den Funktionszeiger übergibst.
-
Templates aufrufen!
Es gibt keine spezielle Syntax für den Aufruf von Template-Funktionen. Ruf sie einfach auf wie eine normale Funktion. Die Funktion übergibst Du doch offenbar als Parameter. Kannst Du ein wenig verständlicher formulieren, wo das Problem liegt?
-
Magisches Quadrat in C++
Ich habe mir Deinen Code mal genauer angesehen: // Deklaration Spielfeld int feld[n][n];[/CODE] Das dürfte kein Compiler mitmachen. Wenn Du vorher nicht weißt, wie groß das Quadrat wird, dann musst Du den Speicher dynamisch holen. Alternativ kannst Du, wie in Crushs Beispiel, einen Maximalwert vorgeben. [CODE]// Bestimmung des Feldes der Zahl 1 feld [(n/2)+1][n/2] = (x + 1); Du rechnest zwar (auf Basis eines mir unbekannten Algorithmus) aus, wo die 1 hingehört, aber nachdem Du den Wert zugewiesen hast (was Du eigentlich in der Schleife danach machen solltest), wirfst Du die errechneten Koordinaten sozusagen weg. Besser: i = 1; k = n/2; // Bestimmung der anderen Felder (geändert von Klotzkopp) for (int c = 1; c <= n*n; c++) { feld[i][k]=c; if (c%n==0) { i++; } else { if( i == 1 ) { i = n; } else { i--; } if( k == n ) { k = 1; } else { k++; } } } [/code] Hast Du versucht, Crushs Fragenzeichen-Doppelpunkt-Konstrukt aufzulösen? Das müsste dann eigentlich so aussehen. Auf keinen Fall darfst Du in der Schleife n ändern. [CODE]// Ausgabe der Felder for(i = 0; i != n; i++) { for(k = 0; k != n; k++) { cout << feld [i][k]; } cout << "\n"; } Du weist die Werte des magischen Quadrats mit einem 1-basierten Index zu, gibst sie hier aber mit 0-basiertem Index aus. Wird nicht funktionieren. Außerdem solltest Du setw verwenden, sonst stehen alle Zahlen direkt hintereinander.
-
Druckprobleme unter XP und 98!!
Kann sein, dass Du eine Textdatei nehmen musst, die mehr als eine Seite Text enthält. Hast Du mal ein anderes Druckerkabel ausprobiert?
-
Passwort ändern von W2k aus
Halt mal die Luft an, tracer! Ich sehe in Deiner Frage nirgends den Hinweis, dass es kein SSH-Client sein darf.
-
Vernünftige Firewall
Wieder was gelernt
-
Rucksackproblem
@DocJunior: Hast Du nicht mitbekommen, dass Nova eine Template-Klasse benutzt? Und was soll "release" sein? @Nova: Solange Du tableau als Zeiger deklarierst, musst Du (*tableau)[][] schreiben. Ich hoffe, Du hast Speicher für die Matrix geholt. Du kannst die Matrix nicht erweitern, indem Du einzelne Elemente hinzufügst. Du kannst nur um ganze Spalten oder Zeilen erweitern. Um eine Spalte hinzuzufügen, musst Du mat einen weiteren Zeilenvektor hinzufügen, für einen neue Spalte musst Du jedem Zeilenvektor ein neues Element hinzufügen.
-
Magisches Quadrat in C++
feld[i][k]=c;Hier ist das Problem (bzw. hier wirkt es sich aus). Nach Deiner Initialisierungsschleife stehen i und k auf n. Du solltest sie mit sinnvollen Werten füllen.
-
Druckprobleme unter XP und 98!!
Schlag mich type, nicht copy.
-
Intervall umrechnen?
Es ist doch dieselbe wie Deine. Ich habe nur nicht ausmultipliziert, damit klarer wird, wie man darauf kommt.
-
Prozessor Hersteller
Motorola: 68k ARM: Thumb, StrongARM Hitachi: SH3, SH4 MIPS: 4Kx, 5Kx
-
Vernünftige Firewall
Ich dachte eigentlich, dass das "Verschlucken" von ICMP Echo Request gerade ein untrügliches Zeichen für die Anwesenheit einer Firewall ist. Um wirklich "unsichtbar" zu sein, müsste doch der letzte Router vor dem eigentlichen Ziel "Host unreachable" zurücksenden.
-
Druckprobleme unter XP und 98!!
Kannst Du in der Kommandozeile mit copy xy.txt >prn Textdateien direkt auf dem Drucker ausgeben? Schon mal den Scanner rausgenommen oder andere Druckerkabel verwendet?
-
Intervall umrechnen?
/ 800 * 5.5 - 2.5 bzw. /800 * 0.5 + 2.5
-
Schneller Umstieg auf Dialogbasiert
---> verschoben: C++: Compiler, IDEs, APIs