Kleine Übungsaufgabe in C
-
Hallo an alle!
Ich würde gerne eine kleine Übungsaufgabe erstellen, die so innerhalb von 10 Minuten für Personen, die einigermaßen fit in C sind, gelöst werden kann. Die, die Probleme haben, sollten es jedoch auch packen die Aufgabe in 30 Minuten zu lösen. Also das Niveau soll bewusst relativ niedrig sein.
Vorgestellt habe ich mir das folgende: Ein ein- und ein zweidim. Array, welches die gleiche Funktion aufrufen soll, so dass man gezwungen wird Pointer zu verwenden. Ein kleines Grundgerüst mal im Folgenden aufgelistet:
#include <stdio.h> void durchlauf(int *pointer, int zeile, int spalte) { int i, j; printf("Arrayausgabe\n"); for (i=0; i<zeile; i++) { for (j=0; j<spalte; j++) { printf(" %d", *pointer++); } printf("\n"); } } int main(int argc, char* argv[]) { int a[3][4]={{100,101,102,103},{110,111,112,113},{120,121,122,123}}; int b[4] = {200,201,202,203}; durchlauf(a[0], 3, 4); printf("\n"); durchlauf(b, 1, 4); return 0; }
Was für eine Aufgabe könnte man drumherum basteln, dass dies ein "wenig Sinn" macht? Habt Ihr Ideen?
Ein schöner 2. Advent, Danke + Gruß PHANTOMIAS
-
Sortieralgorithmus?
-
So etwas Ähnliches hatte ich bereits mal in einer Übungsaufgabe, dass überprüft werden soll um welche Art von Sortierung vorliegt, also absteigend oder aufsteigend oder gänzlich unsortiert.
Gruß PHANTOMIAS
-
irgendwas mit Vektorrechnung bzw. Matrizenrechnung bietet sich da an.
Wie wärs mit Matrizenmultiplikation, sollte ja auf den ersten Blick möglich sein mit den beiden Arrays.
-
das ganze ist unsauber und jemanden, der so ein program schreibt würde ich schon deswegen punktabzuggeben.
Warum?
1. weil deine funktition einen int* als eingabe hat, du aber trotzdem ein mehrdimensionales array reingibst.
eigendlich gibt es hierbei sogar eine Warnung, dass die Anzahl der Indirektionen unterschiedlich sind
2. weil du (per aufgabenstellung) erwartest, dass 2 dimensionale array reingeschmissen werden und aber intern den pointer nur hochzählst.
wenn jemand (warum auch immer) ein zweidimensionales array anders aufgebaut hat
zBint a** = malloc(50*sizeof(int*)); for(int i=0; i<50;++i){ a[i] = malloc(50*sizeof(int)); }
rennst du in jede menge accessviaolations
3. unterscheidet sich bei deinen beiden arrays die interpretation von zeile und spalte:
Bei a ist die erste dimension die Zeilenzahl und die zweite die Spaltenzahl
Bei b ist die erste die Spalte und die (nixht existierende) zweite die ZeileFazit:
Wenn du mit solchen Aufgaben jemanden etwas bei bringen willst, tun mir die Leute leid, da sie einen schlechten fehleranfälligen Programmierstil lernen.
-
PHANTOMIAS schrieb:
Ich würde gerne eine kleine Übungsaufgabe erstellen, die so innerhalb von 10 Minuten für Personen, die einigermaßen fit in C sind...
lass sie doch dieses quiz machen: http://irc.essex.ac.uk/www.iota-six.co.uk/c/a5_basic_quiz.asp
oder ähnliches.
-
1. weil deine funktition einen int* als eingabe hat, du aber trotzdem ein mehrdimensionales array reingibst.
eigendlich gibt es hierbei sogar eine Warnung, dass die Anzahl der Indirektionen unterschiedlich sindEigentlich gibt es hier keine Warnung! Teste es doch aus, keine der C-Varianten gibt bei mir eine Meldung aus, weder mit gcc noch mit lcc.
Warum auch? Ich übergebe einen zeiger auf int. Was das ist, das interessiert das Programm nicht. Es zeigt auf ein int, also int *.
2. weil du (per aufgabenstellung) erwartest, dass 2 dimensionale array reingeschmissen werden und aber intern den pointer nur hochzählst.
wenn jemand (warum auch immer) ein zweidimensionales array anders aufgebaut hat
rennst du in jede menge accessviaolationsJa, ich erwarte das (leider) auch so, da dies bis zum jetzigen Stand das Wissen ist. Das Allokieren von Speicher kommt erst im neuen Jahr und ist auch durch entsprechende Aufgabenstellung dann ausgeschlossen.
3. unterscheidet sich bei deinen beiden arrays die interpretation von zeile und spalte:
Bei a ist die erste dimension die Zeilenzahl und die zweite die Spaltenzahl
Bei b ist die erste die Spalte und die (nixht existierende) zweite die ZeileSchon klar. Ich bin kein Laie.
Fazit:
Wenn du mit solchen Aufgaben jemanden etwas bei bringen willst, tun mir die Leute leid, da sie einen schlechten fehleranfälligen Programmierstil lernen.Mein Fazit:
Verurteile mich doch bitte nicht gleich vorab! Ich kann nur auf das aufbauen was gelehrt wird. Ich bin Tutor und helfe Leuten C-Übungsaufgaben umzusetzen. Ich kann mit 25 Übungsteilnehmern nicht den Professor angreifen und sagen "nene, was der Prof. Euch da erzählt, das ist nicht so dolle, wir machen das jetzt anders". Und was tun Leute die etwas gehört haben und Aufgaben umsetzen sollen? Klar: Sie nehmen das Vorlesungsskript und schlagen nach. Und wenn das da so drinsteht, dann macht man es normalerweise auch so.
Die Revolution wurde hier noch nicht ausgerufenGruß Phantomias
-
PHANTOMIAS schrieb:
1. weil deine funktition einen int* als eingabe hat, du aber trotzdem ein mehrdimensionales array reingibst.
eigendlich gibt es hierbei sogar eine Warnung, dass die Anzahl der Indirektionen unterschiedlich sindEigentlich gibt es hier keine Warnung! Teste es doch aus, keine der C-Varianten gibt bei mir eine Meldung aus, weder mit gcc noch mit lcc.
Warum auch? Ich übergebe einen zeiger auf int. Was das ist, das interessiert das Programm nicht. Es zeigt auf ein int, also int *.
Ich habs mal fix mit dem vcc 8 probiert. Der gibt hier sogar nicht nur warnung sodern einen error.
Ist auch logisch, sind ja völlig verschiedene Typen: int und int*. Du magst glück haben, wenn das funktioniert, aber das tut es auch nur, solange ein Pointertyp genauso groß ist, wie ein int. Wenn du das für ein 64bit CPU kompilierst gehts schief, da der int da neist trotzdem nur 32bit breit ist (ist kompilerabhängig, tatsächlich ist aber int 32bit, warum auch immer), adressen aber 64.Entweder ihr verwendet einen veralteten compiler, oder ihr solltet das Warningslevel auf wenigstens 3 Stellen.
Des weiteren finde ich die didaktische Methodik, den Studis irgendwas beizubringen und später zu sagen, "eigendlich war das falsch und fehleranfällig, was ihr da gemacht habt", fragwürdig, da sich das erste meist mehr einbrennt.
Was für ne Hochschule und was fürn Studienfach ist das, was ihr da macht?
Hoffentlich doch nicht noch etwa Informatik?
-
Entweder ihr verwendet einen veralteten compiler, oder ihr solltet das Warningslevel auf wenigstens 3 Stellen.
Mit gcc Version 4.01 mit allen Warnungen und auch bei pedantic keinerlei Meldungen. LCC aktuelle Version, auch Warnungen eingeschaltet, keine Meldungen.
Des weiteren finde ich die didaktische Methodik, den Studis irgendwas beizubringen und später zu sagen, "eigendlich war das falsch und fehleranfällig, was ihr da gemacht habt", fragwürdig, da sich das erste meist mehr einbrennt.
Nicht meine Sache wie bereits gesagt; ich nehme es als gegeben bin und mache das Beste draus.
Was für ne Hochschule und was fürn Studienfach ist das, was ihr da macht?
Hoffentlich doch nicht noch etwa Informatik?Technische Hochschule, nein, keine Informatik, sondern ET/IT-Studiengang.
Hehe, man könnte ja mal die PISA-Studie auf Professoren anwenden. Ich glaube teilweise würden da erschreckende Ergebnisse herauskommenGruß PHANTOMIAS
-
vlad_tepesch schrieb:
Hoffentlich doch nicht noch etwa Informatik?
hoffentlich doch! hoffentlich nicht e-technik.
-
~fricky schrieb:
vlad_tepesch schrieb:
Hoffentlich doch nicht noch etwa Informatik?
hoffentlich doch! hoffentlich nicht e-technik.
Wieso nicht
E-Technik ist doch
:p
-
etechnik ist mµll
-
Ist doch kein Problem - liegt alles nacheinander im Speicher
-
heino v2 schrieb:
etechnik ist mµll
du bist doch schwül !
-
Lutscher_ schrieb:
heino v2 schrieb:
etechnik ist mµll
du bist doch schwül !
also ich studiér technische informatik und e-technik ist voll langweilig und viel! liegt gleich auf mit messtechnik, das ist genauso lam0r...
-
Jetzt fragen die Lehrer schon selber in Foren wie sie eine Übungsaufgaben stellen sollen weil sie es selber net geregelt bekommen sowas zu machen WTF ????
-
Ich bin Tutor und helfe Leuten C-Übungsaufgaben umzusetzen.
Wer lesen kann
...