[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 |