ich peil garnix ...



  • bisher kann ich etwas java programmieren und nun habe
    ich nach 4 Vorlesungen c++ folgende Aufgabe
    die ich bis Montag hinkriegen muss ....

    Konsolenanwendung:
    Vom Nutzer koennen Artikeldaten erfasst werden.Ein Artikel wird durch eine Artikelnummer, eine Bezeichnung und einen Preis beschrieben. Die eingelesenen Artikel sollen in einer Datei mit wahlfreiem Zugriff gespeichert werden. Der Zugriff auf die neuen Artikel wird durch den Einsatz einer Indexdatei beschleunigt. Realisieren sie das Erfassen neuer Artikel mit dem Aufbau einer Index- und Primärdatei, sowie das Suchen nach bereits vorhandenen Artikeln anhand der Artikelnummer. Die Suche soll als Binärsuche in der Indexdatei durchgefuehrt werden und den Offset zum Zugriff auf die Primärdatei liefern. Nach dem Lesen in der Primärdatei werden die Artikeldaten ausgegeben. Realiesiere eine Eingabeschleife, die nach der gewünschten Aktion des Nutzers fragt.

    Tja Leutz, für nette Hilfe revanchiere ich mich auch, vielleicht n cafe schlürfen(Berlin) oder so.
    Thx 😉 Silke



  • ich bin mir zwar nicht ganz sicher, aber ich glaube
    du sollst diese aufgabe loesen, indem du ein entsprechendes
    c++ programm schreibst...
    ok wuerde dann sagen wir gehen am samstag nen cafe trinken; du
    zahlst natuerlich.



  • Ein guter Anfang wäre es denke ich sich mal mit Dateien und C++ auseinander zu setzen.



  • Beende dein Studium!



  • Silke_verzweifelt du schneides die selber ins fleisch, irgend wann werden die aufgaben schwerer und die leute die es für dich machen wollen/können weniger
    und dann wird dir dir übung fehlen ums selber zu machen
    wenn du deswegen durch fällst, melde dich hier noch mal als abschreckens beispiel



  • Original erstellt von Silke_verzweifelt:
    **bisher kann ich etwas java programmieren und nun habe
    ich nach 4 Vorlesungen c++ folgende Aufgabe
    die ich bis Montag hinkriegen muss ....
    **

    Ist leider ne aufgabe für c. in c++ paßt das net. aber das wird deinen lehrer nicht stören. mein beileid, es gibt leider viele, die c++ nicht lernen, sondern bei c bleiben und es als c++ verkaufen.
    die aufgabe ist an sich klar und hübsch. ich nehme an, der index soll nach artikelnummern sein und nicht nur die neuen artikel sollen indiziert sein. schätze, sehr schnelle leute brauchen 2 stunden dafür und langsamere auch mal nen tag oder 2. also wirste keinen finden, ders dir macht. solltest hardware bieten und damit junge aufstrebende programmier unterstützen.
    übrigens ist die aufgabe schlichweg ein unverschämter hammer, wenns erst 4 c++-vorlesungen gab.



  • hey seid ihr fix,

    @volkard ...hardware bieten und damit junge aufstrebende programmier unterstützen... *laechel* sorry bin arm wie kirchenmaus, bafög immer schnell wech aber cafe_chen und n talk das is alles was ich bieten kann.
    Leider bin ich die einzigste Frau in dem Kurs und wenn ich in der Vorlesung Fragen stelle, verdrehn alle die Augen ....

    @entelechie ...ein entsprechendes c++ Programm schreibst... super Idee wow genau das schwebt mir vor. Logo zahl ich den Cafe am Samstag wenn dus mir bis dahin beigebracht hast wie ich an das Problemchen rangehe...

    @Dimah nur weil eigentlich alle meiner Komilitonen(leider alle männlich) schon einigermassen c/c++ programmieren können setzte der Prof eben ein gewisses Basiswissen voraus. Auf meinen Einwand hin hiess es ... lass dir von anderen helfen... toll wa !

    @Knuddlbaer das schau ich mir jetzt an 😉 Thx

    also was ich an code bisher habe???
    nix denn ich setz mich erst ran wenn ich genau weiss wie und was ich machen muss.
    event. mach ich mir vorher ne übersicht in pseudo-code.
    ich poste einfach mal was mir alles klar is ...

    Binär-Suche : weil die Suchzeit dann nich linear mit der Datei-Grösse ansteigt sondern nur in etwa logarithmus der Dateigrösse. Also wichtig in grossen Datensätzen. Nur wie implementiere ich so ein Suchmuster?
    Die Datensätze müssen wohl durch ein Trennzeichen in die Datei geschrieben werden, in java würd ich da nen "token" für benutzen, in c++??

    Primär/Index-Datei:die Primär und Index-Datei ist nach dem selben Feld sortiert. Die Indexdatei enthält dann einen Eintrag je Block aus der Primärdatei

    vielleicht ne Struktur in der Art definieren:
    struct artikel_Eingabe { int art_Nr; char art_Bez; float art_Preis; };

    das erstmal .... vielleicht auch gerne anhaltspunkte .. egal hauptsache es hilft mir irgendwie weiter....
    😉 Silke



  • Original erstellt von Silke_verzweifelt:
    **
    struct artikel_Eingabe { int art_Nr; char art_Bez; float art_Preis; };
    **

    [cpp]
    struct artikel_Eingabe
    {
    int art_Nr;
    char art_Bez[255]; // !!
    float art_Preis;
    };

    // oder (ist aber C**++
    **#include <string>
    class Artikel {
    int Nr;
    float Preis;
    std::string Bezeichnung;
    };[/cpp]



  • warum nimmst du in c++ auf einmal class statt struct? 🙄



  • Original erstellt von Silke_verzweifelt:
    also was ich an code bisher habe???
    nix denn ich setz mich erst ran wenn ich genau weiss wie und was ich machen muss.

    fehler. man fummelt sich sowas langsam zurecht und lernt währenddessen. und man probiert viel aus. 20 stunden sind da schnell wech, das ist normal.

    event. mach ich mir vorher ne übersicht in pseudo-code.

    halt ich für hilfreich.

    ich poste einfach mal was mir alles klar is ...

    gut. dann kann ich besser widersprchen.

    Binär-Suche : weil die Suchzeit dann nich linear mit der Datei-Grösse ansteigt sondern nur in etwa logarithmus der Dateigrösse. Also wichtig in grossen Datensätzen.

    korrekt.

    Nur wie implementiere ich so ein Suchmuster?

    im internet eins finden. egal, welche sprache. und nach c++ übersetzen. wird zwar ne array-version sein, aber zu ner datei-version kannstes umbasteln.

    Die Datensätze müssen wohl durch ein Trennzeichen in die Datei geschrieben werden, in java würd ich da nen "token" für benutzen, in c++??

    nein. der kasper denkt bestimmt an direktzugriffsdateien. das heißt, du nimmst die ne feste datensatzlänge und kannst dann den 53. datensatz leicht lesen mit fseek(53*sizeof(Datensatz));read(&data,sizeof(Datensatz)); oder so.

    Primär/Index-Datei:die Primär und Index-Datei ist nach dem selben Feld sortiert. Die Indexdatei enthält dann einen Eintrag je Block aus der Primärdatei

    nein. hauptdatei ist gar nicht sortiert. beim eintragen wird einfach der datensatz hinten drangeklatscht. und in den sortierten index wird ein verweis drauf geschrieben. so muß nur der kleine index sortiert sein, was viel schneller geht, als die haupt-datei sortiert zu halten.

    vielleicht ne Struktur in der Art definieren:
    struct artikel_Eingabe { int art_Nr; char art_Bez; float art_Preis; };

    art_Bez sollte eher ein array of chars sein, nicht nur ein einzelner buchstabe. also char art_Bez[20]; oder so.



  • erstmal vorweg:
    ich bin mir sicher, dass dir hier niemand das programm schreiben
    wird; du wirst lediglich loesungsvorschlaege und antworten
    zu konkreten fragen erhalten.
    was dimah, dir versucht hat zu sagen: nimm dir ein buch ueber
    c++ (oder schau mal im internet nach tutorials, schon mal auf www.c-plusplus.net nachgesehen? -> tutorials, links, faq) und arbeite
    dich mal in die sprache ein, dass bringt dir mehr als eine feritge
    loesung von irgendjemandem.

    also, ich geb dir mal ein paar weiter dankanstoesse: 🙂
    die idee mit der struktur ist ok, aber da du ja c++ prog. sollst nimm eine
    klasse (fast wie in java). fuer die bezeichung kannst du, fast wie in java,
    die klasse string (kleingeschrieben!) benutzen (dazu musst du noch
    ein include <string> machen).
    das saehe dann so aus:

    #include <string>
    using namespace std;
    class Artikel
    {
      public:
         Artikel( int nr, string& bez, double preis );
    
      private:
        int nr;
        string bez;
        double preis;
    }
    sieht fast wie in java aus :)
    

    binaere suche? google, buch?
    trennzeichen? ein char ( ' ', ';', '#',...)?
    dateien? tutorial, faq, buch?
    fuer die index-/primaer-datei schau dir die funktionen tellg, seekp
    der fstreams an, und wirf mal nen blick in die faq.



  • Original erstellt von entelechie:
    die klasse string (kleingeschrieben!) benutzen (dazu musst du noch
    ein include <string> machen).

    ich halte struct und ein char-array hier für angemessen. weils die direktzugriffe vereinfacht.



  • toll dass ihr mir überhaupt antwortet, ich mein ich hab 4 Leutz aus der Uni angerufen und die sagten ..keine Zeit ...

    @KingRuediger ...klar das muss n char-arry sein 😉 auch ne Klasse ist sicher gut(oop)

    @volkard ... solltest mir mal Unterricht geben *fg* ...Direktzugriffsdateien.. das heißt, du nimmst die ne feste Datensatzlänge... das klingt gut! thx und auch richtig dass die Primärdatei garnich sortiert wird sondern nur die Index-datei aus der ein Zeiger auf den Datensatz in der Primärdatei verweist , vielleicht in etwa so ? --> (sizeof( primarystruct) * pos)

    @entelechie ich schau mir die Funktionen an, thx.



  • ich überleg grad ...
    es wird ja nur in der Index-Datei gesucht. Diese hat die Zuordnung "art_Nr" => "offset", und beides könnte man als Integer darstellen . Also die Index-Datei einfach mit jeweils Integer-Paaren füllen. Ein Integer sind 4 Bytes d.h. es reicht, wenn man auf die Index-Datei einfach in 8-Byte-Schritten zugreift, ohne Trennzeichen.
    Ist so ein gedanklicher Ansatz gut?

    Silke



  • Original erstellt von Silke_verzweifelt:
    **ich überleg grad ...
    es wird ja nur in der Index-Datei gesucht. Diese hat die Zuordnung "art_Nr" => "offset", und beides könnte man als Integer darstellen . Also die Index-Datei einfach mit jeweils Integer-Paaren füllen. Ein Integer sind 4 Bytes d.h. es reicht, wenn man auf die Index-Datei einfach in 8-Byte-Schritten zugreift, ohne Trennzeichen.
    Ist so ein gedanklicher Ansatz gut?

    Silke**

    ja, du solltest aber wg. der Portabilität nicht 8, sondern 2*sizeof(int) nehmen.



  • jo.



  • mit strings aus c++ wirds eklig, weil die ne variable länge haben, also würd ich eben solche char arrays nehmen. für 4 c++ vorlesungen isses schon bisschen happig...

    wieso steigt doe suchdauer bei binary search eigentlich nur logarithmisch im vgl. zur dateigröße an?



  • Original erstellt von Korbinian:
    wieso steigt doe suchdauer bei binary search eigentlich nur logarithmisch im vgl. zur dateigröße an?

    Eingabe wird immer halbiert.



  • Original erstellt von <KingRuediger>:
    Eingabe wird immer halbiert.

    Weil nur alle 2*sizeof(int) gelesen wird, und nicht alles? (vermut mal ja :p)



  • Original erstellt von Korbinian:
    mit strings aus c++ wirds eklig, weil die ne variable länge haben, also würd ich eben solche char arrays nehmen. für 4 c++ vorlesungen isses schon bisschen happig...
    wieso steigt doe suchdauer bei binary search eigentlich nur logarithmisch im vgl. zur dateigröße an?

    wie sochste denn in nem worterbuch? ungefähr so (es hat 1000 seiten):
    //1000 kandidaten
    bei seite 500 aufschlagen. ah, es steht weiter hinten.
    //nur noch 500 kandidaten
    bei seite 750 aufschlagen. ah, es steht weiter vorne.
    //nur noch 250 kandidaten
    usw.
    nach 10 mal blättern nur noch 1 kandidat.

    für ein buch mit ner million seiten braucht man nur 20 mal blättern. bei ner milliare nur 30 mal.


Anmelden zum Antworten