Notenberechnung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: 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-Syst...) |
K (Bot: Kosmetische Änderungen) |
||
(7 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Diplom == | |||
=== Beschreibung === | |||
Für Diplomer berechnet sich die Endnote wie folgt: | Für Diplomer berechnet sich die Endnote wie folgt: | ||
Es gibt insgesamt 5 Prüfungen, die zu gleichen Teilen in die Endnote einfließen: | Es gibt insgesamt 5 Prüfungen, die zu gleichen Teilen in die Endnote einfließen: | ||
* Grundlagen von Informatik-Systemen | * Grundlagen von Informatik-Systemen | ||
* | * Theoretische Informatik | ||
* Schwerpunkt | * Schwerpunkt | ||
* Ergänzungsfach | * Ergänzungsfach | ||
Zeile 11: | Zeile 13: | ||
Dasselbe Verfahren kommt für die Berechnung der Endnote zur Anwendung. | Dasselbe Verfahren kommt für die Berechnung der Endnote zur Anwendung. | ||
Beispiel | === Beispiel === | ||
* Grundlagen von Informatiksystemen | * Grundlagen von Informatiksystemen | ||
** Technische Informatik - DKR - 2.3 | ** Technische Informatik - DKR - 2.3 | ||
Zeile 40: | Zeile 42: | ||
* Endnote (2.6 + 1.9 + 2.3 + 3.1 + 1.8) / 5 = 11.7/5 = 2.34000 = 2.3 | * Endnote (2.6 + 1.9 + 2.3 + 3.1 + 1.8) / 5 = 11.7/5 = 2.34000 = 2.3 | ||
=== Textform === | |||
Am Ende wird diese numerische Endnote noch in Textform übersetzt: | Am Ende wird diese numerische Endnote noch in Textform übersetzt: | ||
* 1.0 bis 1.0 - ausgezeichnet | * 1.0 bis 1.0 - ausgezeichnet | ||
Zeile 48: | Zeile 51: | ||
Implementierung: | === Implementierung === | ||
==== Calc ==== | |||
Ein Spreadsheet mit einem Chart, dass die Spreizung der moeglichen Note zeigt, gibt es hier: [[Medium:DPO98-Noten-Chart.ods]] | |||
==== Perl ==== | |||
<code> | <code> | ||
#!/usr/bin/perl | #!/usr/bin/perl | ||
Zeile 71: | Zeile 78: | ||
); | ); | ||
print "$endnote\n"; | print "$endnote (".('ausgezeichnet','sehr gut','gut','befriedigend','ausreichend')[int((int((int($endnote * 10) - 6) / 5) * 3 + 4) / 5)].")\n"; | ||
</code> | </code> | ||
==== Python ==== | |||
<pre> | |||
#!/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) | |||
</pre> | |||
== Bachelor == | |||
=== Beschreibung === | |||
FIXME! | |||
=== Beispiel === | |||
==== PHP ==== | |||
<pre> | |||
<?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; | |||
} | |||
</pre> | |||
=== Implementierung === | |||
* Quelle: https://www.fb18.de/mybb/showthread.php?tid=9878 | |||
* 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; }