Array auffüllen.



  • Hi hab da ein kleines Problem ich muss ein duales Array verändern. Es sollen die stellen an denen die Felder ...101... (3 Arrayfelder) in ...111... verändert werden. Gleichzeitig sollen die Veränderungen gezählt werden. Das heißt wird der Schritt oben 3x ausgeführt ist der Zähler bei 3 usw.

    Danke 😕 😕 😕

    Ich bin ein Anfänger in C somit vielleicht die Antwort für dumme formulieren.



  • Du meinst ein zweidimensionales Array wenn du sagst "dual"? Welche Dimensionen hat dein Array? Welcher Datentyp (int?). Wenn du hast zeig mal deinen Code.

    Das Array kannst du als Tabelle sehen, mit Zeilen und Spalten. Mit einer Schleife gehst du alle Zeilen durch, prüfst ob die drei (oder mehr) Spalten alle den richtigen Wert haben ('&&'-Operator: bedingung1 && bedingung2 && bedingung3) und wendest ggf deine Änderungen (Mehrzahl weil 3 Spalten einzelnd verändert werden müssen) an und inkrementierst einen Zähler.



  • Du zählst das Array in einer Schleife immer um 1 hoch (Var++).
    Wenn du auf eine 1 triffst überprüfst du ob *(var+1) gleich 0 ist und ob *(var+2) gleich 1 ist.
    wenn ja dann setzte var+1 auf 1, erhöhe den Zähler und mach bei var+3 weiter.
    @dönerknödel ich glaub mit dual meint er ein bool array.



  • Ja so hab ich das aber irgendwas klappt nicht.

    #include <iostream>
    using namespace std;

    int main(void)
    {
    int a[]={0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0};

    int k=0;
    int l=0;
    int m=0;
    int x=0;
    int z=0;
    int v;

    for (x=0;x<20;x++)
    {
    if ((a[k]=1)&&(a[k+1]=0)&&(a[k+2]=1))
    {
    a[k]=1;
    z++;
    }

    }

    for (v=0;v<20;v++)
    {
    cout << a[v];
    }
    cout << endl <<z;

    system ("pause");
    return 0;
    }



  • Ok ich lag falsch, meinen Beitrag oben bitte vergessen.

    Willst du C oder C++?

    Für das eigentliche Problem, du inkrementierst x aber benutzt dann k als Index... Und Vorsicht, du greifst auf Daten außerhalb des Arrays zu. Wenn du a[x+2] lesen möchtest darf x nur bis 17 zählen bei 20 Arrayelementen, also in der Schleife x<18 (Nicht vergessen, der erste Index ist 0).

    Achte auf die Einrückung und aussagekräftige Variablennamen. Für die Ausgabe kannst du wieder x verwenden, Variablen sind keine Einwegprodukte. 😉



  • - Alle Variablen ausser a und z sind Müll.
    - Für Vergleiche benötigst du ==.
    - Vermische nicht c und c++
    - Falls du Dev-cpp nutzt: weg damit



  • Wieder zu schnell abgeschickt grmbl.

    Vorsicht: = ist eine ZUWEISUNG, == ist ein Test auf Gleichheit. Eigentlich warnt der Compiler (du hast doch Warnungen aktiviert gell?) aber durch die Klammern wird die Warnung unterbunden. Und du möchtest a[k+1] ändern, nicht a[k].



  • Vielen Dank. Ich denke jetzt klappts. Programm ist in C. Muss leider Devc++ benutzen.

    #include <iostream>
    using namespace std;

    int main(void)
    {
    int a[]={0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0};

    int k=0;
    int z=0;
    int v;

    for (k=0;k<17;k++)
    {
    if ((a[k]==1)&&(a[k+1]==0)&&(a[k+2]==1))
    {
    a[k+1]=1;
    z++;
    }

    }

    for (v=0;v<20;v++)
    {
    cout << a[v];
    }
    cout << endl <<z;

    system ("pause");
    return 0;
    }

    🙂 🙂 🙂 🙂 🙂 🙂 🙂



  • Anton258456 schrieb:

    Programm ist in C.

    Nein, ist es nicht.
    C kennt keine namespace und auch kein cout. Das << hat auch eine andere Bedeutung.

    Anton258456 schrieb:

    Muss leider Devc++ benutzen.

    Dann hoffentlich in einer aktuellen Version > 5.x



  • for (k=0;k<17;k++)
    Nein, 0 bis inklusive 17, also <18. Genau lesen!

    Frage an Bitmapper, woran erkennst du dass er Dev-C++ nutzt??



  • 😃 😃 4.9.9.2. Muss mal Updaten. Ka warum das C++ ist sollte eigentlich C sein.
    Naja es funktioniert. Danke



  • Du kannst soweit ich weiß in den Projekteinstellungen zwischen C und C++ auswählen.
    Was du brauchst ist Code::Blocks oder MSVC. Mit einem DevShit++ 4.9.9.2 wird das nichts.



  • @dönerknödel
    war eine Vermutung weil Dev-Cpp vorschlägt system("pause") zu verwenden.

    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    

    Ausserdem ist Dev-Cpp meist die erste (und einzige) Wahl für Anfänger, wegen so Seiten wie c-programmieren.com



  • Danke für die Info Bitmapper.

    (Ich hab ja bisher immer ewig gewartet bis C::B startet, bis mir auffiel dass der gcc in der Konsole deutlich einfacher zu bedienen ist als ich dachte... Einfach gcc -Wall datei.c und es kommt a.exe raus. Für kleine Sachen völlig ausreichend, den Debugger und Co. von C::B nutze ich eh nicht.)



  • Dann bekommst du aber schnell Probleme wenn du ein paar libs statisch linken musst 🙂



  • Ich hab schon externe libs benutzt, konkret GD, mit Handbuch vom gcc durchaus machbar. Das ist dynamisch gelinkt aber statisch dürfte doch nicht so unterschiedlich sein? Vielleicht -static dazu oder so?

    gcc main.c -Wall -O3 -I"D:\Gd\include" -L"D:\Gd\lib" -lgd
    


  • Ich meinte Probleme wegen der Tipparbeit wenns mal 20 libs sind.
    Da warte ich lieber 10 sek auf CodeBlocks.



  • Ich mache wenn überhaupt Mikroprojekte, mehr als eine externe Lib ist mir noch nie passiert... Und was C::B betrifft ich hab nen uralten Rechner, da sind es mehr als 10 Sekunden.



  • Hey Leute hab noch ein Problem. Wie bekomm ich die Nebendiagonale eine 0-Matrix mit 1ern versehen.???

    Also 0000001
    0000010
    0000100
    0001000
    0010000 usw. Matrix ist quadratisch. Als 5x5 oder 10x10 usw.

    Danke 🙄 😮 😕



  • for(i=0;i<max;i++)
    {
    for(j=max-1;j<=0;j--)
    {
    matrix[i][j]=1;
    }
    }
    

    habs jetzt nicht ausprobiert, aber so müsste es doch gehen.


Log in to reply