Konuya hiç beklemeden bir örnekle başlayalım.
Ekranda alt alta “Paint Yazılım” ifadesini aşağıda gösterildiği gibi küçükten büyüğe doğru artan yazıtipi büyüklüğü ile yazdıracağız:
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
İstediğimiz görüntüyü verecek kod aşağıdaki gibi olacaktır:

Örneğimizde olduğu gibi belirli bir kural dahilinde tekrarlanan işlemlerde, işlemi gerçekleştiren kodun da hemen hemen tamamının işlem sayısı kadar tekrarlanması zorunluluğu ortaya çıkmaktadır. Bu da, iyi bir programcının uzak durması gereken en önemli problemlerden birisi olan gereksiz kod kalabalığına yol açmaktadır.

Bu gibi durumlar için geliştirilen programatik yapılara döngü adı verilir. Döngüler, belirli bir düzen içinde tekrarlanan kodların sadece bir defa yazılmasını sağlarlar.

Genel olarak döngüleri iki başlık altında sınıflandırabiliriz.

Bunlardan ilki, döngü tarafından değeri otomatik olarak artırılan bir sayaç değişkeninin bulunduğu sayaçlı döngülerdir.

Diğer tür olan koşullu döngülerde ise döngünün sonlanması için belirli bir koşulun sağlanması söz konusudur.

Sayaçlı Döngüler

Belirli bir indis değişkenine bağlı olarak işlem yapan döngü türleridir. PHP’de iki tür sayaçlı döngü vardır: For döngüsü ve Foreach döngüsü.

For döngüsünde indis değişkeninin doğrudan döngünün tanımlama bloğu içerisinde belirtilmesi gerekir.

Foreach döngüsünde ise indis değişkeninin yerini bir dizi alır.

Dizinin kendi yapısında bir indis değeri zaten tanımlı olduğundan,

Foreach yapısında sayaç olarak bu indis değerinin kullanıldığı söylenebilir.

Sayaçlı Döngüler – For Döngüsü

For döngüsünün genel yapısı aşağıdaki gibidir:

Başlangıç değeri çoğunlukla sayaç işlevini görecek değişkene ilk değerinin atanması şeklinde belirlenir.

Bitiş değeri, her döngü adımında yeniden hesaplanan bir Boolean değer üretir. Sonuç True olduğu sürece döngü çalışır, aksi halde sonlanır. Genellikle sayaç değişkeni için bir üst sınır değerinin atanması şeklinde belirlenir.

Artış miktarı sayaç değişkeninin nasıl artacağının (ya da azalacağının) belirlendiği parametredir.

Örnek olarak, daha önce yaptığımız “Paint Yazılım” uygulamasını bu kez For döngüsünü kullanarak gerçekleştirelim.

Sonuç yine ilk örnekle aynı olacaktır. Ancak kodun ilk hali ile karşılaştırıldığında kod kalabalığının oldukça azaldığı ve gayet sade bir kod olduğunu göreceksiniz.

Burada sayaç değişkeni olarak $i belirlenmiş, bu değer yazıtipi büyüklüğünü 1’den 7’ye kadar artırmak için kullanılmıştır.

Başka bir örnek verecek olursak. Aşağıdaki gibi bir ekran çıktısı almak istiyoruz:
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım
Paint Yazılım

Yukarıda bulunan 13 satır HTML kodu az gibi görünebilir fakat bu satırları binlerce hatta onbinlerce olduğunu düşünürsek her bir satırı yazmamız gerekecek. Bu hem zaman kaybı hem de kod kalabalığı olacaktır. Bunun önüne geçmek ise yalnızca 4 satır kodla yazmak kadar kolaydır. Örneğimizin kod bloğunu hemen aşağıya bırakalım.

Diğer bir örnek, bilinen faktöriyel işlemini gerçekleştirecek döngünün tanımlanmasıdır.

Örnekte, 8 sayısının faktöriyeli, yani 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 çarpımı hesaplanmaktadır.

