BLM210 HAFTA 9 STATEMENT-LEVEL CONTROL STRUCTURES (DEYİMLER DÜZEYİNDEKİ KONTROL YAPILARI)

Benzer belgeler
Chapter 8. Komut düzeyi kontrol yapıları ISBN

Bölüm 8. İfade Seviyesindeki Kontrol Yapıları ISBN

Bölüm 8. İfade -Seviyeli Kontrol Yapıları ISBN

Bir seçme komutu yürümekte olan programda iki veya daha fazla yoldan birini seçmemizi sağlar. İki sınıfa ayrılır:

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Nesne Yönelimli Programlama


WEEK 11 CME323 NUMERIC ANALYSIS. Lect. Yasin ORTAKCI.

BİL-142 Bilgisayar Programlama II

Yarışma Sınavı A ) 60 B ) 80 C ) 90 D ) 110 E ) 120. A ) 4(x + 2) B ) 2(x + 4) C ) 2 + ( x + 4) D ) 2 x + 4 E ) x + 4

Unlike analytical solutions, numerical methods have an error range. In addition to this

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 5. Bölüm Karar ve Çevrim Kontrol Yapıları

En kucuk calisabilir birime satetement denir Statements semicolon (;) ile sonlanir Yalniz basina ; null statement i ifade eder

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

Bölüm 4 C de Program Kontrolü

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

C++ Statements. { ve } arasında ifade edilen bir dizi statement bir compound statement (birleşik ifade) oluşturur.

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

Bölüm 7. İfadeler ve atamalar ISBN

Bölüm 3. Akış denetimi (flow of control)

BBM Discrete Structures: Midterm 2 Date: , Time: 16:00-17:30. Question: Total Points: Score:

Mantıksal Kontrol ve Döngü Komutları

1. PL/SQL de kontrol yapıları

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

HSancak Nesne Tabanlı Programlama I Ders Notları

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

WEEK 4 BLM323 NUMERIC ANALYSIS. Okt. Yasin ORTAKCI.

4. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

#include <stdio.h> int main(void) { float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p);

Program AkıĢ Kontrol Yapıları

Do not open the exam until you are told that you may begin.

Semantik (Semantics): ifadelerin, deyimlerin, ve program birimlerinin anlamı Sentaks ve semantik bir dilin tanımı sağlar

Internet Programming II

Döngüler - Loops 4/9/2010. ENF-102 Jeoloji Giriş. Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

Döngüler - Loops 4/13/2011. ENF-102 Jeoloji Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

MAT213 Bilgisayar Programlama I

Yüz Tanımaya Dayalı Uygulamalar. (Özet)

1 JAVASCRIPT NEDİR? 1

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Kontrol Yapıları (2)

PASCAL PROGRAMLAMA DİLİ YAPISI

Giri. Program yazmaya balamadan önce

Java da İşleçler, Ders #3 (4 Kasım 2009)

Algoritma ve Programlamaya Giriş II JAVA İLE PROGRAMLAMA. Muhammet BAYKARA

Java da Program Denetimi ve Operatörler

Bilgisayar Bilimcileri Haklıymış

THE IMPACT OF AUTONOMOUS LEARNING ON GRADUATE STUDENTS PROFICIENCY LEVEL IN FOREIGN LANGUAGE LEARNING ABSTRACT

Present continous tense

VERİ TABANI YÖNETİM SİSTEMLERİ II. 3. SQL PROGRAMLAMA BLOKLARI ve AKIŞ DENETİMİ

Soru Toplam Puan Not

CmpE 320 Spring 2008 Project #2 Evaluation Criteria

FINITE AUTOMATA. Mart 2006 Ankara Üniversitesi Bilgisayar Mühendisliği 1

SNU (Principles of Programming) Part I

Döngüler. Tablo 15.1: Ruby de Başlıca Döngü Yapıları

DOKUZ EYLUL UNIVERSITY FACULTY OF ENGINEERING OFFICE OF THE DEAN COURSE / MODULE / BLOCK DETAILS ACADEMIC YEAR / SEMESTER

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

