Kitaplar / Yöntem ile Programlamaya Giriş / Bölüm 7 — Metinler, listeler, sözlükler ve diziler
Bölüm 7 — Metinler, listeler, sözlükler ve diziler
Tek bir değer yerine bir değer topluluğu ile çalışmak için koleksiyonlar kullanılır. Bir kuralı en baştan akılda tutmakta yarar vardır: metinler 1’den, listeler 0’dan numaralanır. İlki Turbo Pascal geleneğidir, ikincisi ise modern dillerin alışkanlığıdır.
Metinler
program Metinler
değişken
s: metin
kelimeler: liste
i: tamsayı
başla
s := 'Yöntem dili'
yaz('Uzunluk : ' + Uzunluk(s), 1)
yaz('İlk harf : ' + s[1], 1) // metinler 1'den başlar
yaz('Son harf : ' + s[Uzunluk(s)], 1)
yaz('AltMetin : ' + AltMetin(s, 8, 4), 1)
yaz('Konum(''dil'') : ' + Konum('dil', s), 1)
yaz('Büyük harf : ' + s.BüyükHarf, 1)
yaz('Değiştir : ' + Değiştir(s, 'dili', 'programı'), 1)
kelimeler := Ayır('elma,armut,kiraz', ',')
yaz('Ayır : ' + kelimeler, 1)
yaz('Birleştir : ' + Birleştir(kelimeler, ' + '), 1)
yaz('Tersten : ')
Uzunluk(s)'den 1'e adımda 1 azalan her i için yaz(s[i])
yaz('', 1)
bitir.Uzunluk : 11
İlk harf : Y
Son harf : i
AltMetin : dili
Konum('dil') : 8
Büyük harf : YÖNTEM DİLİ
Değiştir : Yöntem programı
Ayır : ['elma', 'armut', 'kiraz']
Birleştir : elma + armut + kiraz
Tersten : ilid metnöYMetin işlevlerinin çoğu iki biçimde yazılabilir: BüyükHarf(s) ya da s.BüyükHarf. Hangisi size daha okunaklı geliyorsa onu kullanabilirsiniz.
Listeler
program Listeler
değişken
notlar: liste
n: herhangi
toplam: ondalık
başla
notlar := [72, 85, 90, 64]
notlar.Ekle(78) // sona ekle
yaz('Notlar : ' + notlar, 1)
yaz('İlk not : ' + notlar[0], 1) // listeler 0'dan başlar
yaz('Not sayısı : ' + notlar.Uzunluk, 1)
yaz('Sıralı : ' + Sırala(notlar), 1)
yaz('En yüksek : ' + Maks(notlar), 1)
toplam := 0
notlar içindeki her n için toplam += n
yaz('Ortalama : ' + toplam / Uzunluk(notlar), 1)
yaz('85 var mı? : ' + (85 içinde notlar), 1)
yaz('1..5 : ' + [1..5], 1)
notlar[0] := 100
Sil(notlar, 1)
yaz('Değişmiş : ' + notlar, 1)
bitir.Notlar : [72, 85, 90, 64, 78]
İlk not : 72
Not sayısı : 5
Sıralı : [64, 72, 78, 85, 90]
En yüksek : 90
Ortalama : 77.8
85 var mı? : doğru
1..5 : [1, 2, 3, 4, 5]
Değişmiş : [100, 90, 64, 78]Sırala yeni, sıralı bir liste döndürür; asıl liste değişmez. Sil(notlar, 1) 1 numaralı elemanı (notlar[1]) çıkarır. [1..5] bir aralığı listeye çevirir.
Sözlükler
Sözlük, anahtar → değer çiftlerini saklar. Bir değere sıra numarasıyla değil, adıyla ulaşırsınız.
program Sözlükler
değişken
başkent: sözlük
ülke, şehir: herhangi
sayım: sözlük
başla
başkent := ['Türkiye': 'Ankara', 'Fransa': 'Paris', 'Japonya': 'Tokyo']
başkent['Mısır'] := 'Kahire' // yeni anahtar ekle
yaz('Fransa''nın başkenti: ' + başkent['Fransa'], 1)
yaz('Ülke sayısı: ' + Uzunluk(başkent), 1)
başkent içindeki her ülke, şehir için
yaz(' ' + ülke + ' -> ' + şehir, 1)
yaz('İtalya kayıtlı mı? ' + ('İtalya' içinde başkent), 1)
yaz('Varsayılanla al: ' + başkent.Al('İtalya', 'bilinmiyor'), 1)
sayım := Say(Ayır('bir iki bir üç iki bir'))
yaz('Sözcük sayıları: ' + sayım, 1)
bitir.Fransa'nın başkenti: Paris
Ülke sayısı: 4
Türkiye -> Ankara
Fransa -> Paris
Japonya -> Tokyo
Mısır -> Kahire
İtalya kayıtlı mı? yanlış
Varsayılanla al: bilinmiyor
Sözcük sayıları: ['bir': 3, 'iki': 2, 'üç': 1]- Sözlük yazımı köşeli parantez ve iki noktadır:
['anahtar': değer]. Boş sözlük[:]olarak yazılır. - Olmayan bir anahtarı okumak hatadır. Emin değilseniz
içindeile denetleyebilir ya da.Al(anahtar, varsayılan)kullanabilirsiniz. sözlük içindeki her a, d içinanahtarı ve değeri birlikte verir.Saybir listedeki elemanları sayar. Metin çözümlemede çok işe yarar.
Boyutu sabit listeler
Bazı veriler baştan belli sayıda elemandan oluşur: haftanın 7 günü, yılın 12 ayı. Böyle durumlarda listenin boyutunu Uzunluk ile sabitleyebilir ve elemanları istediğiniz sayıdan başlayarak numaralayabilirsiniz. sıcaklık.Uzunluk(7, 1) listeyi 7 elemanlı yapar ve ilk elemana 1 numarasını verir; sınır dışına çıkmak anında yakalanır.
program SabitListe
değişken
sıcaklık: ondalık listesi
gün: tamsayı
başla
sıcaklık.Uzunluk(7, 1)
1'den 7'ye kadar her gün için
sıcaklık[gün] := 20 + gün * 1.5
yaz(sıcaklık, 1)
yaz('Sınırlar: ' + sıcaklık.Alt + '..' + sıcaklık.Üst, 1)
sıcaklık[8] := 30
bitir.[21.5, 23.0, 24.5, 26.0, 27.5, 29.0, 30.5]
Sınırlar: 1..7
Çalışma hatası [d5.y, satır 11] Liste dizini sınır dışı: 8 (geçerli 1..7)Uzunluk çağrısının iki biçimi vardır:
| Yazım | Sonuç |
|---|---|
L.Uzunluk(12) |
12 elemanlı liste; numaralar 0’dan başlar (0..11) |
L.Uzunluk(12, 1) |
12 elemanlı liste; numaralar 1’den başlar (1..12) |
Yeni elemanlar tipin başlangıç değeriyle dolar (sayılarda 0, metinlerde boş metin); listede önceden eleman varsa baştan itibaren korunur. Boyutu sabitlenen liste ile serbest liste arasındaki farkı akılda tutmakta yarar vardır:
| Serbest liste | Boyutu sabit liste | |
|---|---|---|
| Bildirim | notlar: tamsayı listesi |
sıcaklık: ondalık listesi, ardından sıcaklık.Uzunluk(7, 1) |
| Numaralar | 0’dan başlar | Sizin verdiğiniz sayıdan başlar (burada 1..7) |
| Sınırlar | 0 ve Uzunluk(notlar) - 1 |
sıcaklık.Alt ve sıcaklık.Üst |
| Boyut | Değişir: Ekle, Sil |
Sabittir; yalnızca yeni bir Uzunluk çağrısıyla değişir |
| Sona eklemek | Ekle(notlar, 95) |
Eklenemez |
| Araya eklemek | Ekle(notlar, 95, 1) (konum 1’e) |
Eklenemez |
| 2 numaralı elemanı silmek | notlar.Sil(2) |
Silinemez |
Ekle iki biçimde kullanılır: Ekle(notlar, 95) elemanı sona ekler; Ekle(notlar, 95, 1) ise elemanı 1 numaralı konuma yerleştirir ve sonraki elemanları birer sıra kaydırır: önce eklenecek değer, sonra konum yazılır. Aynı işlemleri nokta ile de yazabilirsiniz: notlar.Ekle(95), notlar.Ekle(95, 1).
Bir elemanı silmenin üç yazımı vardır ve üçü de aynı işi yapar:
notlar.Sil(2)
notlar(2).Sil
notlar listesindeki 2. elemanı SilÜçü de 2 numaralı elemanı, yani notlar[2]’yi siler. Listede elemanlar 0’dan numaralandığı için bu, baştan üçüncü sıradaki elemandır. Konumu hesaplayarak vermek isterseniz cümle biçiminde ayraç kullanabilirsiniz: notlar listesindeki (i + 1). elemanı Sil. Sil çıkardığı elemanı döndürür; x := notlar.Sil(0) yazarak onu bir değişkene alabilirsiniz.
Boyutu sabitlenmiş bir listeye Ekle ya da Sil uygulamak hata verir. Boyutu değiştirmek isterseniz Uzunluk çağrısını yeni değerlerle yineleyebilir, serbest bir kopya gerekiyorsa liste(sıcaklık) yazabilirsiniz. Tip adlarında tamsayı dizisi ile tamsayı listesi aynı anlama gelir.