|
[Home] [Lexikon] [Aufgaben] [Tests] [Kurse] [Begleitmaterial] [Hinweise] [Mitwirkende] [Publikationen] |
|
Mathematik-Online-Aufgabensammlung: Lösung zu | |
Aufgabe 1512: Klausurauswertung |
| A B C D E F G H I J K L M N O P Q R S T U V W X Y Z |
Dabei soll eine 1.0 (4.0) ab 95% (40%) der maximal erreichten Punktzahl vergeben werden. Die Punktzahlen für die dazwischenliegenden Noten (1.3,1.7,2.0,...,3.7) sollen linear interpoliert werden.
Mit dem Programm Listen.m können Sie Listen zum Testen erzeugen lassen (Die darin verwendeten Namen entstammen der alphabetischen Liste von ,,The MacTutor History of Mathematics``, zu finden unter http://www-history.mcs.st-andrews.ac.uk/history/index.html).
% nach Namen sortieren
[tmp, ind] = sort({Studierende(:).Name});
Studierende = Studierende(ind);
[tmp, ind] = sort({Klausur(:).Name});
Klausur = Klausur(ind);
% Klausurteilnehmer in Studentenliste finden
% Matrikelnummer und Punktesumme in Vektoren schreiben
k_S = 1;
for k=1:length(Klausur);
while ~strcmp(Studierende(k_S).Name, ...
Klausur(k).Name)
k_S = k_S + 1;
end;
MatNr(k) = Studierende(k_S).Matrikelnummer;
Pkt(k) = sum(Klausur(k).Punkte);
k_S = k_S + 1;
end;
% Notengrenzen bestimmen
p4 = .4*max(Pkt); p1 = .95*max(Pkt);
% Notenindex berechnen (1: 1.0, ..., 11: 5.0)
NotenIndex = ceil(1+9*(Pkt-p1)/(p4-p1));
% Korrektur der Randfälle
NotenIndex( NotenIndex < 1 ) = 1;
NotenIndex( NotenIndex >= 11 ) = 13;
% Noten berechnen und ausgeben
Pkt = round( (20+NotenIndex*10) / 3)/10;
Erg=[MatNr,Pkt];
fprintf('%7d %3.1f\n', sortrows(Erg)');
Die zweite Version der berechnet die Ausgabe durch aneinanderhängen der Namenslisten ohne Schleife:
% Daten erzeugen
[Studierende,Klausur]=Listen(100,10*ones(1,5));
% Anzahl von Studierenden, Teilnehmer der Klausur und Aufgaben
Anz_S=length(Studierende);
Anz_K=length(Klausur);
Anz_A=length(Klausur(1).Punkte);
% Namen aneinanderhängen und sortieren
[S_Liste,index]=sortrows(strvcat({Studierende(:).Name,Klausur(:).Name}));
% Doppelte Namen haben an der Klausur teilgenommen
doppelt=find(sum(abs(diff(S_Liste)),2)==0);
% Matrikelnummern aus Studierendenfeld holen
Ergebnisse(1:Anz_K,1)=[Studierende(index(doppelt(:))).Matrikelnummer];
% Punkte aus Klausurfeld holen richtig umsortieren und aufsummieren
Pkt=sum(reshape([Klausur(index(doppelt(:)+1)-Anz_S).Punkte],Anz_A,Anz_K));
% Notengrenzen bestimmen
p4 = .4*max(Pkt); p1 = .95*max(Pkt);
% Notenindex berechnen (1: 1.0, ..., 11: 5.0)
Notenindex = ceil(1+9*(Pkt-p1)/(p4-p1));
% Korrektur der Randfälle
Notenindex( Notenindex < 1 ) = 1;
Notenindex( Notenindex >= 11 ) = 13;
% Noten berechnen und ausgeben
Ergebnisse(:,2) = round( (20+NotenIndex*10) / 3)/10;
fprintf('%7d %3.1f\n', sortrows(Ergebnisse)');
| automatisch erstellt am 4. 5. 2007 |