Matematik Mühendisliği - Mesleki İngilizce

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

Al Ruby'i Vur Python'a

İngilizce konu anlatımlarının devamı burada Tıkla! Spot On 8 Ders Kitabı Tüm Kelimeleri. How do we spell the Present Continuous Tense?

HB1002: ORACLE 10G VERĐTABANI PL/SQL ile PROGRAMLAMA (32 saat)

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Ege Üniversitesi Elektrik Elektronik Mühendisliği Bölümü Kontrol Sistemleri II Dersi Grup Adı: Sıvı Seviye Kontrol Deneyi.../..

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

a, ı ı o, u u e, i i ö, ü ü

Do not open the exam until you are told that you may begin.

Programlamaya Giriş Karar Yapıları, Tekrarlı İfadeler(Döngüler)

Nesne Tabanlı Programlama

BMT 101 Algoritma ve Programlama I 7. Hafta. Yük. Müh. Köksal Gündoğdu 1

PostgreSQL ve PL/pgSQL

BBM Discrete Structures: Final Exam Date: , Time: 15:00-17:00

1 PROGRAMLAMAYA GİRİŞ

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı

Virtualmin'e Yeni Web Sitesi Host Etmek - Domain Eklemek

BBS515 Nesneye Yönelik Programlama. Ders 3 Zümra Kavafoğlu

Program Akış Kontrol Yapıları

Hafta 9 C Dilinde Kontrol ve Döngü Yapıları

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Ardunio ve Bluetooth ile RC araba kontrolü

First Stage of an Automated Content-Based Citation Analysis Study: Detection of Citation Sentences

IDENTITY MANAGEMENT FOR EXTERNAL USERS

KONTROL YAPILARI (CONTROL STRUCTURES)

Final Sınavı Örnek Soruları Bahar 2018

PostgreSQL ve PL/pgSQL

KALEIDOSCOPES N.1. Solo Piano. Mehmet Okonşar

Akış Kontrol Mekanizmaları

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

Nesne Tabanlı Programlama

12. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

Transkript:

1 BLM210 HAFTA 9 STATEMENT-LEVEL CONTROL STRUCTURES (DEYİMLER DÜZEYİNDEKİ KONTROL YAPILARI) Levels of control flow (Kontrol akışı düzeyleri) Within expressions İfadelerin içinde Among program units Program birimleri arasında Among program statements Program deyimleri (komutları) arasında Control statements: evolution (Kontrol deyimlerinin evrimi) FORTRAN I control statements were based directly on IBM 704 hardware FORTRAN I in kontrol deyimleri doğrudan IBM 704 donanımı tabanlıydı. Much research and argument in the 1960s about the issue Konu hakkında 1960larda çok araştırma ve tartışma yapıldı o One important result: It was proven that all algorithms represented by flowcharts can be coded with only two-way selection and pretest logical loops Önemli bir sonuca varıldı: Akış çizeneği ile gösterilen bütün algoritmaların yalnız ikiyollu seçim ve önsınamalı mantıksal döngülerle kodlanabileceği kanıtlandı. Control structure (Kontrol yapısı) A control structure is a control statement and the statements whose execution it controls Bir kontrol yapısı, bir kontrol deyimi ve koşmasını kontrol ettiği deyimlerdir. Design question Tasarım sorusu o Should a control structure have multiple entries? Bir kontrol yapısının birden fazla girişi olmalı mı?

