Sözde Kod Örnekleri
Cambridge IGCSE ve A-Level sözde kodunda 15 çözümlü örnek: ilk OUTPUT satırından kabarcık sıralamasına kadar. Her biri çıktısını gösterir ve hepsini aşağıdaki düzenleyicide çalıştırabilirsin.
Bu örnekler nasıl okunur?
Sözde kod, bir programın adımlarını gerçek bir programlama dilinin katı kuralları olmadan, İngilizceye yakın yapılandırılmış bir dille anlatır. Aşağıdaki her örnek, IGCSE ve A-Level sınavlarında kullanılan Cambridge stilini izler: değişkenler için DECLARE, atama için ←, yazdırmak için OUTPUT, ve ENDIF, NEXT ya da ENDWHILE ile kapanan bloklar.
Her örnek bir problemi tanımlar, sözde kodunu verir, ürettiği çıktıyı gösterir ve nasıl çalıştığını açıklar. Bir örneği sayfanın en üstündeki düzenleyiciye yüklemek için Düzenleyicide çalıştır düğmesine bas; orada satır satır ilerleyip değişkenlerin değişimini izleyebilirsin. Söz dizimine yeni misin? Sözde kod düzenleyicisinde her yapının tıklanabilir bir kütüphanesi var.
1. Hello, World
Ekrana bir mesaj yazdır.
OUTPUT "Hello, World!"Hello, World!OUTPUT ardından gelen her şeyi yazdırır; metin çift tırnak içine yazılır. Bu tek satır başlı başına bir programdır: sözde kodda main fonksiyonu ya da import gerekmez.
2. İki sayıyı topla
İki tam sayıyı sakla, topla ve toplamı yazdır.
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", totalThe total is 42Her değişken kullanılmadan önce bir ad ve bir türle bildirilir. ← oku bir değer saklar, bu yüzden total ← a + b satırını "total, a artı b olur" diye oku. OUTPUT içindeki virgül, metni ve değeri aynı satırda birleştirir.
3. Tek mi, çift mi?
Bir sayının tek mi çift mi olduğuna karar ver.
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
OUTPUT n, " is even"
ELSE
OUTPUT n, " is odd"
ENDIF17 is oddMOD bölmeden kalanı verir. Çift bir sayı 2'ye bölününce kalan bırakmaz, bu yüzden test n MOD 2 = 0 olur. IF iki daldan birini seçer, ENDIF de bloğu kapatır. Sözde kodda tek bir = iki değeri karşılaştırır; asla atama yapmaz.
4. Sınav puanını harf notuna çevir
100 üzerinden bir puanı harf notuna çevir: 80 ve üzeri A, 60 ile 79 arası B, 60'ın altı C.
DECLARE score : INTEGER
DECLARE grade : CHAR
score ← 74
IF score >= 80 THEN
grade ← 'A'
ELSE
IF score >= 60 THEN
grade ← 'B'
ELSE
grade ← 'C'
ENDIF
ENDIF
OUTPUT "Score ", score, " gets grade ", gradeScore 74 gets grade BKontroller en yüksek sınırdan aşağıya doğru yapılır; 74 puan ilk testi geçemez, ikinciyi geçer. Bir IF'i başka bir IF bloğunun ELSE kısmına koymak, Cambridge sözde kodunda else-if zinciri yazmanın yoludur. CHAR tek tırnak içinde tek bir karakter tutar.
5. 1'den 10'a kadar sayıların toplamı
1'den 10'a kadar bütün tam sayıları topla.
DECLARE total : INTEGER
DECLARE i : INTEGER
total ← 0
FOR i ← 1 TO 10
total ← total + i
NEXT i
OUTPUT "Sum of 1 to 10 is ", totalSum of 1 to 10 is 55FOR döngüsü sabit sayıda çalışır: i sırasıyla 1, 2, 3 değerlerini alarak 10'a kadar gider, NEXT i de döngü gövdesinin bittiği yeri gösterir. Ara toplam 0'dan başlar ve her turda büyür. Sonuç olan 55, n(n + 1) / 2 formülünün verdiği değerle aynıdır.
6. Çarpım tablosu yazdır
7 çarpım tablosunun ilk beş satırını yazdır.
DECLARE i : INTEGER
FOR i ← 1 TO 5
OUTPUT "7 x ", i, " = ", 7 * i
NEXT i7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35Döngü sayacı i hesaplamanın içinde kullanılır, bu yüzden her tur farklı bir satır yazdırır. OUTPUT, virgüllerle birden fazla metin parçasını ve değeri birleştirebilir.
7. WHILE döngüsüyle geri sayım
5'ten 1'e geri say, sonra bir kapanış mesajı yazdır.
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
OUTPUT count
count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"5
4
3
2
1
Liftoff!WHILE döngüsü koşulunu her turdan önce kontrol eder ve koşul yanlış olur olmaz durur. Burada koşul count > 0, gövde de her seferinde count değerini bir azaltır. Azaltan satırı çıkarırsan döngü hiç bitmez. Kaç tur gerektiğini önceden bilmediğinde WHILE kullan.
8. Dizideki en büyük sayıyı bul
Altı sayılık bir listedeki en büyük değeri bul.
DECLARE nums : ARRAY[1:6] OF INTEGER
DECLARE i : INTEGER
DECLARE largest : INTEGER
nums[1] ← 14
nums[2] ← 3
nums[3] ← 27
nums[4] ← 9
nums[5] ← 21
nums[6] ← 6
largest ← nums[1]
FOR i ← 2 TO 6
IF nums[i] > largest THEN
largest ← nums[i]
ENDIF
NEXT i
OUTPUT "The largest number is ", largestThe largest number is 27ARRAY[1:6], 1'den 6'ya numaralanmış altı yer bildirir, çünkü Cambridge dizileri genellikle 1'den başlar. Program ilk elemanın en büyük olduğunu varsayar, sonra diğer her elemanı onunla karşılaştırır ve hangisi büyükse onu tutar. Dizi baştan sona bir kez gezildikten sonra cevap largest içindedir.
9. Ortalama hesapla
Dört sınav notunun ortalamasını bul.
DECLARE marks : ARRAY[1:4] OF INTEGER
DECLARE i : INTEGER
DECLARE total : INTEGER
marks[1] ← 70
marks[2] ← 85
marks[3] ← 64
marks[4] ← 91
total ← 0
FOR i ← 1 TO 4
total ← total + marks[i]
NEXT i
OUTPUT "Average mark: ", total / 4Average mark: 77.5Döngü dizinin her elemanını total değişkenine ekler, sonra program toplamı not sayısına böler. / operatörü ondalıklı bir sonuç verir; çıktının 77.5 olmasının nedeni budur. Tam sayı bölmesi istediğinde bunun yerine DIV kullan.
10. Doğrusal arama
Bir isim listesinde Dara adının konumunu bul.
DECLARE names : ARRAY[1:5] OF STRING
DECLARE i : INTEGER
DECLARE found : BOOLEAN
names[1] ← "Ana"
names[2] ← "Ben"
names[3] ← "Chen"
names[4] ← "Dara"
names[5] ← "Eli"
found ← FALSE
i ← 1
WHILE i <= 5 AND found = FALSE DO
IF names[i] = "Dara" THEN
found ← TRUE
ELSE
i ← i + 1
ENDIF
ENDWHILE
IF found = TRUE THEN
OUTPUT "Dara is at position ", i
ELSE
OUTPUT "Not found"
ENDIFDara is at position 4Doğrusal arama elemanları baştan başlayarak tek tek kontrol eder. WHILE koşulu, isim bulunduğunda ya da her eleman kontrol edildiğinde döngüyü durdurur; found bayrağı bu ikisinden hangisinin olduğunu kaydeder. Sıralanmamış verilerde de çalışır, ama uzun bir listede eleman başına bir karşılaştırma gerekebilir.
11. Kabarcık sıralaması
Beş sayıyı küçükten büyüğe sırala.
DECLARE nums : ARRAY[1:5] OF INTEGER
DECLARE i : INTEGER
DECLARE j : INTEGER
DECLARE temp : INTEGER
nums[1] ← 5
nums[2] ← 1
nums[3] ← 4
nums[4] ← 2
nums[5] ← 8
FOR i ← 1 TO 4
FOR j ← 1 TO 5 - i
IF nums[j] > nums[j + 1] THEN
temp ← nums[j]
nums[j] ← nums[j + 1]
nums[j + 1] ← temp
ENDIF
NEXT j
NEXT i
FOR i ← 1 TO 5
OUTPUT nums[i]
NEXT i1
2
4
5
8Kabarcık sıralaması her komşu çifti karşılaştırır ve yanlış sıradaysa yerlerini değiştirir. Dış döngünün her turundan sonra kalan en büyük değer sona gitmiş olur; bu yüzden iç döngü her seferinde bir eleman erken durabilir. Yer değiştirme için üçüncü bir değişken gerekir: temp, diğer değer kopyalanırken bir değeri tutar.
12. Fonksiyonla faktöriyel
n faktöriyeli (n!) döndüren bir fonksiyon yaz, sonra onunla 5!'i hesapla.
FUNCTION Factorial(n : INTEGER) RETURNS INTEGER
DECLARE result : INTEGER
DECLARE i : INTEGER
result ← 1
FOR i ← 2 TO n
result ← result * i
NEXT i
RETURN result
ENDFUNCTION
OUTPUT "5! = ", Factorial(5)5! = 120Bir FUNCTION parametre alır, işini yapar ve RETURN ile bir değer geri verir; başlığı döndürdüğü türü belirtir. İçinde bildirilen değişkenler yalnızca fonksiyon çalışırken vardır. 5! = 5 × 4 × 3 × 2 × 1, yani 120'dir.
13. Bir kelimedeki ünlüleri say
PSEUDOCODE kelimesinde kaç ünlü harf olduğunu say.
DECLARE word : STRING
DECLARE letter : CHAR
DECLARE vowels : INTEGER
DECLARE i : INTEGER
word ← "PSEUDOCODE"
vowels ← 0
FOR i ← 1 TO LENGTH(word)
letter ← SUBSTRING(word, i, 1)
IF letter = 'A' OR letter = 'E' OR letter = 'I' OR letter = 'O' OR letter = 'U' THEN
vowels ← vowels + 1
ENDIF
NEXT i
OUTPUT word, " has ", vowels, " vowels"PSEUDOCODE has 5 vowelsLENGTH bir string'deki karakter sayısını verir, SUBSTRING(word, i, 1) ise i konumundan başlayan tek bir karakter alır. Döngü her karakteri dolaşır ve karakter A, E, I, O ya da U olduğunda sayacı bir artırır.
14. FizzBuzz
1'den 15'e kadar sayıları yazdır; ama 3'ün katları için Fizz, 5'in katları için Buzz, ikisinin de katı olanlar için FizzBuzz yazdır.
DECLARE i : INTEGER
FOR i ← 1 TO 15
IF i MOD 15 = 0 THEN
OUTPUT "FizzBuzz"
ELSE
IF i MOD 3 = 0 THEN
OUTPUT "Fizz"
ELSE
IF i MOD 5 = 0 THEN
OUTPUT "Buzz"
ELSE
OUTPUT i
ENDIF
ENDIF
ENDIF
NEXT i1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzzKontrollerin sırası önemlidir. 15 hem 3'ün hem 5'in katıdır, bu yüzden 15 testi önce gelmelidir; yoksa program Fizz yazdırır ve FizzBuzz'a hiç ulaşmaz. Tam da bu tür bir akıl yürütmeyi ölçtüğü için klasik bir mülakat ısınma sorusudur.
15. REPEAT UNTIL ile şifre denemeleri
Sırayla en fazla üç şifre dene ve biri doğruysa erişim ver.
DECLARE attempts : ARRAY[1:3] OF STRING
DECLARE tries : INTEGER
DECLARE guess : STRING
attempts[1] ← "hunter1"
attempts[2] ← "letmein"
attempts[3] ← "open sesame"
tries ← 0
REPEAT
tries ← tries + 1
guess ← attempts[tries]
OUTPUT "Try ", tries, ": ", guess
UNTIL guess = "open sesame" OR tries = 3
IF guess = "open sesame" THEN
OUTPUT "Access granted"
ELSE
OUTPUT "Locked out"
ENDIFTry 1: hunter1
Try 2: letmein
Try 3: open sesame
Access grantedREPEAT ... UNTIL döngüsü koşulunu sonda kontrol eder, bu yüzden gövde her zaman en az bir kez çalışır. Şifre eşleştiğinde ya da üçüncü denemeden sonra durur. Tahminler bir diziden gelir, böylece örnek klavyeden bir şey yazmadan çalışır; bir sınav cevabında genellikle her birini INPUT ile okursun.
Sözde kod örnekleri SSS
Basit bir sözde kod örneği nasıl olur?
Kısa bir örnek, bir sınavın geçilip geçilmediğine karar verir: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. Neredeyse İngilizce gibi okunur ama sabit kurallara uyar; bu yüzden satır satır Python'a, Java'ya ya da başka bir dile çevrilebilir. Bu sayfadaki 15 program tek satırlık bir programdan arama ve sıralamaya kadar gider.
Sözde kod nasıl yazılır?
Önce programın ne yapması gerektiğine karar ver, sonra adımları küçük bir anahtar sözcük kümesiyle sırayla yaz: değişkenler için DECLARE, atama için ←, kararlar için IF, tekrar için FOR ya da WHILE, sonuçlar için OUTPUT. Her bloğun gövdesini girintile, bloğu kendi bitiş anahtar sözcüğüyle kapat ve her satırda tek bir işlem yap.
Sözde kod her sınavda aynı mı?
Hayır. Cambridge (IGCSE ve A-Level) DECLARE ve ← okunu kullanır, AQA bildirim olmadan ← kullanır, OCR'ın Exam Reference Language'i Python'a benzer, Edexcel ise SET ... TO yazar. Buradaki örnekler Cambridge stilindedir; sözde kod düzenleyicisi dört stilin hepsi arasında geçiş yapabilir.
Sözde kodu çalıştırabilir miyim?
Evet, bu sayfada. Sözde kod gerçek bir programlama dili olmadığı için resmi bir derleyicisi yoktur, ama buradaki düzenleyici Cambridge sözde kodunu tarayıcında çalıştırır, çıktıyı gösterir ve satır satır ilerler. Herhangi bir örneğin altındaki Düzenleyicide çalıştır düğmesine bas.
Sözde kod ile akış şeması arasındaki fark nedir?
İkisi de bir algoritmayı kodlanmadan önce tanımlar. Akış şeması adımları kutular ve oklarla çizer; bu da az sayıda karar içeren kısa süreçlere uygundur. Sözde kod ise adımları yapılandırılmış metin olarak yazar; daha uzun programlara ölçeklenir ve gerçek koda daha doğrudan dönüşür.
Sözde kodda değişken bildirmek zorunlu mu?
Cambridge sözde kodunda evet: değerlendirme ölçütleri, bir değişken kullanılmadan önce DECLARE name : TYPE yazılmasını bekler. AQA'nınki gibi başka stiller bildirimi atlar. Bir değişkeni bildirmek, okuyana onun hangi türde bir değer tuttuğunu da söyler.