Notenberechnung
Version vom 8. Juni 2012, 17:35 Uhr von 1steenfa (Diskussion | Beiträge) (Bot: Kosmetische Änderungen)
Diplom[Bearbeiten]
Beschreibung[Bearbeiten]
Für Diplomer berechnet sich die Endnote wie folgt:
Es gibt insgesamt 5 Prüfungen, die zu gleichen Teilen in die Endnote einfließen:
- Grundlagen von Informatik-Systemen
- Theoretische Informatik
- Schwerpunkt
- Ergänzungsfach
- Diplomarbeit
Um die Note in einer dieser Prüfungen zu ermitteln, wird aus den ungerundeten Noten der jeweiligen Teilprüfungen das arithmetische Mittel gebildet und nach der ersten Nachkommastelle abgeschnitten (abgerundet). Dasselbe Verfahren kommt für die Berechnung der Endnote zur Anwendung.
Beispiel[Bearbeiten]
- Grundlagen von Informatiksystemen
- Technische Informatik - DKR - 2.3
- Angewandte Informatik - CGB - 2.0
- Praktische Informatik - SNN - 3.7
- Mittelwert ist 8.0/3 = 2.6666666 = 2.6
- Theoretische Informatik
- LOS - 1.7
- AUK - 2.3
- PNL - 1.7
- Mittelwert ist 5.7/3 = 1.90000 = 1.9
- Schwerpunkt
- Prüfung - 2.3
- Mittelwert ist 2.3/1 = 2.30000 = 2.3
- Ergänzungsfach
- 1. Prüfung = 4.0
- 2. Prüfung = 2.3
- Mittelwert ist 6.3/2 = 3.15000 = 3.1
- Diplomarbeit
- Erstgutachter - 1.7
- Zweitgutachter - 2.0
- Mittelwert ist 3.7/2 = 1.85000 = 1.8
- Endnote (2.6 + 1.9 + 2.3 + 3.1 + 1.8) / 5 = 11.7/5 = 2.34000 = 2.3
Textform[Bearbeiten]
Am Ende wird diese numerische Endnote noch in Textform übersetzt:
- 1.0 bis 1.0 - ausgezeichnet
- 1.1 bis 1.5 - sehr gut
- 1.6 bis 2.5 - gut
- 2.6 bis 3.5 - befriedigend
- 3.6 bis 4.0 - ausreichend
Implementierung[Bearbeiten]
Calc[Bearbeiten]
Ein Spreadsheet mit einem Chart, dass die Spreizung der moeglichen Note zeigt, gibt es hier: Medium:DPO98-Noten-Chart.ods
Perl[Bearbeiten]
#!/usr/bin/perl
sub mittel {
my $note = 0;
my $n = 0;
foreach my $teilnote (@_) {
$note += $teilnote;
$n += 1;
}
$note = int($note * 10 / $n) / 10;
return $note;
}
my $endnote = mittel(
mittel(2.3, 2.0, 3.7),
mittel(1.7, 2.3, 1.7),
mittel(2.3),
mittel(4.0, 2.3),
mittel(1.7, 2.0)
);
print "$endnote (".('ausgezeichnet','sehr gut','gut','befriedigend','ausreichend')[int((int((int($endnote * 10) - 6) / 5) * 3 + 4) / 5)].")\n";
Python[Bearbeiten]
#!/usr/bin/env python # Copyright: 2011 Tobias Mueller <4tmuelle@informatik.uni-hamburg.de> # License: GPLv3+ import math def gerundeter_schnitt(*noten): schnitt = (1.0 * sum(noten)/len(noten)) gerundet = int(math.floor(schnitt * 10)) return gerundet/10.0 def get_dipl_noten_text(dipl_note): translations = ( (1.0, 1.0, "Ausgezeichnet"), (1.1, 1.5, "Sehr Gut"), (1.6, 2.5, "Gut"), (2.6, 3.5, "Befriedigend"), (3.6, 4.0, "Ausreichend"), ) for upper, lower, text in translations: if upper <= dipl_note <= lower: return text raise RuntimeError("Couldn't translate note %s with %s", dipl_note, translations) def diplomnote(a, p, t, th1, th2, th3, sp, ef, dipl): theorie = gerundeter_schnitt (th1, th2, th3) theorie_msg=r''' Th1: %2.1f \ Th2: %2.1f = %2.1f Th3: %2.1f / ''' % (th1, th2, theorie, th3) print theorie_msg gris = gerundeter_schnitt (a, p, t) gris_msg=r''' A : %2.1f \ P : %2.1f = %2.1f T : %2.1f / ''' % (a,p, gris, t) print gris_msg dipl_note = gerundeter_schnitt (theorie, gris, sp, ef, dipl) dipl_noten_text = get_dipl_noten_text(dipl_note) rest_msg=r''' Nebenfach: %2.1f Schwerpunkt: %2.1f Diplomarbeit: %2.1f ==================== Gesamt: %2.1f %s ''' % (ef, sp, dipl, dipl_note, dipl_noten_text) print rest_msg return dipl_note if __name__ == '__main__': import sys noten = [float(arg) for arg in sys.argv[1:]] a, p, t, th1, th2, th3, sp, ef, dipl = noten print diplomnote(*noten)
Bachelor[Bearbeiten]
Beschreibung[Bearbeiten]
FIXME!
Beispiel[Bearbeiten]
PHP[Bearbeiten]
<?php // original quellcode von X3K6A2 aus // https://www.fb18.de/mybb/showthread.php?tid=9878&pid=99910#pid99910 // erweitert um die moeglichkeit die noten auch fuer andere studiengaenge zu berechnen // scp calc.php ebase.dyndns.info:htdocs/calc.php $str=''; $studiengaenge = array( "Informatik_Bachelor" => array( array("SE1",6,1), array("SE2",6,1), array("SE3",6,1), array("AD",6,1), array("GDB",6,1), array("GSS",6,1), array("RS",9,1), array("FGI1",9,1), array("FGI2",9,1), array("IKON",6,1), array("Praktikum",3,1), array("Seminar",1.5,2), array("Projekt",4.5,2), array("DM",9,1), array("ALA",9,1), array("Stochastik",9,1), array("WahlPflicht1",9,2), array("WahlPflicht2",9,2), array("WahlPflicht3",9,2), array("Wahl1",9,1), array("Wahl2",9,1), array("BacArbeit",12,4) ), "Informatik_Bachelor_2010" => array(), "Informatik_Bachelor_2011" => array(), "CIS_Biochemie_Bachelor" => array( array("SE1",6,1), array("SE2",6,1), array("AC",9,1), array("OC",9,1), array("PC1",4.5,1), array("PC2",4.5,1), array("Einf. BC",3,1), array("Strukt. BC",3,1), array("BC",6,1), array("BC Praktikum",6,1), array("Mathe1",9,1), array("Mathe2",9,1), array("FGI1",9,1), array("Mathe3/FGI2",9,1), array("STO",9,1), array("Numerik",9,1), array("AD",6,1), array("GDB",6,1), array("ASE",3,1), array("CiS-Prog",6,1), array("CiS Biochemie",6,1), array("Wahlpflicht1",9,1), array("Wahlpflicht2",9,1), array("Projekt",6,1), array("Seminar",3,1), array("BacArbeit",12,3) ), "CIS_Chemie_Bachelor" => array( array("SE1",6,1), array("SE2",6,1), array("AC",9,1), array("OC",9,1), array("PC1",4.5,1), array("PC2",4.5,1), array("PC3",9,1), array("Ausgw. Kapitel der Chemie",6,1), array("Mathe1",9,1), array("Mathe2",9,1), array("FGI1",9,1), array("Mathe3/FGI2",9,1), array("STO",9,1), array("Numerik",9,1), array("AD",6,1), array("GDB",6,1), array("CiS-Prog",6,1), array("CiS Chemie",6,1), array("Wahlpflicht1",9,1), array("Wahlpflicht2",9,1), array("Wahlplicht Chemie",6,1), array("Projekt",6,1), array("Seminar",3,1), array("BacArbeit",12,3) ), "CIS_Physik_Bachelor" => array( array("SE1",6,1), array("SE2",6,1), array("Physik1",12,1), array("Physik2",12,1), array("Physikpraktikum",9,1), array("Theoretische Physik2",9,1), array("Mathe1",9,1), array("Mathe2",9,1), array("FGI1",9,1), array("Mathe3/FGI2",9,1), array("STO",9,1), array("Numerik",9,1), array("AD",6,1), array("GDB",6,1), array("CiS Physik",6,1), array("CiS-Prog",6,1), array("Wahlpflicht1",9,1), array("Wahlpflicht2",9,1), array("Wahlpflicht Physik",6,1), array("Projekt",6,1), array("Seminar",3,1), array("BacArbeit",12,3) ), "MCI_Bachelor" => array( array("SE1",6,1), array("SE2",3,1), array("SE3",6,1), array("GDB",6,1), array("FGI1",9,1), array("IKON",6,1), array("DM",9,1), array("EP",3,1), array("AP1",6,1), array("AP2",6,1), array("AuO",6,1), array("QM1",5,1), array("QM2",5,1), array("Soz-/BioP",6,1), array("Entw-/PaedagP",6,1), array("GWV",9,2), array("ID",9,2), array("MCI-Praktikum",3,1), array("Seminar",1.5,2), array("Projekt",4.5,2), array("Wahlbereich",33,1), array("BacArbeit",12,3) ), "SSE_Bachelor" => array(), "Informatik_Master" => array( array("FGI3",9,1), array("WahlPflicht1",9,1), array("WahlPflicht2",9,1), array("WahlPflicht3",9,1), array("Wahl1",6,1), array("Wahl2",6,1), array("Wahl3",6,1), array("Vertiefung1",6,1), array("Vertiefung2",6,1), array("Vertiefung3",6,1), array("Projekt",12,1), array("FreierWahlBereich",6,1), array("Masterarbeit",30,1), ), "Quellcode" => array() ); $studiengang = key($studiengaenge); //gibt den ersten key zurueck if(array_key_exists($_REQUEST["Studiengang"], $studiengaenge)){ $studiengang = $_REQUEST["Studiengang"]; } if($studiengang == "Quellcode") { header("Content-Disposition: attachment; filename=calc.php"); header("Content-Type: text/php; charset=utf-8"); $str = file_get_contents(__FILE__); echo $str; exit; } $faecher = $studiengaenge[$studiengang]; $str.="<html><body>\n<form target=\".$_SERVER[PHP_SELF].\" method=\"GET\">\n"; $str.=" <table>\n <tr><td colspan=4>\n"; $str.=" <select name=\"Studiengang\">\n"; foreach($studiengaenge as $studg => $null){ if($studiengang == $studg){ $str.=" <option selected>$studg</option>\n"; } else { $str.=" <option>$studg</option>\n"; } } $str.=" </select>\n </td><td>\n <input type=submit name=submit value=calc>\n </td></tr>\n"; $str.=" <tr><th>Fach</th><th>Note</th><th>LP</th><th>Faktor</th><th>Gewicht</th></tr>\n"; $total_gewicht=0; for($i=0; $faecher[$i] ; $i++){ $total_gewicht += $faecher[$i][1] * $faecher[$i][2]; } if(count($faecher) == 0){ $str.=" <tr><td colspan=5>\n"; $str.=" <i>Für diesen Studiengang wurden noch keine Module,<br />\n"; $str.=" Leistungspunkte und Gewichtungen eingetragen.<br />\n"; $str.=" Du kannst die Daten raussuchen und im <a href=\"https://www.fb18.de/mybb/showthread.php?tid=9878\">fb18</a> posten.</i>\n"; $str.=" </td></tr>\n"; } for($i=0; $faecher[$i] ; $i++) { $preset = 0; if(array_key_exists($faecher[$i][0], $_REQUEST)){ $preset = str_replace(",", ".", $_REQUEST[$faecher[$i][0]]); } $lp = $faecher[$i][1]; $faktor = $faecher[$i][2]; $gewicht = ($faktor * $lp); $str.=" <tr><td>".$faecher[$i][0]."</td><td><input name='".$faecher[$i][0]."' size='2' value='".$preset."'></td><td align=right>$lp</td><td align=right>$faktor</td><td align=right>$gewicht/$total_gewicht</td></tr>\n"; } //$str.=" <tr><td colspan=3><input type=submit name=submit value=calc></td></tr>\n"; $grenzen = calc_range($faecher, $_REQUEST); $str.=" <tr><td colspan=3>Beste moegliche Note</td><td align=right>".$grenzen['obere']."</td><td rowspan=3><input type=submit name=submit value=calc></td></tr>\n"; $str.=" <tr><td colspan=3>Schlechteste moegliche Note</td><td align=right>".$grenzen['untere']."</td></tr>\n"; $str.=" <tr><td colspan=3>Laufende Note</td><td align=right>".$grenzen['laufend']."</td></tr>\n"; $str.=" <tr><td colspan=5 align=center>[alle angaben - wie immer - ohne gewähr - feher<!--sic--></td></tr>\n"; $str.=" <tr><td colspan=5 align=center>und änderungswünsche kannst du im <a href=\"https://www.fb18.de/mybb/showthread.php?tid=9878\">fb18</a> posten]</td></tr>\n"; $str.=" </table>\n</form>\n</body></html>"; echo $str; function calc_range($faecher, $notes) { $gNotenBekannt=0; $gGewichtBekannt=0; $gesamtGewicht=0; for($i=0;$faecher[$i];$i++) { $gesamtGewicht+=($faecher[$i][1]*$faecher[$i][2]); $note = str_replace(",", ".", $notes[$faecher[$i][0]]); if($note>0) { $gNotenBekannt+=($note*$faecher[$i][1]*$faecher[$i][2]); $gGewichtBekannt+=($faecher[$i][1]*$faecher[$i][2]); } } $grenzen=array( obere=>0, untere=>0, laufend=>0 ); if($gesamtGewicht != 0){ $grenzen['obere']=round(($gNotenBekannt+($gesamtGewicht-$gGewichtBekannt)*1)/$gesamtGewicht, 2); $grenzen['untere']=round(($gNotenBekannt+($gesamtGewicht-$gGewichtBekannt)*4)/$gesamtGewicht, 2); } if($gGewichtBekannt != 0){ $grenzen['laufend']=round($gNotenBekannt/$gGewichtBekannt, 2); } //print_r($grenzen); //echo $gNotenBekannt.';'.$gGewichtBekannt.';'.$gesamtGewicht; return $grenzen; }