2 Selection statements (Seçim deyimleri) A selection statement provides the means of choosing between two or more paths of execution Bir seçim deyimi, iki veya daha çok koşma yolundan birini seçmeyi sağlar. Two general categories: İki genel kategori: o Two-way selectors İki-yollu seçiciler o Multiple-way selectors Çok-yollu seçiciler Two-way selection statements (İki-yollu seçim deyimleri) General form: Genel biçim if control_expression then clause else clause if kontrol_ifadesi then madde else madde Design Issues: Tasarım meseleleri: o What is the form and type of the control expression? Kontrol ifadesinin biçimi ve tipi nedir? o How are the then and else clauses specified? then ve else maddeleri nasıl belirtilir? o How should the meaning of nested selectors be specified? İç-içe seçicilerin anlamı nasıl belirtilmelidir? The control expression (Kontrol ifadesi) If the then reserved word or some other syntactic marker is not used to introduce the then clause, the control expression is placed in parentheses then saklı sözcüğü veya herhangi başka bir sözdizimsel işaret then (öyle ise) maddesini göstermek için kullanılmıyorsa, kontrol ifadesi parantezler içine yerleştirilir.

3 In C89, C99, Python, and C++, the control expression can be arithmetic C89, C99, Python ve C++ da, kontrol ifadesi aritmetik olabilir. In most other languages, the control expression must be Boolean Diğer birçok dilde, kontrol ifadesi Boolean (doğru/yanlış) olmalı. Clause form (Madde biçimi) In many contemporary languages, the then and else clauses can be single statements or compound statements Birçok çağdaş dilde, then ve else maddeleri, tekli deyimler ya da birleşik deyimler olabilir. In Perl, all clauses must be delimited by braces (they must be compound) Perl de, bütün maddeler, küme parantezleriyle sınırlandırılmalı (birleşik olmalı) In Fortran 95, Ada, Python, and Ruby, clauses are statement sequences Fortran 95, Ada, Python ve Ruby de; maddeler deyim dizileridir. Python uses indentation to define clauses Python da maddeleri tanımlamak için girintileme kullanılır if x > y : x = y print " x was greater than y" Nesting selectors (İç-içe seçicileri kullanmak) Java example Java örneği if (sum == 0) if (count == 0) result = 0; else result = 1; Which if gets the else? else e hangi if karşılık geliyor? Java's static semantics rule: else matches with the nearest previous if Java nın statik anlam kuralı: else kendisinden önceki en yakın if ile eşleşir

4 To force an alternative semantics, compound statements may be used: Başka bir anlama zorlamak için, birleşik deyimler kullanılabilir. if (sum == 0) { if (count == 0) result = 0; } else result = 1; The above solution is used in C, C++, and C# Yukarıdaki çözüm; C, C++ ve C# dillerinde kullanılmaktadır. Ruby if sum == 0 then if sum == 0 then if count == 0 then if count == 0 then result = 0 result = 0 else end result = 1 else end result = 1 end end Multiple-way selection statements (Çoklu-yol seçim deyimleri) Allow the selection of one of any number of statements or statement groups Herhangi bir sayıda deyim veya deyim gruplarından birinin seçimine izin verir Design Issues: Tasarım meseleleri: 1. What is the form and type of the control expression? Kontrol ifadesinin biçimi ve tipi nedir? 2. How are the selectable segments specified? Seçilebilen parçalar (bölütler) nasıl tanımlanır? 3. Is execution flow through the structure restricted to include just a single selectable segment? Yapı içindeki koşma akışı, yalnız bir seçilebilir parçayı mı içermek zorundadır? 4. How are case values specified? Durum (case) değerleri nasıl belirtilir? 5. What is done about unrepresented expression values? Gösterilmeyen ifade değerleri için ne yapılır?

5 Examples (Örnekler) o C, C++, Java, and JavaScript switch (expression) { case const_expr1: stmt1; case const_exprn: stmtn; [default: stmtn+1] } o Design choices for C s switch statement Control expression can be only an integer type Kontrol ifadesi yalnızca tamsayı tipinde olabilir Selectable segments can be statement sequences, blocks, or compound statements Seçilebilen parçalar; deyim dizileri, bloklar veya birleşik deyimler olabilir. Any number of segments can be executed in one execution of the construct (there is no implicit branch at the end of selectable segments) Yapının bir koşmasında, birden fazla parça koşulabilir (seçilebilir parçaların sonunda dolaylı bir dallanma yoktur) default clause is for unrepresented values (if there is no default, the whole statement does nothing) Gösterilmeyen değerler için default maddesi vardır (default yoksa, deyimin bütünü hiçbir şey yapmaz) o C# Differs from C in that it has a static semantics rule that disallows the implicit execution of more than one segment Birden fazla parçanın koşmasına dolaylı olarak izin vermeyen statik anlam kuralına sahip olduğu için, C den farklıdır Each selectable segment must end with an unconditional branch (goto or break) Her seçilebilir parça koşulsuz bir dallanma ile sonlanmalıdır (goto veya break) Also, in C# the control expression and the case constants can be strings C# ta kontrol ifadeleri ve durum (case) sabitleri dizgiler olabilir

