Notenberechnung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Muelli (Diskussion | Beiträge) (+ Calc) |
K (Bot: Kosmetische Änderungen) |
||
Zeile 52: | Zeile 52: | ||
=== Implementierung === | === Implementierung === | ||
====Calc==== | ==== Calc ==== | ||
Ein Spreadsheet mit einem Chart, dass die Spreizung der moeglichen Note zeigt, gibt es hier: [[ | Ein Spreadsheet mit einem Chart, dass die Spreizung der moeglichen Note zeigt, gibt es hier: [[Medium:DPO98-Noten-Chart.ods]] | ||
==== Perl ==== | ==== Perl ==== | ||
<code> | <code> | ||
Zeile 350: | Zeile 350: | ||
if(count($faecher) == 0){ | if(count($faecher) == 0){ | ||
$str.=" <tr><td colspan=5>\n"; | $str.=" <tr><td colspan=5>\n"; | ||
$str.=" <i> | $str.=" <i>Für diesen Studiengang wurden noch keine Module,<br />\n"; | ||
$str.=" Leistungspunkte und Gewichtungen eingetragen.<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.=" Du kannst die Daten raussuchen und im <a href=\"https://www.fb18.de/mybb/showthread.php?tid=9878\">fb18</a> posten.</i>\n"; | ||
Zeile 374: | Zeile 374: | ||
$str.=" <tr><td colspan=3>Schlechteste moegliche Note</td><td align=right>".$grenzen['untere']."</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=3>Laufende Note</td><td align=right>".$grenzen['laufend']."</td></tr>\n"; | ||
$str.=" <tr><td colspan=5 align=center>[alle angaben - wie immer - ohne | $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 | $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>"; | $str.=" </table>\n</form>\n</body></html>"; | ||
Zeile 416: | Zeile 416: | ||
=== Implementierung === | === Implementierung === | ||
*Quelle: https://www.fb18.de/mybb/showthread.php?tid=9878 | * Quelle: https://www.fb18.de/mybb/showthread.php?tid=9878 | ||
*Online: http://ebase.dyndns.info/calc.php | * Online: http://ebase.dyndns.info/calc.php |
Aktuelle Version vom 8. Juni 2012, 17:35 Uhr
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; }