Sayaçlı Döngüler – Foreach Döngüsü

Foreach döngüsünün genel yapısı aşağıdaki gibidir:

Giriş parametresi olarak dizi kullanan Foreach döngüsü, her bir tekrarda dizinin sıradaki değerini $deger değişkenine aktarır.

Sonuç:

Sonuç:

Burada $v1 değişkeni $a dizinin birinci ve ikinci boyutunu oluşturan iki diziyi temsil etmektedir. $v2 değişkeni ise bu tek boyutlu dizilerin terimlerini gösterir.

Koşullu Döngüler

Koşullu döngülerde, tekrarlanacak kodun tekrar sayısı bir koşul tarafından belirlenir. Bu tür döngü yapılarında otomatik olarak artan bir sayaç değişkeni bulunmamaktadır.

Koşullu döngülerin iki alt türü vardır. Bunlardan ilki koşulun döngü başlangıcında denetlendiği yapılardır. Bu durumda koşul sağlanmadığı takdirde döngü içerisindeki kod hiçbir şekilde çalışmaz.

Diğer alt türde ise koşul, döngünün sonunda denetlenir. Birinci yapıdan farklı olarak bu durumda, koşul ne olursa olsun döngü içerisindeki koşul en az bir defa çalıştırılacaktır.

Söz edilen döngü türlerinin PHP’deki karşılıkları sırasıyla While ve Do While döngü ifadeleridir.

Koşullu Döngüler – While Döngüsü

While döngüsünün genel yapısı aşağıdaki gibidir:

Kelime anlamı “iken” olan while deyimi, döngünün etki alanında kalan kodu koşul sağlandığı sürece çalıştıracaktır. Bu yapıda otomatik olarak artan bir sayaç değeri bulunmamaktadır, eğer bir sayaç kullanılması gerekiyorsa bunun kontrolünün programcı tarafından ayrıca yapılması gerekmektedir.

Sonuç: 1 2 3 4 5 6 7 8 9 10 şeklinde olacaktır.

Gelin while döngüsünün çalışma şeklini daha karmaşık bir örnek üzerinde inceleyelim.

153 sayısının aşağıdaki gibi bir aritmetik özelliği vardır: 1³ + 5³ +3³ = 153

Yani 153 sayısının basamaklarının küplerinin toplamı, yine sayının kendisine eşittir. Acaba 100 ile 999 arasında bu özelliğe sahip başka bir üç basamaklı sayı var mıdır?

Problemin çözümü için şu yolu izleyeceğiz:

Yüzler basamağını 1 ile 9, onlar ve birler basamaklarını ise 0 ile 9 arasında bir döngüye sokarak, iç-içe oluşturulan bu döngüsel yapı içerisinde basamakların küplerinin toplamının sayının bütününe eşit olup olmadığına bakacağız. Eğer eşit ise bu sayının basamaklarını yazdıracağız. Sonuç olarak ekranda görüntülenen sayılar, 100 ile 999 arasında -eğer varsa- 153 ile aynı özelliğe sahip sayıların basamakları olacaktır.

Kod çalıştırıldığında ekranda aşağıdaki sayılar görüntülenecektir:

Koşullu Döngüler – Do While Döngüsü

While ve do while döngü yapıları arasındaki farkı daha açık olarak gösterebileceğimiz bir örnek geliştirelim.

$a herhangi bir pozitif tamsayı olmak üzere, bu değerden başlayarak sıradaki her terimi aşağıdaki kurala elde edilecek bir sayı dizisi oluşturalım:

Eğer $a çift sayı ise bir sonraki terim=$a/2;

Aksi halde bir sonraki terim=3*$a+1.

Örneğin $a=5 olsun. Bu sayı tek olduğundan bir sonraki terim, 3*5+1=16 olacaktır.

