X

تمرين .......كيف نحسب عدد المقاعد في الانتخابات

Collapse
  • تصفية
  • الوقت
  • عرض
مسح الكل
مشاركات جديدة
  • VIP
    • Nov 2018
    • 74

    السلام عليكم ورحمة الله وبركاته

    في اي بلد هناك انتخابات مهما كانت وهناك حسابات لحساب المقاعد اما في برلمان او بلديات او غيرها
    لناخذ مثلا الانتخابات البلدية ( الجزائر نموذح )

    كيف تحسب :
    ----------------------------------------------
    مثال على توزيع المقاعد


    يتم توزيع المقاعد بالتناسب حسب عدد الأصوات التي تحصلت عليها كل قائمة مع تطبيق قاعدة الباقي الأقوى. لا تؤخذ في الحسبان عند توزيع المقاعد القوائم التي لم تتحصل على 5% على الأقل من الأصوات المعبر عنها.

    و لتوضيح هذا التوزيع، نأخذ مثال عن دائرة انتخابية لها الحق في 4 مقاعد و التي سجلت مشاركة 5 قوائم في الاقتراع. بعد انتهاء التصويت، بلغ عدد الأصوات المعبر عنها 106800 صوتا موزعا كما يلي:


    - القائمة أ = 45.500

    - القائمة ب = 33.900

    - القائمة ج = 17.800

    - القائمة د = 6.400

    - القائمة هـ = 3.200




    يبلغ حد الخمسة بالمائة 5 % من الأصوات المعبر عنها، الذي لا يسمح بتوزيع المقاعد، في مثالنا هذا 5340. و بالتالي فإن القائمة هـ تجد نفسها مقصاة من هذا التوزيع.



    يتم توزيع المقاعد على القوائم الباقية على حسب المعامل الانتخابي الذي يتم حسابه كما يلي:


    الأصوات المعبر عنها (منقوصة أصوات القوائم التي تحصلت على أقل من 5 % من الأصوات المعبر عنها)


    ________________________________________________________
    المعامل الانتخابي =


    عدد المقاعد المطلوب شغلها

    في مثالنا، يساوي المعامل الانتخابي
    25900 =

    106800 - 3200


    ____________________
    =

    4



    و بهذا، فإن لكل جزء بلغ25900 صوتا الحق في مقعد.




    إذن، يتم التوزيع الأول للمقاعد على القوائم الخمسة المشاركة في الاقتراع كما يلي:



    - القائمة أ التي تحصلت على 45500 صوت تحوز على مقعد واحد و تحتفظ ببقية 19600 صوت.

    - القائمة ب المتحصلة على 33900 صوت تحوز على مقعد واحد و تحتفظ ببقية 8000 صوت.

    - القائمة ج المتحصلة على 17800 صوت لا تحوز على أي مقعد و تبقى محتفظة بـ 17800 صوت.

    - القائمة د المتحصلة على 6400 صوت لا تحوز على أي مقعد و تبقى محتفظة بـ 6400 صوت.

    - تقصى القائمة هـ لعدم استيفائها الحد الأدنى لـ 5 â„… من الأصوات المطلوبة المعبر عنها.


    يلي هذا التوزيع، توزيع ثان و يتمثل في التوزيع عن طريق التناقص لعدد المقاعد المتبقية على القوائم المتحصلة على أقوى نسبة باقية من الأصوات.


    و بهذا نتحصل على:



    - القائمة أ : 19600 صوت

    - القائمة ج : 17800 صوت

    - القائمة ب : 8000 صوت

    - القائمة د : 6400 صوت


    بالنظر إلى أنه بقي من التوزيع الأول مقعدان للتوزيع، تحوز القوائم أ و ج بالتالي كلاهما على مقعد لتحصلهما على أقوى عدد من الأصوات الباقية.



    يكون التوزيع النهائي للأصوات في مثالنا كالتالي:



    - القائمة أ = 1+1 = 2

    - القائمة ب = 1

    - القائمة ج = 1

    - القائمة د = 0
    بالنسبة لنسبة المرأة في المقاعد فهي ثلث المقاعد ......و اذا كان مقعدين فلها مفعد اليا
    -----------------------------------------

    ضعوا في مشروعكم غريد
    و نريد كود يحسب ما سبق

    بالتوفيق
  • المسؤول الفني
    • Sep 2018
    • 19182

    #2
    يتبع:
    المشاركة الأصلية بواسطة عبد الهادي بهاب
    ملف مفتوح

    وبالمرفقات
    --------------------
    ننتظر الكود في زر حساب المقاعد
    ---------------

    الملفات المرفقة
  • المسؤول الفني
    • Sep 2018
    • 19182

    #3
    يتبع:
    المشاركة الأصلية بواسطة عبد الهادي بهاب
    اولا القانون الجديد ينص على 7 بالمائة تعتبر قائمة مقصبة بدلا من 5 بالمائة سابقا
    ثانيا نضيف paragraph1 لعرض الثائمة الناجحة
    ثالثا نضيف paragraph2 للوائم المقصية عوض label...par
    في زر عدد المقاعد


    PHP Code:
    som 0;
    Label.SetText("par""")
    Ns  tonumber(Input.GetText("Input2"));
    max tonumber(Input.GetText("Np"));
    ---------
    sommme ------------------
    for 
    i=1,max do
     if 
    Grid.GetCellText("Grid1",i,2) == "" then
     n1 
    ;
     
    Grid.SetCellText("Grid1",,0);
     else
    n1 tonumber(Grid.GetCellText("Grid1",i,2));
    end
    som 
    som n1;
    end
    Label
    .SetText("Nsom"som);

    -------------- 
    pourcentage ------------
    gani={};
    for 
    i=1,max do
    n1 tonumber(Grid.GetCellText("Grid1",i,2)); gani[i] = n1;
    Math.Round(n1*100/som,2);
    Grid.SetCellText("Grid1",,p);
    end

    ------------ 7liste eliminiée -------------

    min *som 100 ;
    par ={}; d=1;
    for 
    i=1,max do
    ng tonumber(Grid.GetCellText("Grid1",i,2));
    part Grid.GetCellText("Grid1",i,1);
      if 
    ng min then
      par
    [d] =  part;
      else 
    Table.Remove(par,i);
      
    end d=d+1;
    end

    igli 
    ="";
    for 
    i,n in pairs(par) do
    igli igli .." - " ..n
    end
    Paragraph
    .SetText("Paragraph2"igli)
    ------------ 
    nouveau somme -------------

    for 
    i=1,max do
    n1 tonumber(Grid.GetCellText("Grid1",i,2));
      if 
    n1 min then
      som 
    som n1 ;
      
    end
    end


    Label
    .SetText("safi"som);
    ref Math.Floor(som Ns);
    Label.SetText("ref"ref);
    gh={};
    for 
    i=1,max do
    n1 tonumber(Grid.GetCellText("Grid1",i,2));
    part Grid.GetCellText("Grid1",i,1);
    num Math.Floorn1 ref) ;
    Grid.SetCellText("Grid1",,num);
    Grid.SetCellText("Grid1",,num);
    res n1 - (num ref);
     if 
    n1 min then
     Grid
    .SetCellText("Grid1",,0);
     
    res ;
     
    end
    Grid
    .SetCellText("Grid1",,res);
    gh[i] = res;
    end

    Table
    .Sort(ganinil); Table.Count(gani);
    for 
    i=1,max do
    nn tonumber(Grid.GetCellText("Grid1"i2));
      if 
    nn == gani[vthen
    part 
    Grid.GetCellText("Grid1"i1);
    Paragraph.SetText("Paragraph1",part.. " أ‡أ،أ*أ‡أ†أ£أ‰ أ‡أ،أٹأ* أ*أ‡أ’أٹ أˆأ‘أ†أ‡أ“أ‰ أ‡أ،أ£أŒأ،أ“ أ‡أ،أ”أڑأˆأ* أ‡أ،أˆأ،أڈأ* أ¥أ* ") break
    end
    end
    ------------------
    Table.Sort(ghnil);
    for 
    i1,max do
    --------------
    repeat
    Nsig 
    0;

    for 
    i=1,max do
    num tonumber(Grid.GetCellText("Grid1",i,6));
    Nsig Nsig num ;
    end


    ------sige reste--------
    if 
    Nsig Ns then
    for i=1,max do
    n1 =  tonumber(Grid.GetCellText("Grid1",i,5));
    num tonumber(Grid.GetCellText("Grid1",i,6));
      if 
    n1 == gh[#gh] then num = num+1;
      
    Grid.SetCellText("Grid1",,num);
      
    gh[i] = 0;
      
    Nsig Nsig+1;
       
    SF Math.Floor(num /3);
        if 
    num == 2 then SF 1 end  
        Grid
    .SetCellText("Grid1",,SF);
     
      else
      
    Grid.SetCellText("Grid1",,num);
       
    SF Math.Floor(num /3);
        if 
    num == 2 then SF 1 end  
        Grid
    .SetCellText("Grid1",,SF);
      
    end
    end
    end
    -----------------
    until Nsig >= Ns;
    end 
  • المسؤول الفني
    • Sep 2018
    • 19182

    #4
    يتبع:
    المشاركة الأصلية بواسطة عبد الهادي بهاب
    التطبيق للمشروع




    او

Working...
X