Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. Und um es den Helfern nicht zu leicht zu machen, sagst du nicht, wie die Fehlermeldung lautet
  2. http://www.opengl.org/registry/specs/EXT/stencil_two_side.txt
  3. Tut es. Wenn die Zeichen in einem Eingabestrom nicht zum Datentyp passen, wird der Strom in den Fehlerstatus gesetzt. Das kann man abfangen: #include <iostream> #include <limits> using namespace std; int main() { double d = 0.0; while( !(cin >> d) ) { cout << "Falsche Eingabe\n"; // Fail-Status zurücksetzen cin.clear(); // Verbliebene Zeichen im Stream-Puffer löschen cin.ignore(numeric_limits<int>::max(), '\n'); } }[/code]
  4. Ich habe da mehrere Fehler gemacht. Ich sagte ja, das ist nicht ganz einfach Erstens darf nach so einem Löschvorgang der Schleifeniterator nicht weitergesetzt werden, sondern man muss an derselben Stelle weiterprüfen. Zweitens muss man den Operator des Nachfolgers übernehmen. for(it1=liste.begin(); it1!=liste.end(); ++it1) { while (it1->getOperator()=='*') { it2 = it1; // Hier den Iterator kopieren und... ++it2; // ...die Kopie hochzählen, dann haben wir den Nachfolger // Könnte sein, dass it1 schon am Ende der Liste ist, // dann gibt es keinen Nachfolger mehr, also besser prüfen... if( it2 == liste.end() ) { break; } // Operator übernehmen it1->setOperator(it2->getOperator()); // Zusammenrechnen und den hinteren löschen it1->setZahl(it2->getZahl() * it1->getZahl()); liste.erase(it2); } }[/code]
  5. Benutz bitte CODE-Tags, nicht WIKI-Tags. Ich hab das mal für dich gemacht. Und achte bitte darauf, deinen Code ordentlich einzurücken, das erhöht die Lesbarkeit enorm. iterator1->getZahl=iterator2->getZahl * iterator1->getZahl Das ist totaler Unfug. getZahl ist eine Methode, da fehlen also die Klammern. Aber auch mit Klammern ist das Unsinn, weil du dem Ergebnis von getZahl nichts zuweisen kannst. Um den Wert zu setzen, musst du setZahl benutzen. Aber auch damit ist das noch nichts. for(iterator1=liste.begin(), iterator2=liste.begin();iterator1!=liste.end(), iterator2!=liste.end();iterator1++, iterator2++) { [/code] Damit zeigen iterator1 und iterator2 immer auf dasselbe Element, solange du das nicht änderst. Du multiplizierst also ein Listenelement mit sich selbst. [code]iterator2=liste.erase (iterator2); Und damit löschst du das Element, das du gerade mit sich selbst multipliziert hast. Iterator1 wird hier ungültig, weil er immer noch auf das gelöschte Element zeigt. Der weitere Verlauf ist undefiniertes Verhalten. Eine Liste zu durchlaufen, während man etwas rauslöscht, ist nicht so ganz einfach. Ich würde das so machen: // Erst mal nur 1 Iterator, den 2. ermitteln wir bei Bedarf... for(it1=liste.begin(); it1!=liste.end(); ++it1) { if (it1->getOperator()=='*') { it2 = it1; // Hier den Iterator kopieren und... ++it2; // ...die Kopie hochzählen, dann haben wir den Nachfolger // Könnte sein, dass it1 schon am Ende der Liste ist, // dann gibt es keinen Nachfolger mehr, also besser prüfen... if( it2 != liste.end() ) { // Zusammenrechnen und den hinteren löschen it1->setZahl(it2->getZahl() * it1->getZahl()); liste.erase(it2); } } } [/code]
  6. Ausgabe, nicht Ausgang. Wenn du folgendes versuchst, wird es nicht funktionieren: Ellemente e; cout << e;[/code] Das liegt daran, dass es keine Überladung des operator<< für die Ausgabe von Ellemente-Objekten gibt. Die C++-Standardbibliothek bringt Überladungen für alle eingebauten Typen, char-Zeiger und Klassen wie std::string mit, aber wie die Ausgabe für deine Klasse aussehen soll, kannst nur du wissen. Du kannst das festlegen, indem du selbst eine Überladung für den Operator bereitstellst. Die könnte z.B. so aussehen: [code]std::ostream& operator<<(std::ostream& stream, const Ellemente& e) { stream << e.getOperator() << e.getZahl(); return stream; } Ob das eine sinnvolle Ausgabe ist, kann ich natürlich nicht sagen, weil ich nicht weiß, wozu die Klasse gut sein soll.
  7. Sonst gibt es keine Einschränkung? Soll das mit jedem Betriebssystem funktionieren, mit jedem Drucker, egal ob lokal oder im Netzwerk, mit jedem Programm, das drucken kann? Radio Eriwan: Im Prinzip ja. Der Aufwand dafür kann allerdings sehr hoch werden, wenn du das nicht weiter eingrenzt. Der scheinbar einfache Vorgang "wenn jemand etwas druckt" wirft hinter den Kulissen unter Umständen eine große Zahl an komplexen Softwarekomponenten sowohl des Betriebssystems als auch des Druckertreibers an, und das auf mehreren Rechnern. Es gibt da keinen einfachen, allgemeingültigen Ansatzpunkt. Soll denn trotzdem gedruckt werden, oder soll nur verarbeitet werden? Je mehr du über das Umfeld des Problems erzählst, desto zielgenauer kann die Hilfe sein.
  8. Erstens könntest du bitte Code-Tags verwenden. Zweitens zeigt dein Iterator nicht auf ein gültiges Listenelement. Iteratoren verhalten sich da ungefähr wie Zeiger, du musst ihnen sagen, worauf sie verweisen sollen. Drittens "weiß" cout gar nicht, wie es Ellemente-Objekte ausgeben soll. Dazu fehlt ein passender Ausgabeoperator: std::ostream& operator<<(std::ostream& stream, const Ellemente& e) Viertens braucht deine Klasse (noch) keinen Konstruktor und schon gar keinen virtuellen Destruktor.
  9. 3264 ist 2 * 2,55 * 640 (nicht 600) 2448 ist 2 * 2,55 * 480 Der Faktor 2,55 ist fast der Umrechnungsfaktor für Zoll nach Zentimeter (2,54), aber ich habe keine Ahnung, was das soll. Bist du sicher, dass das der ganze Text der Aufgabe ist?
  10. Was jetzt, 3264 * 2448 oder 600 * 480?
  11. Stell dir 600 * 480 Kinder vor. Jedes Kind hat 24 Äpfel. Wie viele Äpfel insgesamt? Edit: Aufgabe falsch abgeschrieben: 600, nicht 640
  12. Du hast 640*480 Pixel, und jeder Pixel hat 24 Bit. Wieviele Bit also insgesamt? Das musst du dann nur noch in MByte umrechnen.
  13. Ich sehe gerade, die Deklaration der setZahl-Methode hat zwar keine Parameter: Aber die Definition hat einen: Das passt natürlich nicht zusammen. Du scheinst auch mit der Bedeutung von "get" und "set" etwas durcheinanderzukommen. Set bedeutet, dass du Werte in der Klasse ablegst. Get bedeutet, dass du sie wieder herausholst. Und du solltest bedenken, dass du, bevor du irgendwelche "Ellemente" in eine Liste stecken kannst, erst mal eines erzeugen musst. Außerdem rate ich dir, Konstruktor und Destruktor wegzulassen, wenn da drin sowieso nichts passiert.
  14. Wenn die Methode Ellemente::setZahl den Zahl-Member auf einen neuen Wert setzen soll, brauchst du eine Möglichkeit, dieser Methode eben diesen neuen Wert mitzugeben. Dazu brauchst du einen Parameter.
  15. Genau so, wie du es gemacht hast, mit einer std::list einer passenden Struktur oder Klasse. Du solltest dir aber mal Gedanken machen, wie die Set-Methoden deiner Klasse funktionieren sollen, wenn sie keine Parameter haben.
  16. Klotzkopp

    [C#] Console und Farbe

    Weil du am Anfang zweimal von der Konsole einliest. Das Einlesen von Farbe_Schriftart ist Unsinn. Auch die Namenswahl der Variablen für das erste Menü ist irreführend. Du liest ja nur eine Benutzereingabe ein. Ob das dann Hintergrundfarbe oder Schriftfarbe wird, weißt du vorher nicht, daher ist es unpassend, die dafür benutzte Variable schon so zu benennen. Benenn Farbe_Hintergrund in Auswahl1 oder so etwas um, dann ist dein Programm auch besser zu verstehen. Das goto solltest du auch schnellstens loswerden. Dafür gibt es Schleifen.
  17. Das würde ich auch empfehlen. Möglicherweise ist das eine HTML-Seite mit einem Fehlertext. Vielleicht fehlt ja nur ein Cookie.
  18. D.h. bei einem Browser-Update sind alle Lesezeichen/Favoriten weg? Gibt es für die Benutzer überhaupt eine Möglichkeit, ihre Daten persistent zu halten?
  19. Wie lang können die Keys denn werden? Passiert mit einem einzelnen Punkt oder Slash etwas anderes als mit dieser Kombination? Du kannst jeden Substring der zu prüfenden Zeichenkette, eben bis zur maximalen Länge der Keys, gegen die Hashtable prüfen. Dazu brauchst du zwei verschachtelte Schleifen, eine für die Startposition und eine für die Länge des Substrings. Wenn es viele Einzelzeichen-Keys und nur wenige Zeichenketten-Keys gibt, könntest du die Einzelzeichen mit einer Hashtable verarbeiten und die längeren mit einer Liste und Suchen&Ersetzen. Dabei musst du aber penibel darauf achten, dass nicht bereits ersetzte Zeichen nochmals verarbeitet werden.
  20. Dann benutzt ihr nicht C++, sondern C++/CLI. Ist das so gewollt? Niemand. Da sind bisher keine Vererbungsbeziehungen drin, und damit auch keine Basisklassen.
  21. Was meinst du mit Ergebnis? Die Ausgabe einer Konsolenanwendung? Die Ausgabeumleitung ist ein Feature der Eingabeaufforderung, nicht der Shell. Mit ShellExecute geht das nicht direkt. Du könntest die Eingabeaufforderung für die Ausführung benutzen, indem als Befehlszeile folgendes benutzt: CMD /C "Exe Parameter > Dateiname" Direkte Kontrolle über die Ausgabe des gestarteten Programms hast du, wenn du statt ShellExecute CreateProcess benutzt. Sauberer wäre das vermutlich auch. Das hier könnte dir helfen: Capture the output from a DOS (command/console) Window
  22. Du hast vermultlich _WIN32_WINNT und WINVER nicht (oder nicht hoch genug) definiert. Für CreateProcessWithLogonW (und die dazugehörigen Flags) muss deine Zielplattform mindestens Windows 2000 sein. Siehe Using the Windows Headers (Windows)
  23. Man "durchläuft" keine Hashtabelle, das widerspricht dem ganzen Konzept. Man benutzt Hashtabellen ja gerade deshalb, weil man sich das Durchlaufen ersparen möchte. Wenn du sowieso nur sequenziell durch die Einträge hechelst, brauchst du keine Hashtabelle, da tut's auch eine unsortierte Liste. Schau dir mal die Methode containsKey an.
  24. Kommt aufs System an. Unter Unix und verwandten Systemen mit Strg+D am Anfang einer Zeile, unter DOS und Windows üblicherweise mit Strg+Z. Wie ich bereits sagte: Hast du das gemacht?
  25. Weil der zweite Parameter von std::basic_istream::read die Anzahl der zu lesenden Bytes angibt. Du hast aber ein Array von floats, die üblicherweise 4 Bytes groß sind. Da fehlt also noch ein Faktor sizeof(float). Alles natürlich unter der Annahme, dass hFile ein std::basic_istream (oder eine davon abgeleitete Klasse) ist. Die Typen deiner Variablen solltest du schon nennen.

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