Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. Entscheidend ist das Teilen durch 15. Das Ergebnis der Division durch 15 erhöht sich um 1, wenn der Dividend um 15 größer wird. Genau so verhalten sich die Karten zu den Serien. Das mit der 1, die am Anfang abgezogen und hinterher wieder draufgerechnet wird, hat nur den Grund, dass sowohl die Karten als auch die Serien bei 1 beginnen. Würden beide bei 0 anfangen, würde es ausreichen, einfach nur durch 15 zu teilen. Naja, das ging mehr oder weniger automatisch.
  2. Sicher geht das einfacher: Von der Kartennummer 1 abziehen, (ganzzahlig) durch 15 teilen und wieder 1 addieren.
  3. Schau mal hier rein: http://forum.fachinformatiker.de/showthread.php?t=42926
  4. Ganz sicher nicht. Nicht als .NET-Programm. Darum hat MS auch den Native C++ Compiler bei VS.NET 2003 so stark verbessert, was?
  5. Na dann nimm dir doch meinen Rat mal zu Herzen: Wenn i Null ist, solltest du nicht auf eingabe[i-1] zugreifen.
  6. Schon klar, dass das keine grammatisch korrekte römische Zahl es. Es ging mir nur darum, meine Hypothese zu prüfen, denn I ist der einzige Fall, bei dem nicht auf eingabe[i-1] zugegriffen wird. @Ragdalf: Was ist mit ivvvv? Geht das?
  7. Ich kann dein Programm nicht kompilieren, weil VC++ 7.1 das hier string eingabe[dummy]; //Array eingabe[] mit der Größe dummy [/CODE]nicht schluckt. Ist IMHO auch kein gültiges C++, denn die Größe eines Arrays muss eine Compilezeitkonstante sein. Tritt der Fehler auch auf, wenn du fünfmal i eingibst? Falls nicht, könnte es daran liegen: Du greifst in deinen Abfragen mehrfach auf eingabe[i-1] zu. Was ist, wenn i Null ist? Nachtrag: Du hattest nach Verbesserungsvorschläge gefragt: Wenn es egal ist, ob du i++ oder ++i schreibst, gewöhne Dir ++i an.
  8. Application.DisplayAlerts = False könnte funktionieren. Zumindest unterdrücke ich damit die Abfrage beim Speichern, ob eine existierende Datei überschrieben werden soll. Nicht vergessen, das hinterher wieder einzuschalten.
  9. Wird dieser Fehler auch wirklich in der Zeile erzeugt, die du uns da zeigst? Ich würde erwarten, dass da zumindest 'int' auch irgendwo drin steht. Falls nicht, zeig bitte mal ein wenig Code drumherum.
  10. Hallo nordi80! 1. Der Betreff ist wenig aussagekräftig. So ziemlich jeder, der hier ein Thema erstellt, sucht Hilfe. Bitte beim nächsten Mal drauf achten, dass der Betreff dein Problem besser beschreibt. 2. Hier wäre es gut gewesen, wenn du nicht den ursprünglichen (unangepassten) Code gezeigt hättest, sondern den, der die Fehler verursacht. 3. Hier wird niemand Fehler an der Nummer erkennen können. Du hast die kompletten Fehlermeldungen vorliegen, warum sollen wir sie umständlich über die Nummer raussuchen? Also bitte immer die vollständige Fehlermeldung angeben.
  11. Hier gibt es ein paar Informationen zu dem Thema. Da wird WM_QUIT übrigens überhaupt nicht erwähnt. Wenn WM_QUIT in einer Nachrichtenschleife auftritt, gibt der zugehörige Aufruf von GetMessage FALSE zurück. Da die Nachrichtenschleife meist in etwa so aussieht: while(GetMessage(...)) { DispatchMessage(...); }[/CODE]wird bei WM_QUIT diese Schleife beendet, d.h. die Anwendung kann z.B. nicht mehr nachfragen, ob ungespeicherte Dokumente gespeichert werden sollen. Mit SendMessage sollte WM_QUIT eigentlich gar nicht funktionieren, denn SendMessage ruft direkt die WndProc auf, ohne Umweg über die Nachrichtenschleife. Wenn die Anwendung also nicht auch in der WndProc auf WM_QUIT mit Terminierung reagiert, dann läuft die Anwendung weiter. Also: Wenn WM_QUIT, dann mit PostMessage. WM_CLOSE bzw. WM_SYSCOMMAND ist aber zu bevorzugen, damit die Anwendung sich selbst sauber beenden kann.
  12. SC_CLOSE funktioniert nur mit WM_SYSCOMMAND. Ich weiß nicht, wie du auf WM_QUIT kommst, aber damit wird es nicht klappen. PostMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); [/CODE] oder[CODE]PostMessage(hWnd, WM_CLOSE, 0, 0); sollte es tun.
  13. Üblicherweise lagert man alle sprachabhängigen Ressourcen in DLLs aus. Beim Programmstart wird dann in Abhängigkeit von der Sprache eine dieser DLLs geladen und die darin enthaltenen Ressourcen verwendet. Bei Verwendung der MFC geht das z.B. mit AfxSetResourceHandle.
  14. Geschlossen mit Verweis auf die Boardregeln. @Friedhof: Dein Provider bietet dir sicher einen Mechanismus, über den er dir entweder dein Passwort mitteilen oder ein neues vergeben kann.
  15. Äh, das hab ich oben doch geschrieben...
  16. Ich kenne mich nicht so gut mit den Borland-Erweiterungen aus, aber ich habe vor kurzem ein Pascalprogramm nach C++ portiert, das ist zumindest verwandt. Ohne Gewähr: // unit u_CVClasses; ??? // interface ??? /* uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; */ // Das musst du vermutlich mit #include-Direktiven lösen // type // TCaesar = class(TObject) class TCaesar : public TObject { // private // protected // public public: // function encode(s: string; delta: integer): string; AnsiString encode(const AnsiString& s, int delta); // function decode(s: string; delta: integer): string; AnsiString decode(const AnsiString& s, int delta); // published ??? // end; }; // implementation ??? // { TCaesar } ??? //function TCaesar.decode(s: string; delta: integer): string; AnsiString TCaesar::decode(const AnsiString& s, int delta) { //var // P: PChar; const char* P; // tmp: String; AnsiString tmp; // iDelta: Integer; int iDelta; // iRealDelta: Integer; int iRealDelta; // iNewOrd: Integer; int iNewOrd; //begin // das ist die geschweifte Klammer oben // tmp := ''; tmp = ""; // sollte nicht nötig sein // iDelta := delta; iDelta = delta; // iRealDelta := 26; iRealDelta = 26; // p := pointer(s); P = s.c_str(); // if P <> nil then if(P) { // while P^ <> #0 do while(*P) // begin { // if P^ in ['a'..'z', 'A'..'Z'] then if((*P>='a' && *P<='z') || (*P>='A' && *P<='Z')) // begin { // iNewOrd := Ord(P^) - iDelta; iNewOrd = *P - iDelta; // if iNewOrd > 122 then if(iNewOrd > 122) // Inc(iNewOrd, iRealDelta); iNewOrd += iRealDelta; // if iNewOrd < 97 then if(iNewOrd < 97) // iNewOrd := iNewOrd + 26; iNewOrd += 26; // tmp := tmp + Chr(iNewOrd); tmp += static_cast<char>(iNewOrd); // end else } else // tmp := tmp + P^; tmp += *P; // Inc(P); ++P; // end; } // Result := tmp; return tmp; //end; } [/code] Als grobe Richtschnur kannst du folgende Ersetzungen vornehmen: := -> = begin -> { end;-> } if Bedingung then -> if(Bedingung) P^ -> *P Inc(a,; -> a += b; function Name(Param1: Typ1, Param2: Typ2) : FuncTyp -> FuncTyp Name(Typ1 Param1, Typ2 Param2) for i := 0 to 255 do -> for(i=0; i<=255; ++i)
  17. Dann lässt sich aber der Dialog auch nicht mehr mit dem OK-Button schließen. @TripleD: Wenn du auf Enter drückst, wird der Default-Button auf dem Dialog ausgeführt. Das ist zunächst immer der OK-Button. Wenn eine andere Aktion ausgeführt werden soll, musst du einfach den Button für die andere Aktion zum Default-Button machen.
  18. Die Headerdatei wird dir wahrscheinlich nicht weiterhelfen, weil sie vermutlich nur die Deklaration der Funktion enthält. Wenn du Hilfe beim Nachprogrammieren suchst, solltest du auch beschreiben, was die Funktion macht. Ich kenne sie z.B. nicht.
  19. Das sieht nach base64-Codierung aus. IIRC gibt es in PHP eine base64decode-Funktion.
  20. Um es nochmal etwas deutlicher zu formulieren: Wenn die Daten wirlich so in einer Datenbank liegen, dann brauchst du genau 1 SQL-Statement, um die Feldsummen und die Anzahl der Datensätze zu ermitteln, und musst dann nur noch ein paar Zahlen ersetzen. Wenn du das zeilenweise machen willst, musst du dir jeden Datensatz ansehen, alle Werte einzeln mit Zweierpotenzen multiplizieren und aufaddieren, die Werte aller Datensätze und-verküpfen und am Ende die Bits aus dem Ergebnis wieder rausholen. Je nach Programmiersprache ist das mehr oder weniger kompliziert, aber es ist auf jeden Fall erheblich aufwändiger als der erste Ansatz.
  21. Jeden deiner Datensätze (Zeilen) kann man als Dualzahl interpretieren, wobei jedes Feld eine Dualziffer (= 1 Bit) darstellt. Mehrere dieser Zahlen kann man miteinander verknüpfen, und zwar jeweils die zusammengehörigen Bits: 15: 1 1 1 1 12: 1 1 0 0 ----------- &: 1 1 0 0[/CODE] Bei der und-Verknüpfung ist ein Bit im Ergebnis nur dann 1, wenn das gleiche Bit bei allen Eingangswerten 1 ist. Sobald auch nur eines 0 ist, ist das Ergebnis 0. Einige Programmiersprachen haben Operatoren oder Funktionen für die bitweise Und-Verknüpfung fest eingebaut. Ich bin aber immer noch der Meinung, dass es mit der Summe viel einfacher geht...
  22. Du solltest dich von dem Begriff "Nenner" lösen, denn mit Arithmetik hat das nichts zu tun. Das ist nur eine Frage der Vorgehensweise. Ob du zuerst Zeilen (=Datensätze) verarbeitest, oder erst die einzelnen Felder (=Spalten) für alle Datensätze, kommt aufs gleiche raus. Letzteres ist IMHO erheblich einfacher, darum hatte ich das vorgeschlagen. Wenn du die Summe über die einzelnen Felder bildest, bekommst du 3 3 1 2. Jetzt musst du nur noch überall dort, wo eine Zahl = Anzahl der Datensätze (3) steht, eine 1 hinmachen, und an den anderen Stellen eine 0: 1 1 0 0 Wenn du es unbedingt zeilenweise verarbeiten willst, könntest du die Werte als Bits anordnen (mit Zweierpotenzen multiplizieren) und addieren: 1 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 15 1 * 8 + 1 * 4 + 0 * 2 + 0 * 1 = 12 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1 = 13[/CODE] Diese Werte verknüpfst du dann bitweise-und: 15 & 12 & 13 = 12 Die Darstellung des Ergebisses im Dualsystem ist dann das, was du suchst: 12 (dez) = 1100 (dual). Hier musst du aber auf führende Nullen aufpassen. Außerdem kann die Anzahl der Felder je nach Plattform und Sprache begrenzt sein.
  23. Du willst also für die Werte, die bei allen Datensätzen 1 sind, 1 haben, ansonsten 0? Das ist grundsätzlich eine Und-Verknüpfung. Du könntest auch aufsummieren. Wenn die Summe gleich der Anzahl der Datensätze ist, hast du eine 1, sonst eine 0.
  24. @David19: Du sprichst von diesem Flugzeugverwaltungsprogramm, als ob es um eine Standardaufgabe mit einer einzigen Standardlösung ginge. Das ist aber nicht der Fall. Je genauer du die Aufgabenstellung und vielleicht auch die angestrebten Lernziele dieser Aufgabe beschreiben kannst, desto eher wirst du Hilfe finden. Das Forum ist aber kein Hausaufgaben- oder Programmierservice. Niemandem ist damit geholfen, wenn dir einfach eine Komplettlösung vorgesetzt wird. Denn erstens kann es sein, dass diese Lösung völlig an der Aufgabenstellung vorbeigeht. Zweitens ist der Sinn dieser Aufgabe mit Sicherheit der, dass Du lernst, wie man so etwas macht, gerade wenn du keine "Leuchte" bist. Wenn du konkrete Probleme mit Teilaufgaben innerhalb des Programms hast, wirst du hier mit Sicherheit schnell Hilfe finden. Voraussetzung dafür ist aber, dass du das Problem detailliert beschreibst und Eigeninitiative zeigst.

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