Zum Inhalt springen

UltimateRuppi

Mitglieder
  • Gesamte Inhalte

    53
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von UltimateRuppi

  1. Das geht für einzelne Zerlegungen auch deutlich schneller, nur wenn man tausende davon machen muss, ist die lösung mit dem vorher erstellten primzahlenarray effizienter. Bei meiner Zerlegung geht viel code für die schöne formatierte ausgabe drauf
  2. ok hier meine lösung Erzeugung des PRimzahlenarrays: int sieve(long* anPrimes, int nSieveSize) { int nPrimesFound; bool bIsPrime; int i, p; int sq; anPrimes[0] = 2; anPrimes[1] = 3; nPrimesFound = 2; for (i = 5; i <= nSieveSize; i += 2) { p = i % 6; if ( (p == 1) || (p == 5) ) { bIsPrime = true; sq = sqrt(i); for (p = 0; anPrimes[p] <= sq; p++) { if ((i % anPrimes[p]) == 0) { bIsPrime = false; break; } } if (bIsPrime) { anPrimes[nPrimesFound++] = i; } } } return nPrimesFound; } [/PHP] Und die Zerlegung in die Faktoren [PHP] void factor(int nZahl, long* lpPrimes, int nPrimeCount) { int nWork = nZahl; int nFact = 1; int i = 0; int nFactCnt; bool b = true; printf ("%d = ", nZahl); nFactCnt = 0; while (nWork > 1) { if (i >= nPrimeCount) { printf("\t- not enough primes to complete operation!"); break; } if ((nWork % lpPrimes[i]) == 0) { nFactCnt++; nFact *= lpPrimes[i]; nWork /= lpPrimes[i]; } else { if (nFactCnt == 1) { if (i > 0) { printf(" * "); } printf("%d", lpPrimes[i]); } else if (nFactCnt > 1) { if (i > 0) { printf(" * "); } printf("%d^%d", lpPrimes[i], nFactCnt); } nFactCnt = 0; i++; } } if (nFactCnt == 1) { if (i > 0) { printf(" * "); } printf("%d", lpPrimes[i]); } else if (nFactCnt > 0) { if (i > 1) { printf(" * "); } printf("%d^%d", lpPrimes[i], nFactCnt); } printf("\n"); }
  3. Die Primfaktorzerlegung gestaltet sich am einfachsten, wenn bereits Primzahlen bekannt sind. Dann kann man sich einfach von den kleinen Primzahlen zu de nhohen als Faktoren durchhangeln. Das hat den Vorteil, dass man vorher nicht noch überprüfen ob der Faktorkandidat auch eine Primzahl ist 1. Array mit Primzahlen füllen (wenn nicht erlaubt, dann musst Du halt wirklich jede überprüfen) 2. zu Faktorisierende zahl durch erste Primzahl des array teilen 3. ist die division aufgegangen? JA => Die Primzahl ist ist ein Primfaktor der Zahl (also Counter für den Wert erhöhen und zu punkt zwei gehen (mit dem divisionsergebnis als neue zahl)) NEIN => Primzahl ist kein Primfaktor (Counter auf 0 setzen, und bei 2. mit nächster primzahl weiter (Zahl ist das letzte bekannte divisionsergebnis ohne Rest) die schleife ist abbzubrechen wenn das divisionsergebnis 1 ist. ich hoffe das ist so verständlich, ich möchte den Quellcode hier, zumindest noch nicht, posten
  4. Ich glaube er meint den Ghostrider aus Schweden. Der hat sich übrigens auch dahin gefahren (mit 300 frontal in einen Brückenpfeiler gerauscht)
  5. Ich glaube das liegt an dem Datentyp char. Wenn ich mich recht erinnere wird das Feld dann mit Leerzeichen aufgefüllt. Versuch statt char mal varchar, dann sollte der Effekt eigentlich nicht mehr auftreten
  6. Ich denke, daß der Fehler hier liegt conn = DriverManager.getConnection("url", "usr", "pwd"); du musst die Anführungszeichen weglassen, um die in den Variablen gespeicherten Daten zu benutzen
  7. schau dir mal die Funktion SetConsoleTextAttribute(...), mit der kann man das realisieren stammt aus der wincon.h
  8. Richtig, die beiden stehen für die band KISS desweiteren haben wir da noch The Doors (die farbigen Türen) Pink Floyd (pinker Himmel) Cypress Hill (Zypresse auf dem Berg im Hintergrund) Maniac Street Preachers (die Typen mit den weissen Anzügen) Men without Hat (Die Beiden in den schwarzen Anzügen) Eeminem (die M&M Tüte bei der 20) Talking Heads (Köpfe im Schaufenster, rechts) Cowboy Junkies (der Cowboy, neben der Laterne) @Zeus ja es ist Crowded house
  9. na doch tut sie doch hier switch (c=getchar()) { nach dem switch wird das Programm sofort wieder beendet kannst vor dem ende der main-Funktion noch ein system("pause"); einfügen, dann wartet das programm auf einen Tastendruck (geht zumindest bei windows-systemen) oder halt wie der mächtige Pirat schon sagte eine schleife um den switch block bauen zur Frage mit dem scanf: char c; scanf("%c", &c); switch(c) { case 'a': (...) } hier wir dein zeichen von der konsole in die variable c eingelesen
  10. haste das mal ausgeführt? ich denke nicht, wenn du test (mit anschliessendem return) eingibst, dann steht hinterher auf der konsole folgendes Also bedient er sich beim zweiten Aufruf noch aus dem Zeichenvorrat des Eingabepuffers, du kannst die überprüfung auf 0x10 ja mal rausnehmen und schauen was passiert EDIT: hoppla, mir fällt grade auf, dass das ja eine Endlosschleife ist (also nix mir rausspringen aus der chleife TDM) (c != 0x10) ist natürlich schwachsinn (c != 10 ) bzw. (c != 0x0A) muss es heissen
  11. Was du meinst ist getch() aus der conio.h, die gibbet unter linux aber IMO nicht. jedenfalls standardmäßig nicht #include <stdio.h> int main() { char c; c = getchar(); while ((c != EOF) && (c != 0x10)) { printf("%02X ", c); c = getchar(); } return 0; } [/PHP] Wenn du das mal laufen lässt wirst du sehen, dass getchar() mehrere Zeichen aus der Konsole liest (bis return gedrückt wird) beim erneuten aufruf werden soweit noch vorhanden die restlichen Zeichen der Zeile urückgegeben, sind keine mehr da wird erneut von der Konsole gelesen. Die Backspace zeichen werden auf jeden fall nicht mit gelesen, da die standard IO die bereits herausfiltert da solltest Du dich wohl man mit curses oder ncurses beschäftigen, ich glaube die haben entsprechende funktionen für linux um direkt die zeichen aus der konsole zu erhalten. Hab das mal irgendwo gelesen, also wenn das nicht stimmt bitte korrigieren
  12. Normalerweise bekommst Du das Zeichen bei getchar() erst nachdem du return eingegeben hast, dann geht das Backspace natürlich unter, weil es gar nicht im Puffer steht. Also poste doch mal bitte die komplette Eingaberoutine mit der analysefunktion, damit man sich das mal komplett anschauen kann, fehler suchen in codefragmenten ist nicht grade besonders effektiv
  13. Also der Ascii-Code für Backspace ist 0x08, wenn ich mich nicht irre, also bitte noch mal in der ascii tabelle schauen. Der Rest sollte dann analog zum zählen der anderen Zeichen funktionieren. Eventuell kannste ja mal deinen Code posten, das funktioert nämlich nur wenn Du Zeichenweise von der Konsole liest.
  14. Na dann kommt er doch gar nicht mehr zum cin.get(). Mit return 0 verlässt du die funtion an dieser stelle der code dahinter wird gar nicht mehr ausgeführt. so long Ruppi
  15. Ja da gibt es einen Wrapper für schau mal unter http://wrapper.tanukisoftware.org/doc/english/introduction.html nach. Damit sollte das eigentlich gehen, gibts sowohl für Windows- als auch für Unix-Systeme. Ansonsten Google
  16. Du musst auch den Text des Radiobuttons ändern und nicht den Wert der Radiobuttons schau dir doch mal diese beiden Funktionen an GetDlgItem SetWindowText Der GetDlgItem übergibst du dann die ResourceID des Radiobuttons, den CWnd* den du bekommt, ist von deinem Radiobutton
  17. Es ist im prinzip, genau das gleiche wie in deinem oben gennannten code, nur das das Array dynamisch angelegt wird. TEdit *EditFelder[50]; ist auch ein Pointer-Array, aber halt ein statisches mit der grösse 50. Du Speicherst hier diePointer auf die einzelnen EditFelder; mit TEdit** hast du ein Pointer auf das das Zeiger-Array; TEdit** pEditArray; pEditArray = new TEdit*[nAnzahl]; pEditArray[0] zeigt also auf den ersten TEdit* in der liste. Ich hoffe, dass das so verständlicher wurde PS: Die Lösung mit der Liste ist meines erachtens nach praktikabler, da diese auch ohne grossen aufwand dynamisch vergrössert werden kann
  18. Das ist nicht das gleiche, dein int-Beispiel legt ein "Int-Array" an, ein int*[] ist aber ein int-Pointer-Array also int** Du müsstest Dir demnach dynamisch ein Pointerarray anlegen, etwa sowas TEdit** pEditArray; pEditArray = new TEdit*[nAnzahl]; for (...) { pEditArray[i] = new TEdit(this); ... } Beim freigeben musst du zuerst wieder in der forschleife die einzelnen array-elemente freigeben und dann erst das Array mit delete[]
  19. Das Sonderzeichen \ in der Regex wird auch mit \ escaped. Um also den Pfad zu trennen, muss "\\\\" als regex angegeben werden
  20. der IHK Dortmund reicht ein wöchentlicher, stichpunktartiger bericht.
  21. ehh mit Komponente XY.ShowWindow(SW_SHOW) oder zum unsichtbar machen mir SW_HIDE. Zum Progressbarbewegen, die entsprechenden Funktionen von CProgressCtrl aufrufen oder die Membervariable die mit der Progressbar assoziert ist setzen und UpdateData(FALSE) aufrufen. Das Fenster ist schon da, nur noch nicht sichtbar. Es wird erst nach Abschluss von OnInitDialog sichtbar.
  22. Dieser Initialisierungskram wird eigentlich überlicherweise in OnInitDialog gemacht. Genau dafür ist diese Funktion da um die Dialoginstanz zu initialisieren
  23. Naja ein Kollege von mir musste beim Einstellungstets auch mal so etwas machen. Der Graphologe meinte dann zu ihm, dass er eine gespaltene Persönlichkeit habe. Das soll wohl liegen, dass auf seiner Seite zwei verschiedene Handschriften vorlagen. Was sonst noch so alles aus der Schriftanalyse gefunden werden kann weiss ich nicht.
  24. Ne das funktioniert anders. Ein <NULL>-Wer in der Datenbank besagt, dass dieses Feld keinen Wert enthält. Du kannst ihn aber mit IS NULL prüfen. z.B. so WHERE advance < $5000 OR advance IS NULL
  25. Schau mal ob CListCtrl was für dich ist, da kann man den Style mit ModifyStyle auf Report ändern. Dann lassen sich auch Gitternetzlinien, ColumnHeader und sowas anzeigen. Item kannste mit insertItem(...) einfügen und an die anderen Zellen kommst dumit setItemText(...) dran. Ich weiss allerdings nicht, ob man Zellen dirkekt editieren kann, falls du das benötigst Gruß Ruppi

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