Döngü Yapıları-1

Download Report

Transcript Döngü Yapıları-1

BPR152 ALGORİTMA VE
PROGRAMLAMA - II
Öğr. Gör. Bayram AKGÜL
[email protected]
http://bmyo.bartin.edu.tr/akgul
Bugünkü Konular
• Döngüler ve Akış Diyagramları
• C# ‘ta Döngü Tanımlama
–
–
–
–
while döngüsü
do-while döngüsü
for döngüsü
foreach döngüsü (listelerde ve koleksiyonlarda kullanılır.
Daha sonra işlenecektir. )
• İç içe döngüler
• Döngülerde kullanılan yardımcı ifadeler
– break
– continue
– goto
• Sonsuz Döngüler
2
Neden Döngüler?
• Programda bazı kodların tekrarlanmasını isteriz,
bazen de koşul sağlandıkça bazı kodların
tekrarlanmasını isteyebiliriz.
• Aşağıdaki örnekleri düşünelim:
–
–
–
–
Klavyeden girilen bir sürü sayının toplamı
an ifadesini hesaplama
1 den N’ye kadar sayıların toplamı
1 den N’ye kadar sayıların karelerini alma
3
Bir dizi sayının toplamını nasıl
hesaplarız?
•
Klavyeden girilecek bir dizi sayının toplamını
hesaplayacak bir algoritma yazalım.
•
Input
–
–
•
Bir sürü sayı (kaç tane olduğunu bilmiyoruz)
0 sayı girişini bitirecek
Output
–
Girilen sayıların toplamı
4
Bir dizi sayının toplamını hesaplama:
Algoritma
1. Başla
2. Toplamı 0 a eşitle
3. Kullanıcıdan sayı girmesini veya 0 ile durmasını
iste.
4. Klavyeden girilen sayıyı oku
5. Eğer sayı 0 değil ise
5.1. toplam = toplam + sayi
5.2. 3. adıma git
6. Toplamı yazdır.
7. Bitir
5
Bir dizi sayının toplamını hesaplama:
Akış Diyagramı
Başla
toplam = 0
Sayı gir veya 0 ile dur
Klavyeden Girilen Sayıyı oku
sayı != 0?
E
toplam +=sayı
H
Toplamı ekrana yazdır
Bitir
6
Bir dizi sayının toplamını hesaplama:
Nasıl yapmalıyız?
•
•
Açıkçası biz kullanıcı 0 girene kadar 3, 4 ve 5.
basamakların sürekli çalışmasını istiyoruz.
Bunun anlamı; 3, 4 ve 5. adımları bir döngü
içinde çalıştırmamız gerekiyor.
7
an yi nasıl hesaplarız?
• “a” gerçek sayı, “n” tam sayı ve n>=0 olsun.
– Örnek, 35 i hesapla.
– 35 = 3*3*3*3*3
• sonuc değişkeni alalım ve ilk değeri 1 olsun.
– sonuc = 1 (a0=1)
• a sayısını kendisiyle çarp ve her çarpma
işleminde bir say.
– Sayacın ilk değeri = 0
• Sayaç “n” olunca “a” sayısını “n” defa kendisiyle
çarpmışız demektir.
8
an Hesaplama Algoritması
1.
2.
3.
4.
Başla
Kullanıcıdan “a” ve “n” girmelerini iste
Sayacı 0 a eşitle
Sonucu 1 e eşitle /* sonuc = a0 = 1 */
5. (sayac < n) olduğu sürece tekrarla
5.1. sonuc = sonuc * a;
5.2. sayac++;
6. Sonucu yazdır
7. Bitir
/* şimdi sonuc = asayac */
9
an Hesaplama Akış Diyagramı
Başla
“a” ve “n” değerlerini giriniz
sayac = 0
sonuc = 1
sayac < n?
H
sonucu yazdır
E
sonuc *= a;
sayac++;
Bitir
10
an Hesaplama – Nasıl Yapmalıyız?
•
“sayac” “n” değerine ulaşana kadar 5.1 ve 5.2
adımlarının tekrarlamalarını istiyoruz.
–
5.1 ve 5.2 basamaklarını koşul sağlandıkça bir döngü
içinde çalışmalarını istiyoruz.
11
C#’ta döngü yapıları
• C# ta döngü tanımlama
–
–
–
–
while döngüleri
do-while döngüleri
for döngüleri
foreach (listelerde ve koleksiyonlarda kullanılır)
• Aşağıdaki yardımcı ifadeler döngülerin
içerisinden çıkarmak için kullanılabilir.
– break
– continue
– goto
12
while Döngüsü
• While döngüsü koşul sağlandıkça çalışır; ta ki test
edilen koşul false olursa döngü biter.
• Döngünün kaç defa çalışacağı bilinmediği durumlarda
kullanılır.
• Kullanımı:
koşul
while(koşul)
{
ifade1;
ifade2;
...
}
H
E
ifade1
ifade2
...
13
Bir sürü sayının toplamını hesaplama:
Akış diyagramı – kod
Başla
int sayı, toplam = 0;
Console.Write("Bir sayı girin(durmak için 0):");
int.TryParse(Console.ReadLine(), out sayı);
while (sayı != 0)
{
toplam += sayı;
Console.Write("Sayı girin(durmak için 0):");
int.TryParse(Console.ReadLine(), out sayı);
}
Console.Write("Toplam =" + toplam);
Bir sayi girin
(n)
n != 0 ?
N
Toplamı
yazdır
Y
Toplam+=n
Bir
sayi
girin
(n)
Bitir
14
an Hesaplamak için Kod
int n, a, sayac = 0;
int sonuc = 1; // sonuc = a^0
Başla
Console.Write("a değerini gir:");
int.TryParse(Console.ReadLine(),out a);
“a” ve “n” değer
lerini giriniz
Console.Write("n değerini gir:");
int.TryParse(Console.ReadLine(), out n);
sayac = 0
sonuc = 1
sayac < n?
H
sonuc yazdır
Bitir
E
sonuc *= a;
sayac++;
while (sayac < n)
{
sonuc *= a;
sayac++;
}
Console.Write("{0}^{1} = {2} "
, a, n, sonuc);
15
a = 3 ve n = 5 için kod izlemesi
int n, sayac = 0;
int a, sonuc = 1;
string str;
Console.Write("a değerini gir:");
str = Console.ReadLine();
int.TryParse(str, out a);
Console.Write("n değerini gir:");
str = Console.ReadLine();
int.TryParse(str, out n);
while (sayac < n)
{
sonuc *= a;
sayac++;
}
Console.Write("{0}^{1} = {2} "
, a, n, sonuc);
a
3
n
5
0 < 5?  True
1 < 5?  True
2 < 5?  True
3 < 5?  True
4 < 5?  True
5 < 5?  False
sayac sonuc
0
1
1
3
2
9
3
27
4
81
5
243
16
an Hesaplama: Alternatif Kod
int n, sayac = 0;
double a, sonuc = 1; // sonuc = a^0
Console.Write("a değerini gir:");
double.TryParse(Console.ReadLine(), out a);
Console.Write("n değerini gir:");
int.TryParse(Console.ReadLine(), out n);
while (sayac < n)
{
sonuc *= a;
sayac++;
}
while (sayac++ < n)
sonuc *= a;
Console.Write("{0}^{1} = {2} " , a, n, sonuc);
17
1+2+3+..+N işlemini hesaplama
Algoritma
1. Kullanıcıdan “n” sayısını iste
2. i = 1
/* İterasyon değişkeni*/
3. toplam = 0 /* geçerli toplam*/
4. (i <= n) olduğu sürece tekrarla
4.1. toplam += i;
4.2. i++;
5. Toplamı yazdır
18
1+2+3+..+N Hesaplama:
Akış Diyagramı ve Kod
Başla
int n, i,toplam;
“n” değerini gir
Console.Write("n değerini gir:");
int.TryParse(Console.ReadLine(),out n);
i=1
toplam = 0
i <= n?
H
Toplamı yazdır
Bitir
E
toplam += i;
i++;
i = 1;
toplam = 0;
while (i <= n)
{
toplam += i;
i++;
}
Console.Write("Toplam = " + toplam);
19
n=5 için Kod izleme
int n, i,toplam;
string str;
Console.Write("n değerini gir:");
str = Console.ReadLine();
int.TryParse(str, out n);
i = 1;
toplam = 0;
while (i <= n)
{
toplam += i;
i++;
}
Console.Write("Toplam = "
+ toplam);
n
5
1 <= 5?  True
2 <= 5?  True
3 <= 5?  True
4 <= 5?  True
5 <= 5?  True
6 <= 5?  False
i
top
1
0
2
1
3
3
4
6
5
10
6
15
20
1+2+3+..+N: Alternatif Kod
int n, i,toplam;
Console.Write("n değerini gir:");
int.TryParse(Console.ReadLine(), out n);
i = 1;
toplam = 0;
while (i <= n)
{
toplam += i;
i++;
}
while (i <= n)
toplam += i++;
Console.Write("Toplam = " + toplam);
21
1 den N sayısına kadar Sayıların
Kareleri Tablosunu Oluşturma
• Girilen n sayısına kadar 1, 2, 3, 4, .., n sayıların
karesini veren bir tablo oluşturalım.
• n = 6 için görünüm aşağıdaki gibi olacak
+-----+-----+
| i | i*i |
+-----+-----+
|
1|
1|
|
2|
4|
|
3|
9|
|
4|
16|
|
5|
25|
|
6|
36|
+-----+-----+
22
Kareler Tablosu için Kod
int i, n;
Başla
Console.Write("n değerini gir:");
int.TryParse(Console.ReadLine(), out n);
// tablo başlığı
Console.WriteLine("+-----+-----+");
Console.WriteLine("| i | i*i |");
Console.WriteLine("+-----+-----+");
n değerini gir
Başlığı yazdır
i=1
i <= n?
E
H
Tablonun alt çizgisini
yazdır
(i, i*i) yazdır
i++;
i = 1;
while (i <= n)
{
// beş hanede sağa hizalayarak yazar
Console.WriteLine("|{0,5}|{1,5}|"
, i, i * i);
i++;
}
// tablonun alt çizgisi
Console.WriteLine("+-----+-----+");
Bitir
23
n=4 için kod izleme
Console.WriteLine("+-----+-----+");
Console.WriteLine("| i | i*i |");
Console.WriteLine("+-----+-----+");
i = 1;
while (i <= n)
{
Console.WriteLine("|{0,5}|{1,5}|",i,i*i);
i++;
}
// tablonun alt çizgisi
Console.WriteLine("+-----+-----+");
+-----+-----+
| i | i*i |
+-----+-----+
|
1|
1|
|
2|
4|
|
3|
9|
|
4|
16|
+-----+-----+
n
4
1 <= 4?  True
2 <= 4?  True
3 <= 4?  True
4 <= 4?  True
i
1
2
3
4
5
5 <= 4?  False
24
while Örnek-1
int i = 0;
Console.WriteLine("C# programlamayı nasıl buldun");
while (i < 10)
{
Console.WriteLine("C# Programlama çok zevkli!");
i++;
}
• 10 defa tekrarlar (0 dan 9’a kadar)
• Aynı mesajı 10 defa yazar
25
while Örnek-2
int i = 20;
Console.WriteLine("C# programlamayı nasıl buldun");
while (i < 10)
{
Console.WriteLine("C# Programlama çok zevkli!");
i++;
}
• 0 defa tekrarlar (i = 20, 10’dan küçük değil)
• Hiç mesaj yazmayacak
26
DINLEDIĞINIZ IÇIN
TEŞEKKÜRLER…
Öğr. Gör. Bayram AKGÜL
27