telbuch c++



  • @manni66
    hallo ich hab den programm nochmal geschrieben
    können Sie mir zeigengen was soll machen in case 2,
    also wie kann ich prüfen ob in der betreffende zeile mindestens ein eintrag frei ist
    und dort die gegebene werte dort speichern
    #include<iostream>
    #include<string>
    using namespace std;
    struct Eintrag // Eintrag für eine person mit nachname und vorname und tel.nummer
    {
    string familienname;
    string vorname;
    string telefonnummer;
    };
    int hashing(string familienname) //hashfunktion bezugnehmend auf familienname, welcher einen bestimmten wert zuruekgibt
    {
    int hashwert=(familienname[0]*100 +familienname[1]*10 +familienname[2])%26;
    return hashwert;
    }
    int main()
    {
    int anzahl =0;
    Eintrag telbuch[26][5];
    int i,j;
    int r=0;
    char eingabe ='0';
    while (r<10) // das menü soll midesten 10 mal aufgerufen werden
    {
    cout<<"1:telefonbuch anzeigen"<<endl;
    cout<<"2:einfügen einen neuen telbucheintrag"<<endl;
    cout<<"3:nach einen eintag in telbuch suchen"<<endl;
    cin>>eingabe;
    switch(eingabe)
    {
    case '1':
    {
    cout<<"geben Sie die familienname & vorname &telefonnummer ein"<<endl;
    for(int i=0;i<26;i++)
    {
    for(int j=0;j<5;j++)
    {
    cin>>telbuch[i][j].familienname>>telbuch[i][j].vorname>>telbuch[i][j].telefonnummer;
    }

            }
            if(telbuch[i][j].familienname.length()>=3)
            {
                for (int i=0; i<26; i++)
                for (int j=0; j<5; j++)
                {
                    i=hashing (telbuch[i][j].familienname);
                    cout << telbuch[i][j]; // und hier gebt es etwas falsch ,kannst Du mir beibringen
                }
            }
            else
            cout<<"familienname ist kurz"<<endl;
            break;
        }
        case '2':
        {
            cout<<" geben Sie die neuen telefonbucheintrag"<<endl;
            for (int i=0; i<26; i++)
            for (int j=0; j<5; j++)
            {
                cin>>telbuch[i][j].familienname>>telbuch[i][j].vorname>>telbuch[i][j].telefonnummer;
                
            }
            for (int i=0; i<26; i++)
            for (int j=0; j<5 ; j++)
            {
                i= hashing (telbuch[i][j].familienname);
            if(anzahl<130) // und hier bitte 
              {
                telbuch[i][j]=telbuch[i][j].familienname;
                telbuch[i][j]=telbuch[i][j].vorname;
                telbuch[i][j]=telbuch[i][j].telefonnummer;
              }
            
            cout<<"eingabe korrekt"<<endl;
            
            else 
            cout<< "es geschieht nicht"<<endl;
            }
            break;
        }
        case '3': //nach Einträger im telefonbuch suchen
        {
            string suchname;
            cout<<"geben sie die suchname :";
            cin>>suchname;
            int suchname_index=-1;
            int fach =hashing(suchname);
            for(int i=0;i<26;i++)
            for(int j=0;j<5;j++)
            {
                if(hashing(telbuch[i][j].familienname)==hashing(suchname))
                suchname_index=i;
                if (suchname_index != -1)
                {
                    if(suchname_index<i-1)
                    {
                        cout<<"Eintrag gefunden:"<<endl;
                        cout<<"familienname: "<<telbuch[suchname_index][j].familienname<<endl;
                        cout<<"vorname: "<<telbuch[suchname_index][j].vorname<<endl;
                        cout<<"telefonnummer: "<<telbuch[suchname_index][j].telefonnummer<<endl;
                        
                    }
                    i--;
                }
                else
                cout<<"keine eintrag mit diesem name gefunden"<<endl;
            }
        }
        break;
        default:
        cout<<"fehlereingabe! bitte auswahl wiederholen "<<endl;
    }
    r++;
    

    }

    return 0;
    

    }



  • @laroj sagte in telbuch c++:

        for (int i=0; i<26; i++)
        for (int j=0; j<5; j++)
        {
            cin>>telbuch[i][j].familienname>>telbuch[i][j].vorname>>telbuch[i][j].telefonnummer;
            
        }
    

    Warum sind dort 2 for-Schleifen? Du willst genau einen neuen Eintarg:

    Eintrag neu;
    cin >> neu.familienname >> neu.vorname ...
    

    @laroj sagte in telbuch c++:

        for (int i=0; i<26; i++)
        for (int j=0; j<5 ; j++)
        {
            i= hashing (telbuch[i][j].familienname);
    

    Warum sind dort 2 for-Schleifen? Hier muss die Zeilennummer aus dem neuen Eintrag ermittelt und in dieser Zeile ein freier Platz ermittelt werden.



  • @laroj: Und bitte formatiere deinen Code hier bei deinen Beiträgen (mittels des "C++"- Buttons).
    Auch nachträglich möglich über das Menü mit den 3 Punkten -> "Bearbeiten".



  • @manni66 hallo
    der erste Punkt ,über den Sie gesprochen haben; habe ich verstanden.
    was den zweiten Punkt betrifft,habe ich mit dem Professor darüber gesprochen .
    Er hat mir folgende Ratschläge gegeben:( Ich würde ein Feld mit 26 elementen (int) anlegen ,mit 0 initialisieren und das Feldelment , welches dem Ergebnis der Hashfunktion entspricht, inkrementieren .
    wenn in einem Feldelement der Wert 5 steht, können keine weiteren werte gespeichert werden).
    ich habe das Programm darauf basierend geändert, aber die Ausgabe ist nicht wie erwartet.
    und Es siet gar nicht wie Matrix aus. ```cpp
    #include <iostream>
    #include<string>
    using namespace std;
    struct Eintrag // Eintrag für eine person mit nachname und vorname und tel.nummer
    {
    string familienname;
    string vorname;
    string telefonnummer;
    };
    int hashing(string familienname) //hashfunktion bezugnehmend auf familienname, welcher einen bestimmten wert zuruekgibt
    {
    int hashwert=(familienname[0]*100 +familienname[1]*10 +familienname[2])%26;
    return hashwert;
    }
    int main()
    {

    Eintrag telbuch[26][5];
    int i,j;
    int r=0;
    char eingabe ='0';
    while (r<10) // das menü soll midesten 10 mal aufgerufen werden
    {
    cout<<"1:telefonbuch anzeigen"<<endl;
    cout<<"2:einfügen einen neuen telbucheintrag"<<endl;
    cout<<"3:nach einen eintag in telbuch suchen"<<endl;
    cin>>eingabe;
    switch(eingabe)
    {
    case '1':
    {
    cout<<"geben Sie die familienname , die vorname und die telefonnummer ein :"<<endl;
    for(int i=0;i<26;i++)
    for(int j=0;j<5;j++)
    {
    cin>>telbuch[i][j].familienname>>telbuch[i][j].vorname>>telbuch[i][j].telefonnummer;

                }
                
                    i=hashing(telbuch[i][j].familienname);
                    for(int i=0; i<26; i++)
                    for( int j=0; j<5; j++)
                    
                    {
                        if(telbuch[i][j].familienname.length()>=3)
                        {
                    
                    cout<<telbuch[i][j].familienname<<"" <<telbuch[i][j].vorname<<""<<telbuch[i][j].telefonnummer;
                        }
                    
                    
                
                     else
                      cout<<"die familienname ist kurz"<<endl;
                    } 
        }    
            break;
        
        case '2':
        {
            Eintrag neu;
            int Feld [26]={0};
            cout<< "geben Sie die neue Eintrag ein"<<endl;
            cin >>neu.familienname>>neu.vorname>>neu.telefonnummer;
            int hwert=hashing(neu.familienname);
            
                for(int i=0;i<26; i++)
                {
                    if(Feld [i]==hwert)
                    Feld[i]++;
                    
                }
                if(Feld[i]!=5)
                cout<<neu.familienname<<""<<neu.vorname<<""<<neu.telefonnummer;
                else 
                cout<< "keine weitere werte gespeichert werden"<<endl;
        }
        
        case '3': //nach Einträger im telefonbuch suchen
        {
            string suchname;
            cout<<"geben sie die suchname :";
            cin>>suchname;
            int suchname_index=-1;
            int fach =hashing(suchname);
            for(int i=26;i>0;i--)
            for(int j=5;j>0;j--)
            {
                if(hashing(telbuch[i][j].familienname)==hashing(suchname))
                suchname_index=i;
                if (suchname_index != -1)
                {
                    if(suchname_index<i-1)
                    {
                        cout<<"Eintrag gefunden:"<<endl;
                        cout<<"familienname: "<<telbuch[suchname_index][j].familienname<<endl;
                        cout<<"vorname: "<<telbuch[suchname_index][j].vorname<<endl;
                        cout<<"telefonnummer: "<<telbuch[suchname_index][j].telefonnummer<<endl;
                        
                    }
                }
                else
                cout<<"keine eintrag mit diesem name gefunden"<<endl;
            }
        }
        break;
        default:
        cout<<"fehlereingabe! bitte auswahl wiederholen "<<endl;
    }
    r++;
    

    }

    return 0;
    

    }


  • Mod

    Dieser Beitrag wurde gelöscht!


  • @Th69 hallo
    ich habe mein code informatiert wie Du gesagt hast ,
    aber hat es nicht funktioniert .
    kannst Du mir weiter eklären welche Buttons meinst Du
    danke im voraus



  • Das ist schlimmster 'ich möchte gerne C++ programmieren habe aber keine Ahnung davon und frickele irgendwas mit C und C++ Rudimenten zusammen' Unsinn, was dein Prof dir da erzählt.
    Entweder du machst C oder du machst C++; beides zusammenzufrickeln zeugt von totaler Ahnungslosigkeit deines Lehers (und der meisten Onlinetutorials,Bücher und Profs)



  • @laroj sagte in telbuch c++:

    ich habe das Programm darauf basierend geändert, aber die Ausgabe ist nicht wie erwartet.

    Du hast irgendetwas gemacht, aber nichts darauf basierend.

    Solange du nicht verstehst, wie eine Hashtabelle funktioniert, wirst du nicht weiter kommen.



  • @manni66 Sie haben das Recht, ich bin eine traditionelle Frau, weit entfernt von Programmierung und Technologie, aber ich habe dieses Kapitel Informatik1 und ich möchte die Prüfung bestehen, bitte Können Sie mir weiterhelfen, diese Aufgabe zu lösen



  • @laroj sagte in telbuch c++:

    @manni66 Sie haben das Recht, ich bin eine traditionelle Frau, weit entfernt von Programmierung und Technologie, aber ich habe dieses Kapitel Informatik1 und ich möchte die Prüfung bestehen, bitte Können Sie mir weiterhelfen, diese Aufgabe zu lösen

    https://de.wikipedia.org/wiki/Hashtabelle



  • @laroj sagte in telbuch c++:

    @manni66 Sie haben das Recht, ich bin eine traditionelle Frau, weit entfernt von Programmierung und Technologie, aber ich habe dieses Kapitel Informatik1 und ich möchte die Prüfung bestehen, bitte Können Sie mir weiterhelfen, diese Aufgabe zu lösen

    Ja ne, bau' Dir eine Datenstruktur für einen Eintrag. Könnte so aussehen:

    class entry_t {
        std::string name;
        std::string surname;
        std::string telephone_number;
    public:
        entry_t(std::string name, std::string surname, std::string telephone_number)
        : name     { std::move(name) },
          surname  { std::move(surname) },
          telephone_number { std:::move(telephone_number) }
        {}
    };
    

    Dann einen std::vector<> davon und Du hast Dein Telephonbuch.



  • @Swordfish das ist keine Lösung der Aufgabe


  • Mod

    @Swordfish sagte in telbuch c++:

    Dann einen `std::vector<> davon und Du hast Dein Telephonbuch.

    Ironischerweise gleicher Fehler wie OP. Es reicht halt nicht die Aufgabe kurz zu überfliegen und sich zu denken, was wohl gemeint ist.



  • @SeppJ ganz ehrlich? ich hab's nichtmal gelesen 😉

    // edit: ok, ich hab's gelesen und soooo furchtbar weit ist es nicht weg.


  • Mod

    @Swordfish sagte in telbuch c++:

    // edit: ok, ich hab's gelesen und soooo furchtbar weit ist es nicht weg.

    Nur so weit wie ein Vector von einem unordered_set. Praktisch das selbe 🙂