Merhaba, elimde bir adet soru var bunu size sormak istedim. Kolay gelsin.
Öncelikle, elimizde bir adet ana sayı olacak. Bu sayı örneğin 1.900.000 olabilir.
Bir sayı aralığı olacak, 1.200.000 - 1.900.000, diyelim.
Bunların dışında elimizde bir tane de sayı dizisi olacak.
Bu dizide sayılar 2 farklı değerde şekilde tutulacaklar, miktar ve oran olarak.
Örnek:
$dizi = [['miktar' => 1.600.000, 'oran' => 14], ['miktar' => 950.000, 'oran' => 12], ['miktar' => 1.500.000, 'oran' => 15]]
Gereken veriler bu kadar. Şimdi sistemin çalışma prensibine geçelim,
programın yapması gereken işlem, dizideki sayıları, sırayla ana sayıdan çıkartmak. Peki bu sıra neye göre belirlenecek ?
1. Öncelik, miktar'ın belirlenen aralıkta olması.
2. Öncelik, oran küçükse önceliklidir.
3. Öncelik, eğer oranları eşit iki sayı varsa miktarı büyük olan önceliklidir.
4. Öncelik, eğer hem oranı hem miktarı eşit sayılar varsa, hepsinden eşit miktarda alınır.
5. Durum, sayının miktarı belirtilen aralığın üzerindeyse siteme girmez, yok sayılır.
Ana sayı sıfırlandığında program son bulur ve sırası gelmeyen dizi elemanları önemsenmez.
Çalışma mantığı budur, hemen bir örnek dağıtımla durumu daha da açıklayayım.
Örnek Dağıtım:
Ana sayı = 5.900.000
Aralık = 900.000 - 3.500.000
dizi;
A) miktar = 840.000, oran = 16
B) miktar = 650.000, oran = 16
C) miktar = 650.000, oran = 16
D) miktar = 2.650.000, oran = 18
E) miktar = 4.000.000, oran = 14
F) miktar = 1.000.000, oran = 15
G) miktar = 1.000.000, oran = 15
H) miktar = 800.000, oran = 17
Dizinin PHP kodu hali,
$dizi = [
['miktar' => 840.000 , 'oran' => 16],
['miktar' => 650.000 , 'oran' => 16],
['miktar' => 650.000 , 'oran' => 16],
['miktar' => 2.650.000 , 'oran' => 18],
['miktar' => 4.000.000 , 'oran' => 14],
['miktar' => 1.000.000 , 'oran' => 15],
['miktar' => 1.000.000 , 'oran' => 15],
['miktar' => 800.000 , 'oran' => 17]
];
Paylaşım şu şekilde olmalı;
A dan 840.000 alınacak
B den 205.000 alınacak
C den 205.000 alınacak
D den 2.650.000 alınacak
E den hiç alınmayacak
F den 1.000.000 alınacak
G den 1.000.000 alınacak
H den hiç alınmayacak
Ana sayı = 0 kalacak.
Not: E, sayı miktarı aralığın üstünde kaldığı için yok sayıldı. Daha sonra aralığa girenler arasında en düşük oranlı olan 1.000.000 miktarlı sayılar,F ve G eşit olarak paylaştılar. Aralığa giren 2.650.000 miktarlı sayı ise oranı diğerlerinden yüksek olduğu için 3. sırada 2.650.000 lik bir pay aldı. Aralıktaki sayılar bittiğine göre, aralığın altında kalanlar paylaştırılmalı. Aralığın üstü sadece yok sayılıyor. Altında kalanlar 2.öncelik olarak kalsa da paylaştırılmaya devam ediyor. Daha sonra, 3 tane sayı oranları eşit sayı görüyoruz. Bunlardan miktarı büyük olan 840.000 diğerlerinden öne geçip 840.000 lık bir pay alıyor.
5.900.000 - 1.000.000 - 1.000.000 - 2.650.000 - 840.000 = 410.000. Ana sayıdan 410.000 kaldı. Ana sayıdan çıkartma işlemi yaparken, ana sayının 0'ın altına düşmemesi gerek. Dolayısıyla B ve C 325.000, 325.000 şeklinde yarı yarıya değil, 205.000, 205.000 şeklinde yarı yarıya paylaştırıldı. H, ye ana sayıdan bir pay düşmediği için yok sayıldı.
Ve Ana sayı sıfırlandığı için program bitti.