Implementing multiple selectors (Çok-yollu seçicilerin gerçeklenmesi) 6 Approaches: Yaklaşımlar o Multiple conditional branches Çoklu koşulsal dallanmalar o Store case values in a table and use a linear search of the table Durum (case) değerlerini tabloda tutup, tablonun doğrusal olarak aranması o When there are more than ten cases, a hash table of case values can be used 10 durumdan fazla durum (case) varsa, durum değerlerine ait bir kıyım tablosu (hash table) kullanılabilir o If the number of cases is small and more than half of the whole range of case values are represented, an array whose indices are the case values and whose values are the case labels can be used Durumların sayısı az ve durum değerlerinin yarıdan fazlası gösteriliyorsa, indeksleri durum değerleri ve değerleri durum etiketleri olan bir dizi kulllanılabilir Multiple-way selectipn using if: (if kullanarak çok-yollu seçim) o Python if count < 10 : bag1 = True elif count < 100 : bag2 = True elif count < 1000 : bag3 = True o Ruby case end when count < 10 then bag1 = true when count < 100 then bag2 = true when count < 1000 then bag3 = true

Iterative statements (Döngülü=yinelenen deyimler) 7 The repeated execution of a statement or compound statement is accomplished either by iteration or recursion Bir deyim veya birleşik deyimin yinelenen koşması döngü veya özyineleme ile başarılır General design issues for iteration control statements: Döngü kontrol deyimleri için tasarım meseleleri 1. How is iteration controlled? Yineleme nasıl kontrol edilir? 2. Where is the control mechanism in the loop? Döngüdeki kontrol mekanizması nerededir? Counter-controlled loops (Sayaç-kontrollü döngüler) A counting iterative statement has a loop variable, and a means of specifying the initial and terminal, and stepsize values Sayan döngülü bir deyimin; döngü değişkeni, ilk, son ve aralık değerleri vardır. Design Issues: Tasarım meseleleri: 1. What are the type and scope of the loop variable? Döngü değişkeninin tipi ve kapsamı (görüşü) nedir? 2. Should it be legal for the loop variable or loop parameters to be changed in the loop body, and if so, does the change affect loop control? Döngü değişkeni veya döngü parametrelerinin döngü vücudu içerisinde değiştirilmeleri olmalı mı? Olmalıysa, değişiklik döngü kontrolünü etkiler mi? 3. Should the loop parameters be evaluated only once, or once for every iteration? Döngü parametreleri yalnız bir kere mi yoksa her yinelemede mi değerlendirilmeli? C-based languages C-tabanlı diller for ([expr_1] ; [expr_2] ; [expr_3]) statement o The expressions can be whole statements, or even statement sequences, with the statements separated by commas İfadeler tam deyimler ya da deyimlerin virgüllerle ayrıldığı deyim dizileri olabilir o The value of a multiple-statement expression is the value of the last statement in the expression Çok deyimli bir ifadenin değeri, ifadedeki son deyimin değeridir. o If the second expression is absent, it is an infinite loop İkinci ifade yoksa, bu bir sonsuz döngüdür

