Array auffüllen.



  • 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.



  • #define SIZE 5
    int m[SIZE][SIZE];
    int i;
    for(i=0;i<SIZE;i++)
    		m[SIZE-1-i][i]=1;
    


  • HansKlaus schrieb:

    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.

    Ich glaub nicht, dass du solange j kleiner oder gleich 0 ist meinst.
    Ausserem befüllst du das gesammte Array mit Einsen.

    bool var[10][10]={0};
    for (int i=0; i < 10; i++)
        var[i][10-(1+i)] = 1;
    

    Auch ungetestet 🙂



  • So ist es im Moment aber da sind dann überall 1 er????

    #include <iostream>
    using namespace std;

    int main(void)
    {
    int i;
    int k;

    int mat [10][10]={0};

    for (i=0;i<10;i++)
    {
    for (k=10;k>0;k--)
    {
    mat [i][k]=1;
    }
    }

    for (i=0;i<10;i++)
    {
    cout << endl;

    for (k=0;k<10;k++)
    {
    cout << mat [i][k];
    }
    }

    system ("pause");

    }



  • Ja, lies meinen Beitrag obendrüber.


Anmelden zum Antworten