Soru sorMatlab if Komutu Hakkında
mehmetali tarafından 8 yıl önce soruldu

Arkadaşlar merhaba matlabde kullanıcıdan vektör aldıktan sonra bunu büyükten küçüğe sıraladım sonra bu sıralanan vektörün ilk elemanını alarak ve 12 ye tamamlayan diğer ilk elemanıyla birlikte 1.gün olarak ekrana yazdırmam gerekiyor. Sonra bu vektörün 2.elemanını alarak 12 ye tamamlayan diğer ilk elemanıyla birlikte 2.gün olarak ekrana yazdırmam gerekiyor. Böyle böyle tüm 2 li 12 ye tamamlayan elemanları ekrana 1.gün 2.gün 3.gün… diye yazdırmam gerekiyor. Bunu if komutuyla yapmayı denedim ama hata aldım.Şöyle bir kod yazdım

m=input('vektörü giriniz')
 [a,b]=size(m);
 n=sort(m'descend')
 if n(1,1)+n(1,j)=12
 disp('1.gün=','n(1,1)+n(1,j)')
 end

buna benzer kodla denedim ama olmadı nerede hata yapıyorum yardımcı olabilir misiniz? Nasıl kod yazmam gerekiyor?

4 Cevap
sayginer Yönetici tarafından 8 yıl önce cevaplandı

Aşağıdaki basamakları izleyebilirsin:
1. Girdi vektörünü sırala:

n=sort(m,'descend');

2. Girdi vektörünün en büyük elementini bul (sırladağın için ilk element olacak).
NOT: Bunun yerine max(n) ile en büyük elementi de seçebilirsin aynı şey olacaklar.

BirinciSaat=n(1,1);

3. İkinci saat olarak bana ne lazım olduğunu bulurum:

IkinciSaat=12-BirinciSaat;

[adinserter block="2"]
4. Bulunan Saatleri ekrana yazalım:

BulunanSaatler = [BirinciSaat IknciSaat]

5. Bana gereken iki saati de bulduğuma göre bunların değerine 0 atayayım ki bir daha seçilmesinler,

BirinciSaatKonum = find(n==BirinciSaat);
IkinciSaatKonum = find(n==IkinciSaat);

n(1,BirinciSaatKonum) = 0;
n(1,IkinciSaatKonum) = 0;

6. Bir sonraki step için vektörü tekrar sıralayalım:

n=sort(n'descend');

Devamı 2 basamaktan sonrası gibi devam edecek. Tabi ki bütün kodu ard arda yazmamak için while veya for döngülerinden bir tanesini kullanabilirsin.

mehmetali tarafından 8 yıl önce cevaplandı

Bu komutları for döngüsüyle 1 den 14 e kadar ( vektörün elemanları kadar) döndürdüm ama ilk aşamadan sonra 0+12 yazdı diğer aşamalarda. Soruya göre ilk uyan saati almalıyım. Yani 1. elemandan sonra 12 ye tamamlayıp ilk uyan elemanı 2.elemandan sonra 12 ye tamamlayan ilk elemanları alarak yapılması gerekiyor. Bu işlemi diğer elemanlar içinde yapılıp 5 basamakta tamamlanması gerekiyor.

mehmetali tarafından 8 yıl önce cevaplandı

Komutlarda birinci saat yerine üçüncü saat yazıp ikinci saat yerine dördüncü saat yazıp çalıştırdığımda ekrana ilk iki aşamayı doğru şekilde yazıyor ama ben bunu for döngüsüyle nasıl yapabilirim?

sayginer Yönetici tarafından 8 yıl önce cevaplandı

Aşağıdaki kod ile uzunluğu 14 olan bir vektörün 12'ye tamamlayan kodunu bulabilirsin. Ancak yazdığım kod maksimum 3 farklı sayıyı toplayarak 12'ye tamamlıyor. 5. basamakta 4 sayı gerekecek. Bunu yapmak için de koda bakarak bir if/else döngüsü daha ekleyebilirsin.

clc; clear all;

m=[3 2 3 2 1 1 3 5 9 8 7 1 8 7]

n=sort(m,'descend')

for a=1:5;
fprintf('Iterasyon : %d ',a);
for i=a+1:length(n)
Toplam = n(a) + n(i);
if Toplam == 12
[n(a) n(i)]
n(a) = 0;
n(i) = 0;
n;

break
else if Toplam<12
for j=i+1:length(n)

Toplam = n(a) + n(i) + n(j);

if Toplam == 12
[n(a) n(i) n(j)]

n(a) = 0;
n(i) = 0;
n(j) = 0;
n;

else
continue
end

break
end
end

end
end
end