Einführung in das Programmieren mit DELPHI  

18. Mandatsverteilung nach D'Hondt

Bei der Mandatsverteilung nach D'Hondt erhält die Partei mit der höchsten Stimmenzahl das erste Mandat, deshalb der Name Höchstzahlverfahren. Danach wird ihre Stimmenzahl durch zwei dividiert und sie wird mit dieser Zahl bei der Bestimmung des nächsten Mandats mit den anderen Parteien verglichen. Nach dem zweiten Mandat einer Partei wird ihre Stimmenzahl durch drei, nach dem dritten durch vier usw. dividiert.

Unser Programm verwendet zwei Arrays Stimmen und Teiler und als Indextyp einen selbstdefinierten Typ TPartei.
type
  TPartei = (CDU,SPD,GRN,FDP,LNK,REP,SON);

var
  Stimmen : array[CDU..SON] of integer;
                                           
  Teiler : array[CDU..SON] of integer; 
 

Zu Beginn hat jede Partei den Stimmenteiler 1, der mit jedem Mandat um 1 erhöht wird. Zum Schluss ist daher der Stimmenteiler um 1 höher als die Zahl der Mandate einer Partei.

type
  TPartei = (CDU,SPD,GRN,FDP,LNK,REP,SON);

var
  Form1: TForm1;
  Stimmen : array[CDU..SON] of integer;

  Summe : integer;

  Teiler : array[CDU..SON] of integer;

implementation

{$R *.dfm}

function TForm1.MaxTeiler: TPartei;
var p,m:TPartei;
begin
    m := CDU;
    for p:= CDU to SON do
        if  Stimmen[p]/Teiler[p] > Stimmen[m]/Teiler[m] then m:=p;
    result := m;
end;

procedure TForm1.Button1Click(Sender: TObject);
var p: TPartei;
    m: Integer;
begin
    { Initialisieren}
    Summe := 0;
    for p := CDU to SON do begin
        Summe := Summe + Stimmen[p];
        Teiler[p] := 1;
    end;

    { Verteilen }
    for m := 1 to StrToInt(Edit1.Text) do
        Inc(Teiler[MaxTeiler]);

    { Ausgeben }
    with StringGrid1 do
    for p := CDU to SON do begin
        Cells[2,Ord(p)+1] := Format('%4.2f %',[100*Stimmen[p]/Summe]);
        Cells[3,Ord(p)+1] := IntToStr(Teiler[p]-1);
    end;
end;

Die Zahlen sind von der Landtagswahl Baden-Württemberg 2006.  

Quelle: http://www.landtagswahl-baden-wuerttemberg.de


Aufgaben :

  1. Schreibe eine Funktion ParteiToStr, mit der die Werte des Typs TPartei in einen entsprechenden String umgewandelt werden, z.B GRN in 'Grüne'.

  2. Ändere das Programm so ab, dass Parteien, die die 5%-Hürde nicht schaffen, bei der Mandatsverteilung nicht berücksichtigt werden.

Lösung

© 2009 : Bernd Schultheiss