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');
Ben soruyu tam olarak anlayamadım. Kodlayamadığınız kısmı veya mantığını anlatırsanız yardımcı olmaya çalışayım.
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
Çö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.