Klausurvorbereitung



  • ich weiß nicht, ob dir hier jemand alle fragen einfach beantwortet. Präsentier lieber deine Antworten zu den Fragen, und wo deine Probleme liegen. So lernst du auch mehr



  • aufgabe 2:
    wann terminiert die schleife?
    und für was ist i?

    Ich denk mal das bleibt uns überlassen wann die Schleife terminiert wird.
    Das i steht schätzungweise für die Integerzahlen mit denen das Feld gefüllt wird.

    Präsentier lieber deine Antworten zu den Fragen

    Wenn ich die Antworten zu den fragen hätte, dann würde ich doch nicht fragen, oder? 🙂

    Ich meine, ich kann in den Aufgaben ja auch nicht mehr lesen als ihr.. Ich habe sie 1:1 abgeschrieben.



  • stoppen mußt sie schon und solang sich die variable nicht ändert, läuft das ewig, denk doch mal darüber nach;)

    wo wird eigentlich k deklariert oder soll aus k i werden oder i zu k?



  • @ ;fricky

    kannst du mal pls den code nochmal neu schreiben? Wenn ich char* wegmache dann kommt Syntaxfehler ')' wenn ich (char*) wegmache, kommt 'void *' kann nicht in 'int *' kkonvertiert werden.

    Außerdem ist k nichtdeklarierter Bezeichner.



  • hab iwi das gefühl du weißt weniger als vor nem monat 😕



  • @ noobLolo

    ja schon klar der Code ist ja auch fehlerhaft. Ich denk mal das Feld soll max 4 Zeichen einlesen (wegen while(k<4)). Und in diesem Feld muss dann logischwerweise drin stehen 0123.



  • xX Dany Xx schrieb:

    Wenn ich char* wegmache dann kommt Syntaxfehler ')' wenn ich (char*) wegmache, kommt 'void *' kann nicht in 'int *' kkonvertiert werden.

    Versuch's mal mit einem C-Compiler.
    🙂



  • µngbd schrieb:

    xX Dany Xx schrieb:

    Wenn ich char* wegmache dann kommt Syntaxfehler ')' wenn ich (char*) wegmache, kommt 'void *' kann nicht in 'int *' kkonvertiert werden.

    Versuch's mal mit einem C-Compiler.
    🙂

    Das versteht er nicht. Er ist im C++- Modus unterwegs. Vielleicht hilft das.



  • xX Dany Xx schrieb:

    Ich denk mal das Feld soll max 4 Zeichen einlesen (wegen while(k<4)). Und in diesem Feld muss dann logischwerweise drin stehen 0123.

    Damit sollte man's eigentlich korrigieren können.

    int i;   // wir nehmen i anstelle von k
    int arr[5];   // malloc() mit konstanten Werten füttern ist ein richtiger Fehler
                  // statt 5 würden auch 4 reichen, aber vielleicht soll am Ende
                  // noch Platz für einen Terminator sein
    for (i = 0; (arr[i] = i) < 4; i++)
        ;
    // oder mit do-while
    i = 0;
    do arr[i] = i++; while (i < 4);
    

    Danach steht in dem Array {0,1,2,3,undefiniert}. Aber vielleicht soll doch am Ende in dem Array stehen: {0,1,2,3,4}? Das ist sehr schwer zu sagen, lernt ihr dort Psychologie?
    🙂



  • pointercrash() schrieb:

    µngbd schrieb:

    Versuch's mal mit einem C-Compiler.
    🙂

    Das versteht er nicht. Er ist im C++- Modus unterwegs. Vielleicht hilft das.

    Ob daran wohl der Lehrer schuld ist?
    🙂



  • Meinst du dass der Befehl

    int *ar = (char*)malloc(5*sizeof(int));
    

    definitiv falsch ist und stattdessen nur int arr[5]; reinsoll? Oder ist das kein Fehler, sondern es gefällt dir einfach nur nicht...



  • Jetzt hab ichs durch den compiler gejagt:

    int main (void)
    {
    int k = 0;
    int ar[5];
    do{ ar[k] = k++; printf("%f", ar[k]);} while (k<4);
    getch();
    }
    

    Weißt du was er ausgibt?



  • xX Dany Xx schrieb:

    Meinst du dass der Befehl

    Besser: die Zeile.

    xX Dany Xx schrieb:

    int *ar = (char*)malloc(5*sizeof(int));
    

    definitiv falsch ist und stattdessen nur int arr[5]; reinsoll? Oder ist das kein Fehler, sondern es gefällt dir einfach nur nicht...

    Naja, definitiv falsch kann's nicht sein, weil es ja läuft. Aber mit malloc() einen Bereich holen, dessen Grösse schon zur Compilezeit bekannt ist, ist völlig unnötig. Man kann sich nun esoterische Ausnahmen ausdenken, zB dass man den Speicher unbedingt schon vor dem Ende des Blocks zurückgeben muss, aber -- naja, sowas fällt normalerweise nur nwp2 ein.

    Schwieriger ist aber die Frage, ob dein Lehrer das auch erkannt hat.
    🙂



  • xX Dany Xx schrieb:

    Jetzt hab ichs durch den compiler gejagt:

    int main (void)
    {
    int k = 0;
    int ar[5];
    do{ ar[k] = k++; printf("%f", ar[k]);} while (k<4);
    getch();
    }
    

    Weißt du was er ausgibt?

    Versuch mal das:

    int main (void)
    {
      int k = 0;
      int ar[5];
      do{ ar[k] = k++; printf("%d", ar[k-1]);} while (k<4);
    }
    

    Oder schreib das ++ erst in die while-Klammern. Oder (noch besser): nimm die for-Schleife, da wird man am wenigsten mit den Erhöhungen verwirrt.
    🙂



  • 1. Es ist kein Lehrer sondern Prof. Dr.
    2. Die Aufgabe heißt >>Aufgabe 2 (ZEIGER)<< sind in deinem Code Zeiger? Nein..
    3. Hast dus durch den Compiler gejagt? Die fortlaufenden Integerzahlen fehlen (0, 1, 2, ...)

    EDIT: Okay zu 3. das funktioniert... ich nehm die do schleife, weil sie in der aufgabe steht, aber dennoch sind eben keine Zeiger drin, deswegen schätze ich, dass deine Lösung falsch ist.. bzw. nicht relevant..



  • xX Dany Xx schrieb:

    1. Es ist kein Lehrer sondern Prof. Dr.

    Hihi, wenn einer ein guter Lehrer ist, hat er dann nicht mehr Achtung verdient als einer, der Titel sammelt?

    xX Dany Xx schrieb:

    2. Die Aufgabe heißt >>Aufgabe 2 (ZEIGER)<< sind in deinem Code Zeiger? Nein..

    Dann mach halt noch ein int *pointer = ar; .

    xX Dany Xx schrieb:

    3. Hast dus durch den Compiler gejagt? Die fortlaufenden Integerzahlen fehlen (0, 1, 2, ...)

    Erst nachdem du dich beschwert hast. Aber zum Glück war's richtig.
    🙂



  • xX Dany Xx schrieb:

    Jetzt hab ichs durch den compiler gejagt:

    int main (void)
    {
    int k = 0;
    int ar[5];
    do{ ar[k] = k++; printf("%f", ar[k]);} while (k<4);
    getch();
    }
    

    Weißt du was er ausgibt?

    Ja, Schrott. Wieso wohl? ( Es gibt 2 Anworten und es liegt nicht an der Art der Allokation. )



  • xX Dany Xx schrieb:

    Immer wenn ich mit einer Klausur durch bin, poste ich dann weitere Aufgaben aus anderen Klausuren.

    damit wir in übung bleiben, ne? *fg*
    zu dem cast: ja, den ersatzlos streichen und den code als C compilieren (oft reicht umbenennen der source-datei von .cpp in .c)
    zum malloc: ja, das ist doof, aber ich schätze, dass ihr nur echte fehler ausbauen und nicht den ganzen code nach eigenem geschmack umbauen dürft.
    🙂



  • ;fricky schrieb:

    ich schätze, dass ihr nur echte fehler ausbauen und nicht den ganzen code nach eigenem geschmack umbauen dürft.
    🙂

    RICHTIG 🙂 Sags mal bitte µngbd

    Wollen wir vielleicht nicht einfach mit den anderen Aufgaben weitermachen?



  • Wie schreibt man in C eine Struktur in eine Klasse um? Aufgabe 5 b) *grübel*
    Es soll ja angeblich alles C Programmierung sein.


Anmelden zum Antworten