Soru sorKontenjana göre öğrenci yerleştirme algoritması
emreolmez tarafından 7 yıl önce soruldu

30 Bölüm var her bölümün de bir kontejyanı var.Ben bu bilgilerin hepsini excel dosyasından aldım.Başarı sıralamasına göre öğrencileri yerleştirmem lazım ve kontejyanı azaltmam lazım.Kontejyanı nasıl azaltabilirim bir türlü bulamadım.Yardımcı olabilirseniz çok sevinirim
İyi akşamlar.

5 Cevap
hakkans Yönetici tarafından 7 yıl önce cevaplandı

Kontenjanı azaltmak derken kast ettiğiniz tam olarak nedir açıklayabilirseniz yardımcı olmaya çalışalım.

emreolmez tarafından 7 yıl önce cevaplandı

her bölümün ayrı ayrı kontejyanı var mesela ben iki for açtım iç içe 2000 kişi var ilk for da ikinci for da 10 tane tercih var her öğrenci için bir tercihi geçerli olacak ve üniversiteye yerleşince o bölümün kontejyanı bir kişi azaltıcak.Ben excel dosyasından her öğrencinin bilgilerini aldım. Başarı sırasına göre sıraladım.Tahminimce bir değişken tutup iki for un içinde o değişkeni azaltmam lazım.(iki for un içinde yeni

 ID(i,1)=Republic(i,1);
 result(i,2)=Republic(i,2);
 ranked(i,3)=Republic(i,3);

şu şekilde tanımlamaları da yaptım

hakkans Yönetici tarafından 7 yıl önce cevaplandı

Döngü öncesinde capacity isminde 30×1'lik bir vektör tanımlayın. Anladığım kadarıyla kodunuz öğrencinin kaçıncı üniversiteye yerleştiğini tutuyor. Öğrenci yerleştirmesini yaptığınızda, yerleştiği üniversite k numaralı üniversite olsun. O zaman şu şekilde bir güncelleme yapmanız lazım.

capacity(k)=capacity(k)+1;

Böyle yaptığınız takdirde kayıtlı öğrenci sayısını eski değerinin bir üstüne çıkarırsınız.
Üniversitelerin farklı kontenjanları varsa, bunu yine 30×1'lik bir kont vektöründe tutabilirsiniz. if capacity(k)<kont(k)  gibi bir şart koyarsanız da o üniversite için capacity değerinin o üniversitenin kontenjanından az olup olmadığını kaydedebilirsiniz. Böylece kontenjanın üstünde kayıt yapılmamış olur.

emreolmez tarafından 7 yıl önce cevaplandı

Bu arada ilginiz için çok teşekkür ederim.Devam edeyim ben

 clc;
clear;
NaN=0;
Republic=xlsread('OSS.xlsx');
Republic(1,:)=[];
 Republic=sortrows(Republic,2,{'descend'}');
[NUM,TXT,RAW]=xlsread('OSS.xlsx','Universities');
 SortedRepublic = Republic(1:end,:);
 A=cell2mat(RAW(2:end,[1 3]));
 ID=zeros(2000,3);
result=zeros(2000,3);
ranked=zeros(2000,3);
 Republic(isnan(Republic))=0;
for i=1:2000
 PreferenceMatrix=Republic(i,3:end);
 for j=1:10
 if A(i,2)>0

ID(i,1)=Republic(i,1);
 result(i,2)=Republic(i,2);
 ranked(i,3)=Republic(i,3);
 capacity(A)=capacity(A)-1;
 A(i,2)=A(i,2)-1;

end

end

end

yazdığım kod bu şekilde ve dediğinizi ekledim kontenjanı azaltmam gerektiği için -1 olarak yaptım.Undefine function hatası veriyor kod şuan. En yüksek puanlı öğrenciden başlayıp nereyi tercih ettiyse oraya yerleşicek ve yerleştiği bölümün kontenjanı azalıcak bu kadar aslında.Sanırım sadece azaltma fonksiyonumu kaldıda

hakkans Yönetici tarafından 7 yıl önce cevaplandı

Undefined function demesinin sebebi capacity vektörünü önceden tanımlamamanız. capacity'i önceden tanımlamanız gerekir ki bunu tanımsız olarak algılamasın.

capacity=zeros(30,1);

komutu ile 30×1'lik ve sıfırlardan oluşan bir vektör tanımlayabilirsiniz.