Merhaba arkadaşlar. Matlabde kutulama problemi çözümü ödevim var. Günde 12 saat çalışan bir atölye var. Elimizde ise 14 tane bölünemeyen işler ve bunları süreleri var. Benim sorum şu. 14 e 14 bir matris oluşturmak istiyorum. Bu matrisin satırı günler(14 gün) sütunu ise işlerin büyükten küçüğe ( işlerin sürelerine göre) sıralanması ile oluşacak. Örneğin 1.gün 1. iş ve 8.işin toplamı 12 olsun. Bunlara 1 diğerlerine 0 atamam gerekiyor. Bu işlemi de diğer iş ve günler için de yapmalıyım. Kullanıcının gireceği vektöre göre bunu nasıl yapabilirim? Kodları oluşturmamda bana yardımcı olabilir misiniz?
Yani anladığım kadarı ile mesela elinde farklı değerlerde 14 tane sayı var, ve sen bu sayıların toplamının 12 yapan kombinasyonlarını bulmak istiyorsun?
Elimizde 14 tane işimiz var ve bunların bitirme süreleri var.Bu işler bölünemez başlanıldığı zaman bitirilmeli.
1.gün 2.gün ….
9 1 0
8 0 1
3 1 0
2 0 1
2 0 1 örneğin elimizde bu işler olsun ve günlük çalışma süresi 12 saat 1.gün 12 saati tamamlamak için 9 ve 3 ü 2.gün 12 saati tamamlamak için 8 2 ve 2 yi seçtik. Girilen vektörün böyle bir matrise dönüştürülmesi gerekiyor. Bunu yazdırmam için ne yapmam gerekir?
Kullanıcı girdi olarak işlerin bitirme sürelerini girecek, ve daha sonra her bir gün için bu kullanıcı girdilerinden toplamı 12 edenler bulunup bunlar 1 olarak işaretlenecek. Öncelikle bunun yapılabilmesi için bütün girdilerin toplama kombinasyonlarının hesaplanması gerekiyor.
Aşağıdaki 4 farklı işe ait saatleri girdim. daha sonra bunların hangilerinin toplamının 12 yaptığını görmek için 20 iterasyon rastgele döndü döndürdüm. Sonuç olarak 8+4=12'yi veren [0 0 1 1] vektörünü elde edebildim.
Seçici matrisim rastgele oluşturulduğu için yakınsaması (converge) için iterasyon sayırını arttırman gerekebilir.
clc; clear all; Saatler = [1 7 8 4];
for k=1:20;
Secici = randi([0 1], 1,length(Saatler));
Sonuc = Saatler.*Secici;
[adinserter block="2"]
ToplamSaat = sum(Sonuc);
if ToplamSaat==12
Secici
ToplamSaat
else
continue
end
end
14 e 14 lük matris yapmam gerekiyor ve işlerin 5 günde bitmesi lazım. m=input('Vektörü Giriniz:') [a,b]=size(m); ile kullanıcıdan vektör alıp n=sort(m,'descend') komutuyla bu vektörü büyükten küçüğe sıraladıktan sonra 14*14 lük matrisi nasıl yapabilirim? Mantık olarak en büyük değeri alıp 12 ye tamamlayan değer ile toplamam gerekiyor. Sonra bunu en büyük 2.iş için ve devamı için yapmam gerekiyor.
Aşağıda 1 gün için 4 farklı işe ait saatleri göz önünde bulundurarak bir kod oluşturdum. Bu kod öncelikle verilen saatler arasında en büyük saati seçiyor ve 12 saate tamamlamak için gereken saat sayısını hesaplayarak verilen saat havuzunda olup olmadığına bakıyor. En son olarak da bu saatleri tabloya yazıyor.
Önemli:Kod sadece 2 saat için yazıldı, verilen kod havuzunda verilen en büyük sayının 12'ye yine havuzda bulunan bir sayı ile tamamlanması gerekiyor.
Umarım kodu düzenleyerek istediğin sonuca ulaşabilirsin. Kod üzerine de açıklamalar yazdım.
clc; clear all; Saatler = [1 7 8 4]; %Girilen saatler BirinciSaat=max(Saatler); %İlk saat olarak en büyüğü aldık IkinciSaat=12-BirinciSaat; %İkinci saakin kaç olabileceğini bulduk
find(Saatler==IkinciSaat); %İkinci saatimiz girilen saatler içerisinde var mı?
BirinciSaatKonum=find(Saatler==BirinciSaat); %Birinci saatimiz verilen saatler içerisinde hangi element
IkinciSaatKonum=find(Saatler==IkinciSaat); %İkinci saatimiz verilen saatler içerisinde hangi element
Tablo= zeros(1,4); %Tablo oluştur
Tablo(1,BirinciSaatKonum)=1; %Birinci elementi işaretle
Tablo(1,IkinciSaatKonum)=1; %İkinci elemente işaretle
Tablo %Tabloyu tekrar ekrana bastır