Sevgili arkadaşlar ilk yazımdan önce herkese selam.
Benim dig komutu ile başım dertte.
Sorun komutun anlatıldığı gibi çalışmaması.
sayi=245
sonuc=sayi DIG 1
sonuc=4 olmalı
ama olmuyor alakasız sonuclar veriyor.
Bunun kullanımı help te ve kitaplarda bu şekilde olmasına rağmen neden çalışmaz
benim onlar yüzler ya da birler basamağını rakam olarak seçme şansım başka ne şekilde olabilir.
Yardımcı olursanız sevinirim.
Selam sevgi ve saygıyla...
DIG komutunu denemedim ama daha uzun bir yöntem istersen şöyle yapabilirsin
Sayi = 254
1ler basmagı -> Sayı mod 10
10 lar basmagı -> (Sayı mod 100) div 10
100 ler basmağı (sayı mod 1000) div 100
1000 ler basmağı (sayı mod 10000) div 1000
diye gidiyor...
Aslında parantezlere de ihtiyacın yok kolay okunması açısından koyarsan iyi olur.
Picbasic te mod ve div komutları aynımıydı hatırlamıyorum ona göre değiştirebilirsin...
mod ve div komutları hakkında picbasic pro komutları içinde hiçbir bilgi bulamadım.
Sanırım farklı bir programlama dilinden bahsediyoruz.
Bunları picbasic pro ile halletmeliyim.
İlginizden dolayı teşekküreder , yardımlarınızı beklerim..
Pic basicde arkadaşın yazdığı mod aritmetiği. Kısaca şöyle anlatayım. Örneğin 254 sayısında 2.digit olan 5 i bulmak istiyorsun. İlk önce 254 sayısını 10' böl.
değişken1=254/10 sonuç tam sayı cinsinden 25 çıkacaktır. değişken1=25 , Bu değerin 10 a bölümünden kalan sonuç 2.digit olan 5 sayısıdır. Yani; değişken2=değişken1//10 umarım yardımcı olmuşumdur. Hepinize iyi çalışmalar.
mhk arkadaşa teşekkürler
yani div yerine /
mod yerine // kullanacaksın...
div : tamsayı bölme
mod : bölme sonucu kalanı bulma
örneğin 89 div 10 veya picbasicte 89 / 10 : 8 e eşittir
örneğin 89 mod 10 veya picbasicte 89 // 10 : 9 a eşittir
Yardımlarınız için teşekkür.
Dig komutu editorden 16f877 seçildiğinde çalışıyor.
(ama 84a da çalışmıyor )
LCD ye yazdırıyorum.
İlginç tarafı lcd 16f84 e bağlı.
877 için yazılan kod proteusta simüle edildiğinde çalışıyor.
gerçekte deneme şansım olmadı (lcd çok pahalı)
böyle bir kod gerçekte çalışırmı?
Zaten sana yazdıklarımız bir şekilde uygulamış olduğumuz sonuçlardır. Çalışacağından emin olabilirsin. Pic basic pro da sana daha önce yazmış olduğum açıklamayı bir daha bak istersen. Kolay gelsin.
picbasicplus 1.24 kullanıyorum.16f877a ile grafik lcd uygulaması yapıyorum.ancak kod boutu yeterli olmadığı için 18f452 ya geçtim.dig komutunu 16f877 için kullanıyorum iyi çalışıyor ama aynı programı 18f452 için kullandığımda
örneğin 27458 sayısı ekranda 88888 olarak görünüyor.sayının son hanesini değiştirdiğimde yani 8 i 6 yaptığımda bu sefer 66666 görünüyor. yani sayını birler basamağı ne ise ekrana onu yazıyor.aynı programı 16f877için derlediğimde ekranda doğru sonuç yani 27458 sayısı görünüyor.
neden olabilir arkadaşlar :(
Sevgili btiger programda sorun olabilir. Birde yukarda yazdığımız mod aritmetiğini kullan.
Alıntı yapılan: birumher - 26 Mayıs 2003, 15:17:53DIG komutunu denemedim ama daha uzun bir yöntem istersen şöyle yapabilirsin
Sayi = 254
1ler basmagı -> Sayı mod 10
10 lar basmagı -> (Sayı mod 100) div 10
100 ler basmağı (sayı mod 1000) div 100
1000 ler basmağı (sayı mod 10000) div 1000
diye gidiyor...
Aslında parantezlere de ihtiyacın yok kolay okunması açısından koyarsan iyi olur.
Picbasic te mod ve div komutları aynımıydı hatırlamıyorum ona göre değiştirebilirsin...
ben bu işlemi mikroc de nasıl yapabilirim acaba ve 8 haneli bir ekranda görmek istiyorum
En kolay yolu şöyle,
254/100=2 Bu yüzler basamağı "Sayı/100=yuzler basamağı"
(254-(2*100))/10=5 buda onlar basamağı "(Sayı-(yuzler*100))/10=onlar basamağı"
(254-(2*100)-(5*10))=4 buda birler basamağı "Sayı-(yuzler*100)-(onlar*10)=birler basamağı"
Mod alma hemen her derleyicide mevcut aslında Mod işlemi ile yapılmak istenirse;
Birler=254 Mod 10
Onlar =(254 Mod 100)/10
Yuzler=254/100
Değişkenler unsigned ve INT cinsinden olmalı.
Ete
binler = (sayi % 10000) / 1000;
yuzler = (sayi % 1000) / 100;
onlar = (sayi % 100) / 10;
birler = (sayi % 10) / 1;