zu der Aufgabe etwas weiter unten Kundenverwaltung



  • Hier nochmal die Aufgabe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-268977.html

    So ich hänge an folgenden Ecken:

    Warum für PLZ einen char? funktioniert das überhaupt?
    und wie funktioniert das mit dynamischen arrays? ich kenne&verstehe es kein bisschen...

    da hänge ich...ich weiß nicht weiter...echt nicht

    #include <iostream>

    using namespace std;

    char Nachname[20]
    char Vorname[20]
    char Straße[30]
    char PLZ[6]
    char Wohnort[20]
    char Geburtsdatum[11]

    main()
    {

    system("PAUSE");

    }



  • Du musst für die PLZ keinen character nehmen. Äquivalent dazu ist ein integer, short oder std::string.

    Dynamisch bedeutet einfach nur, dass zur Laufzeit operiert wird.

    char a[10] << Hier weiß der Compiler vor der Laufzeit schon bescheid wie viele Elemente das Array besitzt.

    std::vector<char> b << Hier nicht. Du kannst hier während der Laufzeit so viele Zeichen anhängen wie du willst.

    Das sollte aber auch in jedem gescheiten Tutorials ausführlich erklärt werden.



  • Ich hab schon im entsprechenden Post geschrieben, kümmer dich darum, herauszufinden ob du das wirklich in C++ oder in C machen musst.

    All die Teile in der Aufgabe, welche dazu dienen sollen dir bestimmte Konzepte beizubringen, sind im C++ schon in der Standardlib implementiert. D.H. du bräuchtest nicht mehr viel machen

    statt char* (Dynamisches allokieren von Speicher auf chars) nutzt man da nämlich std::string. Statt die Linked-List selber zu bauen gibts dafür auch was im std namespace.
    Und ich denke nicht das dies im Sinne des Aufgabenstellers ist. Oder Ihr dürft C++ ohne die die entsprechenden Container und String verwenden.



  • AlleNamenBelegt schrieb:

    Hier nochmal die Aufgabe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-268977.html

    Die Aufgabe ist uns eigentlich egal (wir machen keine Hausaufgaben etc.), die konkrete Frage kann man vielleicht erklären, auch wenn die Aufgabe kein C++ ist (sondern eher C). Unter C++ würde man eher std::string für Texte verwenden.

    AlleNamenBelegt schrieb:

    Warum für PLZ einen char?

    Du meinst char-Array. Unter anderem für eine führende "0" (was mit ein Integer nicht geht).

    AlleNamenBelegt schrieb:

    und wie funktioniert das mit dynamischen arrays?

    Unter C++ heißt das Schlüsselwort dazu "new"/"new[]" und "delete"/"delete[]". Ich kann mir aber nicht vorstellen das ihr dazu garnichts durchgenommen habt.

    #include <iostream>
    
    using namespace std;
    
    char Nachname[20]
    char Vorname[20]
    char Straße[30]
    char PLZ[6]
    char Wohnort[20]
    char Geburtsdatum[11]
    

    Mit globalen, einzelnen Variablen kannst du schon einmal nicht beliebige Mengen davon halten (Zum einen sind globale Variablen in der Regel nicht das sinnvollste, zum anderen musst du deine Daten um sinnvoll gliedern (z.B. als eine struct, und diese kannst du wiederum in einem Array halten).

    main()
    

    Kein gültiges C++. "int main()" wäre hier richtig.



  • Fedaykin schrieb:

    Ich hab schon im entsprechenden Post geschrieben, kümmer dich darum, herauszufinden ob du das wirklich in C++ oder in C machen musst.

    All die Teile in der Aufgabe, welche dazu dienen sollen dir bestimmte Konzepte beizubringen, sind im C++ schon in der Standardlib implementiert. D.H. du bräuchtest nicht mehr viel machen

    statt char* (Dynamisches allokieren von Speicher auf chars) nutzt man da nämlich std::string. Statt die Linked-List selber zu bauen gibts dafür auch was im std namespace.
    Und ich denke nicht das dies im Sinne des Aufgabenstellers ist. Oder Ihr dürft C++ ohne die die entsprechenden Container und String verwenden.

    Doch es ist wirklich C++
    da wir nur C++ lernen....aber ich komme irgendwie überhaupt nicht dahinter....diese Aufgabe geht weit über meinen Horizont 😢
    das mit dem dynamischen versteh ich kein bisschen...habe auch schon nach gegooglet. aber ich verstehe es einfach nicht.



  • Fedaykin schrieb:

    Statt die Linked-List selber zu bauen gibts dafür auch was im std namespace.
    Und ich denke nicht das dies im Sinne des Aufgabenstellers ist.

    In der regel ist das Programmieren einer verketteten Liste durchaus Unterrichtsstoff (und auch nicht unsinnig), aber char-Arrays statt std::string ist einfach nur pfui.



  • PLZ als string/char-array macht dahingehend Sinn das sie auch mit einer 0 anfangen kann. Dann muss man sich bei der Ausgabe etc. nicht immer darum kümmern. Sollte aber bedenken das Streaming-Operatoren etc. gerne mal Zahlen die mit 0 anfangen als Oktalzahlen interpretieren.



  • Unter C++ heißt das Schlüsselwort dazu "new"/"new[]" und "delete"/"delete[]". Ich kann mir aber nicht vorstellen das ihr dazu garnichts durchgenommen habt.

    muss ich leider sagen nope....die befehle kenn ich nicht.



  • Ich kann mir einfach nich vorstellen, dass ihr eine Aufgabe in der Schule gestellt bekommt, in der es um bestimmte Dinge geht, welche ihr aber noch nie besprochen habt.

    Ich finde es bringt auch nichts jetzt sich mal eben was über das dynamische Erzeugen von arrays( sprich zur Laufzeit ) durchzulesen, sondern wenn dann sollte man das ganze richtig lernen, also les dir Tutorials durch, oder noch besser kauf dir ein sehr gutes C++ Buch, zum Beispiel den C++ Primer.

    Gruß freeG



  • Ich kann mir schon vorstellen das es C++ ist, war bei uns genauso.

    Wir durften nur char Arrays benutzen mit Pointer auf Pointer und so lustige Sachen.

    Der Lehrer verkaufte uns das als C++.

    Als ich dann in einer Arbeit Vektoren, Strings, Lists, Templates usw. benutzt habe, habe ich tatsächlich eine schlechte Note bekommen, nur weil der Lehrer das nicht kann. ^^



  • Das ist selbst in der Uni noch so.



  • AlleNamenBelegt schrieb:

    Hier nochmal die Aufgabe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-268977.html

    Das hilft nicht, aber ich sag's trotzdem: Was für eine besch***ene Aufgabe!

    Ich zitiere:

    Die Elemente eines Kundendatensatzes könnten z.B. aus Nachname, Vorname, Straße, PLZ, Wohnort und Geburtsdatum bestehen, ausschließlich Daten des Typs char-Array. Namen, Straße und Ort sollten Arrays ausreichender Länge sein, für die PLZ reicht eine Größe von 6 Zeichen und für Geburtsdaten von 11 Zeichen. Um [...] keinen Speicher unnötig zu verschwenden, sollen die Arrays dynamisch und nur dann erzeugt werden, wenn tatsächlich Daten eines neuen Kunden im System eingetragen werden müssen. Alle bei der dynamischen Speicheranforderung der char-Arrays für einen Kunden erhaltenen char-Zeiger sollen in einem Array zusammengefasst werden (siehe unten). Dieses muss ebenfalls dynamisch erzeugt werden.

    Ja was denn nun? Soll er sich mal entscheiden, ob er Arrays oder Zeiger als Elemente haben will.

    Hinweis: Falls innerhalb eines Arrays verschiedene Arten von Zeigern gespeichert werden müssen, z.B. char-Pointer und Pointer auf char-Pointer, dann kann man das Array auch als Array für void-Pointer definieren. Die einzelnen Pointer im Array sind dann vor ihrer Verwendung auf den benötigten Pointer-Typ umzucasten.

    Was für ein Dreck. 👎

    Tipp: Wenn man sich noch den Rest dessen durchliest, was Dein Lehrer da verzapft hat, kommt man zum Ergebniss, dass er folgendes sehen will:

    typedef void **Kundendatensatz;
    

    janz große Sch***e! 😮 👎

    Du könntest Deinen Lehrer vorsichtig fragen, ob Du ein anderes der Design der Datenstruktur verwenden darfst. ZB so etwas:

    #include <string>
    
    struct Kundendatensatz
    {
      std::string nachname;
      std::string vorname;
      std::string strase;
      std::string plz;
      std::string wohnort;
      std::string geburtsdatum;
      Kundendatensatz *next;
    };
    

    btw: Das SZ (in Straße) ist als Teil eines Bezeichners nicht erlaubt.

    kk



  • nee leider müssen wir das mit chararrays und pointer machen

    und ich kriegs echt nicht hin...das ist mehr als dumm 😞



  • Fellhuhn schrieb:

    Das ist selbst in der Uni noch so.

    Nein, ist es nicht - zumindest nicht zwangsweise (Ich bin mir recht sicher schon in der FH Zeit vor über 10 Jahren mit der Standardbibliothek - die aber noch nicht 100% normiert war). Wobei man hier auch unterscheiden muss, was das Ziel einer Aufgabe ist.

    Wenn das Ziel ist, auch eine dynamische Liste zu erzeugen um das Prinzip zu verstehen, ist die Standardbibliothek nicht geeignet.



  • AlleNamenBelegt schrieb:

    nee leider müssen wir das mit chararrays und pointer machen und ich kriegs echt nicht hin...das ist mehr als dumm 😞

    Wenn du etwas gegoogelt hättest, die Stichworte wurden genannt, hättest du die Erklärung bekommen. Ein Beispiel ist

    hier
    


  • asc schrieb:

    Fellhuhn schrieb:

    Das ist selbst in der Uni noch so.

    Nein, ist es nicht - zumindest nicht zwangsweise (Ich bin mir recht sicher schon in der FH Zeit vor über 10 Jahren mit der Standardbibliothek - die aber noch nicht 100% normiert war). Wobei man hier auch unterscheiden muss, was das Ziel einer Aufgabe ist.

    Vor 4 Jahren als ich von der Uni ging hatte von den Profs nur ein sehr geringer Teil von der STL überhaupt gehört und von den Tutoren die die Programmierarbeiten begleiteten hatte es keiner.



  • AlleNamenBelegt schrieb:

    und ich kriegs echt nicht hin...

    Überlege Dir mal ein paar Fragen, die man hier beantworten kann, ohne dass so eine Antwort Dir gleich einen Großteil der Arbeit Deiner Hausaufgabe abnimmt. Sonst wird der Thread hier (wahrscheinlich) auch wieder geschlossen.

    Ist Dir denn klar, wie Dein Lehrer die Daten im Speicher organisiert haben will?



  • und nur mal so nebenbei, diese Seite taucht bei Google immer ganz oben auf und das innerhalb weniger Minuten nachdem man was geschrieben hat. Daher ist es nicht besonders clever die Aufgabenstellung 1:1 abzuschreiben, vor allem nicht wenn man sich alles vorkauen läßt. 😉



  • Fellhuhn schrieb:

    und nur mal so nebenbei, diese Seite taucht bei Google immer ganz oben auf und das innerhalb weniger Minuten nachdem man was geschrieben hat. Daher ist es nicht besonders clever die Aufgabenstellung 1:1 abzuschreiben, vor allem nicht wenn man sich alles vorkauen läßt. 😉

    ich denke ich mache damit nichts falsches, wenn ich mir dafür hilfe suche? das darf mein Lehrer ruhig wissen, dass ich für sowas etwas hilfe brauch. es ist eine freiwillige Aufgabe, dass heißt ich muss sie nicht machen. Ich versuche sie aber trotzdem und darf mir da doch wohl hilfe suchen 🙂



  • Bin ich damit denn schon irgendwie nah dran? oder weit daneben?

    #include <iostream>
    
    using namespace std;
    
    int main()
    {    
    
    char *nachname= new char;
    char *vorname= new char;
    char *straße= new char;
    char plz[6];
    char *wohnort= new char;
    char geburtsdatum[11];
    
    cout<<"Nachname?";
    cin>>nachname;
    cout<<"Vorname?";
    cin>>vorname;
    cout<<"Straße?";
    cin>>straße;
    cout<<"PLZ?";
    cin>>plz;
    cout<<"Wohnort?";
    cin>>wohnort;
    cout<<"Geburtsdatum?";
    cin>>geburtsdatum;
    
    delete nachname;
    delete vorname;
    delete straße;
    delete wohnort;
    
    system("PAUSE");
    
    }
    

Anmelden zum Antworten