Sıfırdan Programlama

Bu konuyu okuyanlar

The Judge

.bmbozbey
Emektar
Katılım
22 Şubat 2015
Mesajlar
4,183
Reaksiyon puanı
5,194
Puanları
113
Arkadaşlar bence bu başlık altında böyle bir çalışma yapılması lazım her gelen programlayla ilgili kafasına göre bi konu açıyor belki buda onlaradn bi tanesi olabilir....
Sıfırdan programlama hakkında bilinmesi gerekenler,tavsiyeler,yarılar V.b ....
Tek konu altında ....
Sizce güzel olmazmıydı ... İNSANLARI HEVESLENDİRECEK ŞEYLER MESELA ?
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Kimse okumaz ve aynı veya benzer başlık altında yeni bir konu açar. Şimdiye kadar olduğu gibi.
 

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
Ben programlamaya ilk QBasic te başladım. O zamanlarda internet yoktu sadece deneyerek pratik ederek bir yere kadar ulaştım. Şimdi geriye bakıyorum sadece bir kayıpmış… Uygun motivasyonu bulmak her zaman için kolay olmayabilir. Programlama bir ömür boyu süren bir hastalık. Eğer daha fazla hasta olmak istiyorsanız bu yoldan devam edin lütfen elinize bir şey geçmediğini göreceksiniz… Nasıl iyi heveslendirdim mi?
 

MR.Anonymous

Dekan
Katılım
7 Aralık 2014
Mesajlar
5,140
Reaksiyon puanı
498
Puanları
83
Ben programlamaya ilk QBasic te başladım. O zamanlarda internet yoktu sadece deneyerek pratik ederek bir yere kadar ulaştım. Şimdi geriye bakıyorum sadece bir kayıpmış… Uygun motivasyonu bulmak her zaman için kolay olmayabilir. Programlama bir ömür boyu süren bir hastalık. Eğer daha fazla hasta olmak istiyorsanız bu yoldan devam edin lütfen elinize bir şey geçmediğini göreceksiniz… Nasıl iyi heveslendirdim mi?

Yıllarca uğraşıp eline birşey geçmiyorsa sende sıkıntı var demektir.
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Programlamaya ilk adımı atmak için gerekenler, ilk kodlarınızı yazmak, derlemek ve çalıştırmak. Bu ilk adımlardan sonrası kendiliğinden gelir. Aklınızdaki soru, Ne ile, nasıl ve ne yapacağım ? En kolay başlangıç QBasik 1.1 sürümü ile. İndiriyorsunuz, tıklıyorsunuz, çalışıyor. Herşey tek bir dosyadan ibaret. Bütün işlemler tek bir ortamda gerçekleşiyor. Ancak artık Windows XP kullananların sayısı fazla değil. Yeni Windows sürümlerinde de sorunsuz ve aynı şekilde çalıştırılabilec bir eşdeğer olarak Blassic'i keşf ettim. Önceki iletimimden bir örneği de denedim ve çalıştı. Bazı farkları var tabii ki. İlk denemeyi birlikte yaparak, programlamaya ilk adımı atabilirisz.

blassic.exe dosyasına çift tıkladık ve çalıştı. Şimdi ilk kodlarımızı yazalım.

Önce bazı önemli detaylar: Her kod bir işlemin adı olur. Her işlem bir veri işler, kendi kendine işlemez Her kod ayrı bir satırda ve işleyeceği veri ile birlikte yazılır. Tüm kodlar sırası ile çalıştırılır. Basic'te satırlara bir numara eklenir.

Kod:
10 PRINT "Selam"
20 PAUSE 1000
30 END
RUN

İlk satırımızdaki kodumuzun adı "print" vaya "PRINT" ve işlevi çıktı vermek. İşlediği veri ise çift tırnaklar arasında eklediğimiz bir kelime. Basic'te Kodlar büyük harfler ile yazılırlar ancak QBasic ve Blassic te bunlar küçük harflerle yazılsalar dahi, düzeltilirler.

İkinci satırımızdaki kodumuzun adı "PAUSE" QBasic'te "SLEEP" olarak geçer.İşlenen veri ise 1000 rakamı. PAUSE veya QBasic'teki SLEEP bir gecikme yaratır. QBasic için saniye biriminde, Blassic daha alt birimlerde hesaplar. Bu nedenle yüksek bir rakam ekledim.

Üçüncü satırımız programı sonlandırır.

Dördüncü satırımızda bir satır numarası yok. Son kodumuz bir komut ve işlemlerin başlatılmasını sağlar.

Diğer satırlarda satır numarası kullanmadığımız durumda, önce bir sonraki satırda işlem gerçekleşir ve ardından bir sonraki talimatı almak üzere imleç bir satır daha alta iner ve bu bekleyiş Blassic'te bir "OK" işareti ile bize iletilir.

Blassic için kodlarınızı Notdefteri ile de yazabilirsiniz ve dosya isminin sonuna .bas ekleyerek kayıt edebilirsiniz. Dosyada kayıtlı progamınızı başlatabilmek için, RUN "dosya_adı.bas" şeklinde komut girebiliriniz. (dosya ismi çift tırnaklar içinde olmalı)

QBasic'te sadece kendi kayıt ettiği dosyaların başlatılması mümkün ve dosya isimlerinin uzunluğu da 8 harfi geçmemeli Bunun nedeni, QBasic 16 bit lik bir uygulama. Blassic için bir tek kendi web sayfasındaki kısıtlı dokümanlar bulunabiliyor. QBasic için çok sayıda ve her dilde anlatım bulmak mümkün.
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Blassic ve QBasic arasındaki farkları biraz daha görbilmek için önceki iletimde verdiğim linkten bir örneği daha blassic'te çalıştırmayı denedim. Gerekli düzeltmeleri yapabilmem 4 saatimi aldı. Türk Bayrağı adındaki son dan ikinci örneği düzenledim. İsteyen kıyaslayabilir. (Notdefteri ile yazılan kodlarda satır numaraları gerekmiyor)