8 Design choices: Tasarım seçimleri: o There is no explicit loop variable Doğrudan bir döngü değişkeni yok o Everything can be changed in the loop Her şey döngüde değiştirilebilir o The first expression is evaluated once, but the other two are evaluated with each iteration İlk ifadenin değeri yalnız bir kere bulunur; ancak diğer ikisinin değeri her yinelemede bulunur. o It is legal to branch into the body of a for loop in C C de bir for döngüsünün içine dallanma yapılabilir. C++ differs from C in two ways: C++, C den iki yönüyle farklıdır 1. The control expression can also be Boolean Kontrol ifadesi Boolean olabilir 2. The initial expression can include variable definitions (scope is from the definition to the end of the loop body) İlk ifadede değişken tanımları olabilir (kapsam tanımın gerçekleştiği yerden döngü vücudunun sonuna kadardır) Java and C# o Differs from C++ in that the control expression must be Boolean C++ dan farklı olarak, kontrol ifadesi Boolean olmalı Logically-controlled loops (Mantıksal kontrollü döngüler) Repetition control is based on a Boolean expression Yineleme kontrolü, Boolean ifade tabanlıdır Design issues: Tasarım meseleleri o Pretest or posttest? Ön sınamalı mı, art sınamalı mı? o Should the logically controlled loop be a special case of the counting loop statement or a separate statement? Mantıksal kontrollü döngü, sayan döngü deyiminin özel bir durumu mu olmalı yoksa ayrı bir deyim mi olmalı?

9 Examples (örnekler): o C and C++ have both pretest and posttest forms, in which the control expression can be arithmetic: C ve C++ kontrol ifadesinin aritmetik olduğu ön sınamalı ve art sınamalı biçimlere sahiptir while (control_expr) loop body loop body = döngü vücudu control_expr = kontrol ifadesi do loop body while (control_expr) o In both C and C++ it is legal to branch into the body of a logically-controlled loop Hem C, hem de C++ da, mantıksal kontrollü bir döngü içine dallanılabilir User-located loop control mechanisms (Kullanıcının konumlandırdığı kontrol mekanizmaları) Sometimes it is convenient for the programmers to decide a location for loop control (other than top or bottom of the loop) Bazen döngü kontrolü için programcıların bir yer belirlemesi uygundur (en üst veya en alttan farklı olarak) Simple design for single loops (e.g., break) Tek döngü için basit tasarım (ör: break) Design issues for nested loops İç-içe döngüler için tasarım meseleleri 1. Should the conditional be part of the exit? Koşul çıkışın parçası mı olmalı? 2. Should control be transferable out of more than one loop? Kontrol bir döngüden fazla döngünün dışına taşınmalı mı? C, C++, Python, Ruby, and C# have unconditional unlabeled exits (break) C, C++, Python, Ruby ve C# ta, koşulsuz ve etiketsiz çıkışlar var (break) Java and Perl have unconditional labeled exits (break in Java, last in Perl) Java ve Perl de koşulsuz etiketli çıkışlar var (Java da break, Perl de last)

10 C, C++, and Python have an unlabeled control statement, continue, that skips the remainder of the current iteration, but does not exit the loop C, C++ ve Python da o anki yinelemeyi atlayan ama döngüden çıkmayan etiketsiz bir kontrol deyimi vardır: continue Java and Perl have labeled versions of continue Java ve Perl de etiketli continue var Iteration based on data structure (Veri yapısı tabanlı yineleme) The number of elements in a data structure controls loop iteration Veri yapısındaki eleman sayısı döngü yinelemesini kontrol eder Control mechanism is a call to an iterator function that returns the next element in some chosen order, if there is one. Kontrol mekanizması, yineleyici (iterator) bir fonksiyona çağrıdır. Bu fonksiyon seçilen bir sırayla sıradaki elemanı döner C's for can be used to build a user-defined iterator: C deki for kullanıcı-tanımlı bir yineleyici (iterator) yapmada kullanılabilir for (p=root; p!=null; traverse(p)){... } Unconditional branching (Koşulsuz dallanma) Transfers execution control to a specified place in the program Koşma kontrolünü, programda belirlenen bir yere aktarır Represented one of the most heated debates in 1960 s and 1970 s 1960 lar ve 1970 lerdeki en önemli tartışmalardan biriydi. Major concern: Readability Ana mesele: Okunabilirlik

