Programlamaya Giriş PDF
Document Details
Kocaeli Üniversitesi
Halil Yiğit
Tags
Summary
This document is an introduction to programming. It covers basic computer concepts, the evolution of computers, and their components. The author, Halil Yiğit from Kocaeli University, describes the history of computing devices from the earliest calculators to modern-day computers.
Full Transcript
PROGRAMLAMAYA GİRİŞ HALİL YİĞİT KOCAELİ ÜNİVERSİTESİ https://avesis.kocaeli.edu.tr/halilyigit BİLGİSAYAR NEDİR? Bilgisayar (computer), uzun ve çok karmaşık hesapları bile büyük bir hızla yapabilen, mantıksal (lojik) bağlantılara göre karar verip işlem yürüten maki...
PROGRAMLAMAYA GİRİŞ HALİL YİĞİT KOCAELİ ÜNİVERSİTESİ https://avesis.kocaeli.edu.tr/halilyigit BİLGİSAYAR NEDİR? Bilgisayar (computer), uzun ve çok karmaşık hesapları bile büyük bir hızla yapabilen, mantıksal (lojik) bağlantılara göre karar verip işlem yürüten makinedir. Kısaca bilgisayar, bilgi işleyen elektronik bir aygıttır. Bilgisayar işlemleri hatasız yapar. Kullanıcı hatalı giriş yapmadığı sürece sonuçlar doğru çıkar. Bilgisayar işlemleri çok hızlı yapar. Saniyede milyarlarca işlem yapabilir. Bilgisayar düşünemez, sadece kendisine verilen komutları yerine getirir. İşlem sırası, ve yapacağı işlemler programcı tarafından yazılan programda belirtilir. Bilgisayar programdaki komutlara göre işlem yapar. Bilgisayar, yapılan işlemleri ve girilen verileri depolayabilir, çıktısını alabilir veya uzaktaki bilgisayarlara yollayabilir. Bilgisayar Aritmetik işlemleri yapabilen, Mantıksal karşılaştırma yapabilen, Dış ortamdan aldığı bilgileri saklayabilen, Depolanmış bilgileri işleyebilen Elektronik devrelerden oluşmuş bir araçtır. Bilgisayar (Devam) Bir bilgisayarın herhangi bir işlem sonucunu üretebilmesi için, öncelikle kullanıcının gerekli verileri sisteme girmesi ve bu verilerin nasıl işleneceği ile ilgili talimatları sağlanması gerekir. Bilgisayarların her türlü görevi bağımsız olarak gerçekleştirebileceği düşüncesi yanlıştır. Ancak, uygun veriler ve talimatlar sağlandığında, bilgisayarlar insanlara kıyasla çok daha hızlı ve verimli işlem yaparak çeşitli görevleri yerine getirir ve bu sayede yaşamımızı önemli ölçüde kolaylaştırır. Bilgisayarın Gelişimi İlk Hesaplama Cihazları (ABAKÜS) M.Ö. 2400’de kullanılan abaküs, insanlık tarihindeki ilk hesaplama cihazlarından biridir. Çin, Babil ve Mısır’da aritmetik hesaplamalar yapmak amacıyla farklı abaküs versiyonları kullanıldı. Mekanik Hesaplayıcılar Blaise Pascal'ın Pascaline'i (1642): Pascal, toplama ve çıkarma yapabilen ilk mekanik hesap makinesi olan Pascaline'i geliştirmiştir. https://medium.com/@GuestMachines/5-pascaline-a1a46554fb29 Mekanik Hesaplayıcılar Leibniz'in Kademeli Hesap Makinesi (1673): Gottfried Wilhelm Leibniz, Pascal fonksiyonlarına ek olarak çarpma ve bölme işlemlerini de yapabilen bir makine yaratarak daha karmaşık bir tasarım ortaya koydu. https://www.computerhistory.org/revolution/calculators/1/49 https://www.linkedin.com/pulse/8-early-types-calculating-devices-uma-bisht/ Charles Babbage ve Analitik Motor Fark Motoru (1822): Charles Babbage, hayatı boyunca tam olarak inşa edilemese de polinom hesaplamalarını otomatikleştirmek için Fark Motorunu tasarladı. Sonlu farklar yöntemine dayanır. Sayıları tekrarlanan toplama yoluyla hesaplarlar. Aritmetik toplama kullanması ve mekanik olarak uygulanması daha zor olan çarpma ve bölme ihtiyacını ortadan kaldırmasıdır. Genel aritmetik hesaplama için kullanılamazlar. Charles Babbage ve Analitik Motor Analitik Motor (1837): Genellikle genel amaçlı bir bilgisayarın ilk konsepti olarak adlandırılan bu motor, delikli kartlar kullanarak herhangi bir hesaplamayı gerçekleştirmek için tasarlanmıştı. Analitik Makine, girdi, işlem, çıktı ve hafızaya sahipti, bu nedenle modern bilgisayarların atası olarak kabul edilir. Ada Lovelace'ın bu motor üzerindeki çalışması onu ilk bilgisayar programcısı olarak işaret etmiştir. Ada Lovelace, makine için algoritmalar yazmıştır. Elektromekanik Hesaplayıcılar Alan Turing'in Hesaplama Kavramı: 1936'da Turing, modern algoritmalar ve hesaplama teorisinin temellerini atan teorik bir model olan Turing Makinesi'ni tanıttı. Turing Makineleri, teorik olarak bir problemin algoritmik olarak çözülebilir olup olmadığını belirlemeye yarayan soyut makinelerdir. Colossus (1943): II. Dünya Savaşı sırasında, ilk programlanabilir dijital bilgisayar olan Colossus, Alman şifrelerini (Enigma kodları) kırmaya yardımcı olmak için inşa edildi. Elektromekanik Hesaplayıcılar (1. Nesil) Electronic Numerical Integrator And Computer - ENIAC (1945): Elektronik Sayısal Entegratör ve Bilgisayar, balistik hesaplamalar için programlar çalıştırabilen ilk genel amaçlı elektronik bilgisayardı. John Von Meuman tarafından geliştirilmiştir. Elektronik veri işleme kapasitesine sahip, 30 ton ağırlığında ve 167 m2’lik bir alanı kaplıyor, 18000 vakum tüpü, 1500 röle ve 6000 manuel anahtara sahip, Saniyede 5000 toplama, 357 çarpma ve 38 bölme ve karakök işlemi yapma kapasiteli, Yaklaşık salt 300 okunur veri depolayabilen, Ampullerle soğutulma ihtiyacı, 6 bayan operatör tarafından kablolarla manuel programlama ihtiyacı Transistörlerin Gelişimi Vakum tüpleri İlk transistör John Bardeen, Walter Brattain ve William Shockley tarafından 1947’de Bell Labs’ta geliştirilen transistör, vakum tüplerinin yerini aldı ve bilgisayarların daha küçük, daha hızlı ve daha güvenilir olmasını sağladı. Transistörlerin geliştirilmesi bilgisayar dünyasında yeni bir devrim başlattı. Günümüz transistörleri Vakum tüplerine kıyasla transistörler daha az enerji tüketir, daha uzun ömürlüdür ve çok daha hızlı çalışır. Transistörler, bilgisayarların maliyetini düşürdü ve ticari bilgisayarların yaygınlaşmasına olanak tanıdı. 2. Nesil bilgisayarlar İkinci nesil dönemi 1959-1965 yılları arasındadır. Bu nesilde, vakum tüplerinden yapılmış birinci nesil makinelere göre daha ucuz, daha az güç tüketen, daha kompakt boyutlu, daha güvenilir ve daha hızlı transistörler kullanılmıştır Bu nesilde, birincil bellek olarak manyetik çekirdekler ve ikincil depolama aygıtları olarak manyetik bant ve manyetik diskler kullanılmıştır. Bu nesilde, Assembly dili ve FORTRAN (Formula Translation), COBOL (Common Business-Oriented Language) gibi üst düzey programlama dilleri kullanılmıştır. 2. Nesil bilgisayarlar İkinci neslin temel özellikleri şunlardır: Transistör kullanımı Birinci nesil bilgisayarlara kıyasla güvenilir Birinci nesil bilgisayarlara kıyasla daha küçük IBM 1620 boyutlu Birinci nesil bilgisayarlara kıyasla daha az ısı üretir Birinci nesil bilgisayarlara kıyasla daha az elektrik tüketir Birinci nesil bilgisayarlardan daha hızlı. Hesaplama zamanı mikrosaniyeler seviyesinde Hala çok maliyetli AC gereklidir Çok pahalı olduklarından araştırma amacıyla üniversiteler ve ticari amaçla çok büyük şirketler tarafından kullanıldı. IBM 7094 3. Nesil Bilgisayarlar Entegre Devre (Integrated Circuit - IC) yongalarını kullandı. Bir IC yongasında, birden fazla transistör bir silikon yonga üzerine yerleştirilir. Silikon bir yarı iletken türüdür. Jack Kilby, 1958 yılında, Texas IC yongasının kullanımı bilgisayarın hızını ve verimliliğini Instruments firmasında ilk Entegre devreyi gerçekleştirmiştir. kat kat artırdı. Üçüncü nesil bilgisayarla etkileşim kurmak için delikli kart ve çıktılar yerine klavye ve monitör kullanıldı. Klavye ve monitör işletim sistemi aracılığıyla arayüzlendi. İşletim sistemi farklı uygulamaların aynı anda çalışmasına izin verdi. PASCAL ve C dilleri geliştirildi. IC yongaları 3. Nesil Bilgisayarlar Bu bilgisayarların Hesaplama süresi boyutu ikinci nesil nanosaniyeler bilgisayarlara kıyasla cinsindendi. oldukça küçüktü. Bilgisayarlar geniş kitlelere erişilebilir hale geldi. Bilgisayarlar ticari Örnekler IBM 370, olarak üretildi ve PDP 11. seleflerinden daha küçük ve daha ucuzdu. IBM 370 / Model 155 4. Nesil Bilgisayarlar Büyük Ölçekli Entegrasyon (Large Scale Integration - LSI) ve Çok Büyük Ölçekli Entegrasyon (Very Large Scale Integration - VLSI) teknolojisini kullanırlar. Binlerce transistör, LSI teknolojisi kullanılarak küçük bir silikon çipe entegre edilir. VLSI, yüz binlerce bileşenin küçük bir çipe entegre edilmesini sağlar. Mikroişlemcinin geliştirilmesi bu döneme damga vurmuştur. Mikroişlemci, milyonlarca transistör ve bileşen içeren ve LSI ve VLSI teknolojisi kullanılarak tasarlanmış bir çiptir. Bu nesil bilgisayarlar Kişisel Bilgisayar'ın (PC) ortaya çıkmasına neden oldu. Yarı iletken bellek, daha önceki manyetik çekirdek belleğinin yerini aldı ve belleğe hızlı rastgele erişim sağlandı. Manyetik diskler gibi ikincil depolama aygıtları fiziksel olarak küçüldü ve kapasite olarak büyüdü. https://www.electronicshub.org/vlsi-projects-for-engineering-students/ 4. Nesil Bilgisayarlar Bilgisayarların birbirine bağlanması bu dönemin bir diğer önemli gelişmesidir. Bilgisayarlar, İnternet'in ortaya çıkmasına yol açan ağlar oluşturmak üzere birbirine bağlandı. Bu nesilde ayrıca fare gibi işaretleme aygıtları ve el aygıtları da geliştirildi. Bu dönemde MS-DOS ve MS-Windows gibi birçok yeni işletim sistemi geliştirildi. Bu nesil bilgisayarlar Grafiksel Kullanıcı Arayüzünü (GUI) destekliyordu. GUI, kullanıcının menüler ve simgeler aracılığıyla bilgisayarla etkileşime girmesine olanak tanıyan kullanıcı dostu bir arayüzdür. Programların yazılması için üst düzey programlama dilleri kullanılır. Bu nesilde C, C++, DBASE vb. gibi tüm üst seviye diller kullanıldı. Hesaplama süresi pikosaniye cinsindendir. Moore Yasası Moore Yasası, entegre bir devredeki transistör sayısının, maliyette minimum artışla her iki yılda bir iki katına çıkacağı gözlemidir. Intel'in kurucu ortağı Gordon Moore, 1965'te yayınlanan orijinal makalesinde önümüzdeki 10 yıl boyunca her yıl transistörlerin iki katına çıkacağını öngördü. On yıl sonra, 1975'te Moore bunu her iki yılda bir ikiye katlayacak şekilde revize etti. Yükselen bir trende dayanan bu ekstrapolasyon, 60 yıla yakın bir süredir yarı iletken endüstrisi için yol gösterici bir ilke olmuştur. BİLGİSAYAR SİSTEMİ Bilgisayar, girdi olarak veri kabul eden, girdi verilerini matematiksel ve mantıksal işlemler yaparak işleyen ve istenen çıktıyı veren elektronik bir cihazdır. Bilgisayar sistemi dört bölümden oluşur (1) Donanım - Hardware, (2) Yazılım - Software, (3) Veri - Data , (4) Kullanıcı – User. BİLGİSAYAR SİSTEMİ Donanım Bilgisayarı bir makine olarak oluşturan mekanik parçalardan oluşur. Bilgisayarın fiziksel aygıtlarından oluşur. Aygıtlar, verilerin girişi, çıkışı, depolanması ve işlenmesi için gereklidir. Klavye, fare, monitör, sabit disk sürücüsü, yazıcı, işlemci ve anakart donanım aygıtlarından bazılarıdır. BİLGİSAYAR SİSTEMİ Yazılım Yazılım, bilgisayara gerçekleştirilecek görevler ve bu görevlerin nasıl gerçekleştirileceği hakkında bilgi veren bir dizi talimattır. Program, bilgisayarın anlayacağı bir dilde yazılmış, belirli bir görevi gerçekleştirmek için bir dizi talimattır. Bir dizi program ve belgeye topluca yazılım denir. Bilgisayar sisteminin donanımı kendi başına hiçbir görevi gerçekleştiremez. Donanımın gerçekleştirilecek görev hakkında bilgilendirilmesi gerekir. Yazılım, bilgisayara gerçekleştirilecek görev hakkında bilgi verir. Donanım bu görevleri yerine getirir. İşletim sistemleri, Uygulama yazılımları (Office, Chrome, Adobe, vb), Veritabanı Yönetim Sistemleri (MySQL, vb), Güvenlik yazılımları (Wireshark, Firewalls, vb), Sistem yazılımları (BIOS, Vmware, vb) BİLGİSAYAR SİSTEMİ Veri Veriler, kendi başlarına pek bir öneme sahip olmayan izole değerler veya ham gerçeklerdir. Örneğin, 29 Ocak ve 1994 gibi veriler yalnızca değerleri temsil eder. Veriler, anlamlı bilgiler üretmek üzere işlenen bilgisayara girdi olarak sağlanır. Örneğin, 29 Ocak ve 1994, bir kişinin doğum tarihini vermek için bilgisayar tarafından işlenir. BİLGİSAYAR SİSTEMİ Kullanıcı Bilgisayar programları yazan veya bilgisayarla etkileşim kuran kişilerdir. Bilgisayar Donanımı CPU: Bilgisayarın değişik birimleri arasındaki veri akışı (data flow) ve veri işleme (data processing) görevlerini yerine getirir. CPU, çeşitli komutları yürüterek bilgisayar sisteminin çalışmasını sağlar. GİRİŞ/ÇIKIŞ BİRİMLERİ: İletişim sağlayan ve bilgisayarla dış dünya arasındaki bilgi akışını denetleyen elektronik devreler içerir. HAFIZA: Programların ve bilgilerin saklandığı birimlerdir. Bilgisayar Donanımı Merkezi İşlem Birimi (Central Processing Unit – CPU), bilgisayarın işlemlerini kontrol eder, koordine eder ve denetler. Giriş verilerinin işlenmesinden sorumludur. CPU Aritmetik Mantık Birimi (Aritmetic Logic Unit - ALU), Kontrol Birimi (Control Unit - CU) Kaydedicilerden (Register) oluşur. ALU, giriş verileri üzerindeki tüm aritmetik ve mantık işlemlerini gerçekleştirir. CU, bilgisayarın genel işlemlerini kontrol eder, yani talimatların yürütülme sırasını denetler ve bilgisayarın birimlerinin genel işleyişini kontrol eder ve koordine eder. Ek olarak, CPU'nun ayrıca verilerin, talimatların, adreslerin ve hesaplamanın ara sonuçlarının geçici olarak depolanması için bir dizi kaydedicisi vardır. CPU, işleme sırasında verileri ve talimatları depolamak için kayıtları kullanır. Bilgisayar Donanımı CPU’daki komut döngüsü Bellek Birimi Bellek birimi, verilerin işlenmesi sırasında verileri, talimatları, ara sonuçları ve çıktıyı geçici olarak depolar. Bu belleğe bilgisayarın ana belleği veya birincil belleği de denir. İşlenecek giriş verileri, işlenmeden önce ana belleğe getirilir. Verilerin işlenmesi için gereken talimatlar ve ara sonuçlar da ana bellekte saklanır. Çıktı, çıkış aygıtına aktarılmadan önce bellekte saklanır. CPU, ana bellekte saklanan bilgilerle çalışabilir. Başka bir depolama birimi türü de bilgisayarın ikincil belleği olarak adlandırılır. Veriler, programlar ve çıktı, bilgisayarın depolama biriminde kalıcı olarak saklanır. Manyetik diskler, optik diskler ve manyetik bantlar ikincil belleğe örnektir. Bellek Türleri Register (Kaydedici) CPU’nun bir parçasıdır; çok hızlı; sınırlı büyüklüğe sahiptir. Ön Bellek (Cache Memory) Küçük boyutlu hızlı bir bellektir. İşlemci çipi veya ayrı bir modül üzerinde bulunabilir. Ana bellek bölümlerinin bir kopyasını içerir. Normalde bir bilgisayarda işlenecek verilerin hepsi RAM'de bulunur. İşlemci burdaki verileri işlemek için yol sistemleri ile RAM'e gider ve veriyi alır; fakat bu ara birimler ve RAM işlemcinin hızına yetişemez. Dolayısıyla aradaki zaman kaybını önlemek için ön belleğe ihtiyaç duyulur. Ön bellek, işlemcinin sık kullandığı veri ve uygulamalara en hızlı biçimde ulaşmasını sağlamak üzere tasarlanmıştır. İşlemcinin ön belleğe erişmesi, ana belleğe erişmesine oranla çok kısa bir süredir. Eğer aranan bilgi ön bellekte yoksa işlemci ana belleğe başvurur. Bellek Türleri ROM (Read Only Memory - Sadece Okunur Bellek) Programların kalıcı olarak durduğu sadece okunabilen bellek tipidir. ROM'lar yapımcı ya da kullanıcı tarafından değiştirilmemek üzere konulmuş program komutlarını içerir. Uçucu bir bellek değildir; güç kesilmesi, bilgisayarı yeniden başlatma gibi durumlarda burda bulunan veri kaybı gözlenmez. BIOS (Basic Input/Output System), ROM belleğinden çalıştırılmaktadır. RAM (Random Access Memory - Rasgele Erişimli Bellek) Bilgisayardaki ana hafıza ya da birincil depo olarak kullanılır. Bu tip bellekler içerisine bilgi yazılması ve istenildiği zaman bu bilgilere ulaşılması için tasarlanmıştır. RAM’de saklanan bilgiler değiştirilebilir. RAM’deki bilgilere erişim, disk ya da disket sürücülerindeki erişimle karıştırılmayacak kadar hızlıdır. Diğer Bilgisayar Bileşenleri Veri depolama birimleri HDD Harddisk, SSD Harddisk, CD, DVD, USB Bellek (Flash Bellek) Manyetik bant, Kaset, Floppy disk, Delikli kart Input Cihazları Klavye, Fare, Dokunmatik ekran, Tarayıcı, Webcam,Joystick,Mikrofon Output Cihazları Monitör, Yazıcı, Plotter, Hoparlör Bellek Hiyerarşisi Birim maliyet artar Bit başına maliyet düşer Erişim süresi azalır Kapasite artar Boyut azalır CPU’ya yaklaşır Erişim süresi artar Kullanım sıklığı artar İşlemci tarafından belleğe erişim sıklığı azalır Binary (ikili) Sistem Bilgisayarların temel çalışma prensiplerinden biri ikili (binary) sayı sistemidir. İkili sayı sistemi, sadece iki farklı değerden oluşur: 0 ve 1. Bu sistem, bilgisayar donanımının çalışmasına uygun olduğu için kullanılır. Elektronik cihazlar, elektrik sinyalleri ile çalıştığı için ikili sayı sistemindeki 0 ve 1, düşük (0) ve yüksek (1) voltajı temsil eder. Bu sistemdeki sayılar, bilgisayarın veri işleme, depolama ve iletişim için kullandığı en temel dil olarak işlev görür. Bit Nedir? Bit (binary digit), ikili sayı sisteminin en küçük birimidir ve yalnızca iki değere sahip olabilir: 0 veya 1. Bilgisayarlar, bilgiyi bitler şeklinde saklar ve işler. Her bit, bir elektrik sinyalinin açık (1) veya kapalı (0) olduğunu gösterir. Binary (ikili) Sistem Byte Nedir? Byte, genellikle 8 bitten oluşan bir veri birimidir. Byte, bilgisayar sistemlerinde en yaygın kullanılan veri ölçü birimidir. Bilgisayarlar, veri işleme ve saklama işlemlerinde bilgiyi genellikle byte biriminde işlerler. Örnek: 1 byte = 8 bit Bir byte, 8 bit içerdiği için 2^8 = 256 farklı değeri temsil edebilir. Yani bir byte, 0'dan 255'e kadar herhangi bir sayıyı ifade edebilir. Binary (ikili) Sistem Bit ve Byte Temelinde İkili Sayılar Her bit, 0 veya 1 değerlerinden oluştuğu için, birden fazla bitin birleşmesiyle daha büyük sayılar ifade edilebilir. Aşağıda birkaç örnek verilmiştir: 1 bit: İki durum (0, 1) 2 bit: Dört durum (00, 01, 10, 11) yani 0-3 arası sayılar 3 bit: Sekiz durum (000, 001, 010, 011, 100, 101, 110, 111) yani 0-7 arası sayılar 8 bit (1 byte): 256 durum (00000000 - 11111111), yani 0-255 arası sayılar. Bilgisayarda Veri Temsili Bilgisayarlar sayıları, metinleri, görüntüleri ve diğer verileri bit ve byte kullanarak saklar ve işler. Aşağıda farklı veri türlerinin ikili sistemde nasıl temsil edildiğine dair örnekler verilmiştir: Sayılar: Bilgisayarlar sayıları ikili biçimde saklar. Örneğin, desimal sistemde 10 olan sayı, ikili sistemde 1010 olarak saklanır. Karakterler: Bilgisayarlar karakterleri de bitlerle temsil eder. Yaygın bir sistem olan ASCII tablosunda her karakter bir byte (8 bit) ile ifade edilir. Örneğin:'A' harfi: ASCII kodu 65'tir, ikili sistemde 65 sayısı 01000001 olarak temsil edilir. 'B' harfi: ASCII kodu 66'dır, ikili sistemde 01000010 olarak ifade edilir. Görüntüler: Bir resim, her pikselin rengini temsil eden bitlerle saklanır. Bir renkli görüntüde, her piksel genellikle 24 bit ile temsil edilir (8 bit kırmızı, 8 bit yeşil, 8 bit mavi). Bit, Byte ve Daha Büyük Veri Birimleri Bilgisayarlardaki veri miktarını ölçmek için bit ve byte kullanılır. Daha büyük veri miktarları ise şu birimlerle ifade edilir: Kilobyte (KB): 1 KB = 1024 byte Küçük metin dosyaları, simgeler, kısa e-postalar Megabyte (MB): 1 MB = 1024 KB Müzik dosyaları, dijital fotoğraflar, küçük belgeler Gigabyte (GB): 1 GB = 1024 MB HD videolar, bilgisayar oyunları, DVD filmler, büyük uygulamalar Terabyte (TB): 1 TB = 1024 GB Yüzlerce saatlik video, yüz binlerce fotoğraf, kurumsal büyük veri yedekleme çözümleri Bilgisayar Yazılımı Gelecek Hafta. PROGRAMLAMAYA GİRİŞ HALİL YİĞİT KOCAELİ ÜNİVERSİTESİ https://avesis.kocaeli.edu.tr/halilyigit BİLGİSAYAR YAZILIMI (SOFTWARE) Tek bir kod satırındaki basit bir komuttan milyonlarca satırdan oluşan ayrıntılı sistemlere kadar, yazılım bir bilgisayarın görevleri nasıl gerçekleştireceğini belirleyen program, talimat veya veri koleksiyonunu ifade eder. Yazılım bir bilgisayarın beyni olarak hizmet eder, her işlevini yönlendirir ve çeşitli girdileri ve gereksinimleri işlemesini ve bunlara yanıt vermesini sağlar. Yazılım ve Donanım Farkları Yazılım somut değildir (ona dokunamazsınız), donanım ise somuttur (ona dokunabilirsiniz). Yazılım, donanıma hangi görevleri gerçekleştirmesi gerektiğini söyleyerek talimatlar sağlar. Donanım, bu görevleri gerçekleştirmek için gereken gerçek fiziksel süreçleri yürütür. Yazılım kolayca güncellenebilir, değiştirilebilir veya silinebilir. Donanımın değiştirilmesi veya yükseltilmesi için fiziksel değişikliklere ihtiyaç vardır. Donanımın kullanışlı olması için yazılıma ihtiyacı vardır, çünkü yazılım olmadan görevleri gerçekleştiremez. Tersine, yazılımın çalışması için donanıma ihtiyacı vardır ancak sistem desteklediği sürece belirli bir donanım parçasından bağımsızdır. Sistem / Uygulama Yazılımı Bilgisayar yazılımları genellikle iki ana program türüne ayrılır: Sistem Yazılımı ve Uygulama Yazılımı. Sistem Yazılımı: Bilgisayar sisteminin kaynaklarını ve temel fonksiyonlarını yöneten ve diğer yazılımları çalıştırmak ve kullanmak için tasarlanmış bir platformdur. Aygıt Yazılımı (Firmware) İşletim sistemi Sistem destek yazılımı Sistem geliştirme yazılımı Uygulama Yazılımı: Bilgisayar kullanıcılarının bazı belli başlı işlemleri yapabilmelerine olanak sağlayan yazılımlardır. Genel amaçlı Uygulamaya özel Sistem Yazılımı Aygıt yazılımı: Sistemi oluşturan donanımların çalışması için gerekli olan yazılımlardır. İşletim sistemi: Kullanıcı arayüzü, ağ bağlantı arayüzleri, Dosya erişimi ve organizasyonu, Çoklu çalışma gibi hizmetleri sağlayan yazılımlardır. Örneğin: DOS, Windows, Linux, PARDUS, Unix,vs.. Sistem destek yazılımları: Sistemle ilişkili faydalı yazılımlardır. Disk formatlayıcı, virüs yazılımları, hesap makinesi, test ve iletişim yazılımları, Hyperterminal, Telnet vs.. Sistem geliştirme yazılımları: Bunlar, çeşitli kütüphaneler, Uygulama Programı Arayüzü (API – Application Programming Interface) (Winsock – Windows Sockets, SetupAPI, MMTools, SAPI – Speech API, DDK – Device Driver Kit), Derleyiciler (compiler), Debugger’lar (Hata Ayıklayıcı). Uygulama Yazılımı Genel Amaçlı Kelime işlem programları: MS-Word, Word-Pro, … Veri tabanı yönetim programları: Oracle, Access, SQL, … Hesap Tablosu programları: MS-Excel, Lotus, … Grafik ve çizim programları: AutoCAD, 3D MAX, Adobe Photoshop, Corel Draw, … Matematik tabanlı programlar: MATLAB, MatCAD, Mathematica Uygulamaya Özel Genel amaçlı uygulama yazılımlarının aksine, bu çözümler belirli sorunları çözmek veya belirli sektörlerle ilgili belirli işlevleri desteklemek üzere yazılır. Sağlık, Eğitim, Üretim, Lojistik, vb. Mobil Uygulamalar Skype, Facebook, WhatsApp, iTunes, Netflix, vb. Farklar Sistem Yazılımı (SY) Uygulama Yazılımı (UY) Sistem kaynaklarını yönetmek için Belirli amaçlar için görevleri yerine tasarlanır. getirmek için tasarlanır. SY olmadan bilgisayar çalışmaz. Uygulama yazılımı olmadan bilgisayar Uygulama yazılımına bağımlı değildir. çalışır. UY ile karşılaştırıldığında programlama Sistem yazılımı olmadan çalışmaz. karmaşıktır. Programlama basittir. Donanım ile doğrudan iletişime geçer. Donanımı dikkate almaz. Sistem başladığında çalışır ve sistem Kullanıcı ihtiyaç duyduğunda çalışır. kapanana kadar devam eder. Sistemin çalışması üzerinde çok fazla Bir sistemin düzgün çalışması için önemi yoktur. olmazsa olmazdır. Program ve Yazılımın Tanımı Program: Belirli bir işi gerçekleştirmek için gerekli komutlar dizisi olarak tanımlanabilir. Programlama: Bir programı oluşturabilmek için gerekli komutların belirlenmesi ve uygun biçimde kullanılmasıdır. Programlama Dilleri: Bir programın oluşturulmasında kullanılan komutlar, tanımlar ve kuralların belirtildiği programlama araçlarıdır. Yazılım: Belirli bir amacı sağlayan, program yada programlar ve ilgili dokümantasyonlardır. Programlama Dilleri Bilgisayarlara ne yapmaları gerektiğini söylememizi sağlayan özel bir dil Tüm yazılımlar programlama dilleri ile yazılır. Makine Dili Birinci seviye ve makine kodu Bilgisayarın ana dilidir ve anlayabildiği tek dildir. Bilgisayarın gerçekleştirmesi gereken talimatları temsil eden ikili (binary) kodlardan oluşur (0’lar ve 1’ler) Örn. 0110 1001 1010 1011 Bu talimatlar CPU'ya veri taşıma, hesaplamalar yapma veya bellekle etkileşim kurma gibi işlemleri gerçekleştirmesini söyler. Assembly Kodu İkinci seviye Makine dili Makine diline Makine Her CPU Assembler – dildir. (ikili kod) ile birebir dilinden daha mimarisinin assembly yüksek çevrilebilir kolay kendi dilini makine seviyeli anlaşılabilir assembly dili diline çeviren programlama (ama çok da vardır program dilleri (C veya değil), daha (örneğin, x86, Python gibi) okunabilir ARM, vb.). arasında aracı sembolik görevi gören talimatlar düşük seviyeli kullanır. bir programlama dilidir. Örn. ADD X Y Z Prosedürel Diller Üçücü seviye Prosedürel diller, problem çözmeye yönelik yapılandırılmıştır. Programlarda bilgisayarın işlem akışının adım adım tasarlanabildiği üst düzey programlama dilidir. İnsan diline daha çok benzer; bilinen kelimeleri kullanır Örnek: C, C++, Java, Fortran, QuickBasic Bir program, daha küçük, yeniden kullanılabilir bölümlere veya prosedürlere (fonksiyonlara) ayrılır. Bunlar belirli görevleri gerçekleştirebilir ve program içinde birden çok kez çağrılabilir. Derleyici (compiler) – programın tümünü assembly veya makine diline çevirir (C++, Pascal). Interpreter – program çalıştırıldığında adım adım programı makine koduna çevirir (Basic, Javascript) Prosedürel olmayan Diller Bildirimsel diller olarak da bilinen dördüncü seviye dildir. Programın nasıl başarılacağından ziyade neyi başarması gerektiğine odaklanılan bir tür üst düzey programlama dilidir. Programcının bilgisayara görevleri nasıl gerçekleştireceğini söylemek için ayrıntılı adım adım talimatlar (veya prosedürler) yazdığı prosedürel dillerin aksine, prosedürel olmayan diller programcının istenen sonuçları belirtmesini gerektirir ve sistem bunun nasıl gerçekleştirileceğini belirler. Teknik olmayan insanlar tarafından da kullanılabilir. Kullanıcının sadece gerekli sorguyu göndermesi sonuca ulaşması için yeterlidir. Örnek SQL (Structured Query Language), HTML (Hypertext Markup Language), Prolog (Programming in Logic) Akıllı Diller Akıllı dil, genellikle yapay zekayı (AI) desteklemek veya simüle etmek için tasarlanmış beşinci nesil bir programlama dilidir. Bu diller muhakeme, öğrenme, problem çözme ve doğal dili anlama gibi görevleri gerçekleştirebilen programlar yazmayı kolaylaştırır. Bu diller Mantık tabanlı muhakeme Makine öğrenimi Doğal dil işleme (NLP) Uzman sistemler Otomatik karar alma gibi AI ile ilgili görevlerle başa çıkmak için araçlar ve çerçeveler sağlar. Python (with AI libraries): Geleneksel olarak "akıllı bir dil" olarak kabul edilmese de Python, basitliği ve TensorFlow, PyTorch ve Scikit-learn gibi kapsamlı AI kütüphaneleri nedeniyle AI geliştirme için tercih edilen dil haline gelmiştir. R (for machine learning and data analysis): R, istatistiksel hesaplama ve veri analizi için yoğun olarak kullanılan bir dildir ve bu da onu veri odaklı karar alma ve modelleme gerektiren AI görevleri için ideal hale getirir. Dildel dile çevrim İki Basamaklı İki Sayının Toplanması (Yüksek Seviyeli Dil) Python Kodu x = int(input('ilk sayiyi giriniz: ')) y = int(input('ikinci sayiyi giriniz: ')) c = x+y print(c) 1 2 3 Programlama Dillerinin Tarihçesi Programlama dillerinin tarihi 1800'lere kadar uzanır. Ada Lovelace, Charles Babbage'ın Analitik Makine adlı mekanik bilgisayarı için bir algoritma tasarlamıştır (1840’lar). Bu, tarihteki ilk bilgisayar programı olarak kabul edilir. Bu nedenle ilk gerçek anlamdaki programlama dillerinden birinin adı Ada Lovelace anısına ADA olarak isimlendirilmiştir. 1940 larda ilk modern bilgisayar ortaya çıktığında, programcılar yalnızca assembly dili kullanarak yazılım yapabiliyorlardı. FORTRAN (1957) - İlk yüksek seviyeli programlama dillerinden biri olan FORTRAN (FORmula TRANslation), IBM tarafından bilimsel ve mühendislik hesaplamaları için geliştirildi. COBOL (1960) - İş dünyasının ihtiyaçlarına yönelik olarak geliştirilen COBOL (COmmon Business Oriented Language), ticari veri işleme için kullanıldı. LISP (1958) - LISP, yapay zeka araştırmaları için geliştirilen ilk programlama dillerindendir. LISP (LISt Processor), özellikle sembolik işlemler için kullanılmış ve yapay zeka alanında büyük bir rol oynamıştır. ALGOL (1958) - ALGOL (ALGOrithmic Language), bilgisayar bilimciler tarafından algoritmik işlemler için geliştirilmiştir ve birçok modern programlama dilinin temellerini atmıştır. Özellikle C, Pascal, ve Java gibi diller ALGOL'un yapısından etkilenmiştir. BASIC (1964) - BASIC (Beginner's All-purpose Symbolic Instruction Code), bilgisayar programcılığını yaygınlaştırmak için basit ve öğrenmesi kolay bir dil olarak tasarlandı. Bu dil, eğitim amaçlı geliştirilmiş ve kişisel bilgisayarlarda geniş kullanım alanı bulmuştur. Programlama Dillerinin Tarihçesi Pascal, 1970 yılında İsviçreli bilgisayar bilimci Niklaus Wirth tarafından geliştirilen bir programlama dilidir. Dilin ismi, ünlü Fransız matematikçi ve filozof Blaise Pascal'dan alınmıştır. Pascal dili, özellikle yapısal programlama ve eğitim amacıyla geliştirilmiştir. C Dili (1972) - C, Bell Laboratuvarları'nda Dennis Ritchie tarafından geliştirildi. C, hem düşük seviyeli hem de yüksek seviyeli programlama yapmayı mümkün kılarak işletim sistemleri geliştirme ve sistem programlama alanında büyük bir popülarite kazandı. Günümüzde birçok modern programlama dilinin (C++, Java, C#) temelini oluşturur. SQL (Structured Query Language) dili, IBM tarafından geliştirilmeye başlandı (1974) ve ilk olarak SEQUEL (Structured English Query Language) adıyla anıldı. Oracle şirketi, SQL dilini destekleyen ilk ticari ilişkisel veritabanı yönetim sistemini (RDBMS) piyasaya sürdü (1979). ADA (1983) - Ada dili, 1970'lerin sonunda Amerika Birleşik Devletleri Savunma Bakanlığı (DoD) tarafından büyük ve karmaşık yazılım projelerinde kullanılmak üzere geliştirilen yüksek seviyeli, yapısal bir programlama dilidir. Ada 83 adıyla ilk resmi sürümü yayımlandı ve savunma sanayii gibi kritik uygulama alanlarında kullanılmaya başlandı. Güçlü veri tipleri, modülerlik, çoklu iş parçacığı desteği ve güvenilirlik öne çıkan özellikleridir. C++ (1983) - C++, Bjarne Stroustrup tarafından C diline nesne yönelimli programlama özellikleri eklenerek geliştirilmiştir. Nesne yönelimli programlama, veri ve işlevleri birleştiren "nesneler" kullanarak daha modüler ve yeniden kullanılabilir kod yazmayı mümkün kıldı. Programlama Dillerinin Tarihçesi Java (1995) - Java, Sun Microsystems tarafından geliştirilmiş ve "Bir kez yaz, her yerde çalıştır" (Write Once, Run Anywhere) prensibiyle platform bağımsız bir dil olarak tanıtılmıştır. Java, web uygulamaları ve mobil cihazlar için yaygın olarak kullanılmıştır ve hâlâ popülerdir. PHP, dinamik web siteleri ve web uygulamaları geliştirmek için kullanılan, sunucu taraflı bir betik dilidir. PHP'nin ilk resmi sürümü 1995’te yayımlandı. Bu dönemde PHP, basit dinamik web sayfaları oluşturmak ve web formlarını işlemek için kullanılıyordu. Python (1991) - Python, Guido van Rossum tarafından geliştirilmiş ve kolay okunabilirliği ile bilinir. Genel amaçlı bir programlama dili olan Python, bilimsel hesaplamalar, web geliştirme, yapay zeka ve veri analitiği gibi birçok alanda kullanılır. Son yıllarda özellikle yapay zeka ve veri bilimi alanlarında öne çıkmıştır. C# (2000) - C#, Microsoft tarafından geliştirilen ve hem nesne yönelimli hem de bileşen yönelimli programlamayı destekleyen bir dil olarak ortaya çıktı. Özellikle Windows uygulama geliştirme ve oyun programlama (Unity oyun motorunda) için popülerdir. JavaScript (1995 - Bugün) - 1995'te Netscape tarafından web sayfalarına etkileşim kazandırmak için geliştirildi. Zamanla modern web uygulamalarının temel taşlarından biri haline geldi ve hem istemci tarafında (frontend) hem de sunucu tarafında (Node.js) kullanılır hale geldi. Programlama Dillerinin Tarihçesi Swift (2014) - Swift, Apple tarafından iOS ve macOS uygulamaları geliştirmek için tasarlandı. Hızlı, güvenli ve modern özelliklere sahip bir dil olarak, Apple ekosisteminde C ve Objective-C'nin yerini almaya başlamıştır. Kotlin, 2011 yılında JetBrains tarafından geliştirilen, modern, açık kaynaklı bir programlama dilidir. JVM (Java Virtual Machine) üzerinde çalışan Kotlin, özellikle Android uygulama geliştirme için popüler hale gelmiştir. Google, Kotlin'i resmi olarak Android için desteklediğini duyurdu (2017). Bu dönüm noktası, Kotlin'i Android geliştiricileri arasında son derece popüler hale getirdi. Google, Android geliştirme için Kotlin'i öncelikli dil olarak ilan etti (2020) Yazılım Geliştirme Araçları Geliştirici araçları, yazılım geliştirmeyi daha hızlı ve daha verimli hale getiren teknolojilerdir. Fiziksel gerçeklik ve bilgi işlem süreçleri arasında bir arabirim işlevi görür. Bu araçlar, kodlama, test etme, hata ayıklama, işbirliği (kod paylaşımı, versiyon kontrolü, iletişim), dağıtım (bir yazılımın hazır hale getirilmesi süreci) ve proje yönetimi dahil olmak üzere yazılım geliştirme yaşam döngüsünün farklı yönlerini kolaylaştırır. Editörler-Tümleşik geliştirme ortamları (Integrated Development Environments - IDE) Derleyiciler - Bağlayıcılar (Compilers–Linkers) Yorumlayıcılar (Interpreter) Editörler Program kodlarını yazmak için kullanılan, metin düzenleyicilerdir. Program kodları saf metin biçiminde yazıldığından, herhangi bir metin düzenleyicisi, program yazılımı için kullanılabilir. Kodlamadaki hatalar görülmez. Anahtar kelimeler, fonksiyonlar ve parametreleri, vb.. tanımlar ayrı renklendirilmediğinden kod yazmak daha zordur. Breakpoint, yada watch gibi, hata ayıklama unsurları yoktur. Program derleme ve bağlama işlemi editör dışında genellikle komut satırı üzerinde yapılır. Visual Studio Code, Sublime Text, Atom, Notepad, Wordpad, Notepad++ Integrated Development Environment (IDE) Kod düzenleme, hata ayıklama ve derleme özellikleriyle kapsamlı bir ortam sağlamak. Genellikle sürüm denetimi ve proje yönetimini desteklerler. Genellikle derleyicileri –bağlayıcıları ortam içinden kullanabilmeyi yada derleyici ve bağlayıcıya ortam içinden erişme yollarını sağlarlar (Makefilevs..) Derleyici ve bağlayıcı tümleşik olan yapılarda Hata ayıklama, Gözlem penceresi gibi bileşenler mevcuttur. Yazım işlemini kolaylaştıracak vurgulamalar ve uyarılar mevcuttur. Derleyici ve bağlayıcı parametreleri menülerden ayarlanabilir. Yardımlar mevcuttur. Her yazılım dilinin kendi IDE si mevcuttur. Ancak bazı IDE’ler birden fazla yazılım dili için ortam sağlayabilir. Visual Studio, Eclipse, NetBeans Derleyiciler (Complier) Bir metin editörü yada IDE üzerinde yazılanyüksek seviyeli program kodlarını, makinenin anlayabileceği OBJ kodlara (makine kodu (ikili) veya ara dil gibi daha düşük seviyeli bir dile) dönüştüren bir uygulama yazılımıdır. Derleyicilerin birçoğu, Program dilinin yanısıra makine dilinin (assembly) de kullanılmasına izin verir. Bağlayıcılar (Linker) Bir derleyici tarafından derlenmiş olan OBJ program kodlarını uygun bellek bölgelerine yerleştirerek, değişkenlerin ve sabitlerin bellek atamalarını ve ilklemelerini gerçekleyerek tek bir çalıştırılabilir program elde eden bir uygulama yazılımıdır (windows için exe dosya) Yorumlayıcılar (Interpreter) Yorumlayıcılar, program kodunu bir bütün olarak değerlendirmez. Program kodunu satır, satır yorumlayarak çalıştırırlar. Bu nedenle günümüzde derleyicilere göre daha kısıtlı uygulamalara sahiptirler, İnternet uygulamaları ve bilimsel alanda yaygın kullanılmaktadırlar. Bazı yorumlayıcılar, yazılan program satırını, daha etkin bir biçime çevirip, hemen uygularlar. Bunlar arasında: Perl, Phyton, Matlab, gibi yorumlayıcılar sayılabilir. Bazı yorumlayıcılar ise, yorumlayıcı sistemin bir parçası olan bir derleyici tarafından önceden derlenip saklanmış kodları uygularlar. Javascript bunlar arasında sayılabilir. Sürüm Kontrol Sistemleri (Version Control Systems - VCS) Zaman içinde kaynak kodundaki değişiklikleri yönetmek, işbirliğini sağlamak ve farklı sürümleri takip etmek için kullanılır. Git, Subversion (SVN), Mercurial Kod İşbirliği ve İnceleme Araçları Kod paylaşımı, çekme istekleri (pull request) ve kod inceleme iş akışları aracılığıyla işbirliğini kolaylaştırır. Çekme isteği Git gibi sürüm kontrol sistemlerinde bir kod tabanında değişiklik önermek için kullanılan bir yöntemdir. Geliştiricilerin ekip üyelerine bir özelliğin, hata düzeltmesinin veya diğer kod değişikliklerinin incelenmeye hazır olduğunu bildirmelerini sağlar. Çekme isteği incelenip onaylandıktan sonra, değişiklikler ana projeye veya dala (örneğin, ana veya ana) birleştirilebilir. GitHub, GitLab, Bitbucket, Gerrit Problem Çözme Problem Çözme Tekniği (Descartes’e göre): Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün. Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyin. Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun. Problem Çözme Sırası Problemi anlama Bir çözüm yolu (Understanding, geliştirme (Designing), Analyzing), Tekrar tekrar test etme Algoritma ve program (Reviewing). yazma (Writing), Yazılım Geliştirme Aşamaları Bir problemi çözmek için yazılacak programda, genel olarak, aşağıdaki yazılım geliştirme aşamaları uygulanmalıdır. Problemin Analizi: Problemin tam olarak ne olduğunun anlaşılmasıdır. Problemin çözümünden neler beklendiği ve yaratacağı çözümün girdi ve çıktılarının neler olacağı kesin olarak belirlenmelidir. kapsamı tanımlanır ve gereksinimler toplanır. İşlevsel ve işlevsel olmayan Zaman çizelgeleri, kaynaklar ve bütçeler Projenin kapsamı tanımlanır ve Paydaşları belirlenir ve ihtiyaçlar gereksinimler analiz edilir ve belgelenir. dahil olmak üzere bir proje planı oluştur. gereksinimler toplanır. toplanır. Fizibilite çalışmaları yürütülür (teknik, operasyonel, ekonomik). Yazılım Geliştirme Aşamaları Tasarım: Problemi çözmek için kullanılacak çözüm adımlarını gösteren bir liste yapılması gereklidir. Bir problemin çözüm adımlarını gösteren bu listeye algoritma denir. Böyle bir liste tasarlanırken, ilk önce problemin ana adımları çıkarılır; daha sonra her adım için, gerekiyorsa, daha ayrıntılı bir çözüm tasarlanır. Yüksek ve düşük seviyeli tasarım belgeler oluşturulur. Bileşenler, modüller, arayüzler ve veri akışı dahil olmak üzere sistem mimarisi tasarlanır. Teknoloji yığınları (technology stack) ve araçları seçilir. Kullanıcı arayüzü (User Interface, UI) ve deneyim tasarımları (User Experience,UX) oluşturulur. Kodlama: Kağıt üzerinde geliştirilen algoritma (tasarım), programcının tercih ettiği bir programlama diline (koda) çevrilir. Kod tasarım belgelerine ve kodlama standartlarına göre yazılır. Yazılım Geliştirme Değişiklikleri yönetmek ve işbirliği yapmak Aşamaları için sürüm kontrol sistemleri kullanılır. Bireysel bileşenlerin doğru şekilde çalıştığından emin olmak için birim testi gerçekleştirilir. Farklı modüller ve bileşenler entegre edilir. Yazılım Geliştirme Aşamaları Test etme: Program değişik girdiler ile çalıştırılarak ürettiği sonuçlar kontrol edilerek test işlemi gerçekleştirilir. Sonuçlar beklendiği gibi ise, programın doğru çalıştığı kanıtlanmış olunur; değilse doğru çalışmayan kısımları tespit edilerek düzeltilir. Yürütülen testler: Birim Testi: Tek tek bileşenlerin doğruluk açısından test edilmesi. Entegrasyon Testi: Birleştirilmiş bileşenlerin birlikte çalışmasının sağlanması. Sistem Testi: Tüm sistemin gereksinimlere göre test edilmesi. Kullanıcı Kabul Testi (User Acceptance Testing - UAT): Son kullanıcılar tarafından sistemin ihtiyaçlarını karşıladığından emin olmak için yapılan son test. Yazılım Geliştirme Aşamaları Dağıtım (Deployment): Yazılımın kullanıcılara yayınlanmasıdır. Sunucu, veritabanı gibi ortamlar konfigüre edilerek dağıtıma hazırlanır. Uygulama üretim ortamlarına dağıtılır. Üretim ortamı, uygulamanın canlı sürümüdür. Gerçek kullanıcıların eriştiği ve etkileşim kurduğu ortamdır. Kullanıcıların erişime sahip olduğu ve yazılımı kullanmaya başladıkları takip edilir. Kullanıcılara eğitim ve dokümantasyon sağlanır. Yazılım Geliştirme Aşamaları Bakım ve Destek: Programın güncel koşullara göre yeniden düzenlenmesini içeren bir konudur. Oluşan hataların giderilmesi, yeni eklemeler yapılması ya da programın teknolojisinin yenilenmesi gibi işlemleri içerir. Yazılım performansını ve kullanımını izlenir. Kullanıcılara sürekli destek sağlanır se sorunları çözülür. Hata düzeltmeleri ve iyileştirmeler için güncellemeler ve yamalar yayınlanır. Yazılım değişen gereksinimlere veya teknolojilere uyarlanır. Problem Çözümünde Algoritma Yaklaşımı Algoritma, herhangi bir sorunun çözümü için izlenecek yol anlamına gelmektedir. Çözüm için yapılması gereken işlemler hiçbir alternatif yoruma izin vermeksizin sözel olarak ifade edilir. Diğer bir deyişle algoritma, verilerin, bilgisayara hangi çevre biriminden girileceğinin, problemin nasıl çözüleceğinin, hangi basamaklardan geçirilerek sonuç alınacağının, sonucun nasıl ve nereye yazılacağının sözel olarak ifade edilmesi biçiminde tanımlanabilir. Algoritma hazırlanırken, problem çözümü için yapılması gerekli işlemler, öncelik sıraları gözönünde bulundurularak ayrıntılı bir biçimde tanımlanmalıdırlar. Örnek 1: Verilen iki sayının toplamının bulunmasının algoritması aşağıdaki gibi yazılır. Adım 1 – Başla Adım 2 – Birinci Sayıyı Oku Adım 3 – İkinci Sayıyı gir Adım 4 – İki Sayıyı Topla Adım 5 – Dur Algoritma Yaklaşımı Örnek 2: Açılmayan bir bilgisayar problemi için çözüm yolu Algoritma Yaklaşımı Örnek 2: Açılmayan bir bilgisayar problemi için çözüm yolu Algoritma Temel Özellikleri Kesinlik: doğru a ile b sayılarını topla Algoritma içindeki adımlar herkes tarafından aynı şekilde anlaşılabiliyor olmalı, farklı anlamlara gelebilecek bulanık yanlış a sayısını büyük bir sayı ile topla ifadeler içermemelidir. Algoritma Temel Özellikleri Etkinlik (Verimlilik): doğru sayıyı bir milyar ile çarp Algoritmada tekrarlardan ve gereksiz bellek kullanımlarından kaçınılmalıdır. Tekrar işlemleri yerine döngüler ya da alt yanlış sayıyı bir milyar kez kendisi ile topla algoritmalar kullanılmalıdır. Adımlarda yer alan işlemler sınırlı kaynaklar kullanılarak sınırlı bir sürede bitmelidir. Yani algoritma uygulanabilir olmalıdır. Algoritma Temel Özellikleri Sonluluk: doğru kullanıcı 3 kez çift sayı girmezse bitir Algoritma sonlu sayıda adımdan oluşmalı, sınırlı bir zaman diliminde tamamlanmalıdır. Her yanlış kullanıcı çift sayı girene kadar bekle algoritmanın bir son noktası, bitişi olmalıdır. Algoritma Yaklaşımı Algoritmalar iki farklı şekilde kağıt üzerinde ifade edilebilirler; Pseudo Code (Kaba Kod veya Yalancı Kod veya Sözde Kod) Bir algoritmanın yarı programlama dili kuralı, yarı konuşma diline dönük olarak ortaya koyulması/ tanımlanmasıdır. Herhangi bir dile bağımlı olmadan bazı semboller ve sözler ile bir algoritmanın tasarlanmasıdır. Doğrudan konuşma dilinde ve programlama mantığı altında, eğer, iken gibi koşul kelimeleri ve > = < gibi ifadeler ile beraber yazılır. Bu şekilde gösterim algoritmayı genel hatlarıyla yansıtır. İyi bir biçimde yazılmış, sözde koddan, programlama diline kolaylıkla geçilebilir. Pseudo Code Örnek: Verilen bir sıcaklık derecesine göre suyun durumunu belirten bir sözde program yazınız. Giriş/Çıkış –Bu Program, sıcaklığa göre suyun durumunu gösterir –Su, Buz, Buhar –---------------------------------------------------------- –Lütfen derece cinsinden sıcaklığı giriniz: 140 –BUHAR elde edeceksiniz Algoritma Yaklaşımı Akış Şeması / Diyagramı Algoritmanın görsel/şekilsel olarak ortaya koyulmasıdır. Problemin çözümü için yapılması gerekenleri, başından sonuna kadar, geometrik şekillerden oluşan simgelerle gösterir. Akış şemasında her adım birbirinden farklı anlamlar taşıyan şekillerden oluşur ve adımlar arasındaki ilişki oklar ile gösterilir. Kodlanacak programın akış şemasının oluşturulması, sürecin daha kolay çözümlenmesine yardımcı olur. Akış Şeması Programın saklanacak esas belgeleri olan akış şemalarının hazırlanmasına, sorun çözümlenmesi sürecinin daha kolay anlaşılır biçime getirilmesi, iş akışının kontrol edilmesi ve programın kodlanmasının kolaylaştırılması gibi nedenlerle başvurulur. Uygulamada çoğunlukla, yazılacak programlar için önce programın ana adımlarını (bölümlerini) gösteren genel bir bakış akış şeması hazırlanır. Daha sonra her adım için ayrıntılı akış şemalarının çizimi vardır. En basit şekliyle dikdörtgen kutulardan ve oklardan oluşur. Akış şeması sembolleri ANSI (American National Standards Institute) standardı olarak belirlenmiş ve tüm dünyada kullanılmaktadır. Akış Şemaları Akış Şemaları Akış Şemaları Akış Şemaları Akış Şeması (Örnek) FLOWGORİTHM DERS NOTLARI: Flowgorithm: Akış diyagramı şekilleri kullanarak basit kodlar yazma programıdır. 1. Program Arayüzü: a. Aç : Önceden kayıtlı bir dosyayı yükler. b. Kaydet : Mevcut çalışmayı kayıt eder. c. Çalıştır : Akış diyagramını çalıştırır. d. Adım : Kodları adım adım sırayla çalıştırır. (BP) e. Fonksiyon Yöneticisi : Ana program veya alt programlar arası geçişi sağlar. f. Büyüteç : Sayfayı büyütür ya da küçültür. 2. Akış Diyagramı Şekilleri : a. : Kullanılacak değişkenleri sisteme söyler. b. : Tanımlanmış değişkene değer atar. c. : Klavyeden bilgi girişi için kullanılır. d. : Ekrana bilgi yazdırmak için kullanılır. e. : Karar verme işlemleri için kullanılır. f. : Tekrar sayısı belli olmayan DÖNGÜ için kullanılır. g. :Tekrar sayısı belli olan DÖNGÜ için kullanılır. h. : En az 1 Kere çalışması gereken DÖNGÜ için i. : Tanımlı altprogramı çağırmak için kullanılır. j. : Kodların çalışmasını ETKİLEMEYEN, programcı için AÇIKLAYICI BİLGİLER yazmak için kullanılır. k. (KIRILMA NOKTASI / BREAK POİNT): Hata ayıklama işlemlerinde çalışan programın bu noktaya geldiğinde DURAKLAMASINI sağlar. Programın çalışması istenildiğinde Normal olarak ( ) ya da (ADIM ADIM )devam ettirilir. 3. Veri Tipleri: a. İnteger : Tam sayı verileri saklamak için kullanılır. -10 3 100 10000000000 (taşma) (Çıktı neden 1 olur?) b. Real (Reel): Ondalıklı sayıları saklamak için kullanılır. 3,2 Virgül OLMAZ 3.2 Doğru 5/5 =1.0 (bölme işlemi sonucu her zaman reel) c. String : Herhangi text veriyi saklamak için kullanılır. “Hoşgeldiniz” “1. Sayıyı giriniz:” d. Boolean : Sadece True/False ya da 0/1 değerini saklar. (İF ile birlikte iyi gider ) sonuc = 5>3 (sonuc TRUE olur) önce eşitliğin sağ tarafı sonuc = 1>2 (sonuc FALSE olur) 4. Operatörler: a. Matematiksel: İşlem Önceliğine Dikkat i. Toplama + : 3+2 ii. Çıkarma – : 9-7 iii. Çarpma * : 6*3 iv. Bölme / : 9/3 v. Mod % : 10%3 vi. Üs Alma ^ : 4^3 b. Mantıksal Operatör i. Eşit Mi == 3==3 > True ii. Eşit Değil mi != 4!=5 True iii. Büyük mü > iv. Büyük Eşit mi >= v. Küçük mü < vi. Küçük Eşit mi 10 Ders x (2+2+1+1) = 60 tane değişken 1 Sınıf için (30 Öğrenci) -> 60 x 30 = 1800 tane değişken 1 Okul için (12 Şube) -> 1800 x 12 = 21.600 OMG Bunun kolay bir yolu olmalı Dizi: Aynı tipteki verileri tek bir değişkende saklamak için kullanılan yapılardır. (Aşağıda yazan bilgiler Flowgorithm programı için geçerlidir, başka programlama ortamları için değişebilir). - Dizi boyutu önceden belirtilmelidir. - Dizi elemanlarına erişmek için [ ] işaretleri kullanılır. - Dizinin ilk elemanı 0. elemandır. - DÖNGÜ ile birlikte çok iyi gider. Size(array) : Kendisine gönderilen dizinin eleman sayısını verir. (Hazır fonksiyondur) NORMAL DİZİ X değişkeni aklında X değişkeni aklında 3 değer sadece 1 değer tutabilir. tutabilir. Size(x) ? Size(x) ? Açıklama [WK7]: Aşağıdaki tanımlara Çalışma Örnekleri: uygun değişken tanımlamalarını “FLOWGORITHM Tanımlama” bloğu ile -3 elemanlı İnteger tipte, SAYILAR isimli diziyi oluşturun. gösteriniz. -String tipte, OGRENCI isimli, 5 elemanlı diziyi oluşturun. -100 elemanlı Real tipte, NOTLAR isimli diziyi oluşturun. -SONUC isminde, Boolean tipte, 2 elemanlı diziyi oluşturun. Örnek: Aşağıdaki program çıktısı ne olur? Örnek-1: 10 elemanlı, İnteger tipte, DEGERLER isimli bir dizi oluşturun. Bu dizinin içine rastgele 0..100 aralığında sayılar ekleyin. Bu dizinin TOPLAMINI / ORTALAMASINI / MİN..MAK değerlerini bulunuz. Toplam=Toplam+DEGERLER[i] Örnek-2 ORTA: 8 elemanlı, String tipte SESLIHARFLER isimli bir dizi oluşturun. a,e,ı,i,o,ö,u,ü harflerini tek tek bu diziye yükleyin. Örnek-3 ZOR: Klavyeden Girilen isim verisindeki tüm karakterleri HARFLER isimli diziye aktaran algoritmayı yazınız. HARFLER[?] 0 Ö 1 M 2 E 3 R Örnek 2 deki algoritmayı kullanarak, örnek 3 te girilen isimdeki sesli karakteri ekrana yazınız. Soru: 5 elemanlı A dizisinin son elemanını 3 yapan kodu yazınız. A = 3 Soru: eleman sayısı bilinmeyen OGR dizinin SON ELEMANINA nasıl erişirsin? Size(OGR)-1 Soru: Toplam = Toplam - K komutu ne işe yarar açıklayınız? Toplam değişkenini, K dizisinin 4. Elemanı kadar azaltır. Soru ORTA: Klavyeden girilen isim verisindeki her karakterin ASCII kod karşılığının toplamını bulan programı yazınız? SORU ZOR: “1,2,3,4,5” olarak verilen VİRGÜL ile ayrılmış ifadedeki sayıları bir diziye aktarınız. KULLANICI TANIMLI FONKSİYONLAR (Alt Programlar): Belli bir görevi gerçekleştirmek için yazılmış kodlardır. “Eğer belirli bir kod bloğunu sürekli tekrar tekrar yazıyorsan orada bir hata vardır” Ö. ERMİŞ Fonksiyon Yöneticisi: Fonksiyon oluşturmak, düzenlemek veya silmek için kullanılır. Fonksiyon Listesi: Ana program ile fonksiyonlar arasında geçiş için kullanılır. Çağırma: Tanımlı altprogramı çağırmak için kullanılır. Geriye DEĞER DÖNDÜRMEYEN fonksiyonlar çağrılabilir. GİRDİ DURUMUNA GÖRE: Değer ALMAYAN fonksiyonlar: Örnek: Goster() Zıpla() 1 veya daha fazla değer alan fonksiyonlar: Örnek: KareAl(5) Topla(3,5) ÇIKTI DURUMUNA GÖRE (Geri değer döndürme durumu): Değer DÖNDÜRMEYEN fonksiyonlar: 1 veya daha fazla değer alan fonksiyonlar: Örnek-1 : Ekrana “Merhaba Dünya” yazan Selam() fonksiyonunu oluşturunuz. Ana Program Selam() Fonksiyonu Fonksiyon Penceresi Görünümü: Örnek-2: Kendisine gönderilen tamsayı tipte 2 veriyi toplayıp, geriye sayıların toplamını döndüren Topla(a , b) fonksiyonunu oluşturunuz. Ana Program Topla(a,b) Fonksiyonu Fonksiyon Penceresi Görünümü: Örnek-3: Kendisine gönderilen tamsayı tipte sayının KARESİNİ hesaplayıp geri döndüren KAREAL(a) fonksiyonunu oluşturunuz. Ana Program KAREAL(a) Fonksiyonu Fonksiyon Penceresi Görünümü: Örnek-4: String tipteki mesajı, Ekrana belirlenen sayı kadar yazdıran YAZ(mesaj , sayi) fonksiyonunu oluşturunuz. Ana Program YAZI(mesaj , sayi) Fonksiyonu ÖRNEK->: String tipteki mesajın uzunluğunu ekrana yazan UZUNLUK fonksiyonunu tasarlayınız? (LEN fonksiyonu kullanarak) SORU:-> Kendisine gönderilen 2 tane String ifadenin uzunluklarının çarpımını veren fonksiyon tasarlayınız. (UZUNLUKCARP) Fonksiyon Penceresi Görünümü (örnek-4): SORU: ekrana 100 defa SELAM yazan programı ALT program (fonksiyon) kullanarak tasarlayınız. SORU: Kendisine gönderilen Tamsayı tipteki DİZİ içindeki elemanların SAYISINI (Dizide kaç tane eleman var) geriye döndüren fonksiyon yazınız. SORU: Kendisine gönderilen Tamsayı tipteki DİZİ içindeki elemanların TOPLAMINI geriye döndüren fonksiyon yazınız. SORU: Kendisine gönderilen Tamsayı tipteki DİZİ içindeki elemanların ORTALAMASINI geriye döndüren fonksiyon yazınız. SORU: Kendisine gönderilen Tamsayı tipteki DİZİ içindeki elemanların ENKÜÇÜK değerini geriye döndüren fonksiyon yazınız. SORU: Kendisine gönderilen Tamsayı tipteki DİZİ içindeki elemanların ENBÜYÜK geriye döndüren fonksiyon yazınız. SORU: Bütün fonksiyonları Bir ANA MENÜ de birleştiren program SORU: TAMSAYI tipindeki Bir DİZİ içindeki ÇİFT / TEK sayıların adedini bulan fonksiyonu yazınız. SORU ZOR: Kendisine gönderilen Tamsayı tipteki DİZİ içindeki TEK SAYILARI geriye döndüren fonksiyon (NOT: Bu örnekte geriye birden fazla değer dönmesi gerekir. Bunun için dönüş değerinin DİZİ olması gerekir ancak Flowgorithm de bu mümkün değildir. Bir çözümü tabi ki vardır.) Örnek: Sayıları bir dizi içinde fonksiyona göndeririz. Geriye dönüş olarak STRİNG tipte bir ifade seçeriz. Sayıların karışmaması içinde araya VİRGÜL ekleriz. Ana programda da VİRGÜL ifadesine göre sayıları ayıklayan SINIRLAYICI | DELİMİTTER olarak sayıları tekrar diziye aktarırız. Örnek: Elimizde aşağıdaki gibi bir dizi olsun. SAYILAR 0 11 1 20 2 37 3 50 4 67 SONUC=“11,37,67” olacak şekilde algoritma tasarlamak gerekir. Açıklama [O8]: RECURSIVE fonksiyonlar (ÖZYİNELEMELİ / RECURSİVE) FONKSİYON SORUSU konusunu araştırınız. Faktöriyel nedir? Araştırınız. Bir fonksiyonun içinde yine kendisinden bir parça bulunuyorsa bu fonksiyonlara ÖZYİNELEMELİ (RECURSIVE) fonksiyon denir. BASE CASE BASE-CASE: işlemin en son durması gereken adımı belirtir. RECURSIVE-CASE: Tekrarlanması gereken durumlar. SORU-BASİT: 1…n’ e kadar olan pozitif sayıları toplayan recursive TOPLA fonksiyonu yazınız. SORU-ORTA: Faktöriyel Hesaplama fonksiyonu (10.SINIF MAT) FAKTÖRİYEL (AZCIK 10. Sınıf Matematik, fazla değil ) 1'den başlayıp belirli bir sayma sayısına kadar olan sayıların çarpımına o sayının faktöriyeli denir. Ünlem işareti ile gösterilir. 1! = 1 dir. (merak eden araştırabilir.) (BASE CASE) 2! = 2x1 = 2 3! = 3 x 2 x 1 = 6 4! = 4 x 3 x 2 x 1 = 24 5! = 5 x 4 x 3 x 2 x 1 = 120 n! = n x (n-1)! SORU-ZOR: 0 girilene kadar, girilen bir tamsayının 1’e kadar hep yarısını ekrana yazan program. (While olacak, recursive) (TEK sayıların 2 ye bölümünde kalan kısmı ihmal edilecektir) ÖRN: 17 / 2 = 8 olacak şekilde SORU ÖRNEKLERİ 1. Kelimeyi tersten yazma. (dünya aynüd) 2. Girilen kelime, cümle, sayının PALİNDROM olup/olmadığını bulma (“kek” , 12321, “ey edip adanada pide ye”) 3. Girilen kelimenin, aynı hecenin tekrarı ile oluşup oluşmadığını bulma (Kaykay, Mermer, Gaga …) 4. Km/Mil, Kg/Gram, Döviz Çevirme işlemleri 5. abc 3 basamaklı bir sayı=> abc = a3 + b3 + c3 olan sayıları bulan programı yazınız. 6. Kelimedeki Sesli/sessiz harf sayısını bulma. 7. Kelime karıştırma (rastgele yerlerini değiştirme) (bir sonraki soru için bunu fonksiyon olarak yazarsak, kullanışlı olur) 8. Kelimeyi anlamlı karıştırma (selam sleam merhaba mbheara) 9. Girilen bir sayının ASAL SAYI olup olmadığını bulma (asal sayı belirleme algoritması araştır) 10. Bir sayının asal çarpanlarını bulma 11. Ad Soyadı, düzgün eposta adresine dönüştürme (Ömer ERMİŞ [email protected]) 12. 0-100 aralığında sayı tahmin oyunu 13. 2 kişilik, Girilen bir kelimenin son harfi ile biten yeni bir kelime türetme oyunu. Değilse uyaracak. (kullanılan bir kelime tekrar kullanılamaz. Bunun için kurala uygun girilen kelimeleri, bir diziye ekleyip kontrol için orada saklanması lazım) 1->Elma 2->Ağaç 1->Çatı 2-> Irmak … 14. SORU-1: Kelimeyi Tersten Yazma (Dizi kullanmadan ya da Dizi ile yapılabilir.) Bu işlemi bir fonksiyon olarak yazabiliriz, ileride kullanılması için) Yapılacaklar: 1. Kullanıcıdan bir kelime iste 2. Uzunluğunu bul 3. Uzunluk kadar tekrar döngüsü kur. a. Char() fonksiyonu kullan. 4. Çıktı üret Bilgisayar Uzunluk 10 karakter B i l g i s a y a r R RA RAY RAYA RAYAS SORU-2: PALİNDROM kontrol algoritması. (adana , kek, 12321 palindrom kelime/sayılardır) Yapılacaklar: 1. Kelime iste 2. Kelimeyi tersten bir değişkene ya da diziye aktar. 3. İlk girilen kelime ile yeni oluşturulan değeri karşılaştır. 4. %100 olarak eşitlik varsa PALİNDROM dur, yoksa değildir. SORU-3: Girilen kelimenin aynı hecenin tekrarı olup olmadığını bulma. (Mermer, kaykay …) (İPUCU: Kelime uzunluğu ????) (Dikkat: BÜYÜK / küçük harf) mermer 0 M 1 e 2 r 0–3 1–4 3 m 2-5 4 e 5 r dede 0 D 1 E 2 D 0–2 1-3 3 E PROGRAMLAMAYA GİRİŞ HALİL YİĞİT KOCAELİ ÜNİVERSİTESİ https://avesis.kocaeli.edu.tr/halilyigit Akış Şeması Akış Şeması Akış şeması hazırlama kuralları Başlangıç ve bitiş uçları tanımlanmalıdır. Standart semboller kullanılmalıdır. Birbirini kesen akış hatları kullanılmamalıdır. Basit kararlar alınmalıdır. Şema belli bir yönde hazırlanmalıdır. Mantıksal Yapılar Bir bilgisayar programının geliştirilmesinde kullanılan programlama dili ne olursa olsun bu programların akış şemalarında genel olarak üç basit mantıksal yapı kullanılır. Doğrusal Yapı: Sıralı yapı, hazırlanacak programdaki her işlemin mantık sırasına göre nerede yer alması gerektiğini vurgular. Adımların sırayla birbiri ardına ilerlediği yapılar olup en basit akış şeklidir. Bir adım tamamlandıktan sonra bir sonraki adıma geçilir. İşlemler tek yönde ilerler. Karar noktaları ve döngüler bulunmaz. Örnek1: Ekrana MERHABA DÜNYA yazdırma Örnek2: Bir sayının karesini alıp ekrana yazdırmak. Mantıksal Yapılar Karar yapıları (Koşullu Yapılar): Birden fazla sıralı yapı seçeneğini kapsayan modüllerde, hangi şartlarda hangi sıralı yapının seçileceğini belirler. Akışın belli bir noktada bir koşula bağlı olarak dallanır. Koşul, bir ifadenin doğru ya da yanlış olup olmadığına bağlı olarak farklı bir yola yönlendirilir Örnek1: Klavyeden Girilen 2 sayıdan birincisi büyük ise çarpma, aksi durumda toplama işlemi yaptırmak Örnek2: Bir sayının pozitif mi negatif mi olduğunu kontrol etmek. Mantıksal Yapılar Tekrarlı Yapı: Algoritma içinde, bazı satırlar tekrarlı şekilde işlem görüyorsa, bir döngü söz konusudur. Döngülere belirli bir koşul geçerli olduğu sürece bir işlemin sürekli tekrarlandığı yapılardır. Döngüler belirli bir başlangıç noktasına sahiptir ve bir koşul doğru kaldığı sürece aynı işlemi tekrar eder. Bu döngü, belirlenen koşul değişene kadar sürer. Örnek1: Bir sayının 10’dan küçük olduğu sürece her seferinde 1 artırılmasını sağlayan bir döngü. Örnek2: 1’den 10’a kadar sayıları ekranda görüntüleyen bir yapı. Bilgisayar dilinde operatör, programlama dillerinde kullanılan özel semboller veya anahtar kelimelerdir ve değişkenler veya değerler üzerinde belirli işlemleri gerçekleştirmek için kullanılır. Operatörler, matematiksel işlemlerden mantıksal karşılaştırmalara kadar çeşitli görevlerde kullanılır. Operatörler Farklı türlerde operatörler vardır ve bunlar işlem türüne göre sınıflandırılır. Aritmetik Operatörler Matematiksel işlemlerin öncelik sırası Bu operatörler sayısal değerler üzerinde matematiksel işlemler yapar. Bilgisayar diline kodlanmış bir matematiksel ifadede, aynı önceliğe sahip işlemler mevcut ise bilgisayarın bu işlemleri gerçekleştirme sırası soldan sağa (baştan sona) doğrudur. Örneğin ; Y=A*B/C Önce A*B işlemi yapılır, ardından bulunan sonuç C’ye bölünür. Aritmetik Operatörler Aritmetik Operatörler Karşılaştırma İki değeri karşılaştırmak için kullanılır ve genellikle (İlişkisel) Operatörler mantıksal sonuçlar üretir (doğru veya yanlış). Mantıksal Operatörler Karar yapılarında ve koşullarda kullanılır. Mantıksal işlemler yaparak birden fazla koşulu birleştirir. VE : Her iki koşul da doğruysa, sonuç doğru olur. VEYA : Koşullardan en az biri doğruysa, sonuç doğru olur. DEĞİL : Koşulun tam tersini alır (doğruysa yanlış yapar, yanlışsa doğru yapar). Algoritmada Kullanılar Terimler Tanımlayıcı (Identifier) Programcı tarafından oluşturulur. Programdaki değişkenleri,sabitleri, kayıt alanlarını, özel bilgi tiplerini vb adlandırmak için kullanılan kelimeler Tanımlayıcılar, yerini tuttukları ifadelere çağrışım yapacak şekilde seçilmelidir. İngiliz alfabesindeki A-Z veya a-z arası 26 harften 0-9 arası rakamlar kullanılabilir Sembollerden sadece alt çizgi (_) kullanılabilir. Tanımlayıcı isimleri harfle veya alt çizgiyle başlayabilir. Tanımlayıcı ismi,rakamla başlayamaz veya sadece rakamlardan oluşamaz. Örnek: sayi, ogrenciAdi, ortalama1, _hesapla Algoritmada Kullanılan Terimler Değişken (Variable) Programın her çalıştırılmasında, farklı değerler alan bilgi/bellek alanlarıdır. Değişken isimlendirilmeleri, yukarıda sayılan tanımlayıcı kurallarına uygun biçimde yapılmalıdır. Örneğin ; Bir ismin aktarıldığı değişken ; ad Bir isim ve soy ismin aktarıldığı değişken; adsoyad Ev telefon no sunun aktarıldığı değişken; evtel Ev adresinin aktarıldığı değişken; evadres İş adresinin aktarıldığı değişken; isadres Herhangi bir değişken; X, Y, x, y, vb. Sabit (Constant) Programdaki değeri değişmeyen ifadelere “sabit” denir. “İsimlendirme kuralları”na uygun olarak oluşturulan sabitlere, sayısal veriler doğrudan; alfa sayısal veriler ise tek/çift tırnak içinde aktarılır. Örnek; pi = 3.14, Max_ogr = 30, vb. Algoritmada Kullanılan Terimler Aktarma (Assignment) Herhangi bir bilgi alanına, veri yazma; herhangi bir ifadenin sonucunu başka bir değişkende gösterme vb görevlerde “atama” operatörü kullanılır. değişken = ifade Değişken yazan kısım herhangi bir değişken ismidir. İfade yazan kısımda ise matematiksel,mantıksal veya alfa sayısal ifade olabilir. = sembolü, atama operatörüdür ve sağdaki ifadenin/işlemin sonucunu soldaki değişkene aktarır. Bu durumda değişkenin eğer varsa bir önceki değeri silinir. 1.işlem: sağdaki ifadeyi gerçekleştir veya sağdaki işlemi yap 2.işlem: Bulunan sonucu soldaki değişkene aktar. Algoritmada Kullanılan Terimler Sayaç (Counter) Programlarda bazı işlemlerin belirli sayıda yaptırılması veya işlenen/üretilen değerlerin sayılması gerekebilir. say = say + 1 Bu işlemde sağdaki ifadede değişkenin eski değerine 1 eklenmekte; bulunan sonuç yine kendisine yeni değer olarak aktarılmaktadır. Bu tür sayma işlemlerine algoritmada sayaç adı verilir. Sayacın genel formülü; Sayaç değişkeni = sayaç değişkeni + adım Örnek1; X=X+3 Örnek2; S=S-5 Algoritmada Kullanılan Terimler Döngü (Loop) Bir çok programda bazı işlemler, belirli ardışık değerlerle gerçekleştirilmekte veya belirli sayıda yaptırılmaktadır. Programlardaki belirli işlem bloklarını,verilen sayıda gerçekleştiren işlem akış çevrimlerine “döngü” denir. Belirli bir koşul doğru olduğu sürece tekrar eden adımlar topluluğudur. Döngüler, algoritmada aynı işlemi birden çok kez yapmak gerektiğinde kullanılır. Örnek1: "10 kez yazdır" veya "N 0'dan büyük olduğu sürece tekrarla" gibi döngüler. Örnek2: 1 ile 1000 arasındaki tek sayıların toplamını hesaplayan programda T=1+3+5 …. yerine 1 ile 1000 arasında ikişer artan bir döngü açılır ve döngü değişkeni ardışık toplanır. Algoritmada Kullanılan Terimler Örnek: Aşağıdaki algoritmada 1 ile 10 arası tek sayıların toplamı hesaplanmaktadır. Algoritmada Kullanılan Terimler Ardışık Toplama Programlarda, aynı değerin üzerine yeni değerler eklemek için kullanılır. Toplam değişkeni=Toplam değişkeni + Sayı Algoritmada Kullanılan Terimler Ardışık Çarpma Programlarda, aynı değer yeni değerlerle çarpılarak eskisinin üzerine yazılır. Çarpım değişkeni = Çarpım değişkeni * Sayı Algoritma Örnekleri Ekrana Merhaba Dünya Yazdırma İki sayıyı toplama ve görüntüleme Klavyeden girilen 2 sayıdan birincisi büyük ise çarpma, aksi durumda toplama yapan algoritma ve akış şeması 1’den 10’a kadar sayıları ekranda görüntüleyen akış şeması Klavyeden 5 kişinin doğum yılını girip 2013 yılındaki yaşını hesaplayan algoritma ve akış şeması Girilen 5 sayının karelerini görüntüleyen akış şeması Girilen 15 sayıdan pozitif olanların adedini bulup görüntüleyen akış şeması 50 öğrencinin notlarının ortalamasını bulan akış şeması Girilen sayının faktöriyelini hesaplayan akış şeması y=x2+5x-7 denkleminin x=[-4,4] aralığındaki çözümlerini bulan ve görüntüleyen akış şeması, (x’in artım değeri 0.5’tir.) Girilen sayının tek yada çift olduğunu bulup uygun mesajı görüntüleyen akış şeması) Girilen 3 sayıdan hangisinin en büyük olduğunu bulan akış şeması Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen akış şeması Uygulamalar Örnek1: Klavyeden 0 değeri girilene kadar girilen tüm sayıların ortalamasını alan programın akış diyagramını tasarlayınız. Örnek2: Klavyeden 0 değeri girilene kadar girilen tüm TEK sayıların ortalamasını alan programın akış diyagramını tasarlayınız. Örnek3: Klavyeden 0 değeri girilene kadar girilen tüm ÇİFT sayıların kaç adet olduğunu bulan programın akış diyagramını tasarlayınız. Örnek4: Bir öğrenciye ait vize ve final notlarının ortalamasını hesaplayan ve ortalamaya göre ekrana “Geçti” – “Kaldı” yazan programın akış şeması (Not: Ortalama hesaplanırken vizenin %40, finalin %60’ı alınacak, geçme notu 60’tır.). Örnek4: Bir kırtasiye de kalem defter ve silgi satışı yapılmaktadır. Birim fiyatları ve kaç adet alındığını klavyeden girilerek bir müşterinin ne kadar ödemesi gerektiğini hesaplayan programın algoritmasını ve akış diyagramını çiziniz. Örnek5: Girilen sıcaklık değerine göre bir suyun katı, sıvı ve gaz olma durumunu gösteren programın algoritmasını ve akış şemasını tasarlayınız. Örnek6: Verilen bir mesajı istenen sayıda ekranayazdıran programın algoritmasını ve akış diyagramını tasarlayınız. PROGRAMLAMAYA GİRİŞ HALİL YİĞİT KOCAELİ ÜNİVERSİTESİ https://avesis.kocaeli.edu.tr/halilyigit Döngü Deyimleri While Koşul daha çevrim içerisine girmeden sınanır. Koşul olumsuz olduğunda çevrime hiç girilmez ve döngü içerisinde yapılması gerekenler atlanır. Döngü Deyimleri Do-While Bu döngü deyiminde, çevrim en az bir defa olmak üzere gerçekleşir. Çünkü koşul sınaması döngü sonunda yapılmaktadır. Eğer koşul sonucu olumsuz ise bir sonraki çevrime geçilmeden döngüden çıkılır. Çevrimin devam edebilmesi için her döngü sonunda yapılan koşul testinin olumlu sonuçlanması gerekir. Döngü For Diğer deyimlerden farklı olarak, döngü sayacı doğrudan koşul parametreleri düzeyinde verilir. Deyimleri Döngü girmeden önce sayaç değişkenine başlangıç değeri atanmakta ve daha sonra koşula bakılmaktadır. Döngü içerisinde belirtilen işlemler yapıldıktan sonra sayaç değişkeni arttırılmaktadır. Uygulamalar Birbirinden farklı olarak verilen iki adet sayıdan, büyük olanı bulup gösteren algoritma ve akış diyagramını tasarlayınız. Girilen vize ve final notlarına göre öğrencinin dersten geçip geçmediğini bulan algoritma ve akış diyagramını tasarlayınız. Uygulamalar Ekrana 10 defa programcının adını yazan algoritmayı ve akış şemasını tasarlayınız. 1’den 100’e kadar tek sayıları yazdıran algoritma ve akış diyagramını tasarlayınız. Uygulamalar Klavyeden girilen fiyatı, KDV(%18) ekleyerek ekrana yazdıran algortima ve akış diyagramını tasarlayınız Klaveyeden girilen beş sayının toplamını ve ortalamasını veren programa ait algoritmayı ve akış diyagramını tasarlayınız Uygulamalar Kullanıcının klavyeden girdiği sayı 3’ e ve 5’ e tam bölünüyorsa ekrana tam bölünüyor yazan bölünmüyorsa bölünmüyor yazan algoritma tasarlayınız. 1. Başla 2. Sayısal (sayi) 3. Yaz (‘sayi gir’) 4. sayi ==0)&&(sayi%5==0)) 6. Yaz (bölünüyor) 7. Değilse 8. Yaz ( bölünmüyor) 9. Eğer bitti 10. Bitti Uygulamalar Kullanıcının klavyeden girdiği sayı 0-100 aralığındaysa geçerli değilse geçerli yazan algoritma tasarlayınız. 1. Başla 2. Sayısal (sayi) 3. Yaz (‘sayı gir’) 4. sayi =0) && (sayi