16 çift olduğundan bir sonraki terim 16/2=8 olacaktır. Böylece dizinin terimleri; 5,16,8,4,2,1,4,2,1,4,2,1,… biçiminde gidecektir. Görüldüğü gibi dizinin terimi 1’e ulaştıktan sonra 4,2,1 kısır döngüsüne ulaşmaktadır. Üstelik hangi değerle başlanırsa başlansın, sonuçta dizi mutlaka bu kısır döngüye takılıp kalmaktadır.

Bilgisayarlar kullanılarak milyonlarca başlangıç değeri için dizinin 1 değerine ulaştığının gözlemlenmesine karşın, bunun her pozitif tamsayı için böyle olacağı günümüze kadar matematiksel olarak kanıtlanamamıştır. “Collatz Problemi” olarak bilinen bu problem, henüz çözülmemiş ödüllü bir problemdir.

Aşağıda aynı örneğin iki döngü yapısı kullanılarak geliştirilmiş biçimleri yer almaktadır.

Böylece her iki kod da çalıştırıldığında aynı sonuç elde edilir: 5 16 8 4 2 1

Bu örneğimizde bir kömür kuyusu ve o kuyudan yukarıya kömür çıkaran bir kepçe bulunmaktadır.

Kepçe, kuyunun dibinden almış olduğu 1100 kg kömürü yukarı çıkarırken her 1 metrede yarısını dökmektedir.

Bu durumda kepçenin yukarıya çıkacak kömür miktarını hesaplayacak PHP kodunu yazalım.

Şu ana kadar edindiğimiz bilgileri kullanabileceğimiz kapsamlı bir örnek uygulama geliştirelim.

Amacımız, sihirli kare adı verilen ve sayılardan oluşan karelerin bilgisayar tarafından oluşturulmasını sağlayacak bir program yazmak.

Bu sayı karelerinin özelliği, satır, sütun ve köşegen üzerindeki sayıların toplamlarının eşit olmasıdır.

Sihirli karelerin inşası için bir çok algoritma bulunmaktadır. Bizim kullanacağımız algoritma, n bir tek sayı olmak üzere, n x n boyutunda bir sihirli karenin oluşturulmasını sağlamaktadır.

Algoritma, 1’den başlayarak bütün kare doluncaya kadar sayıların kare üzerine belirli kurallar dahilinde yerleştirilmesi ilkesine dayanır. Bu kuralları aşağıdaki gibi sıralayabiliriz:

  1. İlk sayı olan 1, karenin ilk satırının orta hücresine yerleştirilir.
  2. Sıradaki her sayı, kendisinden önceki sayının sağ-üst köşesinde yer alan hücreye yerleştirilir.

Bu kuralların işletilmesi sırasında ortaya çıkabilecek dört aykırı durum vardır:

  1. Sıradaki sayıyı yerleştireceğimiz hücre dolu olabilir. Bu durumda sıradaki sayı, bir önceki sayının bulunduğu hücrenin altındaki hücreye yerleştirilir.
  2. Sıradaki sayıyı yerleştireceğimiz hücre karenin üstünden dışında kalıyor olabilir. Bu durumda sıradaki sayı, dışarıda kalan hücrenin hizasındaki sütunun en altındaki hücreye yerleştirilir.
  3. Sıradaki sayıyı yerleştireceğimiz hücre karenin sağ tarafından dışında kalıyor olabilir. Bu durumda sıradaki sayı, dışarıda kalan hücrenin hizasındaki satırın en solundaki hücreye yerleştirilir.
  4. Sıradaki sayıyı yerleştireceğimiz hücre karenin sağ-üst çaprazından dışında kalıyor olabilir. Bu durumda sıradaki sayı, bir önceki sayının bulunduğu hücrenin altındaki hücreye yerleştirilir.

Üç satır ve üç sütundan oluşan sihirli kareyi algoritmanın kurallarını uygulayarak oluşturalım.

Öncelikle ilk sayımız olan 1’i karenin ilk satırının orta hücresine yerleştirelim:

1

Üç satır ve üç sütundan oluşan sihirli kareyi algoritmanın kurallarını uygulayarak oluşturalım.