Kod:
MODE 10
COLOR , 4
GRAPHICS CLS
CIRCLE(106, 100), 53 , 15, PI / 4.45, 7 * PI / 3.85
CIRCLE(119, 100), 43 , 15, PI / 4, 7 * PI / 4
PAINT(60, 100),15
LINE(154, 100)-(168, 95) : LINE(154, 100)-(168,105)
LINE(168, 95)-(168, 85) : LINE(168, 100)-(168, 114)
LINE(189, 89)-(180, 100) : LINE(189, 111)-(180, 100)
LINE(189, 89)-(175, 93) : LINE(189, 111)-(175, 107)
LINE(168, 117)-(175, 107) : LINE(168, 85)-(175, 93)
PAINT(160, 100),15
GET A$
 

The Judge

.bmbozbey
Emektar
Katılım
22 Şubat 2015
Mesajlar
4,183
Reaksiyon puanı
5,194
Puanları
113
Daha fazla ilgi ....
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Türk bayrağı örneğinin çevirisini yaparken uğraştığım konulardan biri, Bayrağın renginin Mavi olamsıydı. Bunun nedeni olarak ta, Blassic2te renk şemasının biraz farklı olduğunu keşif ettim. Blassic renk şemasını akılda kalıcı tutabilmek için bir kaç örnek yazdım. Onları da paylaşayım.

Örnek 1
Kod:
10 FOR renkler = 1 TO 15
20 COLOR renkler
40 PRINT "   Merhaba SDNForum"
50 NEXT renkler

Örnek 2
Kod:
10 FOR renkler = 0 TO 15
20 COLOR 15
30 PRINT renkler ;
40 COLOR renkler
50 PRINT "   Merhaba SDNForum"
60 NEXT renkler

Örnek 3
Kod:
10 FOR renkler = 0 TO 140
20 COLOR renkler , renkler + (renkler / 10)
30 PRINT " Merhaba SDNForum ";
40 NEXT renkler

Bir başka farklılık, QBasic'teki "SCREEN" kodu balssic'te çalışmıyor. Eşdeğeri olarak "MODE" kodu var ve bira farklı olarak, yeni pencerede açılıyor. Türk Bayrağı örneğinde ilk satırdaki "MODE 10" kodunu "MODE 1" veya MODE 11" şeklinde değiştirerek, nasıl farklar olduğunu deneyebilirsiniz.

Mutlaka başka farklar da vardır. İlgilenenler bunları, deneyerek, dokümanlardan araştırarak yada örnekler üzerinde inceleyerek bulabilir ve çözebilirler. Kendim de uğraşır ve başka farklar keşif edersem, eklerim.
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Blassic'te ki ekran mod'larını da kısaca ekleyeyim. 0 ila 11 arası, toplam 6 Mod var. Bunlar "MODE 1", "MODE 2", "MODE 5", "MODE 10" ve "MODE 11". "MODE 0" ise metin ekranına dönüş için kullanılıyor. QBasic'teki "SCREEN" modları farklı özelliklere sahipken, Blassic'te ki "MODE"lar sadece boyut farkı gösteriyor. 1 ve 5 ise aynı boyuta sahipler. "MODE" farklarını görerek kıyaslayabilmek için bir örnek yazdım. Enter tuşuna basarak, bir sonraki "MODE" moduna geçişi sağlıyor.

Kod:
     10 MODE 1
     20 COLOR 4
     30 PRINT : PRINT "  MODE 1"
     40 PRINT : PRINT : PRINT "  Enter tusuna bas !"
     50 GET a$
     60 MODE 2
     70 COLOR 3
     80 PRINT : PRINT "  MODE 2"
     90 PRINT : PRINT : PRINT "  Emter tusuna bas !"
    100 GET a$
    110 MODE 5
    120 COLOR 2
    130 PRINT : PRINT "  MODE 5"
    140 PRINT : PRINT : PRINT "  Enter tusuna bas !"
    150 GET a$
    160 MODE 10
    170 COLOR 1
    180 PRINT : PRINT "  MODE 10"
    190 PRINT : PRINT : PRINT "  Enter tusuna bas !"
    200 GET a$
    210 MODE 11
    220 PRINT : PRINT "  MODE 11"
    230 PRINT : PRINT : PRINT "  Enter tusuna bas !"
    240 GET a$
    250 MODE 0
 

Web_Monster

Öğrenci
Katılım
8 Ağustos 2014
Mesajlar
23
Reaksiyon puanı
1
Puanları
1
Bence bilinmesi gereken diller şunlar;

Java; Platform bağımsızlığı, bu sayede her yerde çalışabilme

C; Makine diline yakın olması ve kodlamanın kolay olması

Python; Kolay kod yazılabilme(Piyasa artık buraya gidecek gibi)

Assembly; Donanımla tam anlamıyla iletişime geçme

Bunlar arasından herhangi birisinden başlayabilirsiniz. Bunlar benim görüşlerimdir yanlışım varsa o bölümü alıntılayıp doğrusunu yazarsanız sevinirim :)
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Üzerinde deneyler/düzenlemeler yapabileceğiniz bir kaç örnek daha ekleyeyim. Bu tür uğraşlar sizlere deneyim kazandırır.

