avatar_elektro77

DO komutu

Başlatan elektro77, 24 Ekim 2020, 13:15:26

elektro77

Pbp de kodların karşılarına  açıklamalarını yazarken tesadüfen, yapmak anlamındaki "DO" kelimesinin bir kod gibi davranıp otomatik olarak koyu renge ve büyük harflere dönüştüğünü gördüm.
Pbp help topics te böyle bir koda rastlamadım.
Acaba bu "DO" kodu ne işe yarıyor?
Ete hocam bakabilirseniz sevinirim.Çok merak ettim doğrusu.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

DO komutu parametreleri ile birlikte rkamsal temele dayanmayan bir LOOP yani döngü oluşturmaya yarar.
DO {UNTIL Condition} {WHILE Condition}
Statement...
LOOP {UNTIL Condition} {WHILE Condition}
Örnekvermek gerekir ise;
DO 
  LCDOUT $fe,80,"X=",dec X 
  X = X + 1 
LOOP UNTIL X > 10 
Sürekli olarak X değerini bir artırıp X değerinin 10'u aşmasına kadar bu işlemi tekrarlar.
İşlemin kelimelerle açıklanması şöyle "X değerini 10 u aşıncaya kadar artır."

Benzer şekilde başka bir örnek;
DO WHILE X <= 30 
  LCDOUT $fe,80,"X=",dec X 
  X = X + 1 
LOOP 
Burada da X değeri 30 dan küçük olduğu müddetçe değerini bir artır işlemi yapılıyor.

Ete

elektro77

#2
DO
  LCDOUT $fe,$80,"X=",dec3 X 
  X = X + 1
  PAUSE 20
LOOP UNTIL X > 10 

Hocam yukarıdaki döngü 10 da duruyor fakat program koşturucu tekrar bu kod dizinine geldiğinde 10 dan itibaren yine saymaya başlıyordu. bende aşağıdaki gibi yaptım.
Fakat böyle yaparak kod dizisinin yapısını mı bozdum acaba?

IF X < 10 THEN 
DO
  LCDOUT $fe,$80,"X=",dec3 X 
  X = X + 1
  PAUSE 20
LOOP UNTIL X > 10 
ENDIF
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

İlgili kod dizisine yeniden sıra geldiğinde x=x+1 komutu nedeni ile x in değeri 11 olur ve tekrardan 10 oluncaya kadar değer artırmaya devam eder. Yaptığın doğru sorun olmaz
Ete

elektro77

Hocam:
Kod dizisini anlamak ve bir yazılımda nasıl kullanılabilir ini araştırmak adına uğraşırken aklıma şöyle bir soru geldi:
10 tane sayısal bir değer olmayan kelimemiz olsa,
örn:merhaba-nasılsın-kalem-kitap-defter-...vs.
bunları aynı yöntemle ekranda sıra ile görebilirmiyiz? Bunu nasıl yaparız.
Veya bunun için farklı bir yöntem mi uygulanır?
Bu istediğim index kullanımı ile mi alakalıdır?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Böyle bir şeyi yapabilmek için String komutu gerekir. PBP da string fonksiyonu yok maalesef.
Bir kelimeleri hangi kritere göre sıraya dizeceksin. Baş harflarine göremi ? Neye göre sıraya dizilecek. Onu belirtirsen belki PBP da da bir yöntem geliştirebilirm.
Mesajını tekrar okuyunca sanki sıraya dizmek değilde sırayla ekrana vermek gibi bir şeyden bahsetmişsin. Bu soru maalese çok fazla havada kalıyor yada duruyor. O dediğin kelimeler bir program içinde nerede yer alıyor. ? Bir yerden mi gelecek bir yerdenmi okunacak bunlar belli olmadan bir fikir oluşturmak mümkün değil. Lookup tabloları bu iş için ideal aslında.
Her bir kelimeyi bir lookup tablosuna yerleştirirsen oradan harf harf alıp ekrana yerleştirmek hemde ekranın istediğin yerine yerleştirmek mümkün olur. Lookup komutunu incele bence.


Ete

dnaci

#6
Aslında protonda string kullanılabiliyor. Proton manualde şöyle bir örnek var ama 13 sayfa string anlatılmış incelemek lazım.

Example 1
' Simple string variable comparison
 Device = 18F452 ' A suitable device for Strings
' Create a String capable of holding 20 characters
 Dim String1 as String * 20
 Dim String2 as String * 20 ' Create another String

Cls
 String1 = "EGGS" ' Pre-load String String1 with the text EGGS
 String2 = "BACON" ' Load String String2 with the text BACON
If String1 = String2 Then ' Is String1 equal to String2 ?
 Print At 1,1, " Equal " ' Yes. So display Equal on line 1 of the LCD
Else ' Otherwise
 Print At 1,1, "Not Equal " ' Display Not Equal on line 1 of the LCD
EndIf
 String2 = "EGGS" ' Now make the strings the same as each other
If String1 = String2 Then ' Is String1 equal to String2 ?
 Print At 2,1, "Equal" ' Yes. So display Equal on line 2 of the LCD
Else ' Otherwise
 Print At 2,1, "Not Equal " ' Display Not Equal on line 2 of the LCD
EndIf
Stop

ete

Her ne kadar string kullanımına ihtiyaç olsada her bir string karekterinin hafızadan 1 byte yer kullandığını düşünürseniz Pic gibi endüstriyel tasarımlar için geliştirilmiş işlemcilerde data hafızasının yeterli gelmiyeceğini düşünmeniz gerekir. Kısaca şunu demek istiyorum. Kapsamlı string işlerinden uzak durmaya çalışın. İhtiyaç varsa çok yüksek kapasiteli data hafızasına sahip işlemcilerle bu işi halletmeye çalışın.
Benzer durum Program hafıazasını tüketen LCD komutları içinde geçerli.
Programlaya yeni başlayanlar, bir çok LCDOUT satırı kullanınca hafızanın hemen tükendiğini hatırlayacaklardır. Başınıza ne geleceğini bilin ona göre davaranın derim.

Ete

Powered by EzPortal