Folien und C letztes Jahr

Die Folien der Übungen, Vorlesungen, sowie die Lösungen des WS 02-03

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Folien und C letztes Jahr
Hi!
Da ein paar von uns Sysprog schon letztes Jahr hatten, dachte ich mir ich stelle die Files des Semesters mal auf meinen Server.
Unter der üblichen Adresse :wink:

Dort sind die Vorlesungs-Folien, Übungsblätter (mit Lösungstipps) sowie die ganzen C-Sourcecodes.
Allerdings würde ich empfehlen, die Übungsaufgaben selber zu lösen, die sind alle machbar. Erfahrungsgemäss stimmen die Aufgaben zu ca 80% mit dem Vorgängerjahrgang überein.

Wünsche noch vie Spaß!!! (mach das auch noch mal, war lustig :wink: )

PS: zur näheren erklärung:
3 Ordner: bin.i386, src, doc (die aufgaben müssen so abgeben werden)
bin.i386: die ausführbaren programme
doc: Hier die Dokumentation rein, falls benötigt
src: die sourcecodes…

PPS: die codes sind von mir! kein anspruch auf vollständigkeit oder richtigkeit :rolleyes:


Ich würde sogar dringend raten, die Programme selber zu machen! Die Korrektoren setzen ein Programm ein, welches eure Programme mit denen eurer Mitstudenten bzw der Programme der vorherigen Jahrgänge vergleicht. Wenn es zu große Ähnlichkeit gibt, werdet ihr zu einer Unterredung zitiert. Außerdem sind die Programme der Übung Stoff der Klausur. Ohne die nötigen Kenntnisse aus den Programmierübungen könnt ihr die Klausur vergessen.


Ja, das meine ich auch…
Wollte nur eine Hilfestellung den allzu verzweifelten geben.
Dieses Programm arbeitet übrigens äußert effizient ;))
Also copy & Paste ist nicht. Nicht bei dem letzten Jahr und auch nicht die 10 jahre davor…

Aber ihr könnt das eh schnell…

Diffen oder was?
Ein Programm, daß mit den Sources in der letzten Jahren vergleicht?!
Wenn man nicht wirklich etwas größere Programmen (also keine 10 Zeiler) schreiben muß, halte ich das für ziemlichen Quatsch, vor alle, weil ein False Nöling Rate zu erwarten wäre, die ziemlich hoch ist, v.a. bei Leute mit guten Programmstilen. Oder aber das Programm müßte leicht zu verarschen sein.
Hat jemand Beispiele? Würde sowas erkannt werden:

Listing 1:
void dumm(int wieoft, const char satz[]) {
int zaehler=0;
while(zaehler<wieoft) {
printf(“%s\n”,satz);
zaehler++;
}
}

Listing 2:
void dumb(int howoften, const char *sentence)
{
int counter;
for(counter=0;counter<howoften;counter++)
printf(“%s\n”,sentence);
}


naja. vielleicht vergleicht das programm ja den erstellten assembler code, da gibts dann schoneher die möglichkeit übereinstimmungen zu fidnen weil der copmpiler ja eh optimiert und ob die laufvariable dann counter oder zähler heisst merkt am ende keiner mehr.


Bei 5-Zeilen Progs wird er zweifelsohne eine übereinstimmung finden, aber das ist ja nicht der sinn…
Das wissen die auch!
Es analysiert deinen Prog-Stil, aber wenn dich dieser Algorythms so interessiert, dann kannst du den Christian Wawerisch mal fragen, der ist der SysProg-Übungsleiter und kennt sich ziemlich gut aus.
Aber das Prog arbeitet gut… :smiley:


Sachen die da zum Beispiel mit eingehen sind Anzahl der Variablen (globale, lokale), Schleifen, Funktionen und deren Parameter etc. Da kannst du sogar ziemlich viel Verschiedenes machen. Klar, dass ein 20Zeiler sich nicht besonders von nem anderen, der genau das selbe tut, unterscheidet, aber auf ein paar 100 Zeilen Code, kriegst du nicht mal dann gleiche, wenn du die Programme der letzten Jahre auch noch mit reinnimmst.

Und: Ja klar, dein Prog waere das perfekte Beispiel fuer ein auf jeden Fall erkanntes.


Pfff … ich habe nie daran geglaubt :slight_smile: … Herr Kleinöder wollte es uns ja mal vorführen, aber gesehen habe ich es nie, dieses omninöse, allmächtige Abschreibtestprogramm (es soll ja auch 3D-Grafik haben, gelle?) g

Wie dem auch sei, es fällt auf, wenn zwei Codes gleich sind und wer sich die Mühe macht darüber nachzudenken, wie er am besten bescheißen könnte, der hätte seine Energie besser in die Lösung der Aufgabe gesteckt. So schwer sind die ja nun auch wieder nicht und schließlich muss man eine dieser Aufgaben ja am Ende in der Klausur handschriftlich in 2 Stunden programmieren und da tut ein bisschen Übung nicht schaden :slight_smile:


es würde mit 100 prozent erkannt werden, dass dies semantisch das gleiche ist. variable renaming wird durch einfach lexikalische analyse (–>algo II) ausgehebelt und jede vorschleife kann in eine while schleife umgewandelt werden. (TI I Jedes LOOP Programm kann in ein WHILE Programm transformiert werden).


Genau das habe ich mir gedacht. Aber jetzt wo’s du es sagt, glaube ich, daß mich das tolle Programm doch nicht so interressiert, weil du mich auf die Idee gebracht hast, daß man den scheiß, dem gcc erstmal zum Fraß vorwirft. Und siehe da! Ich hab listing 1 und listing 2 mal in list1.c und list2.c geschmissen:

gcc -S list?.c
diff list1.s list2.s
1c1
<       .file   "list1.c"
---
>       .file   "list2.c"
6,8c6,8
< .globl dumm
<       .type   dumm, @function
< dumm:
---
> .globl dumb
>       .type   dumb, @function
> dumb:
16c16
<       jl      .L4
---
>       jl      .L5
18c18
< .L4:
---
> .L5:
29c29
<       .size   dumm, .-dumm
---
>       .size   dumb, .-dumb

Und jetzt da nen Perl drüber jagen ist kein Film mehr.
Ich sollte besser lesen, eem hat das ja schon gemeint