Örnek 1
Kod:
10 COLOR 2, 4
20 CLS
30 LOCATE 10,30
40 PRINT "Basic Programlama"
50 PAUSE 3000
60 LOCATE 20,0

Örnek 2
Kod:
10 COLOR 0, 7
20 CLS
30 FOR x = 65 TO 1 STEP -1
40   CLS
50   PRINT : PRINT : PRINT : PRINT TAB(x)"Basic Programlama"
60   PAUSE 100
70 NEXT x
80 END

Örnek 3
Kod:
     10 COLOR 4, 7
     20 CLS
     30 LOCATE 10,30 : PRINT "Arka zemin renkleri"
     40 PAUSE 3000
     50 COLOR 4, 6
     60 CLS
     70 LOCATE 10,30 : PRINT "Arka zemin renkleri"
     80 PAUSE 3000
     90 COLOR 4, 5
    100 CLS
    110 LOCATE 10,30 : PRINT "Arka zemin renkleri"
    120 PAUSE 3000
    130 COLOR 15, 4
    140 CLS
    150 LOCATE 10,30 : PRINT "Arka zemin renkleri"
    160 PAUSE 3000
    170 COLOR 15, 3
    180 CLS
    190 LOCATE 10,30 : PRINT "Arka zemin renkleri"
    200 PAUSE 3000
    210 COLOR 15, 2
    220 CLS
    230 LOCATE 10,30 : PRINT "Arka zemin renkleri"
    240 PAUSE 3000
    250 COLOR 15, 1
    260 CLS
    270 LOCATE 10,30 : PRINT "Arka zemin renkleri"
    280 PAUSE 3000
    290 COLOR 15, 0
    300 CLS
    310 LOCATE 10,30 : PRINT "Arka zemin renkleri"
    320 PAUSE 3000
    330 END
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Kod yazmak bir şey öğretmez, neyi neden yazdığını anlayamadıktan sonra. Basic, kısa ve İngilizce'ye yakın ifadeler veya kısaltmalar kullanır. Biraz ingilizce bilmek, bu açıdan bakıldığında, Basic öğrenebilmek açısından faydalı oluyor. İnsan, bir bağlam kurabildiği bir ifadeyi daha kolay akılda tutabiliyor.

Sık kullanılan kodların ne işlevleri olduklarını burada kısaca anlatmaya çalışayım.

PRINT
"print" kodu Basic'te en önemli ve de en sık kullanılan bir işlemi çağırır. Gerçekleşen diğer işlemlerin, veye istenen bir ifadenin çıktısını verir. Bir çıktı veremeyen bir programın ne işlem yaptığını kimse anlayamaz.

Örnek 1
PRINT "Selamlar"
Bu işlem, tırnaklar içindeki ifadeyi (kelimeyi) çıktı olarak verir.
Örnek 2
PRINT "2 + 2"
Bu işlem yine tırnaklar içerisindeki ifadeyi bir çıktı olarak verir.
Örnek 3
PRINT 2 + 2
Bu işlem ise iki ile iki'nin toplamını bir çıktı olarak verir. Veya biz buna bir işlemin sonucunu verir diyebiliriz.
Örnek 4
PRINT " 2 + 2 = "; 2 + 2
Bu işlem ise bir ifadeyi ve de arkasında ekli olarak bir işlemin sonucunu verir. "print" ile biz hangi işlemin sonucunu görmek istiyorsak, veya hangi bilgiyi aktarmak istiyorsak, onu yazdırabiliyoruz.

INPUT
"input" ise "print" kodunun tersini yapar ve bizim klavyeden yapacağımız bir veri girişini alır ve programa ekler.

CLS
"cls" işlemlerimizi gerçekleştirdiğimiz (Basic) ekranını temizler. İşlemler karıştığında ve neyin ne olduğunu anlayamaz olduğumuzda, ekrandaki tüm kirliliği siler, ancak hafızadaki kodları silmez.

GRAPHICS CLS
"cls" ile aynı işlemi "MODE" ekranlarında yapar.

END
Programın kendisini, veya bir bölümü (tüm işlemleri) sonlandırır.

COLOR
Renkleri kullanmamızı sağlar. Renler ön planda (yazı, çizim, boyama) 0 - 15 arası, ve arka zeminde 0 - 7 arası renk tanımları olarak tanımlanabilirler.
COLOR 4
Yazı rengini kırmızı olarak belirler.
COLOR 15, 4
Yazı rengini beya ve arka zemini kırmızı olarak belirler.
COLOR , 1
Sadece arka zemin rengini belirler. bu durumda Lacivert.

RUN
Bu bir komuttur ve program içinde kullanılmaz. Basic ile yazılan kodların başlatılmasını sağlar.

SAVE
Bu da yine bir komut ve program içinde kullanılmaz. kayıtlı kodlarınız bir dosyaya kayıt etmenizi sağlar. Ancak dosya içeriği, Notdefteri veya daha kulanışlı bir editör ile yazılan bir dosya gibi okunabilir olamz. Basic kendi okuyabildiği bir format'ta kayıt yapar.
SAVE "dosya.bas"
Bu şekilde dosyaya bir isim verilerek kayıt yapılır.

LOAD
"save" komutunun tersine, var olan bir dosyayı Basic'e yükler, ama çalıştırmaz, açmaz.
LOAD "dosya.bas"
şeklinde kullanılır.

LIST
Yine bir komut ve hafızada kayıtlı olan kodları son geçerli durumu ile ve de satır sırasına göre Basic ekranına yansıtır.

DELETE
Başka bir komut. umarası ile belirtilen bir satırı siler.
DELETE 100
Bu komut, hafızadaki 100 numaralı satırı siler.

