ALGORĠTMALAR V PROG. GĠRĠġ A. PROBLM ÇÖZÜMÜ ĠLK V VRLRĠ,ALGORĠTMA V AKIġ ġmalari ALGORĠTMA : Adım adım iģlem basamaklarının yazılmasıdır. PROGRAM : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmıģ deyimler dizisi. Program Yazma Süreci : 1. Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle. 2., Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriģ ve çıkıģ biçimlerinin nasıl olacağına kadar). 3. Problemin çözümünü veren algoritmayı yaz. 4. Algoritmayı bir programla dili ile yaz 5. Programın doğru çalıģıp çalıģmadığını test et. Bu testi değiģik veriler (girdiler) için tekrarla. Programlama Dillerinin Seviyelerine Göre Sınıflandırılması : Hangi dili kullanırsanız kullanın (C, Basic, Perl, Pascal, Java ) tüm dillerde belli konularda aynı prensipler vardır. Bu temel konuları öğrenirseniz, çoğu dillerde rahatlıkla aynı iģlemi yapabilirsiniz. Yüksek seviyeli diller insan algılayıģına daha yakın, alçak seviyeli diller de bilgisayarın doğal çalıģmasına daha yakın olan dillerdir. Dillerdeki seviye yükseldikçe programcının iģi de kolaylaģır. Öyle ki, çok yüksek seviyeli programlama dillerinde artık bir iģin nasıl yapılacağına iliģkin değil, ne yapılacağına iliģkin komutlar bulunur. Seviyenin yükselmesi programcıya kolaylık sağlamakla birlikte genel olarak verimliliği ve esnekliği de azaltır. Çok Yüksek Seviyeli Programlama Dilleri ya da Görsel Diller (FOXPRO, PARADOX, ACCSS.., VISUAL BASIC, IV.KUġAK DlLLR) Yüksek Seviyeli Programlama Dilleri (PASCAL, COBOL, FORTRAN, BASIC,...) Orta Seviyeli Programlama Dilleri (C) Alçak Seviyeli Programlama Dilleri (Sembolik Makine Dilleri) GiriĢ ve ÇıkıĢ Deyimleri : Bilgisayar; temel olarak verinin girilmesi, iģlenmesi ve çıktı olarak kullanıcıya verilmesi iģlemlerini yapar. Veriler bilgisayarın anlayacağı Ģekilde girilirken, bilgisayar da kullanıcının anlayacağı Ģekilde sonuçların çıkıģını verir. Veri doğru girilirse iģlemler doğru yapılır. Uygun algoritmik komutlar verilmediğinde iģletilebilir algoritma satırları, yazılmıģ oldukları sırada, yani birinden sonra diğerinin çalıģması Ģeklinde ilerler. AkıĢ Ģemalarında yukarıdan aģağıya doğru sırası gelen satır iģletilir. 1
Basit Örnek bir Algoritma Örneğin bir insanın evden çıkıp okula giderken izleyeceği yolu ve okula giriģinde ilk yapacaklarını tanımlamaktadır. Çözüm : Yurttan dıģarıya çık Otobüs durağına yürü Yoldan geçen araçlardan hangisinin otobüs olduğunu anla Otobüsün geldiğinde otobüse bin Biletini bilet kumbarasına at Ġneceğin yere yakınlaģtığında arkaya yürü Ġneceğini belirten ikaz lambasına bas Otobüs durunca in Okula doğru yürü Okul giriģ kapısından içeriye gir Okul arkadaģlarınla selamlaģ Sınıfa gir. Dersini dinle. 2
AkıĢ ġemaları Öğr.Gör. NAMIK ĠÇLĠ Simge Simgenin Adı ve Anlamı lips: AkıĢ diyagramının baģlangıç ve bitiģ yerlerini gösterir. ngıç simgesinden çıkıģ oku vardır. BitiĢ simgesinde giriģ oku vardır. Paralel Kenar: Programa veri giriģi iģlemlerini gösterir. Dikdörtgen: Aritmetik iģlemler ve değiģik atama iģlemlerinin temsil edilmesi için kullanılır. Ģkenar Dörtgen: Bir karar verme iģlemini temsil eder. Altıgen: Program içinde belirli blokların ard arda tekrar edileceğini gösterir. Oklar: Diyagramın akıģ yönünü,yani her hangi bir adımdaki iģlem tamamlandıktan sonra hangi adıma gidileceğini gösterir. Programa ait sonuçların ekrana yazdırılması Bağlantı: AkıĢ Ģeması sayfaya sığmazsa Ģemayı parçalamak yerine bağlantı ile birleģtirmek gerekir. Alt program olduğunu bildirir. 3
AkıĢ ġemaları (Karar Verme Yapıları) Öğr.Gör. NAMIK ĠÇLĠ DOĞRU c<2 İŞLM YANLIġ AkıĢ ġemaları (Tekrarlı Döngü Yapı) <değiģken> = baģlangıç, bitiģ, artıģ Döngü bitene kadar yapılacak iģlemler Döngü bittikten sonra döngü çıkıģında yapılacak iģlemler 4
B. KONTROL DYĠMLRĠ V DÖNGÜLR Karar Verme Yapıları Ġle Ġlgili Örnekler: Bazen problemin çözümü, bir ya da birden fazla koģula bağlı olarak, yapılacak iģ ya da iģlem adımlarına karar vermek suretiyle gerçekleģtirilebilir. Bu amaçla kullanılan algoritma komutu ĞR dir. ÖRNK A: Birbirinden farklı olarak verilen iki adet sayıdan, büyük olanı bulup gösteren algoritma ve akıģ diyagramını tasarlayınız. PROBLM Bu problemde verilen iki değerden büyük olanı bulunması istenmektedir. Bilgisayar büyük, küçük, eģit ve farklı gibi mantıksal iģlemleri gerçekleģtirebilir. O halde problemde bir karģılaģtırma yapılacak ve karģılaģtırmanın sonucuna göre hangisinin büyük olduğuna karar verilecektir. ANALĠZ Bu problem için gereken Girdiler : Birinci sayı Ġkinci sayı Çıktılar : Büyük olan ĠliĢki : Birinci sayı > Ġkinci sayı => Birinci sayı büyüktür Ġkinci sayı > Birinci sayı => Ġkinci sayı TASARIM BAġLA OKU sayi1 OKU sayi2 ĞR sayi1> sayi2 ĠS YAZ sayi1 DĞĠLS YAZ sayi2 DUR AKIġ DĠYAGRAMI büyüktür Sayi1, Sayi2 (* Bu algoritmada girilen sayıların birbirinden farklı olarak verilecekleri soruda söylendiğinden ikinci koşulu ( İkinci sayı > Birinci sayı => İkinci sayı ) yazmaya gerek kalmamıştır. *) (*Çünkü birinci, ikinciden büyük değilse ve bu sayılar birbirinden farklı ise geriye kalan tek ihtimal ikincinin büyük olma durumudur. *) (*İkinci koşul sorgulanmadan sayi2 değişkeninde bulunan ikinci sayı değeri ekrana yazdırılmıştır.*) Sayi1 > Sayi2 Sayi1 büyüktür H Sayi2 büyüktür Bitir 5
ÖRNK B : Verilen arasınav (vize) ve yarıyıl sonu sınavı (final) notlarına öğrencinin dersten geçip geçmediğini bulan algoritma ve akıģ diyagramını tasarlayınız. PROBLM Öğrencinin geçip kalma durumu aldığı sınav notlarının ağırlıklı ortalamasına bağlıdır. Ağırlıklı ortalama vize notunun %40'i ve final notunun %60'ı toplanarak bulunur. Ortalaması 60'dan küçük olanlar o dersten kalır büyük ya da eģit olanlar geçer. ANALĠZ Bu problem için gereken Girdiler : Arasınav notu Yarıyılsonu sınav notu Çıktılar : Öğrenci Dersten Geçti" Öğrenci Dersten Kaldı ĠliĢki : Ağırlıklı Ortalama=Arasınav Notu * 0.40 + Yarıyılsonu notu * 0.60 Ağırlıklı Ortalama >= 60 => "Öğrenci Dersten Geçti" Ağırlıklı Ortalama < 60 => "Öğrenci Dersten Kaldı" TASARIM BAġLA OKU vize, final Aortalama=vize * 0.40 + final * 0.60 ĞR Aortalama >= 60 ĠS YAZ "Öğrenci Dersten Geçti" DĞĠLS YAZ "Öğrenci Dersten Kaldı DUR AKIġ DĠYAGRAMI Vize, Final Aortalama=Vize*0.4+Final*0.6 Aortalama>=60 Öğrenci dersten geçti H Öğrenci dersten kaldı 6
ÖRNK C : Verilen tamsayının sıfır, pozitif ya da negatif olup olmadığını bulan algoritma ve akıģ diyagramını tasarlayınız. PROBLM Bu problemde kullanıcının dıģarıdan girdi olarak verdiği değerin pozitif, negatif ya da sıfır olup olmadığı bulunmak istenmektedir. Öncelikle pozitif ve negatif sayıların tanımının bilinmesi zorunludur. Bilindiği gibi sıfırdan büyük sayılara pozitif, küçüklere de negatif denmektedir.ğer ikiside değilse o zaman 0 dır Verilen sayının sıfırdan büyük ya da küçük olma durumu sorgulanırsa problem çözülebilir. ANALĠZ Girdiler : Sayı Çıktılar : "Bu sayı Pozitiftir " "Bu sayı Negatiftir'' "Bu sayı sıfırdır ĠliĢki : Sayı >0 => "Bu sayı Pozitiftir " Sayı <0 => "Bu sayı Negatiftir" Sayı =0 =>"Bu sayı Sıfırdır" TASARIM Bir problemin doğru çözümü olan birden fazla farklı algoritma yazılabilir. Algoritma yazıldıktan sonra daha hızlı çalıģması için üzerinde iyileģtirmeler yapılabilir. Bu soruda iki farklı algoritma yazılacaktır. ALGORĠTMA 1 ALGORĠTMA 2 (Ġç içe ğerler Ġle) BAġLA BAġLA OKU Sayı OKU Sayı ĞR Sayı>0 ĠS YAZ "Bu sayı Pozitiftir" ĞR Sayı>0 ĠS YAZ "Bu sayı pozitiftir" ĞR Sayı<0 ĠS YAZ "Bu sayı Negatiftir ' DĞĠLS ĞR Sayı=0 ĠS YAZ "Bu sayı Sıfırdır " ĞR Sayı< 0 ĠS YAZ "Bu sayı negatiftir" DUR DĞĠLS YAZ "Bu sayı sıfırdır" DUR AKIġ DĠYAGRAMI 1 AKIġ DĠYAGRAMI 2 (Ġç içe ğerler Ġle) Sayı Sayı Sayı > 0 Sayı Sayı pozitiftir Sayı > 0 pozitiftir (* Bu örnekte içiçe eğer H H komutları kullanılarak Sayı< 0 sayının sıfırdan Sayı Sayı büyük yada negatiftir Sayı < 0 negatiftir küçük olma durumları ilk 2 H H eğer içinde sınanmıştır.*) Sayı = 0 Sayı Sayı (* İki şartı da sıfırdır sıfırdır sağlamıyorsa o zaman tek H seçenek sayının 0 a eşit olması. Bitir Bitir 2 eğer yeterlidir 7
Ödev Algoritma: Klavyeden girilen A ve B sayıları var. A sayısı ile B sayısı eģitse bu iki sayının toplamını, A sayısı büyükse bu iki sayının çarpımını, A sayısı her iki durumda değilse o zaman A sayısının B sayısından farkını bulan programı adım adım yapınız? Tekrarlı Döngü Yapıları ile Ġlgili Örnekler: Algoritma içerisinde, gerçekleģtirilen belli adımların tekrarlanması sonucu problem çözümüne gidilebilir. Bu tip problemler bu bölüme kadar olan yöntemlerle yapılırsa, yazılacak iģlem satırları gereksiz yere artacaktır. Ġlk konularda da söylendiği gibi, iyi bir algoritma problemi olabilecek en kısa adımda ve en etkili biçimde çözebilendir. ÖRNK A: "krana 10 defa programcının adını yazan algoritmayı yapınız". ALGORĠTMA 1- BAġLA 2- YAZ "ALĠ" 3- YAZ "ALĠ" 4- YAZ "ALĠ" 5- YAZ "ALĠ" 6-YAZ "ALĠ" 7- YAZ "ALĠ" 8- YAZ "ALĠ" 9- YAZ "ALĠ" 10- YAZ "ALĠ" 11-YAZ "ALĠ" 12-DUR (* Bu algoritma problemi çözebilir. Fakat aynı iģi daha kısa adımda ve daha çabuk çözebileni tercih edilecektir. Çünkü programcıya 10 kere yazın yerine 100 kere yazında denebilirdi. O zaman da, bu mantıkla gidilecek olursa 100 kere YAZ "ALĠ" satırı alt alta yazılmak zorunda kalınacaktı. O halde yapılması gereken YAZ "ALĠ" komut satırını 10 ya da 100 kere çalıģtıracak yapıyı kurmaktır. Algoritma içerisinde bazı ifadeleri birden fazla çalıģtırmak için kullanılan yapılara döngü (loop) adı verilir. Yapılacak tekrar miktarının bilindiği durumlarda döngü bir sayaç kullanarak tasarlanabilir. Sayaç aslında tekrar edilme iģleminin ne kadar yapıldığını tutan bir değiģkendir. sayaç kontrollü bir döngüdeki temel öğeler Ģunlardır: Yukarıda da söylendiği gibi bir sayaç değiģkeni olmalıdır. Bu değiģken döngü sayacı (loop counter) olarak bilinir. Döngü sayacına bir atama ifadesiyle ilk değer verilir. Döngü sayacının değerinin sınır değere gelip gelmediği kontrol edilir. Döngünün gövdesinin her çalıģmasından sonra, sayacın değeri bir artırma ya da eksiltme iģlemi ile değiģtirilir. Bu tip bir döngüyü oluģturmak için Ģimdiye kadar verilen komutlara GĠT komutu eklenecektir. Bu tür döngülerde bir sayaç (counter) ve bir koģul yani ĞR (if) komutu kullanılır. Tekrarlanan komutların her iģleyiģinde sayaç değeri bir ya da birden fazla arttırılır ya da azaltılır. Sonrada sayaç değiģkenin değeri ile tekrarlanma miktarı karģılaģtırılır. ğer istenilen değer değilse, tekrarlanacak komut/komutların baģına algoritma iģleyiģi yönlendirilir. ğer istenilen bitme Ģartı sağlanıyorsa algoritma kaldığı yerden devam eder. 8
ÖRNK A : "krana 10 defa programcının adını yazan algoritmayı yapınız". Öğr.Gör. NAMIK ĠÇLĠ ALGORĠTMA 1. BAġLA 2. Sayac=1 3. YAZ "ALĠ" 4. Sayac=Sayac+1 5. ĞR Sayac<=10 ĠS GĠT Adım 3 6. DUR AKIġ DĠYAGRAMI Sayac=1 ALĠ { YAZ "ALİ" komut satırı 10 kere çalışmıştır.} (* Sayaç değişkenin değeri 1 10 aralığında olduğunda (yani 10dan küçük ya da eşit) çalışmıştır.*) Sayac=Sayac+1 Sayac<=10 (* 11 değerini alınca tekrar algoritma 3.adıma dallanmamış bir sonraki adımdan itibaren çalışmasına devam etmiştir.*) Bitir H ÖRNK B : 1'den 25 e kadar (25 de dahil) tek sayıları yazdıran algoritma ve akıģ diyagramını yapınız. ALGORĠTMA AKIġ DĠYAGRAMI 1 1. BAġLA 2. Sayac=1 3. Toplam=0 Toplam=0 4. ĞR Sayac Mod2 0 ĠS Sayac< 26 5. YAZ Sayac Sayac=1 6. Sayac=Sayac+1 7. ğer Sayac<26 ĠS GĠT Adım 4 H 8. BĠTĠR Sayac mod2 0 Bitir H (* Bu algoritmada sayının çift ya da tek olup olmadığı mod işlemine göre bulunmuştur*). (* Bilindiği üzere mod sayının ikinci taraftaki değere bölümünden kalanı vermektedir. *) (* ğer kalan sıfırsa sayının çift olduğu, eğer sıfırdan farklı ise sayının tek olduğu anlaşılır.*) Sayac Sayac=Sayac+1 1 9
C. PROGRAMLAMA ORTAMININ KULLANIMI, KOD YAZIM KURALLARI V DĞĠġKNLR DeğiĢken ve Sabitler : Temel programlama iģlevlerini gerçekleģtirebilmek için değiģkenler kullanılmaktadır. Bir değiģken küçük bir depo alanıdır. Ġçinde sayılar, kelimeler, harfler saklanabilir. DeğiĢkenleri defalarca kullanabilsek de, içinde aynı anda sadece bir bilgi tutabilmektedirler. DeğiĢkenler geçici olarak kullanıldıkları için, program veya bilgisayar kapanınca silinirler. Bazı değerler ise her zaman aynı değere sahip olduğu için sabit adını alırlar. MeselaPI sayısı olan 3.14 değeri gibi. Bu tür sabit olan bazı değerleri programlama dili kendiiçinde hazır olarak destekleyebilir. Genellikle değiģken ve sabitler programın ilk satırlarında tanımlanmaktadır. DeğiĢkenin adı ve ne tür bilgiyi saklayacağı çok önemli bir konudur. Üzerinde çalıģılan programlama dilinin değiģken türleri iyi öğrenilmelidir. Ayrıca değiģkenlerin hafızadaki kapladıkları alanlar da önemlidir. Bilgisayar bizim değiģkenlere ne isim verdiğinizi umursamasa da, hem bizim hem de diğer programcılar için kolay anlaģılacak Ģekilde isimlendirilme çok önemlidir. Macar notasyonu* adı verilen adlandırmayla veritürü ve adı aģağıdaki gibi gösterilirse program yazarken veri türleri oluģturmada bir standart sağlanır. tyil = tamsayı Yıl mad = metin Ad baskerlik = boolean (mantıksal) Askerlik Genel olarak baģka isimlendirme kuralları vardır: Ġlk harf veya tamamı sayı olamaz. Mesela: 2nciYari gibi olmaz. DeğiĢken ismi içinde boģluk, TAB, nter olamaz. Mesela Soy Ad gibi olmaz. Büyük küçük harfle yazım fark eder. Mesela: IlkNot ile ILKNOT farklıdır. Dilin anahtar kelimeleri değiģken adı olamaz. Mesela: PRINT gibi Türkçe ve özel karakterleri kullanmamaya çalıģmalıyız. Mesela: örütbağ yerine orutbag yazılmalı gibi Alt çizgi isimlendirmede kullanılabilir. Mesela: taban_ucret gibi Genel olarak değiģken değerleri; tam sayı (yaģınız 30), ondalıklı sayılar (ağırlığınız 75.6), metin (adınız Neva ), karakter(ehliyet B ) ve mantıksal (burs durumu True Doğru False YanlıĢ )olabilmektedir. Ġlk değeri belli olmayan ve program boyunca da değer atanmayan bir değiģkenin değeri belirsiz olarak kabul edilir. YanlıĢlıkla da bu değiģken, iģlemlerde kullanılırsa, programda istenmeyen değerler elde edilebilir. 10
Veri giriģ ve çıkıģı konusunda basit bir algoritma ile örnek yapalım. Klavyeden adınızı girip, ekrana Selam, yazısı ile adınızı gösterelim: 1. 2. Metin AD 3. Yaz; Ġlk Program 4. Yaz; Ġsminizi giriniz 5. Oku; AD değiģkenine * ata 6. Yaz; Selam, & AD** 7. Bitir * DeğiĢkenler sayesinde geçici bilgileri bellekte saklar ve üzerlerinde iģlem yapabiliriz. ** Genellikle + veya & simgesi metinleri birleģtirmek, yan yana yazmak için kullanılır. *** Pascal ve Basic harf büyüklüklerini önemsemez, C ve Java ise aynı Ģekilde yazmayı önemser. Aktarma (Atama) Deyimi : Bir değiģkene doğrudan veya kullanıcı giriģi ile değer atanabilir. Doğrudan değer atama "=" ile yapılır ve yönü sağdan sola doğrudur. Çoğu programlama dilinde atama "=" ile yapılır. Pascal dilinde de ":=" Ģeklinde yapılmaktadır. a = 5 {Doğru; a nın değeri 5 olur } a = a + 5 {Doğru; a nın eski değerine 5 eklenir. Genelde sayaçlarda kullanılır.} a + 5 = a {Hatalı! } 5 = a {Hatalı! } a = a {Gereksiz } Daha sonra göreceğimiz döngüler ile de, bir Ģeylerin toplamını bulmak istediğimizde de toplam = toplam + sayi Ģeklinde ifadeler kullanırız. toplam değiģkenin eski değerine yeni sayi değeri eklenerek yeni toplam değiģkenine atanır. Böylece toplam = 1 + 2 + 3 + 4 Ģeklinde yazmamıza gerek kalmaz. Dillerin bazılarında daha tanımlama sırasında değer ataması yapılmaktadır. Buna varsayılan değer atama denir: Dim a As Integer = 5 {Basic dilinde} int a = 5; {C dilinde} Const a = 5; {Pascal dilinde} DeğiĢkenlere değer girilmesi ile ilgili basit örnek yapacak olursak. Örnek 1:Klavyeden iki sayı girilir, yer değiģtirilerek ekrana yazdırılır: (3 tabure ve 2 öğrenci var. Öğrencileri diğer tabureye oturtmak ) 1. 2. Sayısal Sayı1, Sayı2, DeğiĢtirici 3. Oku; Ġki sayı giriniz, Sayı1, Sayı2 4. DeğiĢtirici = Sayı1 5. Sayı1 = Sayı2 6. Sayı2 = DeğiĢtirici 7. Yaz; Sayı1, Sayı2 8. Bitir 11
Örnek 2:Klavyeden bir fiyat girilir, KDV(%18) eklenerek sonuç değeri ekrana yazdırılır: 1. 2. Sayısal Fiyat, Sonuc 3. Yaz; Fiyat giriniz 4. Oku; Fiyat 5. Sonuc = Fiyat * 1.18 6. Yaz; Sonuc 7. Bitir Örnek 3: Sabit atama yöntemi ile örnek yapalım: 1. 2. Sayısal KDV, Fiyat, Sonuc 3. KDV = 1.18 (*Tüm programda hep aynı değer olarak geçerli 4. Yaz; Fiyat giriniz 5. Oku; Fiyat 6. Sonuc = Fiyat * KDV 7. Yaz; Sonuc 8. Bitir Örnek 4: BeĢ sayının toplamını ve ortalamasını veren programa ait algoritmanın oluģturulması A1 :T = 0, Sayac = 0 {Toplam adı için T, Ortalama adı için Ort} A2 :X i gir {Girilen sayılar için X} A3 :T= T+X A4 : Sayac = Sayac +1 {Arttırma için Sayac kullanılırsa} A5 :ğer Sayac <5 ise A2 ye git A6 :Ort= T/5 A7 :T ve Ort değerlerini yaz A8 :Bitir 12
Örnek 1:Klavyeden iki sayı girilir, yer değiģtirilerek ekrana yazdırılır: (3 tabure ve 2 öğrenci var. Öğrencileri diğer tabureye oturtmak) Öğr.Gör. NAMIK ĠÇLĠ Örnek 3: Sabit atama yöntemi ile örnek yapalım: KDV=1.18 Sayı1,Sayı2 Fiyat Degistirici=Sayı1 Sayı1=Sayı2 Sayı2=Degistirici Sonuc=Fiyat*KDV Sayı1,Sayı2 Sonuc Örnek 2:Klavyeden bir fiyat girilir, KDV(%18) eklenerek sonuç değeri ekrana yazdırılır: Örnek 4: BeĢ sayının toplamını ve ortalamasını veren programa ait akıģ Ģemasının oluģturulması: 1+2+3+4+5 T=0, Sayac=0 Fiyat Sayac=Sayac+1 T=T+Sayac Sonuc=Fiyat*1.18 Sonuc Sayac < 6 H Ort = T / 5 T, Ort 13
Örnek 4: BeĢ sayının toplamını ve ortalamasını veren programa ait akıģ Ģemasının oluģturulması. SAYAC mantığı ile T=0, Sayac=0 Sayac = 1, 6, 1 (* Sayac 1 den başlayarak 6 ya kadar döner ama son 6 rakamını gördüğünde işlem yapmadan(en son 5 rakamına göre yaptığıyla) işlemi sonlandırır.*) T = T + Sayac Ort = T / 5 (* 1 den 5 e kadar sayma sonucu her saymada T içinde toplanan sayılar yine T nin içinde tutularak toplam sayı bulunur. ortalama içinde toplamı sayı adedine yani 5 e böleriz.*) T, Ort Örnek 5: Klavyeden girilen sayı kadar (N) sayının faktoryelini alan programın akıģ Ģeması. 1.2.3.4 N Başla Faktor=1 (* İlk değer atanmazsa hafızadan farklı bir değer alır. Farklı bir sonuç verir*) N Sayi=1,N (* ğer sayaçta artım miktarı belirtilmezse birer birer artar.*) Faktor=Faktor*sayi Faktor (* Önceki örnekte olduğu gibi sonuçlar aynı değişken üzerine yazılarak döngünün bir sonraki seferinde elde edilen değer korunur.n son döngü değerinden sonra değer ekranda yansıtılacaktır.*) Bitir 14
Örnek 6: 100 kiģilik bir sınıfta 18-22 arası her yaģ grubunda kaç öğrencinin bulunduğunu belirleyip, her yaģ grubunda kaç adet öğrenci olduğunu veren programın algoritma ve akıģ Ģemasını çizin. DeğiĢkenler OSA :Öğrenci sayısını, I18 :18 yaģında olan öğrencilerin sayısını I19 :19 yaģında olan öğrencilerin sayısını I20 :20 yaģında olan öğrencilerin sayısını I21 :21 yaģında olan öğrencilerin sayısını I22 :22 yaģında olan öğrencilerin sayısını IYOS :ĠĢlem yapılan öğrenci sayıaını göstersin. Algoritma A1- A2- I18=0 I19=0 I20=0 I21=0 I22=0 IYOS=0 A3- OSA oku A4- OSA=18 ise I18'i arttır, Adım 9'a git A5- OSA=19 ise I19'u arttır, Adım 9'a git A6- OSA=20 ise I20'yi arttır,adım 9'a git A7- OSA=21 ise I21'i arttır,adım 9'a git A8- OSA=22 ise I22'YĠ arttır,adım 9'a git A9- IYOS<100 ise Adım 3'e git A10- I18,I19,I20,I21,I22,yaz A11- DUR 15
Örnek 7: ax²+bx+c=0 Ģeklinde verilen 2. derece denklemin köklerini bulan programın akıģ diyagramını çizin. = b 2 4ac > 0 ise x 1 = (- b + ) / 2a ve x 2 = (- b - ) / 2a =0 ise x 1,2 = (- b / 2a) < 0 ise Reel kökleri yoktur a, b, c = b 2 4ac > 0 x = (- b / 2a) x H =0 Reel Kök Yoktur x 1 = (- b + ) / 2a x 2 = (- b - ) / 2a x 1, x 2 Örnek 8: Klavyeden girilen Fahrenayt derecesini Cantigrad a çeviren programın akıģ Ģemasını çizin. F C= (F - 32) * 5 / 9 C 16
Örnek 8: 150 ile 250 arasındaki tamsayı Fahrenhayt değerlerine karģılık gelen Cantigrad derece değerlerini gösteren programın akıģ Ģemasını çizin. Tekrarlı döngü yapısı (Sayaç) ile : Karar verme yapısı ile: F = 150, 250 F = 150 F = 150 C= (F - 32) * 5 / 9 F <= 250 H C= (F - 32) * 5 /9 F, C C= (F - 32) * 5 / 9 F, C F, C F = F + 1 F = F + 1 H F > 250 (* İki yol arasındaki fark: İlk yolda F değeri hemen karşılaştırmaya alınarak daha sonra dönüştürme işlemi ve çıktı alınır. İkinci yolda ise ilk F değerine karşılık dönüştürme işlemi yapılır ve çıktı alındıktan sonra karşılaştırmaya alınır.*) 17
D. DĠZĠLR Öğr.Gör. NAMIK ĠÇLĠ DeğiĢkenler aynı anda tek bir değer tutabilen temel değiģkenler ve birden fazla değer saklayabilen bileģik değiģkenler olmak üzere ikiye ayrılır. Temel değiģkenler bellekte tek bir hücreyi tanımlayıp, içlerinde tek bir değeri tutabilirler. Diziler ise ardarda sıralanmıģ bellek hücreleridirler. Diziler bu bağlamda bileģik değiģkenlerdir ve bellekte aynı anda birden fazla ve aynı tipte değerin saklamasını mümkün kılarlar. Dizilerin ilk elemanın indisi 0 dır. Örneğin 100 adet isim ve telefon bilgisini saklamak için 100+100 yani 200 tane değiģken kullanılmalı. Pratikte bu kadar fazla değiģken kullanmak hem gereksiz hem de hatalı sonuçlar verebilir. Bunun için daha kısa olması açısından indisli değiģkenler(diziler) kullanılır. örnek için dizi kullanırsak; 100 elemanlı iki adet dizi iģimizi halledecektir. veri_tipi dizi_adı[eleman_sayısı] int not[100] char diz[25] string A[5] Bellek görüntüsü: Ġki boyutlu dizi (matris): dizi satır ve sütun bilgilerinden oluģur. Veri giriģi yapılırken önce 0.satırdaki tüm bilgiler(sütunlar) girildikten sonra 1.satıra gelerek aynı iģlemler tekrarlanır. veri_tipi dizi_adı[satır_sayısı][sütun_sayısı] int mat[10][10] float not[30][3] Bellek görüntüsü: 18
Örnek 1: Klavyeden girilen 10 adet sayıyı küçükten büyüğe doğru sıralayan programın akıģ Ģemasını çizin. Öğr.Gör. NAMIK ĠÇLĠ Örnek 2: Klavyeden girilen 10 adet sayının en büyüğünü bulan programın akıģ Ģemasını çizin. Dizi sıralanmadan yapılacaktır! X 0 1 2 9 x(1) x(2) x(3) x(10) I = 1, 10 A (I) I = 1, 10 B = A(1) X(I) I = 2, 10 I = 1, 9 A (I) > B H K = I+1, 10 B = A(I) X(I) > X(K) H Gec = X(I) X(I)= X(K) X(K)= Gec B I = 1, 10 X(I) (* İç içe olan döngülerde içteki döngü tamamlanmadan dıştaki döngüye geçmez *) 19
Örnek 3: Klavyeden girilen 4*4 lük iki matrisi toplayan ve sonucu üçüncü bir matrise yazan programın akıģ Ģemasını çizin. I = 1, 4 K = 1, 4 Öğr.Gör. NAMIK ĠÇLĠ Örnek 4: 10*10 luk bir matrisin her bir satırını toplayan programın akıģ Ģemasını çizin. I = 1, 10 K = 1, 10 A(I,K) X(I,K) I = 1, 4 K = 1, 4 I = 1, 10 T = 0 B(I,K) I = 1, 4 K = 1, 10 T=T+X(I,K) T K = 1, 4 C(I,K) = A(I,K) + B(I,K) I = 1, 4 K = 1, 4 C(I,K) (* A matrisinin 1.satır 1.sütunu ile B nin 1.satır 1.sütunu toplanıp C nin 1.satır 1.sütununa yazıldıktan sonra içteki döngü 1 artarak A nın 1.satır 2.sütunu ile B nin 1.satır 2.sütunu toplanıp yine C matrisin 1.satır 2.sütununa yazılır ve böylece içteki döngü(sütun) tamamlandıktan sonra dıştaki döngüye(satıra) geçilir*) 20
Örnek 5: 10*10 bir matrisin her bir satırının küçükten büyüğe doğru sıralayan bir programın akıģ Ģemasını çizin. I = 1, 10 K = 1, 10 X(I,K) { 10*10 matris için veri girişi.} I = 1, 10 K = 1, 9 { 10*10 matris de sütun ve sütun+1 şeklinde her satır için işlemler. } L = K+1, 10 X(I,K) H (* işlemlerde sütun değeri sütun+1 deki yani bir sonraki > sayıdan büyükse o zaman iki sayı yer değiştirsin. *) X(I,L) Gec = X(I,K) X(I,K)=X(I,L) X(I,L)=Gec I = 1, 10 (* tüm sıralama işlemleri(döngüler) bittikten sonra dizi içindeki sayılar matris şeklinde gösterilsin. *) K = 1, 10 X(I,K) 21