Verzweigungen, Schleifen und Felder in C++



  • Schreiben Sie das folgende C++-Programm „AusgabeGeradeZahlen“: Der Nutzer wird auffordert, eine
    Zahl zwischen 4 und 12 einzugeben. Wenn die eingegebene Zahl nicht zwischen 4 und 12 liegt, wird der
    Nutzer aufgefordert, diese Zahl erneut einzugeben. Verwenden Sie hierzu eine do-while-Schleife. Dann
    wird der Nutzer aufgefordert, eine zweite Zahl einzugeben, die mindestens um 3 größer sein muss als
    die erste Zahl und höchstens 30 betragen darf.
    Es sollen dann alle geraden Zahlen zwischen diesen beiden Zahlen ausgegeben werden. Der Benutzer
    entscheidet, ob diese Zahlen vorwärts oder rückwärts ausgegeben werden.
    So können Sie C++ überprüfen lassen, ob eine Zahl gerade oder ungerade ist: 13%2 liefert den Wert 1.
    Dies ist eine Modulo-Division. Es wird der Rest der Division 13 geteilt durch 2 ermittelt. Wenn der Rest 1
    ist, ist die Zahl ungerade, wenn der Rest 0 ist, ist die Zahl gerade.
    So erhöhen Sie den Wert der Variablen i um 1:
    So erhöhen Sie den Wert der Variablen i um 2:
    i++;
    i = i + 2;oder i += 2;
    Schreiben Sie das folgende C++-Programm „Umsatzzahlen“: Der Nutzer wird auffordert, zwölf
    Umsatzzahlen einzugeben. Hier ist es nicht sinnvoll, zwölf Variablen von umsatz1 bis umsatz2 zu
    deklarieren. Daher sollen Sie dieses Feld deklarieren: int umsatz[12]; Der erste Wert ist dann in
    umsatz[0] gespeichert und der letzte Wert in umsatz[11]. So kann das Einlesen der Umsatzzahlen
    erfolgen:
    for(i = 0; i<12;i++)
    {
    cout<<"\nGeben Sie den Umsatz für den "<<i+1<<".ten Monat ein: ";
    cin>>Umsatz[i];
    }
    Sie sollen dann den mittleren Umsatz ermitteln und dann zunächst ausgeben, wie viele der zwölf
    Umsatzzahlen über dem Mittelwert liegen und dann diese Umsatzzahlen ausgeben.
    Dann sollen Sie alle Umsatzzahlen sortiert ausgeben. Als erstes soll die größte Umsatzzahl ausgegeben
    werden. So gehen Sie beim Sortieren vor. Sie vergleichen die letzte Umsatzzahl mit der vorletzten, ist die
    letzte Umsatzzahl die größere, tauschen Sie diese beiden Zahlen. Überlegen Sie sich, wie Sie zwei Zahlen
    tauschen können, ohne eine der beiden zu überschreiben und damit zu löschen. Anschließend
    vergleichen Sie die vorletzte Umsatzzahl mit der drittletzten Umsatzzahl und tauchen die Zahlen
    gegebenenfalls. So fahren Sie fort, bis die größte Umsatzzahl ganz nach oben „gesprudelt“ ist. Die
    übrigen elf Umsatzzahlen sind dann noch nicht vollständig sortiert. Sie müssen diesen Algorithmus also
    erneut anwenden und so dafür sorgen, dass die zweitgrößte Zahl an die zweite Stelle hochsprudelt und
    so weiter bis alle Zahlen sortiert sind.

    Ich hoffe auf eure Hilfe.



  • @Ana448 sagte in Verzweigungen, Schleifen und Felder in C++:

    Ich hoffe auf eure Hilfe.

    Die wirst du sicherlich kriegen, allerdings hast du leider vergessen deine bisherigen Ansätze zu posten. Das musst du nachholen, sonst wird es natürlich schwer mit dem Helfen.



  • @Ana448 sagte in Verzweigungen, Schleifen und Felder in C++:

    Ich hoffe auf eure Hilfe.

    Wie soll die aussehen?
    Möchtest Du, dass Dir jemand die Programme schreibt?



  • Schreiben Sie das folgende C++-Programm: Der Nutzer wird auffordert, eine Zahl zwischen 4 und 12
    einzugeben. Wenn die eingegebene Zahl nicht zwischen 4 und 12 liegt, wird der Nutzer aufgefordert,
    diese Zahl erneut einzugeben. Verwenden Sie hierzu eine do-while-Schleife.
    Die Syntax einer do-while-Schleife:
    do
    {
    «Anweisungen»
    }
    while(«Bedingung»);
    Anschließend entscheidet der Nutzer, ob die Zahlen von 1 bis zur selbst eingegebenen Zahl vorwärts
    oder rückwärts hintereinander in einer Zeile auf dem Bildschirm ausgegeben werden sollen. Hierfür
    verwenden Sie eine for-Schleife.
    Die Syntax einer for-Schleife:
    for(«Initialisierungsteil»; «Bedingungsteil»; «Aktualisierungsteil»)
    {
    «Anweisungen»
    }
    Dann werden die Zahlen – so wie hier unten zu sehen – in Dreiecksform auf dem Bildschirm ausgegeben.
    Hierzu müssen Sie zwei for-Schleifen kombinieren.

    So sieht die Aufgabe aus. Und ich muss eine ähnliche Aufgabe machen.

    int main() {

    int a, wahl;
    
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    cout << "Geben Sie eine ganze Zahl zwischen 4 und 12 ein: ";
    
    do {
    	 cin >> a;
    	 if(a < 4 || a > 12) cout<< "Versuchen Sie es erneut, die Zahl muss zwischen 4 und 12 liegen: ";
    }
    
    while(a < 4 || a > 12);
      cout<< "Wählen Sie zwischen vorwärts (Zahl 1) und rückwärts: ";
    
    cin>>wahl;
    
    if (wahl == 1)
    {
    
      for(int i = 1; i <= a; i++)
      {
        cout<<i<<" ";
      }
    
    } else {
    
      for(int i = a; i >=1; i--)
      {
    	cout<<i<<" ";
      }
    
    }
    
    cout<<"\n \n";
    
    for(int i = 1; i <= a; i++)
    {
    
      for(int j = 1; j <= a - i + 1; j++)
      {
        cout << j <<" ";
      }
    
      cout << "\n";
    
    }
    
    return 0;
    

    }

    Und das ist die Ausgabe:
    !!!Hello World!!!
    Geben Sie eine ganze Zahl zwischen 4 und 12 ein: 12
    Wählen Sie zwischen vorwärts (Zahl 1) und rückwärts: 4
    12 11 10 9 8 7 6 5 4 3 2 1

    1 2 3 4 5 6 7 8 9 10 11 12
    1 2 3 4 5 6 7 8 9 10 11
    1 2 3 4 5 6 7 8 9 10
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8
    1 2 3 4 5 6 7
    1 2 3 4 5 6
    1 2 3 4 5
    1 2 3 4
    1 2 3
    1 2
    1



  • @Ana448
    Mal ernsthaft, das ist echt ohne Worte...in der Regel musst du hier im Forum einfach selbstständig folgendes abliefern

    int main()
    {
      //totaler Mist
    }
    

    Und dann wird dir früher oder später ein vollständiges Programm geliefert. Aber jetzt einfach ohne Kontext und Motivation irgendwelche anderen Aufgaben und Lösung zu posten, istr einfach echt kein Ansatz, bei dem man dir helfen kann (und möchte).



  • @Jockelx Du hast die Aufgabestellung.. was fehlt dir noch?



  • Wir sind hier kein "Hausaufgabenmacher-Forum".
    Du mußt schon selber den Code (bzw. einen sinnvollen Ansatz) erzeugen, und bei Fehlern, welche du - auch nach Recherche im Internet - nicht alleine gelöst bekommst, kannst du dich dann hier melden.

    Ansonsten wäre ich dafür, solche Beiträge zu sperren (also wo nur die Aufgabe gepostet wird und sonst nichts weiter).



  • @Jockelx sagte in Verzweigungen, Schleifen und Felder in C++:

    @Ana448
    Mal ernsthaft, das ist echt ohne Worte...in der Regel musst du hier im Forum einfach selbstständig folgendes abliefern

    int main()
    {
      //totaler Mist
    }
    

    Naja, "totaler Mist" ist was anderes. Sieht halt wie ein Anfängerprogramm aus. Gibt einiges zu kritisieren, aber das Programm löst doch zumindest schon mal einen Teil der Aufgabe. Jetzt muss @Ana448 nur noch in die Schleife über alle Zahlen das cout << i << " "; durch die if-Bedingung if (zahl-ist-gerade) cout << i << " "; ersetzen und Teil 1 ist fertig.

    Für den Aufgabenteil mit dem Array fehlt noch jeglicher Ansatz.



  • @wob

    int a, b;

    cout << "Geben Sie eine ganze Zahl zwischen 4 und 12 ein: ";
    if(4) cout << i <<" ";
    

    Ich habe überhaupt keine Ahnung, wie das aussehen soll.
    Deswegen habe ich um die Hilfe gebetet.



  • @wob sagte in Verzweigungen, Schleifen und Felder in C++:

    Naja, "totaler Mist" ist was anderes. Sieht halt wie ein Anfängerprogramm aus

    Das hast du wohl völlig falsch verstanden (bzw. offenbar nicht gelesen): ich habe gesagt, was idR als Eigenleistung ausreichend ist, um hier gute Hilfe zu bekommen. Dieses stumpf kopierte Lösungsprogramm habe ich mir weder angeschaut noch irgendwie bewertet.



  • @Jockelx

    Das hast du wohl völlig falsch verstanden

    Ah, ok. Dann volle Zustimmung. Ich dachte nur, dass meine ersten Programme genauso ausgesehen haben (nur in Pascal). Also viel zu wenig in Funktionen ausgelagert, magische Werte im Programm (was hier - sehr zu meinem Horror - in der Aufgabenstellung vorgeschlagen wird!) usw.

    @Ana448 sagte in Verzweigungen, Schleifen und Felder in C++:

    Ich habe überhaupt keine Ahnung, wie das aussehen soll.

    Worauf beziehst du dich jetzt? Das "Geben Sie eine ganze Zahl zwischen 4 und 12 ein: "; hast du doch schon erledigt?! (wenn auch nur mit Wiederholung der Bedingung (a < 4 || a > 12) - versuch mal, diese Bedingung nur 1x schreiben zu müssen)

    Ich dachte, es geht dir nur noch darum, ausschließlich gerade Zahlen auszugeben?

    So können Sie C++ überprüfen lassen, ob eine Zahl gerade oder ungerade ist: 13%2 liefert den Wert 1.

    Dann kannst du dir überlegen, ob du das bei jeder Ausgabe in einer Loop über alle ganzen Zahlen im Bereich prüfst oder ob du in der Loop einfach immer 2 weiter gehst und nur einmalig den Anfangswert anpasst (Dazu steht ja in der Aufgabe auch drin, wie man den Wert einer Variablen um 2 erhöht).



  • @wob
    int main()

    {
    cout << "Geben Sie eine ganze Zahl zwischen 4 und 12 ein: ";
    if(a < 4 || a > 12) cout << i <<" ";
    return 0;
    }
    

    Bei mir geht es nicht, was mache ich verkehrt?
    Ich weiß es nicht, wie es weiter geht..



  • Es geht so weiter, das du den Fehler identifizierst und ihn behebst. "geht nicht" ist keine Fehlerbeschreibung.



  • Das ist der Anfang des Programms. Ist es richtig?

    int a, b;
    cout << "Geben Sie eine Zahl zwischen 4 und 12 ein: ";

    do {
    		 cin >> a;
    		 if(a < 4 || a > 12)
    	    cout<< "Versuchen Sie es erneut, die Zahl muss zwischen 4 und 12 liegen: ";
    	}
    
    while(a < 4 || a > 12);
    	    cout << "Wählen Sie zwischen vorwärts (Zahl 1) und rückwärts: ";
    
             cin >> b;


  • Wenn das der Anfang des Programms ist, dann ist das nicht richtig.



  • @Ana448 warum denn jetzt rückwärts?
    Es soll doch ein Zahl eingegeben werden, die um mindestens 3 größer ist als a

    Das funktioniert auch nicht anders als bei a

    cout << "Geben Sie eine Zahl..... ein: ";   // Text für den Benutzer
    
    do {
        cin >> b;  // Eingabe 
        if(   Testausdruck )  // Test für die Fehlermeldung
            cout<< "Versuchen Sie es erneut, die Zahl ... : ";  // Fehlermeldung
     
    }
    while( Testausdruck );  // Test, ob Eingabe erfolgreich war und somit die Schleife zuende ist
    


  • @DirkB
    Danke!

    So weit bin ich jetzt..

    cout << "Geben Sie eine Zahl zwischen 4 und 12 ein: ";

    do {
    		 cin >> b;
    		 if(a < 4 || a > 12)
    	    cout<< "Versuchen Sie es erneut, die Zahl muss zwischen 4 und 12 liegen: ";
    	}
    
    while(a < 4 || a > 12);


  • @Ana448 Welche Bedingungen muss b erfüllen?

    Ich hatte extra ... in die Texte und Testausdruck geschrieben, weil es nichts mit 4 und 12 zu tun hat.



  • @DirkB
    Ich habe keine Ahnung davon, und dachte, dass ich hier eine Hilfe bekommen kann.
    Leider ist es nur Zeitverschwendung.


  • Mod

    @Ana448 sagte in Verzweigungen, Schleifen und Felder in C++:

    Leider ist es nur Zeitverschwendung.

    Das hast du richtig erkannt. Closed.


Log in to reply