Advertisement
cemtheman

D'Hondt Hesaplama

May 11th, 2023
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VisualBasic 3.14 KB | Source Code | 0 0
  1. Sub D_Hondt_Hesaplama()
  2.     Dim partiAdet As Integer
  3.     Dim partiOylar() As Double
  4.     Dim milletvekiliSayisi As Integer
  5.     Dim milletvekili() As Integer
  6.     Dim partiIsimleri() As String ' Yeni değişken
  7.    
  8.     partiAdet = 12 ' Parti sayısını buraya girin
  9.    
  10.     ' Excel tablosundan parti oy sayılarını alın
  11.    ReDim partiOylar(1 To partiAdet)
  12.     ReDim partiIsimleri(1 To partiAdet) ' Yeni dizi boyutunu ayarlayın
  13.    For i = 2 To partiAdet + 1 ' 2. satırdan başlayarak oy sayılarını ve isimlerini alır
  14.        partiOylar(i - 1) = Sheets("Sayfa1").Cells(i, 2).Value ' Oy sayılarının olduğu sütun numarasını buraya girin
  15.        partiIsimleri(i - 1) = Sheets("Sayfa1").Cells(i, 1).Value ' Parti isimlerinin olduğu sütun numarasını buraya girin
  16.    Next i
  17.    
  18.     milletvekiliSayisi = Sheets("Sayfa1").Cells(1, 7).Value ' Çıkarılacak toplam milletvekili sayısını tablodan alın
  19.    
  20.     ReDim milletvekili(1 To partiAdet)
  21.    
  22.     ' Tüm partilerin milletvekili sayısını başlangıçta sıfıra ayarlayın
  23.    For i = 1 To partiAdet
  24.         milletvekili(i) = 0
  25.     Next i
  26.    
  27.     For j = 1 To milletvekiliSayisi
  28.         Dim maxOy As Double
  29.         Dim maxIndex As Integer
  30.        
  31.         maxOy = 0
  32.         maxIndex = 0
  33.        
  34.         ' En fazla oy alan partiyi bulun
  35.        For i = 1 To partiAdet
  36.             If partiOylar(i) / (milletvekili(i) + 1) > maxOy Then
  37.                 maxOy = partiOylar(i) / (milletvekili(i) + 1)
  38.                 maxIndex = i
  39.             End If
  40.         Next i
  41.        
  42.         ' En fazla oy alan partiye bir milletvekili ekleyin
  43.        milletvekili(maxIndex) = milletvekili(maxIndex) + 1
  44.     Next j
  45.    
  46.     ' Sonuçları Excel tablosuna yazdırın
  47.    For i = 1 To partiAdet
  48.         Sheets("Sayfa1").Cells(i + 1, 4).Value = milletvekili(i) ' 4. sütuna yazdırır
  49.    Next i
  50.    
  51.    ' Sonuçları MsgBox ile gösterin
  52. Dim sonuc As String
  53. sonuc = "Bu oylara göre partilerin çıkarabilecekleri Milletvekili Sayıları:" & vbNewLine & vbNewLine
  54.  
  55. ' Parti isimleri ve milletvekili sayılarını bir diziye aktarın
  56. Dim sonucDizi() As Variant
  57. ReDim sonucDizi(1 To partiAdet, 1 To 2)
  58. For i = 1 To partiAdet
  59.     If milletvekili(i) > 0 Then ' Milletvekili sayısı 0'dan büyükse sonuçlara ekle
  60.        sonucDizi(i, 1) = partiIsimleri(i)
  61.         sonucDizi(i, 2) = milletvekili(i)
  62.     End If
  63. Next i
  64.  
  65. ' Milletvekili sayısına göre büyükten küçüğe sıralama yapın
  66. Dim temp As Variant
  67. For i = 1 To partiAdet - 1
  68.     For j = i + 1 To partiAdet
  69.         If sonucDizi(j, 2) > sonucDizi(i, 2) Then
  70.             ' Değerleri yer değiştirin
  71.            temp = sonucDizi(i, 1)
  72.             sonucDizi(i, 1) = sonucDizi(j, 1)
  73.             sonucDizi(j, 1) = temp
  74.             temp = sonucDizi(i, 2)
  75.             sonucDizi(i, 2) = sonucDizi(j, 2)
  76.             sonucDizi(j, 2) = temp
  77.         End If
  78.     Next j
  79. Next i
  80.  
  81. ' Sıralanmış sonuçları MsgBox ile gösterin
  82. For i = 1 To partiAdet
  83.     If Not IsEmpty(sonucDizi(i, 1)) Then
  84.         sonuc = sonuc & sonucDizi(i, 1) & ": " & sonucDizi(i, 2) & " milletvekili" & vbNewLine
  85.     End If
  86. Next i
  87.  
  88. MsgBox sonuc
  89.  
  90. End Sub
Tags: dHondt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement