C++ Anfänger braucht hilfe



  • hab ne aufgab gekriegt und zwar:
    Das pogramm soll wenn man die Schulklassen eingibt die Namen der Schüler ausgeben(falls schon mal eingegeben soll das Pogramm die namen aus dem Massenspeicher holen) falls die nicht vorhanden sind soll das Pogramm nach den Namen fragen. Die Ersterfassung der Namen soll mit einer leeren zeichenkette enden.Im anschluß daran soll der user in ein Menu kommen wo er das Pogramm beenden kann, die namen anzeigen lassen kann, die namensliste sortieren lassen kann, einen neuen namen erfassen lassen kann und einen namen löschen kann.
    Die Anzeige der Namensliste soll in zwei Spalten erfolgen.
    Die Namen sollen aufsteigend alphabetisch sortiert sein
    Neu erfasste namen sollen an das ende der liste angefügt werden
    beim Beenden des Pogramms soll die Liste der angegebenen Schulklasse im Massenspeicher abgelegt werden.

    Ich find irgendwie net in die Aufgabe rein!
    Kann mir jemand zumindest einen Ansatz geben?



  • IceMan2oo4 schrieb:

    hab ne aufgab gekriegt

    richtig: du hast eine aufgabe bekommen

    IceMan2oo4 schrieb:

    und zwar:
    Das pogramm soll wenn man die Schulklassen eingibt die Namen der Schüler ausgeben(falls schon mal eingegeben soll das Pogramm die namen aus dem Massenspeicher holen) falls die nicht vorhanden sind soll das Pogramm nach den Namen fragen. Die Ersterfassung der Namen soll mit einer leeren zeichenkette enden.Im anschluß daran soll der user in ein Menu kommen wo er das Pogramm beenden kann, die namen anzeigen lassen kann, die namensliste sortieren lassen kann, einen neuen namen erfassen lassen kann und einen namen löschen kann.
    Die Anzeige der Namensliste soll in zwei Spalten erfolgen.
    Die Namen sollen aufsteigend alphabetisch sortiert sein
    Neu erfasste namen sollen an das ende der liste angefügt werden
    beim Beenden des Pogramms soll die Liste der angegebenen Schulklasse im Massenspeicher abgelegt werden.

    Ich find irgendwie net in die Aufgabe rein!
    Kann mir jemand zumindest einen Ansatz geben?

    jo: namen in ein array oder vector; sortieren; prüfen lassen; menü schreiben -> fertig 😃

    als ansatz kann man das doch werten, oder?



  • Hi!

    Was ist denn der Unterschied zwischen einem Array und einem Vektor? Ich hatte immer gedacht Vektor wäre eine andere Bezeichung für ein Array.



  • vector<int>
    array[]



  • Ein Vector ist dynamisch in seiner Größe und viel komfortabler und sicherer als ein Array. Es ist schon was anderes als ein Array, erfüllt aber im Prinzip erstmal den gleichen Zweck, plus ein wenig mehr. 😃



  • wie mach ich das nun mit vector in wie lasse ich die liste prüfen und lade sie dann beim beenden in den Massenspeicher?



  • IceMan2oo4 schrieb:

    hab ne aufgab gekriegt und zwar:
    Das pogramm soll wenn man die Schulklassen eingibt die Namen der Schüler ausgeben(falls schon mal eingegeben soll das Pogramm die namen aus dem Massenspeicher holen) falls die nicht vorhanden sind soll das Pogramm nach den Namen fragen. Die Ersterfassung der Namen soll mit einer leeren zeichenkette enden.Im anschluß daran soll der user in ein Menu kommen wo er das Pogramm beenden kann, die namen anzeigen lassen kann, die namensliste sortieren lassen kann, einen neuen namen erfassen lassen kann und einen namen löschen kann.
    Die Anzeige der Namensliste soll in zwei Spalten erfolgen.
    Die Namen sollen aufsteigend alphabetisch sortiert sein
    Neu erfasste namen sollen an das ende der liste angefügt werden
    beim Beenden des Pogramms soll die Liste der angegebenen Schulklasse im Massenspeicher abgelegt werden.

    Ich find irgendwie net in die Aufgabe rein!
    Kann mir jemand zumindest einen Ansatz geben?

    Man kann mit der Funktion

    WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
    

    ganz einfach Daten in einem beliebigen Format auf einen beliebigen Massenspeicher schreiben.

    Dann gibt es noch die Kombination

    CreateFile(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
    ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
    

    Mit der Du prinzipiell beliebige Daten aus einer beliebigen Datei vom Massenspeicher in den Hauptspeicher befördern kannst, in deinem Fall am besten in ein dynamisch erzeugtes Stringarray, weil Du ja nicht wissen kannst, wieviele Schüler auf dem Massenspeicher (genauer in einer Datei) gespeichert sind oder ob überhaupt eine Datei existiert, in der die Schüler gespeichert sind.

    Das ist aber nur ein Aspekt, der Deine Frage ein bisschen zu unpräzise erscheinen lässt, weil das oben skizzierte, bequeme Verfahren, nämlich nur auf 90% aller Rechner funktionieren wird. Vielleicht habt ihr aber Rechner, die unter die 10% der anderen und teilweise total anderen Rechner fallen, und dann kannst Du Dich mit fopen(), printf(), fclose(), fcloseall(), fputc(), fgetc(), feof() und noch ein paar Dutzend anderer antiquierter Funktionen herumplagen.

    Falls das Problem speziell hierin bestanden hat, dann schreibst Du das nächste Mal (a), und wir gehen weiter in die Tiefe.

    (b) Das Programm soll nach dem Namen fragen?
    - Wir brauchen möglicherweise einen Device Context zur Soundkarte, geht relativ unkompliziert, wenn Du in DirectX sattelfest bist, aber noch einmal: klappt nur auf 90% aller Rechner, auf den anderen 10% der Rechner siehst Du Dich vergeblich nach brauchbaren Schnittstellen zur Sprachausgabe um.
    Wenn allerdings eine Frage in Textform genügen sollte, kannst Du Dir eine Dialogbox-Resource basteln, in der die dann auftaucht (in 90% der Fälle, hängt natürlich genauso wie alles andere vom OS ab). Da platzierst Du ein paar Edit Controls, damit die eingegebenen Namen dann unkompliziert mit SendMessage(GETTEXT) in einem Buffer gespeichert werden können, um sie mit den Einträgen aus der Datei vergleichen zu können.

    Falls das Problem speziell hier aufgetaucht sein sollte, bitte (b) als Thema angeben, und wir können das auch vertiefen.

    (c) Vielleicht lass ich mir dadurch, dass Du von Schulklassen redest, irgendwie einreden, dass Du noch Schüler bist, aber Sortieralgorithmen lernt man eigentlich erst auf der Hochschule (war jedenfalls bei mir so), und die effizienteren davon sind etwas für ein Mathematik-Board. Für ein paar Schüler, die da auftauchen, in der Datei mit den Schülern, reicht für Deine Zwecke ein ziemlich einfacher Sortieralgorithmus. Geh zu Google, gib 'Selection Sort Algorithm' ein, und ziemlich schnell wirst Du fündig.

    Gib (c) das nächste Mal an, wenn speziell beim Sortieren Probleme auftreten.

    Sorry, ich muss morgen wieder früh raus, wenn das Problem irgendwie nicht zu a) b) oder c) passt, dann schreib einfach d).

    Bis morgen, denk aber auch selber ein bisschen nach, das ist auf lange Sicht besser für Dich!





  • @mecnels nichts gegen dich, aber:

    Die Namen sollen aufsteigend alphabetisch sortiert sein
    Neu erfasste namen sollen an das ende der liste angefügt werden

    in diesem abschnitt sind zwei schlüsselwörter versteckt: liste und sortieren.

    hmm liste-sortieren...ahhh 💡 std::list ist ja perfekt. das ding kann über sort() sortieren, und verhält sich auch sonst wie eine liste.

    nun ist die liste aber auch nicht immer ideal, aber wozu gibts den header <algorithm>? genau, weil es da auch ein std::sort() gibt, der jeden container sortieren kann 😮

    klasse, wir kennen nun 2 möglichkeiten, werte sortiert zu speichern.

    WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
    

    man könnte aber auch einfach ofstream benutzen, damit geht das auch, nur schöner.

    CreateFile(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
    ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
    

    ifstream ist auch hier viel schöner.

    [...] in deinem Fall am besten in ein dynamisch erzeugtes Stringarray, weil Du ja nicht wissen kannst, wieviele Schüler auf dem Massenspeicher (genauer in einer Datei) gespeichert sind[...]

    std::liststd::string wie oben schon erklärt.

    auf den anderen 10% der Rechner siehst Du Dich vergeblich nach brauchbaren Schnittstellen zur Sprachausgabe um.

    seitwann kann linux kein sound? und besides: es ist zu 99,999% abgesichert, dass er keine soundabfrage machen muss 😃



  • @Mecnels: Und für diesen Blödsinn machst du dir so viel Mühe? 🙄



  • Mecnels schrieb:

    Das ist aber nur ein Aspekt, der Deine Frage ein bisschen zu unpräzise erscheinen lässt, weil das oben skizzierte, bequeme Verfahren, nämlich nur auf 90% aller Rechner funktionieren wird. Vielleicht habt ihr aber Rechner, die unter die 10% der anderen und teilweise total anderen Rechner fallen, und dann kannst Du Dich mit fopen(), printf(), fclose(), fcloseall(), fputc(), fgetc(), feof() und noch ein paar Dutzend anderer antiquierter Funktionen herumplagen.

    ...oder er nimmt einfach C++.

    Ich frage mich natürlich auch, inwieweit bei diesem Problem DirectX auch nur erwähnt werden darf?! Hilfe in alle Ehren, aber meinst du nicht, dass du mit deinem Geschreibsel einen Anfänger absolut in die falsche Richtung lenkst statt ihm wirklich zu helfen?

    Sortieralgorithmen lernt man eigentlich erst auf der Hochschule

    ?? Wann war das denn bitte ??



  • Oje, vor Euch ist man ja nirgends sicher.
    Da bemüht man sich, einem Anfänger Fragen so gut man eben erklären kann und so kompakt wie möglich etwas zu erklären (wozu keiner von Euch vorher bereit war)und dann seid Ihr schon wieder da, und wisst alles besser, nur damit Ihr mich ärgern könnt.

    An den Thread-Starter:
    Die Frage sieht zwar aus, wie EINE einzige Frage, aber es sind in Wirklichkeit ein gutes Dutzend Fragen, die Du stellst, weil ich (und auch sonst niemand) hier wissen kann, wie weit fortgeschritten Deine Kenntnisse in C/C++ sind.
    Jedenfalls CreateFile()_ReadFile()_WriteFile()_SetFilePointer() sind garantiert mächtiger als ihre Stream-Kollegen ofstream & Co.
    (Aber die Herren Ärgerer wissen das ja selber genau so gut wie ich)


  • Mod

    Mecnels schrieb:

    Man kann mit der Funktion

    WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
    

    ganz einfach Daten in einem beliebigen Format auf einen beliebigen Massenspeicher schreiben.

    etc. etc. etc.

    Bis morgen, denk aber auch selber ein bisschen nach, das ist auf lange Sicht besser für Dich!

    wow 😮 😮 😮 😮 😮 änder doch deine signatur mal auf troll oder so....

    @IceMan: Hör auf otze.

    M.1946 schrieb:

    Jedenfalls CreateFile()_ReadFile()_WriteFile()_SetFilePointer() sind garantiert mächtiger als ihre Stream-Kollegen ofstream & Co.

    Ja und? am besten noch mit FILE_FLAG_NO_BUFFERING und FILE_FLAG_OVERLAPPED? :p

    M.1946 schrieb:

    Da bemüht man sich, einem Anfänger Fragen so gut man eben erklären kann und so kompakt wie möglich etwas zu erklären (wozu keiner von Euch vorher bereit war)und dann seid Ihr schon wieder da, und wisst alles besser, nur damit Ihr mich ärgern könnt.

    Du schmeisst den thread-ersteller ins wasser (es ist ein sumpf !) und erwartest, dass er schwimmt. frag ihn doch mal, wieviel er von deiner antwort tatsächlich verstanden hat.



  • otze schrieb:

    weil es da auch ein std::sort() gibt, der jeden container sortieren kann 😮

    aber sort(list.begin(), list.end()) tut nicht tun wollen

    :p



  • Mecnels, solche Spielchen kannst du gerne im WinAPI Forum abziehen, aber nicht hier. Lies noch mal die Beschreibung des C++ Unterforums.

    Fragen zu bestimmen Funktionen und Abläufen in C++ (nach dem ISO-Standard) ...



  • Shade Of Mine schrieb:

    otze schrieb:

    weil es da auch ein std::sort() gibt, der jeden container sortieren kann 😮

    aber sort(list.begin(), list.end()) tut nicht tun wollen

    :p

    wird wohl der grund sein, wieso die liste ne eigne sort methode hat 😉

    Jedenfalls CreateFile()_ReadFile()_WriteFile()_SetFilePointer() sind garantiert mächtiger als ihre Stream-Kollegen ofstream & Co.
    (Aber die Herren Ärgerer wissen das ja selber genau so gut wie ich)

    erstmal muss man sagen, das formated output und unformated output 2 verschiedene paar schuhe sind, aber von dem öffnen der datei ansich hast du recht. natürlich kann man nicht alldas machen, was mit deinen funktionen geht, die frage ist aber auch, wieoft man eine datei> size_t(-1)Bytes hat. oder wieoft man man eine datei nicht mit exklusivrechten öffnen will. normalerweise braucht man solche dinge garnicht.



  • also hab jetzt nur noch flogendes problem und zwar er fragt ja nach der Schulklasse und falls (also if schleife) die schulklasse schon existiert wie schreib ich das in die schleife?????? 🤡



  • Der ist wirklich gut 😃 😃 😃

    (also if schleife)

    IceMan2oo5 schrieb:

    (also if schleife)


Log in to reply