Bearbeiten von „Notenberechnung

Zur Navigation springen Zur Suche springen

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
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
* Theoetische Informatik
* Schwerpunkt
* Schwerpunkt
* Ergänzungsfach
* Ergänzungsfach
Zeile 13: Zeile 11:
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 42: Zeile 40:
* 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 51: Zeile 48:




=== 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 78: Zeile 71:
  );
  );
   
   
  print "$endnote (".('ausgezeichnet','sehr gut','gut','befriedigend','ausreichend')[int((int((int($endnote * 10) - 6) / 5) * 3 + 4) / 5)].")\n";
  print "$endnote\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

Bitte beachte, dass alle Beiträge zu Fachschaft_Informatik von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können. Reiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränkung geändert werden können.

Du bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast (weitere Einzelheiten unter Fachschaft Informatik:Urheberrechte). ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!

Bitte beantworte die folgende Frage, um diese Seite bearbeiten zu können (<a href="/Fachschaft/wiki/index.php?title=Special:Captcha/help" class="internal">weitere Informationen</a>):

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)