Soru sorMatlabda 5 basamaklı sayılarla oyun yapma kodu
furkan.zkaya tarafından 5 yıl önce soruldu

8 Cevap
furkan.zkaya tarafından 5 yıl önce cevaplandı
sayginer Yönetici tarafından 5 yıl önce cevaplandı

Nerede takıldınız?

furkan.zkaya tarafından 5 yıl önce cevaplandı
clear all;
clc;
G=[];
T=[];
tahmin=0;
dogru=0;
yanlisyer=0;
gerceksayi=round(10000+89999*rand(1));
while tahmin ~= gerceksayi
tahmin=input ('tahmininizi giriniz');
for i=1:5
basamak=mod(gerceksayi,10);
gerceksayi=floor(gerceksayi/10);
basamak2=mod(tahmin,10);
tahmin=floor(tahmin/10);
B=[basamak];
TB=[basamak2];
G=[G;B];
T=[T;TB];
end
for i=1:5
if T(i)==G(i)
dogru=dogru+1;
end
for j=1:5
if T(i)==G(j)
yanlisyer=yanlisyer+1;%sayaç olarak düşünüp incelemeliyiz "yanlisyer"
end
end
end
fprintf(' %d + , %d - ',dogru,yanlisyer);
fprintf('LUTFEN BIR DAHA TAHMIN GIRINIZ \n\n');
end
fprintf('TEBRIKLER DOGRU SAYIYI BULDUNUZ');
furkan.zkaya tarafından 5 yıl önce cevaplandı

hatayı bulamadım uğraşıyorum hala

furkan.zkaya tarafından 5 yıl önce cevaplandı

Öneriniz nedir takıldığım yere dair?Teşekkürler şimdiden.

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

Ben soruyu tam olarak anlayamadım. Kodlayamadığınız kısmı veya mantığını anlatırsanız yardımcı olmaya çalışayım.

furkan.zkaya tarafından 5 yıl önce cevaplandı

Tahmini yaptırdıktan sonra yazdırılacak olan + kısımda hata yok fakat – olarak yazdırılacak kısımda hatalı oluyor. Kodu yazdırdığınızda anlaşılcaktır demek istediğim yer

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

Çözümünüzde birkaç hata mevcut. Öncelikle

for i=1:5
if T(i)==G(i)
dogru=dogru+1;
end
end
for j=1:5
if T(i)==G(j)
yanlisyer=yanlisyer+1;%sayaç olarak düşünüp incelemeliyiz "yanlisyer"
end
end

Kıyaslama kısmında bir end yanlış yerdeydi. İkinci olarak ise döngünün devam şartı tahmin=~gerceksayi ama hesaplama içinde bu sayıları basamakları elde etmek için böle böle ilerliyorsunuz. Kodun sonunda esas sayılar kalmıyor. Bu yüzden de iterasyon tekrar dönmeden çıkıyor. İçeride hesap yapacağınız sayıları şu şekilde ayrıca tanımlayın:
gerceksayihesap=gerceksayi;
tahminhesap=tahmin;

Bu kısmı tahmini aldıktan sonra gerçekleştirmeniz ve kodun geri kalanında bu gerceksayihesap ve tahminhesap değişkenleriyle hesap yapmanız gerekiyor.

Ayrıca yanlisyer hesabı yaparken

if T(i)==G(j)

şartını kullanıyorsunuz ki bu yanlış. Doğrusu T(j)==G(j) şeklinde olmalı.
Son olarak, eğer kodun yanlış tahmin üzerine tekrar tekrar çalışmasını istiyorsanız, clear G T dogru yanlisyer komutu ile eski tahminle alakalı değişkenleri while döngüsünün sonunda temizlemeniz gerekiyor.
TTemizleme yaptıktan sonra G ve T'yi baştan tanımlama gerekeceği için

G=[];
T=[];

satırlarını while döngüsünün içine, başa taşımanız gerekiyor.