Bestimmte vorgebenene Zahlen eines Arrays auslesen



  • Hey!

    Kann mir jemand erklären, warum mein Code nicht funktioniert?
    8 Zahlen sind vorgebenen. Es sollen alle Zahlen im Bereich zwischen 2 und 7 ausgebenen werden. Compilieren klappt, es wird jedoch nichts ausgebenen..

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	int date[8] = { 2, 0, 1, 9, 0, 2, 1, 3 };
    
    	for (int i = 0; i <= 7 && i >= 2; i++)
    	{
    		cout << "Werte:" << date[i] << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    Vielen Dank für eure Zeit!



  • @euphor sagte in Bestimmte vorgebenene Zahlen eines Arrays auslesen:

    int i = 0

    Ist die Bedingung i <= 7 && i >= 2 erfüllt?



  • Stimmt. Das heisst statt der Zählvariable eine Zahl zuzuweisen, weisst man das Arrayfeld zu?

    etwa so?

    for (int i = 0; date[i] <= 7 && date[i] >= 2; i++)
    

    Ausgabe lautet '2'.



  • @euphor sagte in Bestimmte vorgebenene Zahlen eines Arrays auslesen:

    Stimmt. Das heisst statt der Zählvariable eine Zahl zuzuweisen, weisst man das Arrayfeld zu?

    etwa so?

    for (int i = 0; date[i] <= 7 && date[i] >= 2; i++)

    Ausgabe lautet '2'.

    Ganz sicher nicht.

    Was bedeutet m Bereich zwischen 2 und 7? Position im Array oder Wert?



  • Wert ist gewünscht. Ausgabe sollte 2 2 3 lauten



  • @euphor sagte in Bestimmte vorgebenene Zahlen eines Arrays auslesen:

    Wert ist gewünscht. Ausgabe sollte 2 2 3 lauten

    Dann musst du alle Arrayelemente betrachten und kannst die Bedingung nicht als Schleifenbedingung testen.



  • Ok? Wie dann? Steh auf dem Schlauch. Dachte gerade nur so gehts es..



  • @euphor sagte in Bestimmte vorgebenene Zahlen eines Arrays auslesen:

    Ok? Wie dann? Steh auf dem Schlauch. Dachte gerade nur so gehts es..

    Was @manni66 sagte:

    Dann musst du alle Arrayelemente betrachten

    Also

    for (int i = 0; i < 8; ++i) {
        wenn Arrayelement i im gewünschten Bereich, dann Arrayelement i ausgeben
    }
    

    Die For-Loop kannst du auch (besser) ohne Verwendung der 8 schreiben:

    for (int wert : date) {
        wenn wert im gewünschten Bereich, dann wert ausgeben
    }
    


  • Ich verstehe leider nicht ganz, wie ich auf den Inhalt des Arrays zugreifen soll.

    Versuche gerade in folgende Richtung zu gehen, hilft jedoch nichts..

    int date[8] = { 2, 0, 1, 9, 0, 2, 1, 3 };
    
    	for (int i = 0; i <= 8; i++)
    	{
    		while (date[i] <= 7 && date[i] >= 2)
    		{
    			cout << i << endl;
    		}
    	}
    


  • @euphor

    Nicht so schlecht, aber dein "while" solltest du nochmal überdenken, ob du da nicht was passenderes kennst.



  • @euphor Du hast die richtigen Teile aus dem Eröffnungspost geändert.



  • Etwa so? Spuckt auch die falschen Werte aus. {1 9 0 2 1 3}
    Kann die Syntax nicht nachvollziehen..

    for (int i = 0; i <= 8; i++)
    {
    	if (i <= 7 && i >= 2)
    	{
    		cout << i << endl;
    	}
    }


  • @euphor sagte in Bestimmte vorgebenene Zahlen eines Arrays auslesen:

    Etwa so? Spuckt auch die falschen Werte aus. {1 9 0 2 1 3}
    Kann die Syntax nicht nachvollziehen..

    for (int i = 0; i <= 8; i++)
    {
    if (i <= 7 && i >= 2)
    {
    cout << i << endl;
    }
    }

    Nein, dieser Code macht nicht diese Ausgabe.



  • Du musst JEDES Zeichen beachten.
    Ich hatte dir vorgeschlagen:
    for (int i = 0; i < 8; ++i)
    Du hast daraus gemacht:
    for (int i = 0; i <= 8; i++)
    Warum hast du aus dem < ein <= gemacht? Das Array hat 8 Elemente. Diese haben die Indizes 0 bis 7. Im Ausgangspost hattest du selbst i <= 7 geschrieben. Das war auch richtig.

    Ansonsten darfst du nicht i, sondern musst date[i] auf den Bereich 2 bis 7 testen.

    Und zurückkommend auf @DirkB: bist du sicher, dass du deinen Code compiliert hast?



  • @euphor sagte in Bestimmte vorgebenene Zahlen eines Arrays auslesen:

    8 Zahlen sind vorgebenen. Es sollen alle Zahlen im Bereich zwischen 2 und 7 ausgebenen werden.

    8 Integer in einem Array:

    int data[] = { 2, 0, 1, 9, 0, 2, 1, 3 };
    

    Gültige Indizes liegen in [0, N) wo N die Anzahl der Elemente des Arrays ist. Die Anzahl der Elemente eines Arrays bekommt man mit std::size() aus <iterator>:

    for (std::size_t i = 0; i < std::size(data); ++i) {
        // ...
    }
    

    Auf die Anzahl der Elemente kommt man auch indem man die Größe des Arrays in Bytes (chars) durch die größe des Elementtyps teilt:

    sizeof data / sizeof *data
    

    Dank Templatemagic ist das in C++ jedoch nicht nötig. Wichtig ist auf jeden Fall, daß Du nicht zu weit zählst und Magic Numbers vermeidest.

    Wird der Index jedoch im Substatement (Schleifenkörper) nicht verwendet, so nimmt man besser eine Range-based for Loop wie von @wob schon vorgeschlagen:

    for (auto value : data) {
        // ...
    }
    

    Hier enthält value für die Schleifendurchläufe die Werte von data[0], data[1], data[2], ..., data[N - 1].

    Kommen wir nun zur Bedingung für die Werte die ausgegeben werden sollen:

    Es sollen alle Zahlen im Bereich zwischen 2 und 7 ausgebenen werden.

    Das ist einfach, denn die Zahlen im Bereich zwischen 2 und 7 sind 3, 4, 5 und 6. ... ähm. nein, so ist es wahrscheinlich nicht gemeint, aber Du solltest in Zukunft darauf achten Dich exakt auszudrücken. Ich gehe davon aus, daß ein Element des Arrays wenn es zwischen 2 und 7 liegt ausgegeben werden soll:

    if (2 < data[i] && data[i] < 7) // ...
    

    oder, falls man sich für die Range-based for loop entschieden hat:

    if (2 < value && value < 7) // ...
    

Log in to reply