Öncelikle ilk sayımız olan 1’i karenin ilk satırının orta hücresine yerleştirelim:

1
2

Sıradaki sayı olan 2, 1 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin üzerinden dışarıya çıkıldığı için 2 sayısı dışarıya çıkılan hizadaki sütunun en alt hücresine yerleştiriliyor:

1
3
2

Sıradaki sayı olan 3, 2 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin sağ tarafından dışarıya çıkıldığı için 3 sayısı dışarıya çıkılan hizadaki satırın en solundaki hücreye yerleştiriliyor:

1
3
42

Sıradaki sayı olan 4, 3 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak bu hücre dolu olduğu için 4 sayısı 3 sayısının bulunduğu hücrenin altında yer alan hücreye yerleştiriliyor:

1
35
42

Sıradaki sayı olan 5, 4 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleştiriliyor:

16
35
42

Sıradaki sayı olan 6, 5 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleştiriliyor:

16
357
42

Sıradaki sayı olan 7, 6 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin sağ-üst çaprazından dışarıya çıkıldığı için 7 sayısı 6 sayısının bulunduğu hücrenin altında yer alan hücreye yerleştiriliyor:

816
357
42

Sıradaki sayı olan 8, 7 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin sağ tarafından dışarıya çıkıldığı için 8 sayısı dışarıya çıkılan hizadaki satırın en solundaki hücreye yerleştiriliyor:

816
357
492

Ve son olarak sıradaki sayı olan 9, 8 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin üzerinden dışarıya çıkıldığı için 9 sayısı dışarıya çıkılan hizadaki sütunun en alt hücresine yerleştiriliyor:

Sonuç olarak elde ettiğimiz sihirli karede her satırda, her sütunda ve her iki köşegende yer alan hücrelerdeki sayıların toplamı aynıdır: 15 Şimdi bu algoritmanın PHP’de kodlamasını gerçekleştireceğiz. Programımız, bizim için n=11 boyutlu sihirli kareyi oluşturacaktır.

Programda ağırlıklı olarak akış kontrol deyimlerini ve dizileri kullanacağız.

Örnek kodda iki boyutlu dizi tanımlaması alternatif bir yolla yapılmıştır:

Bu yöntemde öncelikle range fonksiyonu kullanılarak uzunluğu 11 terimden oluşan iki tane tek-boyutlu dizi tanımlanmakta, daha sonra bunlar kullanılarak 11×11=121 terimden oluşan iki boyutlu dizimiz tanımlanmaktadır.

  • 6 Mart 2022

Diğer Yazılarımız

Tüm Yazılarımız

C# While Döngüsü Kullanımı

C# programlama dilinde while döngüsü, bir koşul doğru olduğu sürece…

PHP: Operatörler

Operatörler, değerler üzerinde ikili işlemlerin gerçekleştirilmesinde kullanılırlar. PHP dilindeki operatörleri…

Finansal Raporlamada Veri Analizinin Rolü

Finansal raporlama, işletmelerin performansını değerlendirmek ve stratejik kararlar almak için…

Sosyal Medyada İçerik Stratejisi Oluşturma Rehberi

Sosyal medya, markalar için hedef kitleye ulaşmanın en etkili yollarından…
PHP Döngüler

Soru işareti kalmasın

Bu yazı hakkında aklınıza takılanlar, bir fikriniz belkide şikayetiniz vardır. Yada yazımızda hatalar olduğunu düşünüyor olabilirsiniz. Peki neden bize ulaşmayı düşünmeyesiniz ki?

Hizmetlerimiz

Binlerce müşterimizin yararlandığı 100'e yakın hizmetlerimizden sizlerde yararlanabilirsiniz. Onlarca ücretsiz web hizmeti ve profesyonel destekle sizleri daima daha ileriye taşımayı hedefliyoruz.

Tüm Yenilik ve Kampanyalardan Haberdar Ol

Yazı hakkında ne Düşünüyorsunuz?