PHP — Loops Exercises

Cabir C.
8 min readFeb 6, 2021

--

PHP’de Döngü Uygulamaları

1. Mükemmel Sayılar

Bu çalışmada, 1 den n’e kadar olan mükemmel (2p−1(2p−1)) sayıları hesaplamasını yapacağız

Not: Öz çarpanları (kendisi hariç pozitif çarpanları) toplamı kendisine eşit olan sayıya mükemmel sayı denir

<?php
$n = 1000;
for ($x = 1; $x <= $n; $x++) {
$t = 0;
for ($y = 1; $y < $x; $y++) {
if ($x % $y == 0)
$t = $t + $y;
}
if ($x == $t)
echo “Mükemmel sayı: $t <br>”;
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$x = 1; $y = 1; Döngü sayaçlarını ($x , $y) belirledik ve başlangıç ​​değerini 1 olarak ayarladık

$x <=$n; ilk döngüde $x n’den küçük veya n’e eşit olduğu sürece döngüye devam edin

$x++; Her yineleme için döngü sayacı değerini 1 artırın

$y <= $x; ikinci döngüde $y $x’den küçük veya eşit olduğu sürece döngüye devam edin

$y++; Her yineleme için döngü sayacı değerini 1 artırın

İlk döngü ile 1 den n’e kadar olan sayıları tek tek dolaşıyoruz. İkinci döngü ile de dolaştığımız o sayıdan küçük olan ve bu sayıyı tam bölen sayıları topluyoruz yani o sayının öz çarpanlarının toplamını hesaplıyoruz

 mükemmel sayı: 6
mükemmel sayı: 28
mükemmel sayı: 496

2. Fibonacci Sayıları

Bu çalışmada, 1 den n’e Kadar Olan Fibonacci Sayılarının hesaplamasını yapacağız,.

Not: Kimi zaman fibonacci sayıları 0 dan başladığına rastlasak bile (mantık hatası vardır) genel kabul ilk iki elemanın 1 olduğudur

<?php
$n = 10;
$a = 1; echo “1. fibonaccci sayıları: $a<br>”;
$b = 1; echo “2. fibonaccci sayıları: $b<br>”;
$c = $a+$b;
for ($x = 3; $x <= $n; $x++) {
$c = $a + $b;
$a = $b;
$b = $c;
echo “$x. fibonaccci sayısı: $c <br>”;
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$x = 3; Döngü sayacını ($x) belirledik ve başlangıç ​​değerini 3 olarak ayarladık

$x <=7; $x n’den küçük veya n’e eşit olduğu sürece döngüye devam edin

$x++; Her yineleme için döngü sayacı değerini 1 artırın

$c=$a+$b; $a=$b; $b=$c; bu üçlü deyim yapısı genel olarak swap yapılarına benzemektedir. Bu yapı a b c yi her döngüde bir sonraki değerle güncelliyor.

 1. fibonaccci sayıla: 1
2. fibonaccci sayıla: 1
3. fibonaccci sayısı: 2
4. fibonaccci sayısı: 3
5. fibonaccci sayısı: 5
6. fibonaccci sayısı: 8
7. fibonaccci sayısı: 13
8. fibonaccci sayısı: 21
9. fibonaccci sayısı: 34
10. fibonaccci sayısı: 55

3. Asal Çarpanlar

Kullanıcıdan alınan bir n değerini asal çarpanlarına ayıran bir program yazalım

<?php
$n = 120;
$b = 2;
$i = $n;
while ($i != 1) {
if ($i % $b ==0) {
echo “$b <br>”;
$i = $i / $b;
$b — ;
}
$b++;
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$i = 1; Döngü sayacını ($i) olarak ayarlayın ve başlangıç değerini n yapalım

$i != 1; $i 1’den farklı olduğu sürece döngüye devam edin

$i /= $b; Her yineleme için döngü sayacı değerini $b ile bölün

$i%$b==0; eğer i sayısı b ile tam bölünüyorsa b n’nin bir çarpanıdır/bölenidir o halde b sayısını ekrana yazdıralım

$b — ; Eğer b, n’nin bir böleni ise b yi tekrar bir kez daha kontrol etmemiz gerek çünkü asal çarpanları araştırıyoruz asal değerler dışında başka değer gelmemesi için b — yaparak döngüye yeniden girmemiz gerekir.

 2
2
2
3
5

4. Zengin Sayılar

Bu çalışmada ZENGİN SAYILAR sayıları hakkında uygulama yapacağız. Bir Sayının Tüm Bölenlerinin (Kendisi Hariç, özaltküme gibi) Toplamı Bu Sayıdan Büyükse, O Sayıyı “Zengin Sayı” Olarak Adlandıralım. Örneğin 12 Zengin Sayıdır. Çünkü Bölenlerini (1,2,3,4,6) Topladığımız Zaman 16 Sayısı Elde Edilir. (16>12). Kullanıcıdan alınan İki Sayı Arasındaki Zenginleri Bulma

<?php
$a = 10; $b = 20;
for ($i = $a; $i <= $b; $i++) {
$top = 0;
for ($j = 1; $j < $i; $j++) {
if ($x % $y == 0)
$top += $j;
}
if ($top > $i)
echo “Zengin sayı: $i <br>”;
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$i = 1; $j = 1; Döngü sayaçlarını ($i , $j) belirledik ve başlangıç ​​değerini $a ve 1 olarak ayarladık

$i <=$b; ilk döngüde $i b’den küçük veya b’e eşit olduğu sürece döngüye devam edin

$i++; Her yineleme için döngü sayacı değerini 1 artırın

$j <= $i; ikinci döngüde $j $i’den küçük veya eşit olduğu sürece döngüye devam edin

$j++; Her yineleme için döngü sayacı değerini 1 artırın

İlk döngü ile a den b’e kadar olan sayıları tek tek dolaşıyoruz. İkinci döngü ile de dolaştığımız o sayıdan küçük olan ve bu sayıyı tam bölen sayıları topluyoruz yani o sayının öz çarpanlarının toplamını hesaplıyoruz

Eğer öz çarpan değerleri sayıdan büyük ise bu sayı zengin sayıdır.

 Zengin sayı: 12
Zengin sayı: 18
Zengin sayı: 20

5. Eşalon Matrisler

Bu çalışmada Eşalon Formlu Matrisleri nasıl oluşturabileceğimizi öğreneceğiz

Boyutu kullanıcıdan alınan elemanları “#” olan alt üçgensel ve üst üçgensel (eşalon formlar) kare matrisler oluşturalım

Not: Tek boyutlu yapılar için bir for döngüsü yeterli olur ama iki boyutlu n x m gibi yapılar için mutlaka iki döngüye ihtiyaç vardır dışarıdaki döngü satır içerideki döngü sütunları oluşturur

<?php
$n = 8;
for ($i = 1; $i <= $n; $i++) {
for ($j = 1; $j < $i; $j++) {
echo “#”;
}
echo “<br>”;
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$i = 1; $j = 1; Döngü sayaçlarını ($i , $j) belirledik ve başlangıç ​​değerini 1 olarak ayarladık

$i <=$n; ilk döngüde $i n’den küçük veya n’e eşit olduğu sürece döngüye devam edin

$i++; Her yineleme için döngü sayacı değerini 1 artırın

$j < $i; ikinci döngüde $j $i’den küçük olduğu sürece döngüye devam edin

$j++; Her yineleme için döngü sayacı değerini 1 artırın

İlk döngü ile 1 den n’e kadar olan sayıları tek tek dolaşıyoruz ve ekranda satırbaşı yapıyoruz. İkinci döngü ise dolaştığımız o sayıdan küçük olan sayıları dolaşıyoruz ve bu dolaşım esnasında her bir iterasyon için ekrana # yazdırıyoruz

 #
##
###
####
#####
######
#######
########

Üst üçgensel

<?php
$n = 8;
for ($i = $n; $i > 0; $i — ) {
for ($j = $i; $j > 0; $j — ) {
echo “#”;
}
echo “<br>”;
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$i = $n; $j = $i; Döngü sayaçlarını ($i , $j) belirledik ve başlangıç ​​değerini n ve i olarak ayarladık

$i >$n; ilk döngüde $i n’den büyük sürece döngüye devam edin

$i — ; Her yineleme için döngü sayacı değerini 1 azaltın

$j > 0; ikinci döngüde $j $i’den küçük olduğu sürece döngüye devam edin

$j — ; Her yineleme için döngü sayacı değerini 1 azaltın

İlk döngü ile n den 1’e kadar olan sayıları tek tek dolaşıyoruz ve ekranda satırbaşı yapıyoruz. İkinci döngü ise dolaştığımız o sayıdan küçük olan sayıları dolaşıyoruz ve bu dolaşım esnasında her bir iterasyon için ekrana # yazdırıyoruz

 ########
#######
######
#####
####
###
##
#

6. Kullanıcıdan alınan bir metni tersten yazama

Bu çalışmada kullanıcıdan alınan bir metni tersten yazan bir uygulama yapalım

<form method=”post” action=””>
Metin: <input type=”text” name=”metin” />
<input type=”submit” value=”Gönder”/>
</form>
<?php
if($_SERVER[“REQUEST_METHOD”]==”POST”){
if (!empty($_POST[‘metin’])){
echo “metin : “.$_POST[‘metin’].”<br>”;
$karaktersayisi = strlen($_POST[‘metin’]);
echo “tersten : “;
for($i = $karaktersayisi; $i > -1; $i — ){
echo substr($_POST[‘metin’], $i, 1);
}
}
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

<form> form ve input etiketleri ile kullanıcıdan girdi aldık

$_SERVER metodu ile post kontrolünü yaptık

$_POST metodu ile kullanıcının input’lara girdiği text’leri aldık

Döngü sayacını ($i) belirledik ve başlangıç ​​değerini metnin karakter uzunluğu olarak ayarladık ilk döngüde $i -1'den büyük olduğu sürece döngüye devam edin

Her yineleme için döngü sayacı değerini 1 azaltın

substr() metodu ile girilen metnin içerisindeki tüm 1 karakter olan alt string’lere ulaşıyoruz

metnin son karakterinden başlayarak ilk karaktere kadar echo ile yazdırıyoruz.

 
metin : merhabalar
tersten : ralabahrem

7. Kullanıcıdan alınan bir kelimeyi yine kullanıcıdan alınan bir metin içerisinde arayan ve kaçıncı kelime olduğunu yazan uygulama

<form method=”post” action=””> 
Metin: <input type=”text” name=”metin”/><br>
Kelime:<input type=”text” name=”kelime”/><br>
<input type=”submit” value=”Gönder”/><br>
</form>
<?php
if($_SERVER[“REQUEST_METHOD”]==”POST”){
if (!empty($_POST[‘metin’]) && !empty($_POST[‘kelime’])) {
$metin = explode(‘ ‘, $_POST[‘metin’]);
$kelime = $_POST[‘kelime’];
$sayac = 0;
$varmı = false;
do{
$sıra = $metin[$sayac];
$sayac++;
if($sıra == $kelime){
$varmı = true;
echo “Aranan “.$kelime.”
kelimesi,metnin “.$sayac.”. kelimesidir”;
}
}while(!$varmı);
}
}
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

<form> form ve input etiketleri ile kullanıcıdan girdi aldık

$_SERVER metodu ile post kontrolünü yaptık

$_POST metodu ile kullanıcının input’lara girdiği text’leri aldık

explode() metodu ile bir metni kelimelerine ayırıp bir diziye atadık

$sayac ; Döngü sayaçlarını ($sayac) belirledik ve başlangıç ​​değerini 0 olarak ayarladık

$metin[]; dizisinin elemanlarına indisler ile tek tek dolaşıp aranan kelimenin dizide olup olmadığını kontrol ettik

Browser screen
Metin: Burada veri girişi ile girilen ve uzunluğu belli olmayan bir cümle olsun. Mesela; Uğur bir gün uzmangundem.com a makale yazmış vs.Kelime: makale

8. Haftanın günlerini option select menüleri içerisinde gösteren uygulama

<?php
$gunler = array(“Pazartesi”,”Salı”,”Çarşamba”, “Perşembe”, ”Cuma”, ”Cumartesi”, ”Pazar”);
for ($i=0;$i<=6;$i++){
echo $gunler[$i].”-”;
}
echo “<br><br><br>”;
echo “<select name=’gunler’>”;
for ($i=0;$i<=6;$i++){
echo “<option value=’”,$i+1,”’>”,
$gunler[$i],”</option>”;
}
echo “</select>”;
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

<select> select ve option -etiketleri ile drop down menüler oluştuduk

$i = 0; Döngü sayacını ($i) belirledik ve başlangıç ​​değerini 0 olarak ayarladık

$i <=6; $i 6'den küçük veya 6'e eşit olduğu sürece döngüye devam edin

$i++; Her yineleme için döngü sayacı değerini 1 artırın

$gunler[] dizinin tüm elemanlarına indisleri ile ulaşıp bu elemanları oluşturduğumuz select menünün optionları olarak ayarladık

Pazartesi-Salı-Çarşamba-Perşembe-Cuma-Cumartesi-Pazar-

9. Önceden belirlenen bir sınıftaki öğrencilerin isimleri üzerinde arama yapan, girilin isim sınıf listesinde var ise ekrana “listede var” yoksa “listede yok” yazdıran uygulama

<?php
$ogrenci=”Esra”;
$liste=array(“Pınar”,”Esra”,”Zekiye”,“Ayşe”,”Burcu”,”Meral”,”Özge”);$varmi=false;
foreach($liste as $kisi){
if ($ogrenci==$kisi){ $varmi=true;
echo “<strong><u>$kisi</u></strong> “;
continue;
}
echo “$kisi “;
}
echo “<br><br><br>”;
if($varmi==false)
echo “$ogrenci listede yok (-)”;
else
echo “$ogrenci listede var (+)”;
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$liste; Döngü $liste dizisinin elemanları içerisinde tek tek dolaşıyor

$kisi; Dolaşım esnasında dizin her elemanını sırası geldikçe $kisi değişkenine atıyor

Görüldüğü üzere bu döngüde sayaç ya da koşul parametreleri kullanılmadı. Bunun yerine referans verilen dizi ve elemanlar var olduğu sürece döngü elemanların üzerinden sıra ile birer defa geçerek dolaşımını tamamlayacaktır

if bu dolaşım esnasında $ogrenci==$kisi ile aranan öğrenci ismi kişi değişkenin değerine eşit olup olmadığı kontrol edilir. Eğer eşit ise kişi değişkeni <strong> etiketleri ile belirginleştirilir

$varmi==false kontrolü ile de kişinin isminin istede bulunum bulunmadığı bilgisi ekrana yazdırılır

Pınar Esra Zekiye Ayşe Burcu Meral ÖzgeEsra listede var (+)

10. Önceden belirlenen bir sınıftaki öğrencilerin notlarını küçükten yükseğe doğru sıralayan uygulama

<?php
$notlar=array(64,52,32,96,15,77,81,25,78,55,65,40);
$degisiklik=true;
for(;$degisiklik;){
$degisiklik=false;
for ($i=1;@$notlar[$i];$i++){
if ($notlar[$i]<$notlar[$i-1]){
$gecici=$notlar[$i-1];
$notlar[$i-1]=$notlar[$i];
$notlar[$i]=$gecici;
$degisiklik=true;
}
}
}
for ($i=0;@$notlar[$i];$i++)
echo $notlar[$i],” “;
?>

Şimdi yukarıda çalıştırdığımız kodu yorumlayalım;

$x = 1 Döngü sayaçlarını ($i) belirledik ve başlangıç ​​değerini 1 olarak ayarladık

@$notlar[$i] değeri var olduğu sürece döngüye devam edin

$x++; Her yineleme için döngü sayacı değerini 1 artırın

if $notlar[$i]<$notlar[$i-1] koşul yapısı ile dizinin ilgili indisli elemanının bir önceki elman dan küçük olup olmadığı kontrolü yapılır eğer küçük ise bu iki elemanın yer değiştirme işlemi burada yapılır

İkinci döngüde ise düzenlenen dizinin elemanları ekrana yazdırılır.

15 25 32 40 52 55 64 65 77 78 81 96

KAYNAKLAR

Çelik, Rıza, A’dan Z’ye PHP, 7.Baskı — ANKARA (2017).

w3schools.com, Online Tutorials, https://www.w3schools.com/php/php_looping.asp

tutorialspoint.com, Online Tutorials https://www.tutorialspoint.com/php/php_loop_types.htm

--

--