NEW
Bir başka komut daha. Tüm hafızadaki veriyi siler ve yeni bir programın başlanabilmesini sağlar. Ekranı temizlemez.

FOR
Bir işlemi belirlenen kez tekrarlar veya belirli kez saydırır ve NEXT ile döndürür. Sonuncu sayımda işlem biter
FOR x = 1 TO 100
PRINT x
NEXT x
Bu işlem 1 den başlayarak 100 e kadar sayılan rakamları yazdırır
FOR x = 1 TO 100
PRINT "Basic ile Programlama"
NEXT x
Bu işlem ise 100 kez "Basic ile Programlama" yazdırır.

PAINT
Belirlenen bir noktanın içinde bulunduğu kapalı bir alanı, belirlenen renk ile doldurur. Boyama yapar. Bu kod Blassic'te "MODE" ekranlarında, ve QBasic'te, grafik (çizim) destekleyen "SCREEN" modlarında çalışır.
PAINT(100, 100) , 15
Bu şekilde kullanılır ve parantezler içinde belirtilen rakamlar bir x,y alan noktasını gösterirken, parantez dışında belirtilen rakam bir renk seçer. (Bu durumda Beyaz)

LINE
Grafik destekleyen ekranda, ikinokta arasında bir çizgi çizer
LINE(100, 100) - (200, 300)
İlk parantezler içindeki rakamlar başlangıç noktasını belirler, ikinci parantezler arasındaki rakamlar bitiş noktasının yerini belirler. Rakamlar piksel ölçütündedir.

CIRCLE
Grafik destekleyen ekranda bir daire çizer.
CIRCLE(100, 100) , 50
Parantezler içindeki rakamlar dairenin merkezini belirler, parantez dışında kalan rakam, yarı çapın değerini belirler.

LOCATE
Metin ekranında metnin başlama noktasını belirler
LOCATE 10,20
On satır aşağı, 20 harf sağa anlamına gelir.

TAB
Metin ekranında, aynı satırda harf sayısı kadar sağa kaydırır.
TAB(10)
Metni 10 sütun sağdan başlatır.

