Zum Inhalt springen

mfk'); DROP TABLE Users;--

Mitglieder
  • Gesamte Inhalte

    185
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    1

Beiträge von mfk'); DROP TABLE Users;--

  1. Mehrere Probleme:

    Am 10.9.2017 um 16:24 schrieb wisdomsoz:

    #include <stdio.h>

    Brauchst du nicht.

     

    Am 10.9.2017 um 16:24 schrieb wisdomsoz:

    char ort[];

    Das funktioniert nicht. Arrays passen ihre Größe in C++ nicht magisch an die Erfordernisse an. Benutz std::string statt char-Arrays.

     

    Am 10.9.2017 um 16:24 schrieb wisdomsoz:

    (*wetterstation[eingabe]).temperatur

    Der Dereferenzierungsoperator (Stern) ist hier überflüssig. Der []-Operator führt bereits eine Dereferenzierung durch.

    Allgemein bedeutet a[ b] dasselbe wie *(a+b), solange du nicht anfängst, die Operatoren selbst zu überladen.

     

    Am 10.9.2017 um 16:24 schrieb wisdomsoz:

    void eingabe_station(struct wetterstation_typ * wetterstation) {

    Die Angabe von "struct" ist in C++ (im Gegensatz zu C) unnötig.

     

    Am 10.9.2017 um 16:24 schrieb wisdomsoz:

    eingabe_station(&wetterstation);

    Die Funktion eingabe_station erwartet einen Zeiger auf wetterstation_typ, nicht einen Zeiger auf Array von wetterstation_typ.

    Grundsätzlich solltest du einen Container der Standardbibliothek (z.B. std::array oder std::vector) benutzen. Dann hast du auch nicht mehr das Problem, dass du in der Funktion nicht weißt, wie groß das Array war.

     

    Am 10.9.2017 um 16:24 schrieb wisdomsoz:

    for (int i = 0; i <= 2; i++)

    Die Schleife ist unnötig. Du probierst hier alle gültigen i durch, ob sie zur Eingabe passen. Denselben Effekt hätte eine einfache if-Anweisung, die prüft, ob die Eingabe gültig ist.

  2. Ich würde das so lösen:

    Zunächst der Speicherbedarf einer einzelnen Positionsangabe:

    Eine einstellige Hex-Zahl entspricht 4 Bit (16 mögliche Zustände): 11 * 4 Bit = 44 Bit = 5½ Byte

    Ich gehe nicht davon aus, dass hier halbe Bytes verwendet werden sollen. Wenn man auf diesem Niveau Speicher sparen wollte, würde man zunächst ein sparsameres Datenformat wählen. Darum werden aus den 5½ Bytes aufgerundet 6.

    Eine Positionsangabe pro Minute sind 1440 Positionangaben in 24 Stunden. Der Speicherbedarf ist also 1440 * 6 Byte = 8.640 Byte.

  3. vor 24 Minuten, PL1994 sagte:

    Das geht prinzipiell zwar, ist aber halt ungünstig, weil bei "Value" immer eine völlig sinnlose Variable gespeichert ist und man später erst mal herausfinden muss, was überhaupt gespeichert werden sollte.

    Das Problem hättest du bei deinem Ansatz in jedem Fall. Wenn du unterschiedliche Typen zusammenwirfst, musst du sie hinterher wieder aufwändig unterscheiden (wenn es keine sinnvolle Vererbungshierarchie gibt).

    Ich verstehe auch nicht, was dir dieses Changelog überhaupt bringt. Du weißt damit, dass zum Zeitpunkt X ein int von 1 auf 2 geändert wurde. Was nützt dir das? Weder kannst du daraus herleiten, welcher Datensatz geändert werden muss, noch welches Feld des Datensatzes (wenn es denn mehr als ein int-Feld gibt).

    Und wie willst du Lösch- und Einfügeaktionen abbilden?

    Du solltest die Änderungsverfolgung nicht auf Basis einzelner ints und Strings modellieren, sondern auf den Objekten, die deinen Datensätzen entsprechen. Und da ist es durchaus sinnvoll, für jede Art von Objekt eine separate Änderungsverfolgung zu haben.

  4. vor 53 Minuten, sas86ks sagte:

    Oder bin ich gezwungen VS neu zu installieren?

    Die Sprache der Ausnahmetexte hat nichts mit der Sprachversion von Visual Studio zu tun, nur mit den Spracheinstellungen von Windows und den installierten Sprachpaketen des .NET Frameworks auf dem ausführenden Rechner. Auch mit einem englischen VS hättest du lokalisierte Texte.

  5. vor 21 Stunden, PL1994 sagte:

    Aber wie komme ich jetzt hinterher an die Daten aus "Change" wieder heran?

    Gar nicht. Hier passiert etwas, das "Slicing" genannt wird.

    Du hast eine map<time_t, AbstractChange>. Du kannst hier Objekte von Klassen ablegen, die von AbstractChange erben, da hier eine implizierte Konvertierung stattfindet. Aber die map speichert wirklich nur AbstractChange-Objekte. Alles, was durch Vererbung dazukommt, wird abgeschnitten (daher der Name des Effekts).

    Folgende Dinge müssen dir klar sein:

    • Verschiedene Instanzen eines Klassentemplates sind nicht irgendwie "verwandt". Change<foo> und Change<bar> sind zwei getrennte, komplett unterschiedliche Klassen. Die Typen sind nicht ineinander umwandelbar. Selbst wenn es eine implizite Konvertierung zwischen foo und bar selbst gibt. Es gibt keine Gemeinsamkeit, auf Basis derer eine Zusammenfassung stattfinden könnte (außer du baust eine gemeinsame Basisklasse ein).
    • Der Typ eines jeden einzelnen Ausdrucks im Code steht zur Compile-Zeit fest.

    Du könntest mit Smartpointern arbeiten, oder Sammeltypen wie boost::any benutzen.

    Grundsätzlich würde ich aber zunächst einmal klären, was du mit den gesammelten Daten überhaupt machen willst.

  6. Du möchtest, dass die Menge ein Vielfaches des Faktors ist.

    Das kannst du prüfen, indem du den Rest der Division von Menge und Faktor prüfst:

    10 / 5 = 2 Rest 0 -> OK
    12 / 5 = 2 Rest 2 -> NEIN

    Den Divisionsrest erhältst du in C# (und in vielen anderen Programmiersprachen) mit %-Operator

    if(menge % faktor == 0) // OK
    
  7. Und zwar wird beschrieben, dass die alte Version von Fibre Channel (Fiber Channel) nur über Glasfaser funktionierte, wie soll ich das verstehen.

    Da steht nichts von "alter Version". Da steht, dass der ursprüngliche Entwurf nur Glasfaser vorsah. Mutmaßlich kam die Unterstützung von Kupferkabeln noch während der Standardisierung hinzu. Man hat sich trotzdem entschieden den Namen beizubehalten, allerdings mit der Schreibweise "Fibre", um es (zumindest im amerikanischen Englisch) vom Transportmedium abzugrenzen.

  8. ich möchte ein Programm gerne nach der Model-View-Controller-Architektur strukturieren. Der Controller erbt dabei von "CWinApp", die View von "CFrameWnd".

    Die MFC-Architektur passt nicht zu MVC. Dass du die App-Klasse in die Controller-Rolle zwängst, ändert daran nichts.

    Du kannst ja mal hier gucken: http://www.codeproject.com/Articles/30291/An-Introduction-to-a-Model-View-Controller-Impleme

  9. hab ich verschiedenste sachen probiert. hat alles nix geholfen. entweder steht da, dass die variable nicht vorhanden ist, oder es geht irgendwas anderes nicht. 

    Wie gesagt: Fast alles steht schon da.

    Die ursprüngliche Zeile lautet
     

    int[] liste = {0,9,4,6,2,8,5,1,7,3};

    Wir wollen aber keine Liste mit 0, 9, 4 usw., sondern mit unseren ints. Ersetze also hier die festen Zahlen durch deine int-Variablen.

  10. ich hab es mit int [] liste = br.readLine{zahl1,zahl2,zahl3} probiert und ich habe br.readLine mit Integer.parseInt(eingabe1,eingabe2,eingabe3) getauscht. hat auch nix gebracht. Bin ich überhaupt nah dran oder total vorbei an der Lösung

    Du bist nah dran, aber du versuchst zu viel in eine Zeile zu packen. Alles, was du brauchst, hattest du schon einmal in deinem Code.

    Zerlege dein Problem in Teilprobleme (das ist sowieso immer eine gute Idee). Aus dem Problem "Liste mit vom Benutzer eingegeben Zahlen erzeugen" wird dann:

    • Strings vom Benutzer einlesen (das ist der Teil mit dem InputStreamReader)
    • Eingelesene Strings in Zahlen umwandeln (das ist der Teil mit parseInt)
    • Aus den Zahlen ein Array konstruieren (so wie in der Zeile mit den vordefinierten Zahlen)

    Diese drei Teile musst du einzeln umsetzen. Nacheinander. Nicht irgendwie in eine Zeile verwurschtelt.
    Es gibt dafür sicher auch einen eleganten Einzeiler, aber du musst zuerst die Grundlagen verstehen.

  11. Das hier ist die Stelle in main, wo das Array mit den Zahlen für die Sortierung erzeugt wird:

    int[] liste = {0,9,4,6,2,8,5,1,7,3};

    Du musst das Array mit den Benutzereingaben füllen, also gehört der Code zum Einlesen davor.

    Und dann erstellst du das Array liste nicht aus diesen vorgegebenen Zahlen, sondern aus den Zahlen, die der Benutzer eingegeben hat.

  12. Aber natürlich kann er mit zahl1-3 und eingabe 1-3 nix anfganen weil es ja nirgends deklariert wurde. 

    zahl1 bis zahl3 hast du deklariert.

    Und Code für eingabe1 bis eingabe3 hast du in deinem ersten Beitrag schon gezeigt: 

            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            System.out.print("Erste Zahl: ");
            String eingabe1 = br.readLine();
            System.out.print("Zweite Zahl: ");
            String eingabe2 = br.readLine();
            System.out.print("Dritte Zahl: ");
            String eingabe3 = br.readLine();

  13. Zuerst eine Erkenntnis: Vorgegebene Zahlen sortiert man genau gleich wie vom Benutzer eingegebene. Klingt trivial, ist aber wichtig.

    Das bedeutet nämlich, dass du die Methode sortiere nicht ändern musst, nur die Methode main, wo die Zahlen herkommen. Dort wird das Array liste direkt im Code befüllt. Diesen Teil des Codes musst du durch eine Benutzereingabe ersetzen, sonst nichts.

    Habe nur rote X'e geändert, je nachdem was Eclipse vorgeschlagen hat.

    Diese Vorgehensweise bringt leider gar nichts. Der Compiler ist zufrieden, wenn er das Programm übersetzen kann. Er kann nicht erkennen, ob das Programm das Richtige tut.

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