Mathematik, die höchste aller Künste. Fragen zu Beweisen, lineare Algebra, Analysis, numerische Mathematik und verwandte Themen sind hier richtig. Die Naturwissenschaftler und Physiker können alle Fragen rund um Elektrotechnik, Statik und Dynamik hier loswerden.
3D-Shooter, Animationen, schnelle Grafik... wer träumt nicht davon? DirectX, Direct3D, OpenGL, SDL, Strategien und Grafik. Hier könnt Ihr Euch austoben.
Datenbanken als klassisches Backend der Datenspeicherung werden in jeder Art Software immer gängiger. Installation, Anbindung typischer Datenbanken (MariaDB, MySQL, Access, SQL Server, SQLite), SQL oder Datenbank-Administration sind hier die Themen.
Hallo,
Ich habe folgenden Code:
int
main(int argc, char *argv[])
{
// Get database access parameters from command line
mysqlpp::examples::CommandLine cmdline(argc, argv);
if (!cmdline) {
return 1;
}
// Connect to the sample database.
mysqlpp::Connection conn(false);
if (conn.connect(mysqlpp::examples::db_name, cmdline.server(),
cmdline.user(), cmdline.pass())) {
// Ask for all rows from the sample stock table and display
// them. Unlike simple2 example, we retreive each row one at
// a time instead of storing the entire result set in memory
// and then iterating over it.
mysqlpp::Query query = conn.query("select * from stock");
if (mysqlpp::UseQueryResult res = query.use()) {
// Display header
cout.setf(ios::left);
cout << setw(31) << "Item" <<
setw(10) << "Date" <<
setw(10) << "Weight" <<
setw(10) << "Price" <<
"Date" << endl << endl;
// Get each row in result set, and print its contents
while (mysqlpp::Row row = res.fetch_row()) {
cout << setw(30) << row["item"] << ' ' <<
setw(9) << row["Date"] << ' ' <<
setw(9) << row["weight"] << ' ' <<
setw(9) << row["price"] << ' ' <<
setw(9) << row["sdate"] <<
endl;
}
Ich hätte jetzt 2 Fragen :
Ich würde gerne die Einträge im row[''Date"] modifizieren mit einer Funktion aber ich bin mir nicht so sicher wie. Vielleicht in einem Vektor umwandeln oder ähnliches und dann als Argument in einer Funktion benutzen? Die Funktion soll das Datum was in der Format "yyyy-mm-dd" den Wochentag ausgeben.
Wie kann ich dann Spalten in einer separaten Tabelle speichern also zum Beispiel row["item"] und row["Date"]?
Danke im Voraus
LG
Zafar
Ihr habt eine Auftragsarbeit zu vergeben? Oder sucht ihr ein kleines Team zur gemeinsamen Realisierung von sinnvollen und schaffbaren Programmierprojekten? Ihr sucht ein paar Beta-Tester für eure fertigen Projekte?
2359
Topics
20742
Posts
Hab mir das jetzt auch noch mal angeguckt:
ich benutze für den std-namespace den vollqualifizierten Namen, ohne den std-Namespace zu öffnen. Die fünf Zeichen mehr machen beim Schreiben den Braten nicht fett und man erkennt sofort, dass es etwas aus der STL ist.
übergib' notwendige Parameter nicht als Zeiger, sondern als Referenz. Ich halte mich dabei an folgende Faustregel:
der Parameter ist optional: Übergabe als (const) Zeiger
der Parameter ist notwendig und kann verändert werden: Übergabe als Referenz
der Parameter ist notwendig und darf nicht verändert werden: Übergabe als const-Referenz
benutz' so viel aus der STL wie möglich und vermeide handgeschriebene Schleifen. Die C++ Lösung deiner removeSpaces Funktion könnte so aussehen:
#include <string>
#include <algorithm>
#include <cctype>
#include <iostream>
std::string RemoveSpaces( std::string const& str )
{
std::string retval;
auto predicate = []( char ch )
{
return !std::isspace( ch );
};
std::copy_if( str.begin(), str.end(), std::back_inserter( retval ), predicate );
return retval;
}
oder in-situ auf der Variable selbst
#include <string>
#include <algorithm>
std::string str = "abc def";
str.erase( std::remove( str.begin(), str.end(), ' ' ),
str.end() );
warum legst du deine Variablen überhaupt per new an? Wenn du sie in einem std::unordered_set hältst werden deren Adresse auch nicht ungültig (es sei denn, du löschst das Element aus dem set), du kannst also die Variable als value im set halten und trotzdem mit deren Adressen arbeiten. Habe mir jetzt aber auch nicht so genau angeguckt, was du mit den Adressen so alles anstellst.
vermeide besitzende Rohzeiger und benutz' stattdessen die smart pointer der STL.
Edit:
Generell arbeitest du zu wenig mit Rückgabewerten aus Funktionen. Die freie Variable error ließe sich komplette entfernen, wenn die Funktion, die sie setzen, den Status statt void zurückgeben. Damit weiß der Aufrufer direkt, ob der Aufruf erfolgreich war oder nicht.
exit() ist in den allerwenigsten Fällen sinnvoll. Stell dir vor, du stellst deine Engine als Bibliothek zur Verfügung und unter bestimmten Umständen wird exit() aufgerufen und das Programm beendet. Das ist kann für böse Überraschungen sorgen, wenn die Scripting-Engine ein kleiner und unwichtiger Teil eines Programms ist, aber plötzlich das Programm beendet.
Ganz allgemein hat Steam eine API für Spieleserver. Ich glaube, aber nicht geprüft, die ist sogar semi-öffentlich, als dass man da gratis einen Account für Zugang bekommen kann. Und wenn man sich da rein gräbt, kann man sicherlich abfragen, welcher Server gerade wie viele Spieler auf welcher Karte hat, oder sonstige Sachen. Und damit kann man dann die Statistiken machen, die du dort siehst.
Ich werde aber jetzt keine genaueren Details zusammentragen. Ich habe ein bisschen in der Steam-Developerwiki gestöbert, und gesehen, dass das prinzipiell gehen müsste (und die Existenz der Webseiten beweist, dass es geht!). Aber die Informationen waren nicht gerade frisch oder gut gepflegt. Da ist sicherlich einiges an Energie, Motivation, und Frustresistenz nötig, wenn man sich da reinbeißen möchte.
@Leon0402 sagte in GIT: Vorgehen, wenn push fehlschlägt:
Wenn das so der Standard ist, dass ihr ständig parallel auf dem selben Branch arbeitet, klingt das eher nach Problem im Workflow.
Das ist richtig. Also, es kommt nur selten vor, aber anfangs wusste ich gar nicht, weshalb mein Push immer rejected wurde ... bis mir dann auffiel, dass ein Kollege meine Arbeit schneller/besser gemacht hatte. Wahrscheinlich wäre der richtige Workflow gewesen, sich mal beim Vorgesetzten bzw. Teamler zu beschweren.
Aber hierbei ging es eher konkret um den Fall, dass die CI Änderungen am Feature-Branch vornimmt (was ich zu spät bemerkt hatte) ...
@KahnSoft sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Wir jedenfalls waren früher froh wenn wir Hinweise per Briefpost kommunizierten,
echt traurig, aber wenigstens bin ich schlauer als du, wenn du anscheinend gar nichts hinbekommst, aber Hauptsache ist, man erteilt anderen irgendwelche Anweisungen...
Versteh mich bitte nicht falsch, ich weiß das dies ein öffentliches Forum ist, aber ich hatte dich in keinster Weise nach deiner Meinung gefragt... Ich mag deine Sorte Mensch nicht... Such dir doch ein anderes Hobby...
@SK0325 sagte in Historisierungskonzept programmieren / Datensatz zurücksetzen auf Tag x:
Außer du kannst mich vom Gegenteil überzeugen?
Es gibt keine Satzsperren.
Was hat das alles mit C++ Builder zu tun?
@Swordfish sagte in Native File Chooser mit Fltk (Android):
@DNKpp sagte in Native File Chooser mit Fltk (Android):
@hustbaer Kennst du ihn wirklich nicht?
Dr. Klaus Jürgen Wolf ist ein anderer.
Oh, wirklich? Dann hab ich nix gesagt
Sind die Arrays A und B ohne Duplikate?
Ansonsten sieht dein Ansatz tendenziell nicht schlecht aus, mal in Worten zusammengefasst wie ich ihn verstehe und ergänzen würde:
Iteriere solange bis A oder B durchlaufen ist
Vergleiche das Element i in A und B und wähle das kleinere aus
Move den pos pointer in dem entsprechenden Array weiter, wo das Element ausgewählt worden ist (Nicht in beiden, was du bisher machst)
Prüfe, ob das ausgewählte Element das selbe ist, was du letze Runde augewählt hat d.h. H[pos_h - 1] == element (dann ist es ein Duplikat) -> Hier musst du dir was für den ersten Durchgang noch überlegen
Füge das Element dem Array H hinzu, wenn es kein Duplikat ist (und pos pointer vorwärts bewegen)
Iteriere über A (mit pos_a als startpunkt) bis Ende
Füge das Element von A in H ein (pos_a und pos_h erhöhen)
Iteriere über B (mit pos_b als startpunkt) bis Ende
Füge das Element von B in H ein (pos_b und pos_h erhöhen)
Das heißt du hast insgesamt drei Schleifen Logisch sollte aber sein, dass einer der letzen Schleifen beiden Schleifen nicht ausgeführt wird, denn eines der beiden Arrays muss durch Schleife 1 ja schon fertig durchlaufen sein.
@Th69 sagte in Zweifachauswahl:
Ich kannte den Begriff vorher auch nicht und habe ihn online u.a. im PDF 2. Kontrollstrukturen, strukturierte Programmierung (in "2.3 Arten von Strukturblöcken") gefunden.
Das ist also die normale Bedingungsabfrage mittels if (condition) X else Y, d.h. sowohl bei erfüllter Bedingung (condition == true) als auch im Negativfall (condition == false) wird jeweils Code ausgeführt.
Und die Abfrage ohne else heißt dort dann Einfachauswahl.
Bei mehr als 2 Fällen wird dann eben von Mehrfachauswahl gesprochen.
Sehr gut erklärt.
@hustbaer sagte in Outlook Automation mit C++:
Sieht man neuerdings als normalsterblicher nicht mehr wenn ein Beitrag verschoben wurde?
Ich weiß nicht einmal, ob ich das selber irgendwo sehen kann. Ja, das ging im alten Forum, recht übersichtlich, da stets ein Beitrag erzeugt wurde, der das dokumentierte. Ich vermisse es aber auch nicht wirklich, da dank der Sammlung ungelesener Beiträge für den täglichen Nutzer gar nicht so wichtig ist, wo ein Thread genau liegt. Gleichzeitig würden irgendwelche automatischen Dokubeiträge gerade in jener Ansicht eher stören.
@Zhavok sagte in Ständig wachsende Komplexität im Programmiereralltag (Fork aus: Datenbank für C):
Während der Maurer an die physikalischen Gesetze gebunden ist und der Bäckerslehrling sein Brot nicht backen darf weil die extra Zutaten mehr Geld kosten und die Arbeitszeit an jedem Brot steigt, schreibt der Programmierer seine eigenen Gesetze und Logiken da tippen an sich nichts kostet. Neue Ideen sind einfach schneller umsetzbar als in anderen Branchen.
Naja, an die Grenzen der Physik und vor allem der Mathematik sind wir auch gebunden. Und das macht schon ordentliche Einschnitte. Insbesondere Optimierungsprobleme liegen ja z.B. oft in NP, da hätte man ja schon gerne bessere Lösungen, die wird es aber vermutlich nicht geben.
Und auch der Softwareentwickler darf im Job nicht alles programmieren, wozu er grade Lust hat, da zum einen Arbbeitszeit teuer ist und auch nicht alle Tools umsonst zu haben sind.
Aber es ist schon ein schwieriger Grat, Komplexität händelbar zu halten, aber das raus zu holen, was machbar ist.
Wenn man sich nur mal die Tools anschaut, die man so verwendet: Man hat sein Unittest Framework, ein Versionierungssystem, ein Ticketsystem, eine Buildautomatisierung, vlt auch noch ein Container System usw. All das erhöht auf der einen Seite die Komplexität der Entwicklung, nimmt einem auf der anderen Seite aber viel manuelle, fehleranfällige Arbeit ab.
@leon676 sagte in Bilder zusammen rechnen:
Zur Methodik WIE wir die Bilder verarbeiten wollen haben wir uns auch schon Gedanken gemacht. Mein Problem liegt gerade vor allem in der Umsetzung. Ich weiß nicht was ich mir am besten anschauen soll um herauszufinden wie man das ganze im Programm auch wirklich umsetzt.
Dann schau als erstes mal dass du ein Qt Beispiel compiliert bekommst, z.B. den von @DirkB erwähnten Image Viewer. Wie man ne Qt Entwicklungsumbegung aufsetzt lässt sich ja ergoogeln, das ist hundertfach im Netz erklärt.
Dann googeln wie man in Qt ein Bild lädt und Pixel ausliest. Dann den Image Viewer modifizieren dass ihr einfach mal die Pixeldaten lesen und ändern könnt - testweise einfach mal das Bild invertieren oder so.
Wenn ihr das habt, das Programm so anpassen dass es mehr als 1 Bild lädt und die irgendwie trivial zusammenblendet - wie @DirkB auch schon anfangs vorgeschlagen hat.
Einfach Schritt für Schritt rantasten.