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.
Kontenjanı azaltmak derken kast ettiğiniz tam olarak nedir açıklayabilirseniz yardımcı olmaya çalışalım.
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
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.
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
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.