11 Some languages do not support goto statement (e.g., Java) Bazı diller goto deyimini desteklemez C# offers goto statement (can be used in switch statements) C# ta goto var (switch deyimlerinde kullanılabilir) Loop exit statements are restricted and somewhat camouflaged goto s Döngüden çıkma deyimleri kısıtlı ve bir bakıma üstü örtülü goto deyimleridir. Guarded commands (Korumalı komutlar) Designed by Dijkstra Dijkstra tasarlamıştır Purpose: to support a new programming methodology that supported verification (correctness) during development Amaç: Geliştirme sırasında testi (doğrulamayı) destekleyen yeni bir programlama yöntemini desteklemek Basis for two linguistic mechanisms for concurrent programming (in CSP and Ada) Eş zamanlı programlama için dilsel temel (CSP ve Ada da) Basic Idea: if the order of evaluation is not important, the program should not specify one Temel fikir: değerlendirme sırası önemli değilse, program bunu belirlememeli Selection guarded commands (Korumalı seçim komutları) Form Biçim if <Boolean expr> -> <statement> [] <Boolean expr> -> <statement>... [] <Boolean expr> -> <statement> fi <Boolean expr> guard (koruma) <statement> statement or statement sequence (deyim veya deyim dizisi) <Boolean expr> -> <statement> guarded command (korumalı komut) [ ] blocks (bloklar) separates guarded commands (korumalı komutları birbirinden ayırır)

12 Semantics: when construct is reached, Anlam: yapıya ulaşılınca, o Evaluate all Boolean expressions Bütün Boolean ifadelerin değerini bul o If more than one are true, choose one non-deterministically Birden fazla ifade doğruysa, birini belirlenimci olmayan şekilde (ör: rasgele) seç o If none are true, it is a runtime error Hiçbiri doğru değilse, koşma-zamanı hatasıdır Examples (örnekler): o Runtime error if i = j and i is not zero i = j ve i sıfırdan farklı iken, koşma zamanı hatası Find maximum of x and y x ve y den büyük olanını max a ata o The order of execution is irrelevant Koşma sırasının önemi yok o When x = y, it does not matter which we assign to max. x = y iken, max a hangisini atadığımızın önemi yok. Loop guarded commands (Korumalı döngü komutları) Form Biçim do <Boolean> -> <statement> [] <Boolean> -> <statement>... [] <Boolean> -> <statement> od

13 Semantics: for each iteration Anlam: her yineleme için o Evaluate all Boolean expressions Tüm Boolean ifadelerin değerini bul o If more than one are true, choose one non-deterministically; then start loop again Birden fazla ifade doğruysa, birini belirlenimci olmayan şekilde (ör: rasgele) seç; sonra döngüye yeniden başla o If none are true, exit loop Hiçbiri doğru değilse, döngüden çık Example (örnek): Given q1, q2, q3 and q4 values, rearrange the values so that q1 <= q2 <= q3 <= q4 at the end. q1, q2, q3 ve q4 değerleri veriliyor. Değerleri sıraya koyun, sonunda q1 <= q2 <= q3 <= q4 olsun. Rationale of guarded commands (Korumalı komutların amacı) Connection between control statements and program verification is intimate Kontrol deyimleri ve program doğrulaması arasındaki bağlantı çok yakın Verification is impossible with goto statements goto deyimleri ile doğrulama olanaksız Verification is possible with only selection and logical pretest loops Yalnız seçim ve mantıksal ön sınamalı döngüler kullanarak, doğrulama mümkün Verification is relatively simple with only guarded commands Yalnız korumalı komutlarla, doğrulama görece basit. Conclusion (Sonuç) Choice of control statements beyond selection and logical pretest loops is a trade-off between language size and writability Seçim ve mantıksal önsınamalı döngülerin ötesinde kontrol deyimlerinin seçimi, dilin büyüklüğü ve yazılabilirlik arasında bir ödünleşimdir (biri iyileşirse, diğeri kötüleşir).