Kann jemand das mal kontrollieren?



  • Hallo,

    über Hilfe wäre ich sehr dankbar.

    Hier ist die Aufgabenstellung:
    Aufgabe:
    Schreiben Sie ein CPP Programm, das folgende Aufgabe erfüllt:
    - Allgemeine Ausgaben über den Programmierer (Name) und den Sinn des Programms (Überschrift)
    - Im Hauptprogramm wird ein Zufallsstring mit 20 Buchstaben erzeugt
    - Dieser Zufallsstring besteht nur aus Kleinbuchstaben
    - bei jedem Aufruf des Programms wird ein anderer Zufallsstring erzeugt
    - Das Hauptprogramm übergibt den Zufallsstring einer Funktion

    Die Funktion hat folgende Aufgabe:
    - Die Anzahl der im Zufallsstring enthaltenen Vokale a oder e wird mit der Funktion ermittelt und ausgegeben
    - anschließend werden der Buchstabe i aus dem zufallsstring entfernt
    - dieser string wird an der Hauptprogramm zurückgegeben und dort ausgegeben

    Und das ist mein Lösungsvorschlag:

    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <time.h>
    #include <stdlib.h>
    
    using namespace std;
    
    void funktion(string h);
    
    int funktion(string g);
    
    int main(){
        srand( (unsigned)time( NULL ) );
        char h=rand()%26;
    
        int c,m;
        string e,f,k;
    
        char b[20];
    
         cout << "Hallo Ich bin ein Programm, von Schnicky geschrieben\n am 09.04.2008.\n Möchten Sie das Programm starten?\n";
        getline(cin,e);
    
        cout << "\n" "\n";
    
        cout << "Normale Ausgabe der einzelnen Buchstaben: ";
        for(int i=0;i<20;i++){    
    
                            h=rand()%26;
    
                            b[i]=h+97;
    
                            f[i]=b[i];
    
                            k=k+b[i];
    
                            cout << b[i];    
        }
    
        m=funktion(f);
    
        cout << "\nEs gibt: " << m << " a und e in diesem Zufallsstring\n";
    
        cout << "\nProgramm beendet!!\n";
    
    getch();
    return 0;
    }
    
    int funktion(string g){
    
        int b=0;
                            for(int i=0;i<20;i++){
                                                    if(g[i]==97||g[i]==101){
                                                                          b=b+1;
                                                    }
                                                    else{
                                                                          continue;
                                                    }
                            }
    
        return b;
    
    }
    

    Lieben Gruß,
    schnicky



  • soweit ich weiß gab es hier im forum schon mal jemanden der haar genau denselben Thread eröffnet hat, mit haar genauer Aufgabenstellung, also frag doch mal lieber in deiner Klasse rum 😉 aber ansonsten, deine einrückung ist nicht gerade sehr vorteilhaft für den der Kontrollieren soll. Und weiterhin solltest du Strings auch in deinem zufallsgenerator benutzen.



  • Ich komme hier her, weil ich einfach mal denke, dass mir hier jemand mehr helfen kann, als jemand aus meiner Klasse!!!
    Bekommt man eigentlich hier immer solch dumme Kommentare von dir?



  • Das hat nix mit dummen Kommentaren zu tuen. Es ist nur so, wenn innerhalb von gut einer Woche hier der selbe Thread mit der selben Aufgabe 2 mal erstellt wird, is schon komisch?:D Aber um auf deine Aufgabe zurückzukommen, was verlangst du denn von uns?, Gibts Fehler?Wenn ja, welche. Stürzt dein Programm ab? Macht es nicht das was du möchtest, da musst du ein wenig genauer werden 😉



  • Ich wollte einfach nach Verbesserungsvorschläge fragen und das einfach kontrollieren lassen, ob das so ok ist.



  • Wie Firefighter schon gesagt hat: du musst unbedingt vernünftig einrücken! 2-4 Zeichen sind optimal. So kann man das schlecht überblicken.



  • ok also folgendes:

    char b[20];
    

    da würde ich einen string nehmen

    und ansonsten ordentlich einrücken, außerdem solltest du dir vieleicht noch vernünftige funktionsnamen aussuchen. Was mir noch wichtig wäre, das zwei gleich benannte funktionen nicht unterschiedliche datentypen(wenn man bei void von datentyp sprechen kann) zurück geben sollten.



  • Schon viel besser!

    Danke für die Infos!



  • und als vergleichsmöglichkeit, würde ich noch meine variante anbieten:D

    #include <iostream>
    #include <time.h>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    struct vokale
    {
        int vokal_i;
        int vokal_o;
        int vokal_e;
        int vokal_a;
    
        vokale()
        {
            vokal_i = 0;
            vokal_o = 0;
            vokal_e = 0;
            vokal_a = 0;
        }  
    
    };
    
    inline void vokale_finden(string wort,vokale &vok)
    {
        transform(wort.begin(),wort.end(),wort.begin(),static_cast<int (*)(int)>(tolower));
    
        for(int i = 0;i<wort.length();i++)
        {
           switch(wort[i])
           {
               case 'i': vok.vokal_i++;
                         break;
               case 'a': vok.vokal_a++;
                         break;
               case 'e': vok.vokal_e++;
                         break;
               case 'o': vok.vokal_o++;
                         break;
           }
        }
    }
    
    int main()
    {
        srand(unsigned(time(NULL)));
    
        vokale vok;
    
        string wort;
        string neues_wort;
    
        for(int i = 0;i<50;i++)
        {
            wort = rand()%25+65;
    
            neues_wort = neues_wort + wort;
        }
    
        cout<<"Unser Wort: "<<neues_wort<<endl;
    
        vokale_finden(neues_wort,vok);
    
        cout<<"Der Buchstabe 'i' wurde "<<vok.vokal_i<<" gefunden!"<<endl;
        cout<<"Der Buchstabe 'e' wurde "<<vok.vokal_e<<" gefunden!"<<endl;
        cout<<"Der Buchstabe 'o' wurde "<<vok.vokal_o<<" gefunden!"<<endl;
        cout<<"Der Buchstabe 'a' wurde "<<vok.vokal_a<<" gefunden!"<<endl;
    
        return 0;
    
    }
    

    da muss man nun noch die löschung des buchstaben i vornehmen:D

    EDIT: ohh meins nimmt ja nur große buchstaben bei der ausgabe...naja intern wandle ich sie aber in klein buchstaben um 😉



  • Hallo Schnicky,

    einige Anmerkungen zum Programm:

    - Die erste Benutzereingabe ("Wollen Sie das Programm starten?") ist überflüssig. Zum einen is das Programm an dem Punkt schon gestartet worden, zum anderen startete ich das Programm woll kaum, wollte ich es nicht auch verwenden.

    - Gewöhne Dir an, aussagekräftige Variablennamen zu verwenden. Einzelne Buchstaben verwendet man in der Regel nur bei Indexen (z.B. in Schleifen) oder wenn der Buchstabe für sich spricht (Koordinaten x, y, z; Radius r).

    #include <iostream>
    // #include <conio.h> .. Brauchst du nicht 1)
    #include <string>
    #include <ctime> // statt time.h
    #include <cstdlib> // statt stdlib.h
    
    1. Eine Alternative zu getch() findest du hier im Forum (Konsolen-FAQ)

    Grüße... Heiko



  • Vielen Dank! Ich werde das mal ändern.


Anmelden zum Antworten