Problem



  • Hallo alle zusammen,

    also ich soll ein Programm schreiben, dass aus einer externen Datei Informationen über Studenten herausliest in der folgenden Form:

    Matrikelnummer Nummer1.Wahl Nummer2.Wahl..... Nummern.Wahl

    Es geht hierbei um die Verteilung in Übungsgruppen, welche gleichmäßig erfolgen soll. Das Einlesen der Daten macht mir keine Schwierigkeiten, aber bevor ich zu lange laber, hier mal mein Quelltext:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
     int studenten,uebungen;
     cout<<"Geben Sie die Anzahl der Studenten an: ";
     cin>>studenten;
     cout<<endl;
     cout<<"Geben Sie die Anzahl der Uebungsgruppen an: ";
     cin>>uebungen;
    
     //Wieviele Leute max. pro Übungsgruppe
     int maximalpersonen = studenten/uebungen;
    
     //Speichert die Angaben der Personen in einem Vektor
     vector<string> angaben;
    
     //Speichert die Anzahl der Personen in einer Gruppe in einem Vektor
     vector<int> gruppen;
    
     char c;
    
     //Speichert die aufeinanderfolgenden Zeichen.
     string uebergang;
    
     //Quelle wird definiert
      ifstream Quelle;
     string Quelldateiname("studenten.txt");
    
     //Ziel wird definiert
      string Zieldateiname("zuweisungen.txt");
    
     //Quelle und Ziel werden zum Zugang geöffnet
     Quelle.open(Quelldateiname.c_str(),ios::binary|ios::in);
     ofstream Ziel(Zieldateiname.c_str(),ios::binary|ios::out);
    
            while(Quelle.get(c))
            {  
                //Falls das eingelesene Zeichen ein Leerzeichen ist, dann....
                if(c==' ')
                {   
                    //...speichere den vorherigen String....
                    angaben.push_back(uebergang);
    
                    //...und setze den String zum erneuten Einlesen wieder zurück.             
                    uebergang=""; 
    
                 }
    
                 //Wenn das eingelesene Zeichen kein Leerzeichen ist, dann hänge an.
                 if(c!=' ') uebergang +=c;
    
                 //Wenn das eingel. Zeichen ein Zeilenumbruch ist, dann...
                 if(c=='\n')
                 {
                     //Bestimme das Ende des Vektors
                     int groessevector = angaben.size()-1;
    
                     //Durchlaufe den Vektor...
                     for(int q=1;q<=groessevector;q++)
                     {   
                         //...und Durchlaufe die versch. Übungen,...
                         for(int t=1;t<=uebungen;t++)
                        {  
                             /*...falls eine Angabe mit einer Übung übereinstimmt
                             ACHTUNG FEHLERQUELLE(Kann ich so vergleichen?)*/
                             if(angaben[q]=="t")
                             {
                                 //Wenn Übereinstimmung, dann schauen ob was frei
                                 if(gruppen[t-1]<maximalpersonen)
                                 {
                                     /*Funktioniert nicht, wie kann ich einen 
                                     beliebigen Text in eine Datei schreiben.
                                     Am besten so: "angaben[0] angaben[q]"*/
                                     Ziel.put(angaben[0]);
                                     Ziel.put(angaben[q]);
                                 }
                             } 
    
                        }
                     }
    
                 }
    
             }
             /*Wenn das Ende der Datei erreicht ist evtl. letzte Zeichenkette
             im Vektor speichern.
             ACHTUNG:Dann ist die ganze Schleife wieder zu durchlaufen
             Gehts nicht anderst????*/
             if (uebergang!="") angaben.push_back(uebergang);
    
     system("Pause");
     return 0;   
    
    }
    

    Sorry ist halt bissel viel.

    Also ich habe hierzu ein paar Fragen:

    Wie kann ich eine String Variable und eine int Variable vergleichen?

    if(angaben[q]=="t")
    

    Hier will ich wissen, ob die q-te Komponente des Vektors Angaben mit der Übungsgruppennummer t übereinstimmt, also NICHT OB DER STRING NUR AUS EINEM "t" besteht. Dies ist meine erste Frage.

    Meine 2. Frage ist, wie kann ich in eine externe Datei einen beliebligen Text schreiben.

    Der Text hier soll folgendermaßen aussehen:

    Ziel.put(angaben[0]) Ziel.put(angaben[q])

    also angaben[0] enthält die Matrikelnummer und angaben[q] die zugewiesene Übungsgruppe.

    Also Ausgabe sollte sein "Ziel.put(angaben[0]) Ziel.put(angaben[q])".

    So das wars jetzt erst einmal meinerseits. 🙂

    Wäre echt super, super cool, wenn einer von euch mir da irgendwie helfen könnte.

    Schon mal im Voraus besten Dank für euren Stress den Ihr mit meinem Beitrag habt und eure Antworten.

    MfG Andi 😃



  • Kannst du die Aufgabenstellung so klar beschreiben, dass man auch versteht, was das Programm machen soll? An welcher Hochschule ist die Aufgabe gestellt, ist das bei den Informatikern?

    Gruss Jerry 🙂



  • Hier die Aufgabenstellung:

    Zur Betreuung einer Vorlesung sollen x Studenten y Übungsgruppen zugeteilt werden. Jeder Student meldet sich über eine Website der Vorlesung an und gibt x<=y mögliche Übungsgruppen an, an denen er teilnehmen könnte.

    Ziel ist es nun eine Zuordnung zu finden, bei der die Anzahl der Studenten pro Übungsgruppe möglichst ausgeglichen ist. Eingabe ist eine Datei(studenten.txt), in der jeder Zeile der Form:

    [Matrikelnummer] [Nummer 1. Wahl] [Nummer 2. Wahl]....[Nummer n. Wahl]

    ein Student zugeordnet ist.

    Beispiel: Es sind 14 Übungsgruppen zu bilden und jeder Student darf drei Übungsgrupppen angeben. Der Student mit Matrikelnummer 2782467 möchte die Übungen 7,4 oder 13 besuchen:

    2782467 7 4 13

    Beachten Sie, dass das Programm auch bei mehreren hundert Studenten eine vertretbare Laufzeit aufweisen soll. Das Ergebnis soll eine Datei werden, in der wieder jede Zeile mit einem der Studenten assoziert ist und die folgende Form hat:

    [Matrikelnummer] [zugewiesene Übungsgruppe]

    Ich bin auf einer Uni und studiere Informatik.

    MfG Andi



  • Hallo Andi,

    so ist das wunderbar: klare Aufgabenstellung, klare Diskussionsgrundlage.

    if (angaben[q] == "t") ...

    angaben[q] enthält nach dem Beispiel nur Zahlen?!
    Was ist dann rechts "t"? Ist t die Laufvariable der Übungen? Wenn ja, warum in " "?
    Wie kann der Rechner die zwei Seiten vergleichen???

    1. Wenn in die Datei Zahlen geschrieben werden sollen, dann müssen sie durch irgendwas getrennt sein: Leerzeichen, Komma oä. Vermutlich braucht man dann noch einen Zeilenumbruch, oder wie soll der Rechner zwei Studenten unterscheiden können? Was man dem Rechner mitteilt, kann man auch aufs karierte Papier schreiben, dann sieht man sofort, wo Leerzeichen etc hinmüssen.

    Viel Spass beim Trainieren der grauen Zellen.

    Gruss Jerry

    PS: Ich dachte immer, an der Uni müsse man so was durch Nachdenken hinkriegen und nicht einfach aus dem Internet runterziehen, oder?


Anmelden zum Antworten