Siemens SINUMERIK’te Kontrol Yapıları ve Döngüler
Kontrol, NC bloklarını standart olarak programlandıkları sırayla işler. Bu sırayı değiştirmenin iki yolu vardır: kontrol yapıları (IF, ELSE, ENDIF, LOOP, FOR, WHILE, REPEAT) ve program atlamaları (GOTOS, GOTOB, GOTOF, GOTO, GOTOC, CASE). Bu sayfa ikisini de, aralarındaki farkı da ve hangisinin ne zaman kullanılacağını anlatır.
Pratik karşılığı şudur: aynı deliği 40 kez yazmak yerine bir döngü kurarsınız; parça ölçüsüne göre farklı işleme yapan tek bir program yazarsınız; blok arama sırasında delme yapılmasını engellersiniz; ölçüm sonucu kötüyse programı alarmla durdurursunuz. Bunların tamamı kontrol yapılarıyla çözülür.
Önce kurallar: kontrol yapılarının sınırları
Kılavuz, kontrol yapılarını anlatmadan önce bir uyarı verir. Bu uyarıyı bilmeden yazılan programlar, tezgâhta anlaşılmaz alarmlarla durur:
Ek koşullar
| Kural | Sahadaki anlamı |
|---|---|
| Kontrol yapısı program genelinde kullanılamaz | Bir kontrol yapısı ana programda başlayıp alt programda bitemez; her seviye kendi içinde kapanmalıdır |
| Her alt program seviyesinde 16 kontrol yapısına kadar iç içe kurulabilir | Derin iç içe yapılar için alt program seviyesi kullanmak gerekir |
| Kontrol yapısı elemanı içeren bloklar bastırılamaz (skip / atlama seviyesi) | /1 IF ... gibi bir yazım işe yaramaz |
| Kontrol yapısı elemanı içeren bloklarda atlama etiketine izin verilmez | ETIKET: WHILE ... yazılamaz |
| Kontrol yapıları yorumlayıcı (interpreter) modda işlenir; döngü sonu bulununca döngü başı aranır | Bu sebeple programın blok yapısı yorumlayıcı modda tam olarak kontrol edilmez — dengesiz ENDIF/ENDWHILE hemen fark edilmez |
| Kontrol yapıları ile program atlamalarını karıştırmak genel olarak tavsiye edilmez | İkisini aynı program bölümünde iç içe kullanmayın |
| Çevrimler ön derlendiğinde iç içe geçmenin doğruluğu kontrol edilebilir | Kendi çevriminizi yazıyorsanız bu kontrolü kullanın |
Döngü içindeyken ekranda ne görünür?
Bir program döngüsü içinde yalnızca seçilmiş bloklar çalıştırılıyorsa, güncel blok göstergesinde döngüden önceki son ana çalışma bloğu görünür. İşlenen blokların da görünmesi için (örneğin teşhis amacıyla) çözümleyici tek blok SBL2 etkinleştirilmelidir.
IF, ELSE, ENDIF — koşullu deyim ve dallanma
İki farklı kullanımı vardır:
- Koşullu deyim:
IFileENDIFarasındaki blok yalnızca koşul sağlandığında çalışır. - Dallanma:
IF– blok_1 –ELSE– blok_2 –ENDIFyapısında her zaman iki bloktan biri çalışır. Koşul sağlanırsa blok_1, sağlanmazsa blok_2.
| Anahtar kelime | Anlamı |
|---|---|
IF | Koşullu deyimi veya dallanmayı başlatır |
ELSE | Alternatif program bloğunu başlatır |
ENDIF | Koşullu deyimin veya dallanmanın sonunu işaretler |
| <koşul> | TRUE veya FALSE olarak değerlendirilen mantıksal ifade |
Kılavuzun takım değiştirme alt programı örneği
Bu örnek, IF/ELSE’in gerçek bir üretim probleminde nasıl kullanıldığını gösterdiği için değerlidir: program test modunda ve gerçek çalışmada “güncel takım” bilgisi farklı yerden okunur.
SUPA ile yazılmıştır — böylece hareket hiçbir sıfır ofsetinden ve çerçeveden etkilenmez.
2. Aynı satırda D0 vardır; takım telafisi kapatılmadan takım değişim noktasına gidilmez.
3. STOPRE okuma işleminden önce yazılmıştır; sistem değişkeni okunacaksa ön işlemenin durdurulması gerekir.LOOP ve ENDLOOP — sonsuz döngü
Sonsuz döngüler, sonsuz programlarda kullanılır. Döngünün sonunda her zaman başa geri dönüş vardır.
| Anahtar kelime | Anlamı |
|---|---|
LOOP | Sonsuz döngüyü başlatır |
ENDLOOP | Döngünün sonunu işaretler ve döngü başına geri dönüş sağlar |
Kılavuzun örneği, sonsuz döngünün en mantıklı kullanımıdır — operatörden işlem bekleme:
Mesaj ekrana yazılır, M0 ile program durur, operatör düzeltip NC Start’a basınca döngü tekrar başa döner ve durum düzelmediyse yine durur.
FOR … TO … ve ENDFOR — sayılı döngü
Sayılı döngü, bir işlemin sabit sayıda tekrarlanması gerektiğinde kullanılır.
| Öğe | Anlamı |
|---|---|
FOR | Sayılı döngüyü başlatır |
ENDFOR | Döngünün sonunu işaretler; sayım son değere ulaşmadığı sürece döngü başına geri döner |
| <değişken> | Sayım değişkeni. Başlangıç değerinden son değere kadar artar ve her turda 1 artar. Tipi INT veya REAL. Not: örneğin R parametresi kullanılırsa tip REAL olur; sayım değişkeni REAL tipindeyse değeri tam sayıya yuvarlanır. |
| <başlangıç değeri> | Sayımın başlangıç değeri. Koşul: başlangıç değeri son değerden küçük olmalıdır. |
| <son değer> | Sayımın bitiş değeri |
Örnek 1 — INT değişken ve R parametresi ile
Örnek 2 — sabit adette parça üretimi
WHILE ve ENDWHILE — koşul döngü başında
WHILE döngüsünde koşul döngünün başındadır. Döngü, koşul sağlandığı sürece çalışır. Koşul en baştan sağlanmıyorsa döngü hiç çalışmaz.
| Anahtar kelime | Anlamı |
|---|---|
WHILE | Program döngüsünü başlatır |
ENDWHILE | Döngünün sonunu işaretler ve döngü başına geri dönüş sağlar |
| <koşul> | WHILE döngüsünün çalışması için sağlanması gereken koşul |
Kılavuzun örneği, gerçek eksen konumuna göre kademeli dalma yapar:
Burada $AA_IW[...] eksenin parça koordinat sistemindeki ayar değeridir; her turda 1 mm artımsal dalınır ve eksen −10’a ulaştığında döngü biter.
REPEAT ve UNTIL — koşul döngü sonunda
REPEAT döngüsünde koşul döngünün sonundadır. Döngü bir kez çalıştırılır ve koşul sağlanana kadar tekrarlanır.
| Anahtar kelime | Anlamı |
|---|---|
REPEAT | Program döngüsünü başlatır |
UNTIL | Döngünün sonunu işaretler ve döngü başına geri dönüş sağlar |
| <koşul> | REPEAT döngüsünün artık çalıştırılmaması için sağlanması gereken koşul |
Hangi döngüyü seçmeli?
| Durum | Doğru yapı |
|---|---|
| Tekrar sayısı baştan belli (40 delik, 100 parça) | FOR ... TO ... ENDFOR |
| Tekrar sayısı belli değil, koşul baştan kontrol edilmeli (hiç çalışmayabilir) | WHILE ... ENDWHILE |
| Gövde en az bir kez çalışmalı, sonra koşula bakılmalı | REPEAT ... UNTIL |
| Operatör müdahalesi beklenecek, program kendiliğinden ilerlemeyecek | LOOP ... ENDLOOP |
| İki alternatiften biri seçilecek | IF ... ELSE ... ENDIF |
| İkiden fazla, tam sayı değerine göre dallanma | CASE ... OF ... DEFAULT |
İç içe kontrol yapısı örneği
Kılavuzun kendi örneği, üç yapıyı birlikte kullanır ve gerçek bir emniyet problemini çözer: blok arama sırasında delme yapılmamalıdır.
Yapının okunması: dıştaki LOOP plaka plaka çalışmayı sürdürür; IF NOT $P_SEARCH yalnızca normal çalışmada delme yapılmasını sağlar; içteki WHILE X ekseni 100’e ulaşana kadar delik deseni işler; blok arama sırasında ise sadece ekrana mesaj yazılır.
$P_SEARCH sistem değişkeni kontrol edilmezse, arama sırasında çıkış sinyalleri ve hareketler istenmeyen biçimde tetiklenebilir. Kendi çevrimini yazan herkesin bu deseni bilmesi gerekir.Program atlamaları: GOTOS, GOTOB, GOTOF, GOTO, GOTOC
GOTOS — program başına dönüş
GOTOS komutu, programı tekrarlamak için bir ana programın veya alt programın başına geri dönmek amacıyla kullanılır. Makine verisiyle her geri dönüşte şunlar ayarlanabilir:
- Program çalışma süresi “0” yapılır.
- Parça sayacı “1” değeri kadar artırılır.
| NC/PLC arayüz sinyali DB21, DBX384.0 (program dallanması) | Anlamı |
|---|---|
| 0 | Program başına geri dönüş yok. Program, GOTOS’tan sonraki parça programı bloğuyla devam eder. |
| 1 | Program başına geri dönüş yapılır. Parça programı tekrarlanır. |
GOTOS dahili olarak bir STOPRE (ön işleme durdurma) başlatır.
2. Veri tanımlamaları (LUD değişkenleri) içeren bir alt programda GOTOS, tanımlama bölümünden sonraki ilk program bloğuna atlar; yani veri tanımlamaları yeniden çalıştırılmaz. Bu nedenle tanımlanan değişkenler GOTOS bloğunda ulaştıkları değeri korur ve tanımlama bölümünde programlanan standart değerlere sıfırlanmaz.
3. GOTOS komutu senkron aksiyonlarda ve teknoloji çevrimlerinde kullanılamaz.GOTOB, GOTOF, GOTO, GOTOC — etikete atlama
Programda atlama etiketleri (label) tanımlanır ve aynı program içindeki başka bir yerden bu etiketlere atlanır. Program çalışması, hedef etiketin hemen ardından gelen deyimle devam eder.
| Komut | Anlamı |
|---|---|
GOTOB | Atlama hedefi programın başına doğru olan atlama deyimi |
GOTOF | Atlama hedefi programın sonuna doğru olan atlama deyimi |
GOTO | Atlama hedefi aranarak bulunur: arama önce program sonuna doğru, sonra program başına doğru yapılır |
GOTOC | GOTO ile aynı; farkı, “14080 Atlama tanımı bulunamadı” alarmının bastırılmasıdır. Hedef bulunamazsa program kesilmez, GOTOC komutundan sonraki satırla devam eder. |
| Atlama hedefi olabilecekler | Açıklama |
|---|---|
| <atlama etiketi> | Kullanıcı tanımlı adla programda kurulan etiket: <etiket>: |
| <blok numarası> | Ana blok veya alt blok numarası (örn. 200, N300) |
| STRING tipi değişken | Değişken atlama hedefi; değişken bir etiket veya blok numarası taşır |
Etiket adlandırma kuralları
- Etiketler her zaman bloğun başındadır. Blok numarası varsa etiket, blok numarasının hemen ardından gelir.
- Karakter sayısı: en az 2, en fazla 32.
- İzin verilen karakterler: harf, rakam, alt çizgi.
- İlk iki karakter harf veya alt çizgi olmalıdır.
- Etiket adının sonunda iki nokta üst üste (“:”) bulunur.
Ek koşullar
- Atlama hedefi yalnızca program içinde bulunan, etiketli veya blok numaralı bir blok olabilir.
- Atlama koşulu olmayan bir atlama deyimi ayrı bir blokta programlanmalıdır. Atlama koşulu olan deyimler için bu kısıt geçerli değildir; bu durumda bir blokta birden fazla atlama deyimi yazılabilir.
- Atlama koşulu olmayan atlama deyimleri içeren programlarda
M2/M30program sonunun programın en sonunda olması gerekmez.
Örnek — koşullu atlama
N150 MA1: → N160 → N170 → tekrar N150 → N190. Aynı blok numarası (N150) iki kez kullanılmış, N180 atlanmıştır. Yukarıdaki sürüm, 01/2015 tarihli Job Planning kılavuzunun doğru numaralandırılmış örneğidir. Aynı blok numarasının iki kez kullanılması, blok arama ve atlama davranışını bozar.Örnek — blok numarasına dolaylı atlama
Örnek — değişken atlama hedefi
Bu iki kalıp, tek programın farklı takım/işlem senaryolarını yönetmesini sağlar: hedef adı bir değişkende tutulur, karar program içinde verilir.
CASE … OF … DEFAULT — çok yollu dallanma
CASE fonksiyonu, bir değişkenin veya aritmetik fonksiyonun güncel değerini (tip: INT) kontrol etme ve sonuca göre programda farklı konumlara atlama imkânı verir.
| Öğe | Anlamı |
|---|---|
CASE | Atlama deyimi |
| <ifade> | Değişken veya aritmetik fonksiyon |
OF | Koşullu program dallanmalarını tanımlayan anahtar kelime |
| <sabit_1>, <sabit_2> | Değişken veya aritmetik fonksiyon için belirtilen sabit değerler. Tip: INT |
DEFAULT | Değişken belirtilen sabit değerlerin hiçbirini almadığında atlama hedefini belirler. DEFAULT programlanmazsa, bu durumlarda CASE deyiminden sonraki blok atlama hedefidir. |
GOTOF | Program sonuna doğru atlama deyimi. GOTOF yerine diğer bütün GOTO komutları da programlanabilir. |
Kılavuzun örneği
- VAR1+VAR2−VAR3 = 7 ise “Label_1” etiketli bloğa (→ N40) atlanır.
- VAR1+VAR2−VAR3 = 9 ise “Label_2” etiketli bloğa (→ N50) atlanır.
- Sonuç ne 7 ne 9 ise “Label_3” etiketli bloğa (→ N60) atlanır.
Program bölümü tekrarı: REPEAT, REPEATB, ENDLABEL, P
Program bölümü tekrarı, bir program içindeki mevcut program bölümlerinin istenen sırayla tekrarlanmasını sağlar. Tekrarlanacak program satırları veya bölümleri atlama etiketleriyle belirlenir.
REPEAT, bir önceki bölümdeki REPEAT ... UNTIL döngüsü değildir. Buradaki REPEAT bir program bölümü tekrarıdır ve P adresiyle tekrar sayısı verilir. Aynı anahtar kelimenin iki ayrı işlevi olması, Siemens programlamasında en çok karıştırılan noktalardan biridir.Dört kullanım biçimi
1. Tek program satırını tekrarla
2. Etiket ile REPEAT deyimi arasındaki bölümü tekrarla
3. İki etiket arasındaki bölümü tekrarla
4. Etiket ile ENDLABEL arasındaki bölümü tekrarla
| Öğe | Anlamı |
|---|---|
REPEATB | Bir program satırını tekrarlama komutu |
REPEAT | Bir program bölümünü tekrarlama komutu |
ENDLABEL | Tekrarlanacak program bölümünün sonunu işaretleyen anahtar kelime. ENDLABEL programda birden fazla kez kullanılabilir. ENDLABEL satırında başka işlemler varsa bunlar her tekrarda yeniden çalıştırılır. |
P=<n> | Tekrar sayısı (tip INT). Program bölümü <n> kez tekrarlanır; son tekrardan sonra program REPEAT/REPEATB satırından sonraki satırdan devam eder. P=<n> verilmezse bölüm yalnızca bir kez tekrarlanır. |
Etiket arama yönü — dikkat edilmesi gereken nokta
Etiketle belirlenen program satırı, REPEAT/REPEATB deyiminden önce veya sonra yer alabilir. Arama önce program başına doğru başlar; etiket bu yönde bulunamazsa arama program sonuna doğru sürdürülür.
Ayrıca etiketin bulunduğu satırda başka işlemler varsa, bunlar her tekrarda yeniden çalıştırılır.
Örnek 1 — tek satır tekrarı
Örnek 2 — etiket ile REPEAT arasındaki bölüm
Örnek 3 — iki etiket arasındaki bölüm
Örnek 4 — aynı delik konumlarını farklı teknolojilerle işleme
Bu örnek, program bölümü tekrarının en güçlü kullanımıdır: delik konumları bir kez yazılır, sonra aynı konumlar merkezleme, delme ve kılavuz çekme için tekrar tekrar çağrılır.
Ek bilgiler ve sınırlar
- Program bölümü tekrarları iç içe kullanılabilir. Her çağrı bir alt program seviyesi harcar.
- Program bölümü tekrarı işlenirken
M17veyaRETprogramlanırsa tekrar iptal edilir. Program, REPEAT satırından sonraki bloktan devam eder. - Güncel program göstergesinde program bölümü tekrarı ayrı bir alt program seviyesi olarak görüntülenir.
- Seviye, program bölümü tekrarı sırasında iptal edilirse program, program bölümü tekrarı çağrısından sonraki noktadan devam eder.
- REPEAT deyimi ile iki etiketin parantez içinde iç içe kullanılması mümkün değildir. Başlangıç etiketi REPEAT deyiminden önce görünüyorsa ve bitiş etiketine REPEAT deyiminden önce ulaşılmıyorsa, başlangıç etiketi ile REPEAT deyimi arasındaki bölüm tekrarlanır. Aynı kısıt etiket + ENDLABEL kullanımı için de geçerlidir.
- Kontrol yapıları ve program bölümü tekrarları birlikte kullanılabilir; ancak ikisi arasında örtüşme olmamalıdır. Bir program bölümü tekrarı bir kontrol yapısı dalının içinde yer almalı ya da bir kontrol yapısı bir program bölümü tekrarının içinde yer almalıdır.
- Atlamalar ve program bölümü tekrarları karıştırılırsa bloklar tamamen sıralı olarak işlenir. Örneğin bir program bölümü tekrarından atlama yapılırsa, program bölümünün programlanmış sonu bulunana kadar işleme devam eder.
- REPEAT deyimi, hareket bloğundan sonra yazılmalıdır.
Kontrol yapısı mı, atlama mı kullanmalı?
Kılavuz bu soruya doğrudan cevap verir:
| Kontrol yapıları (IF, WHILE, FOR…) | Atlamalar (GOTOB, GOTOF, CASE) | |
|---|---|---|
| Okunabilirlik | Yüksek — yapı gözle takip edilir | Düşük — etiketler arasında gezinmek gerekir |
| Yorumlayıcı modda hız | Daha yavaş | Daha hızlı |
| Ön derlenmiş çevrimde hız | Fark yok | Fark yok |
| İç içe sınır | Alt program seviyesi başına 16 | Yapısal sınır yok, ama karmaşıklık artar |
| Blok bastırma (skip) | Kullanılamaz | Kullanılabilir |
| Etiket kullanımı | Aynı blokta yasak | Zorunlu |
Pratik öneri: okunabilirlik ve bakım kolaylığı için kontrol yapılarını tercih edin. Çevrim yazıyorsanız ve çevrim ön derlenecekse zaten fark yoktur. Yalnızca çok uzun ve çok sık dönen döngülerde, yorumlayıcı modda çalışma süresi sorun oluyorsa atlamaya geçin. İkisini aynı bölümde karıştırmayın — kılavuz bunu açıkça tavsiye etmiyor.
Sahada en sık yapılan hatalar
- WHILE ve UNTIL koşulunu aynı sanmak. WHILE’da koşul “çalışması için”, UNTIL’de “artık çalışmaması için” sağlanmalıdır. Aynı koşulu iki yapıya yazmak zıt sonuç verir.
- Değişken tanımlarını döngü içine koymak. Kontrol yapıları yalnızca komut bölümünde çalışır; program başlığındaki tanımlar koşullu veya tekrarlı çalıştırılamaz.
- Kontrol yapısı bloğuna etiket yazmak. Kontrol yapısı elemanı içeren bloklarda atlama etiketine izin verilmez.
- Kontrol yapısı satırını atlama seviyesiyle bastırmaya çalışmak. Bu bloklar bastırılamaz.
- Dengesiz ENDIF / ENDWHILE / ENDFOR bırakmak. Yorumlayıcı modda blok yapısı tam kontrol edilmediği için hata ancak çalışma anında ortaya çıkar.
- 16 iç içe sınırını aşmak. Her alt program seviyesinde en fazla 16 kontrol yapısı iç içe kurulabilir.
- GOTOS’un STOPRE başlattığını bilmemek. Sürekli geçiş modunda çalışan bir programda beklenmedik duraklamaların sebebi bu olabilir.
- GOTOS sonrası değişkenlerin sıfırlanmasını beklemek. LUD değişkenleri değerlerini korur; tanımlama bölümü yeniden çalıştırılmaz.
- Program bölümü tekrarındaki REPEAT ile döngüdeki REPEAT’i karıştırmak. Biri
P=<n>ile sayı alır, diğeriUNTILile biter. - P değeri vermeden REPEAT yazmak. P belirtilmezse bölüm yalnızca bir kez tekrarlanır — çoğu kullanıcı “hiç tekrarlamaz” veya “sonsuz tekrarlar” sanır.
- Kontrol yapısı ile bölüm tekrarını örtüştürmek. Biri diğerinin tamamen içinde olmalıdır.
- Blok arama kontrolü ($P_SEARCH) koymamak. Blok arama sırasında hareket ve çıkış sinyali tetiklenebilir.
Sık sorulan sorular
Fanuc makro B’deki WHILE [koşul] DO1 … END1 karşılığı nedir?
WHILE <koşul> ... ENDWHILE. SINUMERIK’te DO/END numarası yoktur; iç içe yapılar anahtar kelimelerle eşleşir.
FOR döngüsünde adımı 2 yapabilir miyim?
Hayır. Sayım değişkeni her turda 1 artar. Farklı adım gerekiyorsa WHILE kullanın ve artışı kendiniz yazın.
Sayım değişkeni olarak R parametresi kullanabilir miyim?
Evet. Bu durumda değişken REAL tipinde olur ve kılavuzun belirttiği gibi değeri tam sayıya yuvarlanır.
Başlangıç değeri son değerden büyük olursa ne olur?
Kılavuz koşulu net koyar: başlangıç değeri son değerden küçük olmalıdır. Tersi bir kullanım için FOR uygun değildir.
Programın sonsuza kadar dönmesini nasıl durdururum?
LOOP–ENDLOOP arasına bir çıkış koşulu (IF + GOTOF) koyun ya da yapıyı WHILE’a çevirin. Aksi hâlde 2010 tarihli kaynağın belirttiği gibi program yalnızca RESET ile veya enerji kesilerek durur.
GOTOC ne zaman kullanılır?
Atlama hedefinin bazen var bazen yok olduğu, opsiyonel program bölümlerinde. Hedef bulunamazsa 14080 alarmı verilmez ve program bir sonraki satırdan devam eder.
CASE’de DEFAULT yazmazsam ne olur?
Değişken belirtilen sabitlerin hiçbirine eşit değilse, CASE deyiminden sonraki blok atlama hedefi olur.
REPEAT ile alt program çağırmak arasındaki fark nedir?
REPEAT ayrı bir dosya gerektirmez; aynı program içindeki bölümü tekrarlar. Ancak her REPEAT çağrısı bir alt program seviyesi harcar ve güncel program göstergesinde ayrı bir alt program seviyesi olarak görünür.
Döngü içindeyken ekranda blok numarası neden değişmiyor?
Çünkü güncel blok göstergesinde döngüden önceki son ana çalışma bloğu gösterilir. İşlenen blokların görünmesi için çözümleyici tek blok SBL2 etkinleştirilmelidir.
Kaynaklar
- Siemens AG — SINUMERIK İleri Seviye CNC Kullanım & Programlama, 05/2010: Bölüm 4.8 Dolaylı Programlama (koşullu atlama, durum koşullaması / CASE), Bölüm 4.9 Döngüler (sonsuz döngü LOOP–ENDLOOP, IF–ELSE–ENDIF, sayılı döngü FOR–ENDFOR, WHILE–ENDWHILE, REPEAT–UNTIL)
- Siemens AG — SINUMERIK 840D sl / 828D Job Planning, Programming Manual, 01/2015, doküman no 6FC5398-2BP40-5BA2: Bölüm 2.10 Program atlamaları ve dallanmalar (2.10.1 GOTOS, 2.10.2 GOTOB/GOTOF/GOTO/GOTOC, 2.10.3 CASE…OF…DEFAULT), Bölüm 2.11 Program bölümü tekrarı (REPEAT, REPEATB, ENDLABEL, P), Bölüm 2.12 Kontrol yapıları (2.12.1 IF/ELSE/ENDIF, 2.12.2 LOOP/ENDLOOP, 2.12.3 FOR/ENDFOR, 2.12.4 WHILE/ENDWHILE, 2.12.5 REPEAT/UNTIL, 2.12.6 iç içe kontrol yapısı örneği)