PAUSE
Milisaniye süresinde geçikme (bekleme) sağlar. QBasic'te "SLEEP" kullanılır ve saniye süresinde gecikme sağlar
PAUSE 1000 (veya QBasic'te SLEEP 1)
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
QBasic ile ilgili Türkçe ders sayfaları. (Blassic için de geçerli)

http://mfyz.com/Files/QBasic/QuickBasic_Kursu_Ekitap.pdf

Quick Basic Dersleri

Quick Basic – Giriş — EvrenCe

QBasic Ders Notları, QBasic Programlar, QBasic Örnekler, QBasic Kodlar, QBasic Uygulamalar: Nisan 2014

Blassic kodlarının alfabetik listesi (İngilizce)

Blassic: keywords


Programlamaya yeni başlayan veya başlayacak olan birisi için, Basic hakkında bu kadar kaynak ve yardım yeterli gelir diye düşünüyorum. Başlayanlara başarılar diliyorum.
 

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
83
Güncelliğini kaybetmiş dillerden uzak durun derim.

Eğer illa ki temel olsun istiyorsanız. C temellerini öğrenin, ardından C# ile devam edersiniz.


Zamanında pascal'dan basic'e geçtiğim güne halen lanet ediyorum....
 

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
Yıllarca uğraşıp eline birşey geçmiyorsa sende sıkıntı var demektir.
Şu ana kadar paramı programlama dililleri dışından kazandığımı belirtmiştim . Şimdiye kadar hobi olarak sürdürdüm hep ama belki gelecekte ne olur belli olmaz
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Güncelliğini kaybetmiş dillerden uzak durun derim. Eğer illa ki temel olsun istiyorsanız. C temellerini öğrenin, ardından C# ile devam edersiniz. Zamanında pascal'dan basic'e geçtiğim güne halen lanet ediyorum....
Üniversite alt yapısı olan bir kişi için doğru bir söz. Ama o kapasitede olamayan birisi için, olmayacak dua'ya amin demek olur. Meslek olarak Programlama öğrenmek isteyenlere de, Üniversitede Bilgisayar mühendisliğini okumalarını öneririm. Youtube da video izleyerek Doktor olana kimse Ameliyat yaptırmaz. Şahsi durumum, QBasic için, modern donanımlarda düzgün çalışan bir alternatif arıyordum ve buldum. Şimdi mutluyum. Bu yaştan sonra, yeni bir meslek öğrenip, yeni bir işe başlayacak durumum yok.
 

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
83
Sıfırdan öğrenilecek ise;

Mobil programlamaya yönelmelerini tavsiye ederim. Günümüz mobil çağı . Bu konuda Turkcell in geleceği yazanlar projesi son derece kolay ve detaylı. Ben bile android programlama konularında belirli bir seviyeye gelip bir iki ufak uygulama yapmıştım. Bir göz atın derim.

https://gelecegiyazanlar.turkcell.com.tr/

Ayrıca , Microsoftun Açık Akademi eğitimleri ile de , oyun , web, mobil, windows programlama eğitimlerine katılabilir, gayet güzel uygulamalar çıkartabilirsiniz. Hayal gücünün sınırı yok. Mutlaka göz atılması gereken bir seçenek.

https://www.acikakademi.com/portal/egitimler/default.aspx
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Biraz da eğlenelim



Hayatta her şey para değildir. Para, zihni köreltir, karakteri bozar. Eğlenmek mutlu eder. Aşağıda eklediğim örnekler Blassic için yazılmış. QBasic ile çalıştırabilmek, yeniden düzenlemek gerektirir. Bazı "MODE" pencerelerinin, QBasic'te "SCREEN" karşılığı yok. Düzeltmelerde boyutları da düzenlemeyi gerektirir.

Hata düzeltmeleri ve de programın genel denetimi daha kolay olduğundan, Kodları bir editör ile yazdım. Programların boyutları 20 kod satırını aştığında, harici bir editör daha kullanışlı olabiliyor. 50 kod satırı üstünde ise kaçınılmaz oluyor. Notdefteri'ni kullanabilirsiniz. Notepad++ daha kullanışlı olduğundan öneririm.

gezgin.bas
Kod:
'' Programın başlangıcı

mode 10
locate 10,10
pen 0, 0
print "K A R E ' Y I   K A Y D I R M A K   I C I N"
print : print : print : print
pen 13, 0
print tab(10)"D   =  S O L A"
print : print
print tab(10)"F   =  Y U K A R I"
print : print
print tab(10)"G   =  A S A G I"
print : print
print tab(10)"H   =  S A G A"
print : print
print tab(10)"K   =  P r o g r a m i   K a p a t"
print : print : print : print
pen 0, 0
print tab(10)"D E V A M  I C I N   E N T E R   T U S U"  
input devam$
paper 14
cls
x = 250
y = 200

'' Function adı verilen bir işlec kalıbı.
'' Başka programlarda da yeniden ve farklı parametreler ile
'' kullanılabilir.

def fn kare$ (en1, boy1, en2, boy2, renk)
   color renk
   move en1, boy1
   draw en2, boy1
   draw en2, boy2
   draw en1, boy2
   draw en1, boy1
   paint(en1 + 50, boy1 + 50), renk
fn end

'' FN Kare$ isimli Function kalıbını kullanan bir alt birim.
'' Bu alt birim program içinde yeniden çalıştırılabilir.

label kaydir$
   if a$ = "d" then x = x - 10
   if a$ = "f" then y = y - 10
   if a$ = "g" then y = y + 10
   if a$ = "h" then x = x + 10
   cls
   en1 = x
   boy1 = y
   draw fn kare$ (en1, boy1, en1 + 100, boy1 + 100, 3)

'' kaydir$ alt birimini çalıştıran bir Ana işlem.
'' REPEAT - UNTIL dögüsü sonlandırılmadığı sürece
'' sonsuz çalışır 

repeat
   a$ = inkey$
   if a$ = "d" then gosub kaydir$
   if a$ = "f" then gosub kaydir$
   if a$ = "g" then gosub kaydir$
   if a$ = "h" then gosub kaydir$
   if a$ = "k" then goto son$
until a$ = "k"

'' Programı sonlandıran bölüm

label son$
mode 0

kare.bas
Kod:
mode 11

'' gezbin.bas ta kullanılan FN kare$ Function kalıbı.

def fn kare$ (en1, boy1, en2, boy2, renk)
   color renk
   move en1, boy1
   draw en2, boy1
   draw en2, boy2
   draw en1, boy2
   draw en1, boy1
   paint(en1 + 50, boy1 + 50), renk
fn end

draw fn kare$ (0,0,800,600,4)

draw fn kare$(100,100,700,500,3)

draw fn kare$(200,200,600,400,14)

draw fn kare$(250,250,550,350,13)

'' Programı kapatmak için "Enter" tuşu.

color 4, 4
input a$

dizi.bas
Kod:
mode 1200,50

'' Dikkat! burada FN kare$ Fonsiyonu içinde de değişiklik var.

def fn kare$ (en1, boy1, en2, boy2, renk)
   color renk
   move en1, boy1
   draw en2, boy1
   draw en2, boy2
   draw en1, boy2
   draw en1, boy1
   paint(en1 + 10, boy1 + 10), renk
fn end

for x = 0 to 1150 step 75
   draw fn kare$ (1 * x, 1, 75 + x, 49, x / 75)
next x

'' Programı sonlandırmak için "Enter" tuşu.

color 0, 0
input a$

kutular.bas
Kod:
mode 11

'' Dikkat! burada FN kare$ Fonsiyonu içinde de değişiklik var.

def fn kare$ (en1, boy1, en2, boy2, renk)
   color renk
   move en1, boy1
   draw en2, boy1
   draw en2, boy2
   draw en1, boy2
   draw en1, boy1
   paint(en1 + 100, boy1 + 75), renk
fn end

for x = 0 to 3
   draw fn kare$ (x*200, 0, (x+1)*200, 150, x)
next x

for x = 0 to 3
   draw fn kare$ (x*200, 150, (x+1)*200, 300, x+4)
next x

for x = 0 to 3
   draw fn kare$ (x*200, 300, (x+1)*200, 450, x+8)
next x

for x = 0 to 3
   draw fn kare$ (x*200, 450, (x+1)*200, 600, x+12)
next x

'' Programı sonlandırmak için "Enter" tuşu.

color 0, 0
input a$

Dosyaları isimlendirirken, içeriğe uygun olması, dosya sayısı arttıkça öneli oluyor. Şahsen aklıma daha uygun adlandırmalar gelmedi.

Dosyaları tek tıklamayla çalıştırmak istiyorsanız, bir .bas uzantılı dosyayı sağ tıklayın (veya çift tıklayın) ve çalıştıracak uygulama olarak, dosya yolunu takip ederek, blassic.exe veya qbasic.exe seçin. (sadece birini seçebilirsiniz. Blassic.exe dosyasının yerini değiştirdiğinizde, dosya bulunamadı hatası alınacağından dolayı, önce uygun bulduğunuz bir yere kopyalayın.
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
Önceki örneklerde kullandığım bazı kodların açıklamalarını ekleyeyim. Bunların bir kısmı QBasic'te yok. Daha çok, var olan başka kodlar için alternatif oluyorlar. Bunları kısa örenkler ile deneyerek, nasıl çalıştıklarını çözmeye çalıştım.

PAPER
COLOR için bir alternatif (eşdeğer) ancak sade arka zemin rengini belirler. COLOR ile arka zemin 8 renk seçeneği sunarken, PAPER 16 renk seçeneği sunuyor.

paper1.bas
Kod:
     10 PAPER 4
     20 PEN 1
     25 CLS
     30 PRINT "Merhaba"

paper2.bas
Kod:
     10 MODE 11
     20 FOR x = 0 TO 15
     30   PAPER x
     40   CLS
     45   PRINT : PRINT : PRINT : PRINT "   PAPER "; x
     50   PAUSE 1000
     60 NEXT x
     70 INPUT a$
     80 MODE 0
     90 END

PEN
COLOR için bir başka alternatif. PEN bir tek yazı rengini belirler.

pen.bas
Kod:
     10 MODE 11
     15 x = 0
     16 IF x = 15 THEN PEN 0
     20 FOR x = 0 TO 15
     30   PAPER x
     35   PEN x +1
     40   CLS
     45   PRINT : PRINT : PRINT : PRINT "   PAPER "; x
     50   PAUSE 1000
     60 NEXT x
     70 INPUT a$
     80 MODE 0
     90 END

DRAW
LINE için bir alternatif. Kullanım şekli biraz farklı. Kullanılabilecek parametreler aşağıdaki gibi.
B = Yeni başlangıç noktası belirler.
M = Çizimin başlangıç noktasını belirler
U = Yukarı çizim (yön)
D = Aşağı çizim (yön)
L = Sola çizim (yön)
R = Sağa çizim (yön)
E = Çapraz sağ yukarı çizim (yön)
F = Çapraz sağ aşağı çizim (yön)
G = Çapraz sol aşağı çizim (yön)
H = Çapraz sol yukarı çizim (yön)

draw.bas
Kod:
     10 MODE 10
     20 COLOR 4
     30 DRAW "B M 100, 100; R 100; D 100; L 100; U 100"
     40 DRAW "B M 300, 300; F 100; L 200; E 100"
     50 GET a$
     60 MODE 0

MOVE
Çizim için bir başlangıç noktası belirler. DRAW da "B" ile yapılan işlemin aynısı. Aşağıdaki örneği 30 numaralı satırı silerek başlatırsanız, tam olarak ne işlev gördüğü anlaşılır.

move.bas
Kod:
     10 MODE 10
     20 COLOR 3
     30 MOVE 200,200
     40 DRAW 200,300
     50 DRAW 300,300
     60 DRAW 300,200
     70 DRAW 200,200
     80 GET a$
     90 MODE 0


INKEY$
INPUT gibi benzer işler. "INPUT" klavyeden bir giriş için programı bekletirken, INKEY$ programı bekletmiyor ve sadece ilk girilen karakteri algılıyor.

REPEAT ve UNTIL
FOR ve NEX ikilisi gibi bir döngü. Fark olaram, tekrarlama veya saydırma işlemi, işlem durdurulmadığı sürece devam eder.

Değişkenler:

Basic'te değişkenler sembolik olarak veri temsil ederler. Bu veriler iki türe ayrılırlar. Birincisi "Rakamlar" ve ikincisi "Kelimeler"

Bütün veriler, aksi belirtilmediği sürece "Rakam"dır. Özel olarak tanımlandıklarında, kelime(veya harf)dir
Bunu bir örnek ile tarif edeyim
Kod:
10 x = 10
20 x$ = "Merhaba SDNForum"
30 PRINT x
40 PRINT x$

"$" bu işaret (dolar) veri türünün kelime olduğunu belirler. Kelime türünden veri çift tırnaklar içinde eklenmeli.
 

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
BİR OYUN

Programlamaya yeni başlayanların çoğunluğunun merak ettikleri bir konu, bir oyun nasıl yapılabilir. Kendim halen o seviyeye gelemedim. Ancak Blassic örnekleri arasında bir tane buldum ve paylaşayım. Eğlenebilir ve inceleyebilirsiniz.

Oyun : Deep Sea
Yazar : Julian Albo
Yıl : 2005

deepsea.bas
Kod:
rem            *****************************
rem            **  D E E P S E A . B A S  **
rem            *****************************

rem    ***************************************************************
rem    **    A simple game demonstrating Blassic's capabilites.     **
rem     **                                                           **
rem    **         (C) 2002-2005 Julian Albo "NotFound"              **
rem    **                Revision 8-feb-2005                       **
rem    **     Distributable under the terms of the GPL License.     **
rem    ***************************************************************

def int a-z

' Set LOCATE style Microsoft
flags1= sysvarptr + 30
n= peek (flags1)
if n mod 2 = 1 then poke flags1, n - 1

randomize time

color_sky= 11
color_sea= 1
color_boat= 4
color_sub= 6

sealevel= 7
boatlevel= sealevel - 1
minysub= sealevel + 1

maxbomb= 5
dim xbomb (maxbomb), ybomb (maxbomb), counter (maxbomb)
nbomb= 0
inicount= 2

maxboat= 7
dim xboat (maxboat), incboat (maxboat)
nboat= 0

maxglub= 20
dim xglub (maxglub), countglub (maxglub)
inicountglub= 18

maxcharge= 40
dim xcharge (maxcharge), ycharge (maxcharge)
for i= 1 to maxcharge - 1
    ycharge (i)= i + 1
next
ycharge (maxcharge)= 0
freecharge= 1

probboat!= 0.15
probcharge!=0.25

arg= val (programarg$ (1) )
if arg = 0 then arg= 1
mode 320 * arg, 200 * arg, , arg, arg

set_title "Deep Sea"

skywin= 1
window #skywin, 1, 40, 1, boatlevel
paper #skywin, color_sky

seawin= 2
window #seawin, 1, 40, sealevel, 24
paper #seawin, color_sea

boatwin= 3
window #boatwin, 1, 40, boatlevel, boatlevel
paper #boatwin, color_sky

synchronize 1

gosub clearscreen

synchronize

gosub defchars

d= sysvarptr
charset= peek (d+20) + 256 * (peek (d+21) + 256 * (peek (d+22) + 256 * peek (d+23) ) )

g$= "DEEP": posx= 5: posy= sealevel + 2: gosub rotulo

pause 500

g$= "SEA": posx= 9: posy= sealevel + 10: gosub rotulo

pause 750

xsub= 20: ysub= 20

pen color_sub: paper color_sea
locate ysub, xsub: print sub$;
synchronize

pause 500

gosub clearscreen

pen color_sub: paper color_sea

gosub printpoints

quit= 0

on #0 gosub handle_keys

repeat
    locate ysub, xsub: print sub$;
    synchronize
    pause 200

    xmove= max (min (xmove, 3), -3)
    ymove= max (min (ymove, 3), -3)
    xsub= max (min (xsub + xmove, 38), 1)
    ysub= max (min (ysub + ymove, 24), minysub)
    xmove= 0: ymove= 0

    gosub moveall
    if fire then gosub firebomb: fire= 0
until quit

goto finalize

label handle_keys

local a$

get a$
repeat
    a$= upper$ (a$)
    if a$ = "P" then get a$: a$= upper$ (a$)
    if a$ = "LEFT" then xmove= xmove - 1
    if a$ = "RIGHT" then xmove= xmove + 1
    if a$ = "UP" then ymove= ymove - 1
    if a$ = "DOWN" then ymove= ymove + 1
    if a$ = " " then fire= 1
    if a$ = "Q" then quit= 1
until (let a$= inkey$) = ""

return

label moveall

gosub moveboats

pen color_sub, 0: paper color_sea

cls #seawin

pen , 1

gosub movebombs

gosub movecharges

pen , 0

gosub printpoints

return

label movebombs

for i= 1 to maxbomb
    if xbomb (i) = 0 then goto nextbomb

    counter (i)= counter (i) - 1
    if counter (i) > 0 then goto printbomb
    counter (i)= inicount

    ybomb (i)= ybomb (i) - 1
    if ybomb (i) >= sealevel then goto printbomb

    killpos= xbomb (i)    
    xbomb (i)= 0: nbomb= nbomb - 1

    killboat= 0
    for j= 1 to maxboat
        if xboat (j) = 0 then goto nextbombboat
        touch= killpos - xboat (j)
        if touch >= 0 and touch <= 2 then killboat= j: j= maxboat

        label nextbombboat
    next
    if killboat = 0 then goto nextbomb

    newglub= 0
    for j= 1 to maxglub
        if xglub (j) = 0 then newglub= j: j= maxglub
    next
    if newglub <> 0 then xglub (newglub)= xboat (killboat): countglub (newglub)= inicountglub

    xboat (killboat)= 0: nboat= nboat - 1
    points= points + 10

    goto nextbomb

    label printbomb
    locate ybomb (i), xbomb (i): print bomb$;

    label nextbomb
next

return

label movecharges

killed= 0

for i= 1 to maxcharge
    if xcharge (i) = 0 then goto nextcharge
    ycharge (i)= ycharge (i) + 1
    if ycharge (i) >= 25 then xcharge (i)= 0 : ycharge (i)= freecharge: freecharge= i: goto nextcharge

    label nomovecharge

    locate ycharge (i), xcharge (i): print charge$;

    dist= xcharge (i) - xsub
    if ycharge (i) = ysub and dist >= 0 and dist < 3 then killed= 1: locate ycharge (i), xcharge (i) - 2: print "(( ))";

    label nextcharge
next

if killed then goto gameover

return

label firecharge

if killed then return

if xfire < 1 or xfire > 40 then return

if freecharge = 0 then return
x= freecharge
freecharge= ycharge (x)

xcharge (x)= xfire
ycharge (x)= sealevel - 1
rem pen color_sub: paper color_sea
rem locate ycharge (x), xcharge (x): print charge$;
rem pen color_boat

return

label moveboats

local i

pen color_boat, 0: paper color_sky

cls #boatwin

pen , 1

for iboat= 1 to maxboat
    if xboat (iboat) = 0 then goto nextboat
    xboat (iboat)= xboat (iboat) + incboat (iboat)
    if (incboat (iboat) < 0 and xboat (iboat) < 1) or (incboat (iboat) > 0 and xboat (iboat) > 37) then xboat (iboat)= 0: nboat= nboat - 1: goto nextboat

    locate boatlevel, xboat (iboat)
    if incboat (iboat) > 0 then print boat$; else print boat2$;

    if rnd > probcharge! then goto nextboat
    xfire= xboat (iboat)
    if incboat (iboat) > 0 then xfire= xfire + 4: else xfire= xfire - 2
    gosub firecharge

    label nextboat
next

if nboat >= maxboat or rnd > probboat! then goto endmoveboats

posboat= 0
for i= 1 to maxboat
    if xboat (i) = 0 then posboat= i: i= maxboat
next
if posboat= 0 then goto endmoveboats

nboat= nboat + 1

if rnd > 0.5 then goto boatfromright

xboat (posboat)= 1
incboat (posboat)= 1

goto finishboat

label boatfromright

xboat (posboat)= 37
incboat (posboat)= -1

label finishboat

locate boatlevel, xboat (posboat): print boat$;

label endmoveboats

for i= 1 to maxglub
    if xglub (i) = 0 then goto nextglub
    countglub (i)= countglub (i) - 1
    if countglub (i) = 0 then xglub (i)= 0: goto nextglub
    g= int (countglub (i) / 3)
    locate boatlevel, xglub (i) : print glub$ (g);

    label nextglub
next

return

label firebomb
    if nbomb >= maxbomb then return

    posbomb= 0
    for i= 1 to maxbomb
        if xbomb (i) = 0 then posbomb= i: i= maxbomb
    next
    if posbomb = 0 then return

    nbomb= nbomb + 1
    ybomb (posbomb)= ysub - 1
    xbomb (posbomb)= xsub + 2
    counter (posbomb)= inicount
    locate ybomb (posbomb), xbomb (posbomb): print bomb$;
return

label printpoints

locate 25, 1: print using "Points: ######", points;

return


label markend

endnow= not 0

return


label gameover

synchronize

set_title "Deep Sea: game over"

for i= 1 to 2
    gosub moveboats
    synchronize
    pause 200
next

clear input

on #0 gosub markend

colrot= 0
posx= 5

while not endnow
    g$= "GAME": posy= sealevel + 2: gosub rotulo

    for i= 1 to 3
        gosub moveboats
        synchronize
        pause 200
        if endnow then pull for: goto endloopover
    next

    if endnow then goto endloopover

    g$= "OVER": posy= sealevel + 10: gosub rotulo

    for i= 1 to 3
        gosub moveboats
        synchronize
        pause 200
        if endnow then pull for: goto endloopover
    next

    if colrot = 0 then colrot= 15 else colrot= 0

    label endloopover
wend

label finalize

on #0 gosub 0
synchronize 0
pen 1, 0
paper color_sky
clear input
scroll

end

label rotulo

l= len (g$)
for i= 0 to 7
    pen colrot, 0
    for j= 1 to l
        posj= (j - 1) * 8
        c= asc (mid$ (g$, j, 1) )
        n= peek (charset + c * 8 + i)
        m= 128
        for k= 0 to 7
            if n >= m then locate posy + i, posx + k + posj: print black$; : n= n - m
            m= m \ 2
            if endnow then pull for: pull for: pull for: return
        next
    next
    if killed then checkmove= (checkmove + 1) mod 3: if checkmove = 1 then gosub moveboats
    synchronize
    pause 50
next

return

label clearscreen

paper color_sea
cls

cls #skywin

return

label defchars

symbol after 230

symbol 253,   0,   0,   0,  31, 127, 255, 127,  31
symbol 254, 248, 248, 248, 255, 255, 255, 255, 255
symbol 255,   0,   0,   0, 248, 254, 255, 254, 248
sub$= chr$ (253) + chr$ (254) + chr$ (255)

symbol 250,   0,   0,   0,   0, 255, 255, 127,  63
symbol 251,   4,   4, 255, 255, 255, 255, 255, 255
symbol 252,   0,   0,   0,   0, 255, 252, 240, 192
boat$= chr$ (250) + chr$ (251) + chr$ (252)

symbol 232,   0,   0,   0,   0, 255, 255, 254, 248
symbol 231,  32,  32, 255, 255, 255, 255, 255, 255
symbol 230,   0,   0,   0,   0, 255,  63,  15,   3
boat2$= chr$ (230) + chr$ (231) + chr$ (232)

symbol 249,  16,  56,  56,  56,  56,  56, 124, 214
bomb$= chr$ (249)

symbol 248,  16,  56, 124, 254, 127,  62,  28,   8
charge$= chr$ (248)

symbol 247, 255, 255, 255, 255, 255, 255, 255, 255
black$= chr$ (247)

dim glub$ (6)
symbol 244,   0, 224, 124, 127,  63,  63,  31,  31
symbol 245,   0,   0,   0, 128, 240, 254, 255, 255
symbol 246,   0,   0,   0,   0,   0,   0, 192, 248
glub$ (6)= chr$ (244) + chr$ (245) + chr$ (246)

symbol 241,   0,   0, 224, 124, 127,  63,  63,  31
symbol 242,   0,   0,   0,   0, 128, 240, 254, 255
symbol 243,   0,   0,   0,   0,   0,   0,   0, 192
glub$ (5)= chr$ (241) + chr$ (242) + chr$ (243)

symbol 239,   0,   0,   0, 224, 124, 127,  63,  63
symbol 240,   0,   0,   0,   0,   0, 128, 240, 254
glub$ (4)= chr$ (239) + chr$ (240)

symbol 237,   0,   0,   0,   0, 224, 124, 127,  63
symbol 238,   0,   0,   0,   0,   0,   0, 128, 240
glub$ (3)= chr$ (237) + chr$ (238)

symbol 235,   0,   0,   0,   0,   0, 224, 124, 127
symbol 236,   0,   0,   0,   0,   0,   0,   0, 128
glub$ (2)= chr$ (235) + chr$ (236)

symbol 234,   0,   0,   0,   0,   0,   0, 224, 124
glub$ (1)= chr$ (234)

symbol 233,   0,   0,   0,   0,   0,   0,   0, 224
glub$ (0)= chr$ (233)

return

REM ve ' ile başlayan satırlar, açıklamalar içerirler ve program içinde bir işlevleri yok.
 

Son mesajlar

Üst