vector mit fester int anzahl + Name einer Person ausgeben



  • Hallo Leute !

    Habe folgende Aufgabe:
    Richten Sie einen vector ein, der "null", "eins", "zwei", usw. bis "neun" enthält. Verwenden
    Sie diesen vector in einem Programm, das für eine einzulesende Ziffer den entsprechenden
    ausgeschriebenen Namen ausgibt.

    habe bisher so einen vector gebastelt :

    vector<int>vecInt{0,1,2,3,4,5,6,7,8,9};
    

    Da ich die Aufgabe nicht ganz verstehe , besonders wie man ne Zahl aus dem vector einliest und ( weiß nur das man zbsp über

    vecInt[0]
    

    auf das erste Element zugreift).Dann ob unter " ausgeschriebene Name" gemeint ist das Name schon im vector enthalten ist ? 😕
    😞 Hat jemand von euch eine Idee? 🙂



  • du hast die frage nicht richtig verstanden. ich denke in dem vector sollen "null", "eins", "zwei" etc. drin stehen.

    adden kannst du das so.

    vector<std::string> vec;
    vec.push_back("null");
    vec.push_back("eins");
    

    das kannst du dir dann ausgeben lassen.



  • So es funkt , hier mein Code Kritik gerne erwünscht !!! 🙄 🤡

    #include <iostream>
    #include<vector>
    #include <string>
    using namespace std;
    
    int main() {
    
        vector<string>vec{};
        vec.push_back(" null ");
        vec.push_back(" eins ") ;
        vec.push_back(" zwei ");
        vec.push_back(" drei ");
        vec.push_back(" vier ");
        vec.push_back(" fünf ");
        vec.push_back(" sechs ");
        vec.push_back(" sieben ");
        vec.push_back(" acht ");
        vec.push_back(" neun ");
    
        for(vector<string>::size_type  i = 0; i < vec.size(); ++i){
        cout << vec[i] << endl;}
        return 0;
    }
    


  • Hi Helenchen,

    Muss mal wieder meckern 😉 .
    Ich tippe mal auf ein Missverständnis Deinerseits:

    helenchen schrieb:

    VerwendenSie diesen vector in einem Programm, das für eine einzulesende Ziffer den entsprechenden
    ausgeschriebenen Namen ausgibt.

    Deine for-Schleife kann damit nicht gemeint sein. Es steht eindeutig "einzulesende Ziffer" da.
    Da Ihr vermutlich noch keine Dateiarbeit macht gehe ich von Einlesen von der Konsole, also Tastatureingabe aus.

    Ich würde es so gestalten:

    Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
    Zahl von Konsole (cin) einlesen
    solange nicht -1  eingegeben
    {
      wenn zwischen 0 und 9 
        zugehöriges Wort aus Vektor ausgeben
      sonst
        Meckern zwischen 0 und 9 du Dösbattel
      Aufforderung nächste Zahl zwischen 0 und 9 oder -1 für Ende
      Zahl von Konsole (cin) einlesen
    }
    

    Wenn er es wirklich nur für "eine" Ziffer will, kannst Du auch die Schleife weglassen, nur die Ziffer abfragen und wenn passend ihren Namen ausgeben. Aber ich denke, so wie ich es oben angedeutet habe ist's auch nicht falsch.

    Viel Erfolg wünscht Mümmel das Mümmel



  • muemmel schrieb:

    Hi Helenchen,

    Muss mal wieder meckern 😉 .
    Ich tippe mal auf ein Missverständnis Deinerseits:

    helenchen schrieb:

    VerwendenSie diesen vector in einem Programm, das für eine einzulesende Ziffer den entsprechenden
    ausgeschriebenen Namen ausgibt.

    Deine for-Schleife kann damit nicht gemeint sein. Es steht eindeutig "einzulesende Ziffer" da.
    Da Ihr vermutlich noch keine Dateiarbeit macht gehe ich von Einlesen von der Konsole, also Tastatureingabe aus.

    Ich würde es so gestalten:

    Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
    Zahl von Konsole (cin) einlesen
    solange nicht -1  eingegeben
    {
      wenn zwischen 0 und 9 
        zugehöriges Wort aus Vektor ausgeben
      sonst
        Meckern zwischen 0 und 9 du Dösbattel
      Aufforderung nächste Zahl zwischen 0 und 9 oder -1 für Ende
      Zahl von Konsole (cin) einlesen
    }
    

    Wenn er es wirklich nur für "eine" Ziffer will, kannst Du auch die Schleife weglassen, nur die Ziffer abfragen und wenn passend ihren Namen ausgeben. Aber ich denke, so wie ich es oben angedeutet habe ist's auch nicht falsch.

    Viel Erfolg wünscht Mümmel das Mümmel

    Mümmelchen

    int x{};
        vector<string>vec{};
        vec.push_back(" null ");
        vec.push_back(" eins ") ;
        vec.push_back(" zwei ");
        vec.push_back(" drei ");
        vec.push_back(" vier ");
        vec.push_back(" fünf ");
        vec.push_back(" sechs ");
        vec.push_back(" sieben ");
        vec.push_back(" acht ");
        vec.push_back(" neun ");
         while( x != -1){
        cout << "Bitte geben Sie eine Zahl zwischen 0 und 9 ein: " << endl;
        cin >> x;}
        for(  x = 0; x < 9;++x){
        cout << vec[x] << endl;
        }
        return 0;
    

    Der Dösbattel macht etwas falsch 😃 😮


  • Mod

    helenchen schrieb:

    Dir wurde schon zig mal in jedem deiner Threads gesagt, dass du mal deinen Code vernünftig einrücken sollst. Machst du weiterhin nicht. Nicht einmal im Ansatz. Mit vernünftiger Einrückung wäre der Fehler unmittelbar ersichtlich. Wie soll man jemandem helfen, der keinerlei Hilfe annimmt?

    Und wurde wahrscheinlich auch schon gesagt: Wenn du nicht einmal auf Deutsch dein Problem klar formulieren kannst, wie willst du es dann in C++ schaffen? Atme mal tief durch, ordne deine Gedanken, und geh langsam und bedächtig an deine Probleme heran. NICHT schnell, schnell, Code kopiert. Schnell, schnell, geht nicht. Schnell, schnell, Panik! Schnell, schnell, Frickel, Murks.
    Code ist Logik pur. Wenn du selber programmierst (und programmieren ist nicht Zusammenkopieren von fremden Codefragmenten!) dann musst du von jedem einzelnen Zeichen in deinem Code genau wissen, wo und warum du es setzt.

    Mit deiner derzeitigen Einstellung wird das nie etwas und das merken auch alle Mitleser und wissen, ob sich ihre Hilfe lohnt oder nicht.



  • SeppJ schrieb:

    helenchen schrieb:

    Dir wurde schon zig mal in jedem deiner Threads gesagt, dass du mal deinen Code vernünftig einrücken sollst. Machst du weiterhin nicht. Nicht einmal im Ansatz. Mit vernünftiger Einrückung wäre der Fehler unmittelbar ersichtlich. Wie soll man jemandem helfen, der keinerlei Hilfe annimmt?

    Und wurde wahrscheinlich auch schon gesagt: Wenn du nicht einmal auf Deutsch dein Problem klar formulieren kannst, wie willst du es dann in C++ schaffen? Atme mal tief durch, ordne deine Gedanken, und geh langsam und bedächtig an deine Probleme heran. NICHT schnell, schnell, Code kopiert. Schnell, schnell, geht nicht. Schnell, schnell, Panik! Schnell, schnell, Frickel, Murks.
    Code ist Logik pur. Wenn du selber programmierst (und programmieren ist nicht Zusammenkopieren von fremden Codefragmenten!) dann musst du von jedem einzelnen Zeichen in deinem Code genau wissen, wo und warum du es setzt.

    Mit deiner derzeitigen Einstellung wird das nie etwas und das merken auch alle Mitleser und wissen, ob sich ihre Hilfe lohnt oder nicht.

    Hey Step du bist ein Profi, ich bin ein Anfänger mache noch viele böse Fehler , es kotzt dich an kann ich verstehen. Möchte aber trotzdem was lernen.
    Hier ist mein Code eingerückt, bitte nicht in Ohnmacht fallen:

    int main() {
    
        vector<string>vec{};
        vec.push_back(" null ");
        vec.push_back(" eins ") ;
        vec.push_back(" zwei ");
        vec.push_back(" drei ");
        vec.push_back(" vier ");
        vec.push_back(" fünf ");
        vec.push_back(" sechs ");
        vec.push_back(" sieben ");
        vec.push_back(" acht ");
        vec.push_back(" neun ");
    
        vector<string>::iterator ix;
         int x;
        cout << "Bitte geben Sie eine Zahl zwischen 0 und 9 ein: " << endl;
        cin >> vec[x];
    
        for(ix=vec.begin();ix!=vec.end();++ix  ){ // vector anfang und ende
    
        cout << vec[x] << endl;  // gibt 10 mal die eingelesene Zahl ein 
                                 //hier soll aber die Eingabe als string ausgegeben werden !!
        }
    
        return 0;
    

    Ich weiß das, die Anweisung in der For Schleife nicht ganz richtig ist und Ausgabe auch nicht. Meine Frage wäre gibt es ein Befehl der nicht die ganze länge in vector betrachtet sondern einen Teil davon ?. Das man sagen könnte 3 = drei . Also das er über int den String aus dem Vector rausholen kann.



  • Hi Helenchen,

    Du hättest einfach meinem Pseudo-Quelltext folgen müssen und ihn mit etwas Fleisch behängen müssen. Ich hab die Hinweise unten mal drin gelassen, damit Du siehst was ich meine.
    Gewöhne Dir einfach an, jede Aufgabe in ähnlicher Form als Pseudoquelltext zu formulieren und ihn dann mit echtem Code zum Leben zu erwecken.

    wenn Du vorher X in ner Schleife von 0 bis 9 laufen lässt ist klar, dass Du alle angezeigt bekommst. Wozu Du dabei ne for-Schleife benutzt ist mir sowieso nicht ganz klar

    Der Dösbattel macht etwas falsch 😃 😮

    Na nicht nur etwas. Aber nicht den Mut verlieren, tief durchatmen, den Möbelwagen vorbeilassen und die Dinge mit Ruhe angehen.

    Das war die Vorgabe von mir:

    Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
    Zahl von Konsole (cin) einlesen
    solange nicht -1  eingegeben
    {
      wenn zwischen 0 und 9
        zugehöriges Wort aus Vektor ausgeben
      sonst
        Meckern zwischen 0 und 9 du Dösbattel
      Aufforderung nächste Zahl zwischen 0 und 9 oder -1 für Ende
      Zahl von Konsole (cin) einlesen
    }
    

    und so könnte es in c++ aussehen:

    #include <iostream>
    #include<vector>
    #include <string>
    using namespace std;
    
    int main()
    {
      int x = 0;
      vector<string>vec{};
      vec.push_back(" null ");
      vec.push_back(" eins ") ;
      vec.push_back(" zwei ");
      vec.push_back(" drei ");
      vec.push_back(" vier ");
      vec.push_back(" fünf ");
      vec.push_back(" sechs ");
      vec.push_back(" sieben ");
      vec.push_back(" acht ");
      vec.push_back(" neun ");
                                            // Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
      cout << "Bitte geben Sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1: " << endl;
                                            // Zahl von Konsole (cin) einlesen
      cin >> x;
                                            // solange nicht -1  eingegeben
      while( x != -1)
      {
                                            //  wenn zwischen 0 und 9
        if ( ( x >= 0 ) && ( x <= 9 ) )
        {
                                            //    zugehöriges Wort aus Vektor ausgeben
          cout << vec[x] << endl;
        }
        else                                //  sonst
        {                                   //    Meckern zwischen 0 und 9 du Dösbattel
           cout << "Zwischen 0 und 9 Du Dösbattel!" << endl;
        }
                                            //  Aufforderung nächste Zahl zwischen 0 und 9 oder -1 für Ende
         cout << "Bitte geben Sie eine weitere Zahl zwischen 0 und 9 ein, Abbruch mit -1: " << endl;
                                            //  Zahl von Konsole (cin) einlesen
         cin >> x;
      }
      return 0;
    }
    

    Alternativ gehts auch mit einer nichtabweisenden Schleife, dann spart man sich die doppelte Eingabeaufforderung

    #include <iostream>
    #include<vector>
    #include <string>
    using namespace std;
    
    int main()
    {
      int x = 0;
      vector<string>vec{};
      vec.push_back(" null ");
      vec.push_back(" eins ") ;
      vec.push_back(" zwei ");
      vec.push_back(" drei ");
      vec.push_back(" vier ");
      vec.push_back(" fünf ");
      vec.push_back(" sechs ");
      vec.push_back(" sieben ");
      vec.push_back(" acht ");
      vec.push_back(" neun ");
                                                          // mache
      do
      {
                                                          // Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
        cout << "Bitte geben Sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1: " << endl;
                                                          // Zahl von Konsole (cin) einlesen
        cin >> x;
        if ( x != -1 )                                    // solange nicht -1  eingegeben
        {                                                 //  wenn zwischen 0 und 9
          if ( ( x >= 0 ) && ( x <= 9 ) )
          {
                                                          //    zugehöriges Wort aus Vektor ausgeben
            cout << vec[x] << endl;
          }
          else                                            //  sonst
          {                                               //    Meckern zwischen 0 und 9 du Dösbattel
             cout << "Zwischen 0 und 9 Du Dösbattel!" << endl;
          }
        }
      } while ( x != -1);                                 // solange nicht -1 eingegeben
    
      return 0;
    }
    

    Also trotz allem Viel Glück und viel Spaß beim Programmieren. Wenn Du in Zukunft die Hinweise beachtest, kriegen wir aus Dir auch ne ordentliche Programmiererin gemacht. 😉

    Gruß Mümmel

    PS: Hab gerade die obere Version getestet, sie läuft.
    Muss aber bei meinem den Vektor so definieren:

    vector<string> vec;

    Und bitte beim Antworten nicht immer Fullquoten. Nicht mit der großen Schaufel alles aus dem vorigen Beitrag hoch, sondern nur dass, auf das Du Dich beziehen wilst.

    Gruß Mümmel



  • muemmel schrieb:

    Hi Helenchen,

    Du hättest einfach meinem Pseudo-Quelltext folgen müssen und ihn mit etwas Fleisch behängen müssen. Ich hab die Hinweise unten mal drin gelassen, damit Du siehst was ich meine.
    Gewöhne Dir einfach an, jede Aufgabe in ähnlicher Form als Pseudoquelltext zu formulieren und ihn dann mit echtem Code zum Leben zu erwecken.

    wenn Du vorher X in ner Schleife von 0 bis 9 laufen lässt ist klar, dass Du alle angezeigt bekommst. Wozu Du dabei ne for-Schleife benutzt ist mir sowieso nicht ganz klar

    Der Dösbattel macht etwas falsch 😃 😮

    Na nicht nur etwas. Aber nicht den Mut verlieren, tief durchatmen, den Möbelwagen vorbeilassen und die Dinge mit Ruhe angehen.

    Das war die Vorgabe von mir:

    Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
    Zahl von Konsole (cin) einlesen
    solange nicht -1  eingegeben
    {
      wenn zwischen 0 und 9
        zugehöriges Wort aus Vektor ausgeben
      sonst
        Meckern zwischen 0 und 9 du Dösbattel
      Aufforderung nächste Zahl zwischen 0 und 9 oder -1 für Ende
      Zahl von Konsole (cin) einlesen
    }
    

    und so könnte es in c++ aussehen:

    #include <iostream>
    #include<vector>
    #include <string>
    using namespace std;
    
    int main()
    {
      int x = 0;
      vector<string>vec{};
      vec.push_back(" null ");
      vec.push_back(" eins ") ;
      vec.push_back(" zwei ");
      vec.push_back(" drei ");
      vec.push_back(" vier ");
      vec.push_back(" fünf ");
      vec.push_back(" sechs ");
      vec.push_back(" sieben ");
      vec.push_back(" acht ");
      vec.push_back(" neun ");
                                            // Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
      cout << "Bitte geben Sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1: " << endl;
                                            // Zahl von Konsole (cin) einlesen
      cin >> x;
                                            // solange nicht -1  eingegeben
      while( x != -1)
      {
                                            //  wenn zwischen 0 und 9
        if ( ( x >= 0 ) && ( x <= 9 ) )
        {
                                            //    zugehöriges Wort aus Vektor ausgeben
          cout << vec[x] << endl;
        }
        else                                //  sonst
        {                                   //    Meckern zwischen 0 und 9 du Dösbattel
           cout << "Zwischen 0 und 9 Du Dösbattel!" << endl;
        }
                                            //  Aufforderung nächste Zahl zwischen 0 und 9 oder -1 für Ende
         cout << "Bitte geben Sie eine weitere Zahl zwischen 0 und 9 ein, Abbruch mit -1: " << endl;
                                            //  Zahl von Konsole (cin) einlesen
         cin >> x;
      }
      return 0;
    }
    

    Alternativ gehts auch mit einer nichtabweisenden Schleife, dann spart man sich die doppelte Eingabeaufforderung

    #include <iostream>
    #include<vector>
    #include <string>
    using namespace std;
    
    int main()
    {
      int x = 0;
      vector<string>vec{};
      vec.push_back(" null ");
      vec.push_back(" eins ") ;
      vec.push_back(" zwei ");
      vec.push_back(" drei ");
      vec.push_back(" vier ");
      vec.push_back(" fünf ");
      vec.push_back(" sechs ");
      vec.push_back(" sieben ");
      vec.push_back(" acht ");
      vec.push_back(" neun ");
                                                          // mache
      do
      {
                                                          // Hinweis:Geben sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1
        cout << "Bitte geben Sie eine Zahl zwischen 0 und 9 ein, Abbruch mit -1: " << endl;
                                                          // Zahl von Konsole (cin) einlesen
        cin >> x;
        if ( x != -1 )                                    // solange nicht -1  eingegeben
        {                                                 //  wenn zwischen 0 und 9
          if ( ( x >= 0 ) && ( x <= 9 ) )
          {
                                                          //    zugehöriges Wort aus Vektor ausgeben
            cout << vec[x] << endl;
          }
          else                                            //  sonst
          {                                               //    Meckern zwischen 0 und 9 du Dösbattel
             cout << "Zwischen 0 und 9 Du Dösbattel!" << endl;
          }
        }
      } while ( x != -1);                                 // solange nicht -1 eingegeben
    
      return 0;
    }
    

    Also trotz allem Viel Glück und viel Spaß beim Programmieren. Wenn Du in Zukunft die Hinweise beachtest, kriegen wir aus Dir auch ne ordentliche Programmiererin gemacht. 😉

    Gruß Mümmel

    PS: Hab gerade die obere Version getestet, sie läuft.
    Muss aber bei meinem den Vektor so definieren:

    vector<string> vec;

    Und bitte beim Antworten nicht immer Fullquoten. Nicht mit der großen Schaufel alles aus dem vorigen Beitrag hoch, sondern nur dass, auf das Du Dich beziehen wilst.

    Gruß Mümmel

    Danke es funktioniert!! 😃 🤡
    eine Farge ,warum hast du in if die Abbruchbedingung noch mal gemacht?



  • Hi Helenchen,

    helenchen schrieb:

    Danke es funktioniert!! 😃 🤡
    eine Farge ,warum hast du in if die Abbruchbedingung noch mal gemacht?

    Ich vermute mal, dass Du die in der zweiten Version meinst.
    Überleg Dir einfach mal, was pasiert, wenn da -1 eingegeben wird. ---> richtig, er bekommt bevor die Schleife abgebrochen wird erst die Fehlermeldung mit dem Dösbattel.
    Alternativ hätte ich natürlich auch die Fehlermeldung mit ner if-Abfrage ausschließen können. Aber so erschien es mir sauberer, weil wenn sowieso Abbruch erkannt wird nicht erst noch auf zwischen 0 und 9 getestet werden muss.

    Und bitte mal unsere Posts gründlich lesen und nicht nur den Quelltext ausprobieren. Auch den Hinweis, das Du möglichst keine Fullquote machen solltest. Also nicht nur auf Zitiren klicken, sondern danach alles was nicht benötigt wird rauslöschen.
    So viel Zeit muss sein.

    Gruß Mümmel



  • muemmel schrieb:

    Hi Helenchen,

    Und bitte mal unsere Posts gründlich lesen und nicht nur den Quelltext ausprobieren. Auch den Hinweis, das Du möglichst keine Fullquote machen solltest. Also nicht nur auf Zitiren klicken, sondern danach alles was nicht benötigt wird rauslöschen.
    So viel Zeit muss sein.

    Gruß Mümmel

    Danke für den Hinweis, es muss in diesem Forum noch eine Option "markiertes Zitieren " nachprogrammiert werden 😉
    Grüße Zurück



  • Hi Helenchen,

    Reicht es nicht, wenn wir bei Dir guten Willen nachprogrammieren? 😃 😉 🙂

    Und nun ab, husch ins Körbchen.

    Gruß Mümmel


Anmelden zum Antworten