BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar

Slides:



Advertisements
Benzer bir sunumlar
EKRAN ÇIKTISI.
Advertisements

Bölüm 2 C Dilinin Temelleri
switch - case Yapısı Döngü Yapıları
Değişken Bildirimleri
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Elektrik-Elektronik Mühendisliği Bölümü
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
NESNEYE YÖNELİK PROGRAMLAMA
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
Paralel Programlamaya Giriş
FONKSİYONLAR.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
JAVA’DA DÖNGÜLER.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
PROGRAM DENETİM DEYİMLERİ
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Fonksiyonlar
Bu Günkü Konular If yapısı ve karşılaştırma operatörleri
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon.
2. HAFTA 2. Hafta.
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Döngü Komutları. for deyimi bir alt limitten, bir üst limite kadar programın belirli bir parçasını tekrar eder. for deyiminde sayaç artış oranı da verilmelidir.
Fonksiyonlar.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Bölüm 4 Seçme Komutları Alıştırmalar
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
Bölüm 5 Döngü Komutları while Komutu while Komutu Diğer Operatörler (Bileşik atama, artırma ve azaltma operatörleri ) Diğer Operatörler (Bileşik atama,
C dili kullanıcıya kendi ihtiyacı olan bir fonksiyonu yazma imkanı vermiştir. Bir sayının faktöriyelini almaya ihtiyaç duyduğumuzu ve aynı zamanda asal.
Algoritma ve Akış Şemaları
Bilgisayar Programlama BIL 107
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Dili Bilgisayar Mühendisliği.
C’de Fonsiyonlar Aslı Ergün.
BİLGİSAYAR PROGRAMLAMA Ders 10: Dosyalama İşlemleri
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BÖLÜM 5 POINTER’LER (İŞARETÇİLER)
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar
Bölüm 2 C Dilinin Temelleri
Excel’de VBA Programlama (Visual Basic Application)
PROGRAM KONTROL KOMUTLARI 1. if koşulu 2. if else koşulu
YAPISAL PROGRAMLAMA Hafta-6
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Bölüm 2: Program Denetimi
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
Bilgisayar Bilimi Fonksiyonlar-2.
C ile Programlamaya Giriş
MTM216 GÖRSEL PROGRAMLAMA
Diziler(Arrays).
Sunum transkripti:

BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar

Faktöriyel Hesabı Akış Çizelgesi Başla Başla sayi sayi fakt = 1 fakt = 1 i = 1 i = 1 i <= sayi i++ i <= sayi fakt = fakt * i fakt = fakt * i i = i + 1 E H fakt fakt Bitir Bitir

Permütasyon & Kombinasyon Eleman sayısı n olan bir kümenin içinden r kadar eleman seçerek yapılabilecek permütasyonların hesabı: Kombinasyonun permütasyondan farkı, sıralamanın önemli olmamasıdır. Kombinasyonu P(n,r) permütasyonların toplamını seçilen elemanların kendi aralarındaki sıralanma sayılarına bölerek bulabiliriz:

Permütasyon Hesabı Akış Çizelgesi Başla n, r i = 1 i <= n - r i++ f2 = f2 * i f1 = 1 f2 = 1 i = 1 i <= n i++ f1/f2 f1 = f1 * i Bitir

Kombinasyon Hesabı Akış Çizelgesi Başla i = 1 i <= n - r i++ f2 = f2 * i n, r f1 = 1, f2 = 1 f3 = 1 i = 1 i <= r i++ f3 = f3 * i i = 1 i <= n i++ f1 = f1 * i f1/(f2*f3) Bitir

Fonksiyon Bir program içinde sıkça kullanılan bir işlem bloğunu fonksiyon olarak tanımlamak ve ihtiyaç duyulduğunda bu fonksiyonu çağırmak daha pratik ve okununca anlaşılması daha kolay olan bir yöntemdir. Fonksiyonlar bir ya da daha çok argüman (parametre) alarak, bu argümanlara göre işlemi yapar, ve geriye bir sonuç döndürürler. Permütasyon için 2 defa, kombinasyon için 3 defa faktöriyel hesabı döngüsünü tekrar etmek yerine faktöriyel fonksiyonu yaratılabilir.

Fonksiyon ile Permütasyon Hesabı Başla Yandaki akış çizelgesindeki fonksiyon ile çözüm çok daha basit ve anlaşılır görünmektedir. Program kodunda aynı döngünün tekrar tekrar yazılması her ne kadar programın çalışma hızını etkilemese de, kodun gereksiz yere uzun olmasına ve kodu okuyan için daha karmaşık görünmesine neden olacaktır. n, r f1 = fakt(n) f2 = fakt(n-r) f1/f2 Bitir

Döndüreceği değerin veri tipi #include <stdio.h> long fakt(int sayi){ long f=1; for (int i=2; i<=sayi; i++) f = f * i; return f; } void main(){ int n, r; printf("n degerini giriniz : "); scanf("%d", &n); printf("r degerini giriniz : "); scanf("%d", &r); printf("permutasyon = %d", fakt(n) / fakt(n-r)); Döndüreceği değerin veri tipi Alacağı değerin (parametrenin) veri tipi C dilinde for içinde değişken tanımı yapılamaz, C++ ve C# dillerinde yapılabilir.

Ödev 1 Faktöriyel fonksiyonu kullanarak kombinasyon hesabı yapan programı yazınız. Programda ikinci girilen sayının ilk sayıdan küçük olması kontrol edilsin hata varsa tekrar girilmesi sağlansın (r < n olmalı).

Parametre olarak aldığı sayının asal olup olmadığını bulan fonksiyon C dilinde bool veri tipi yoktur, C++ dilinde vardır. Kaynak kodunuzun dosya isminde uzantı ‘cpp’ ise C++’a göre derleme yapılır. Uzantı ‘c’ ise derlediğinizde bool veri tipi için ve true/false değerleri için hata verecektir. “true” için 1, “false” için 0, “bool” için de int kullanabilirsiniz. #include <stdio.h> bool asal(int sayi){ for (int i=2; i<=sayi/2; i++) if (sayi%i == 0) return false; return true; } void main(){ int n; printf("sayiyi giriniz : "); scanf("%d", &n); if (asal(n)) printf("Sayi asaldir"); else printf("Sayi asal degildir"); NOT: if(asal(n)) yerine if(asal(n) == true) yazılabilirdi. Eğer bu şekilde yazılırsa, asal fonksiyonu true değer döndürdüğünde (true == true) kontrolü yaparak fazladan bir karşılaştırma yapmış olurduk.

Prosedür (Yordam) Fonksiyonun değer döndürmeyen türüdür. Değer döndürmediği için prosedür isminden önce void yazılır ve prosedür içinde return ifadesi kullanılamaz. Genellikle matematiksel hesaplama işlemlerinde değil, programın mantıksal olarak bloklara ayrılmasında kullanılır. Tüm programlarda yer alan main() programın başlangıç prosedürüdür (Bir proje içinde iki yada daha fazla main isminde prosedür olamaz). Slaytlarımızdaki birçok programda main öncesinde void yazmadık. Bu durum başka derleyicilerde sorun yaratabilir fakat Dev C++'ta hem c hem de cpp uzantılı dosyalarda sorunsuz derlenir. Hatta cpp uzantılı dosyalarda void yazılması sorun yaratır, int yazılması (bu durumda fonksiyon olacağı için return de kullanılması) yada hiçbir şey yazılmaması gerekir.

Toplama yapan Prosedür ve Fonksiyon void ToplamGoster(int a, int b) { printf("%d\n", a + b); } int Topla(int a, int b) return a + b; void main() ToplamGoster(45, 67); printf("%d\n", Topla(45, 67)); Değer döndüremediğimiz için sonucu burada ekrana göstermek zorundayız Toplam sonucunu döndürüyoruz, burada ekrana göstermeye gerek yok Topla fonksiyonundan gelen 112 değerini burada ekrana gösteriyoruz

Dört İşlem Prosedürü void DortIslem(int a, char c, int b) { if (c == '+') printf("%d + %d = %d", a, b, a + b); if (c == '-') printf("%d - %d = %d", a, b, a - b); if (c == '*') printf("%d * %d = %d", a, b, a * b); if (c == '/') printf("%d / %d = %.2f", a, b, (float)a / (float)b); } main() { DortIslem(4, '/', 3); Bu dönüşümler ve "%.2f" sayesinde 4 / 3 işleminin sonucu 1 değil 1.33 olarak görünür. NOT: Bazı dillerde fonksiyon tanımı «function», prosedür tanımı ise «procedure» yada «subroutine» gibi isimler ile yapılır. C ve türevi olan C++, Java, C# gibi dillerde böyle bir tanım olmadığı için genellikle prosedüre de fonksiyon denir.

Lokal ve Global Değişkenler Fonksiyon içinde tanımlanan bir değişken lokal değişkendir ve sadece o fonksiyon içinde kullanılabilir. Fonksiyon dışında tanımlanan değişken ise global değişkendir ve tüm fonksiyonlarda kullanılabilir. Eğer değişken fonksiyonun içindeki bir kod bloğunda (örneğin for döngüsünün içinde) tanımlanmış ise, o değişken sadece o kod bloğunda ve varsa alt kod bloklarında geçerlidir.

Global ve Lokal olarak aynı değişken ismini kullanma durumu Eğer aynı isimde bir değişken hem sınıf içinde hem de fonksiyon içinde yar alıyorsa fonksiyonun içinde lokal olan değişken kullanılır (C++ dilinde global olana erişmek için değişken adından önce :: kullanılabilir). #include<stdio.h> int i = 0; int fg(int a){int s=a*i;return s; } main() { i = 10; int i; i = 2; printf("%d, %d\n", i, ::i); printf("%d, %d\n",fg(i), fg(::i)); Global olan ‘i’ değişkenine değer atanır. Lokal olan ‘i’ değişkenine değer atanır. Ekranda 2, 10 20,100 yazar NOT: Program kodu c uzantılı dosya olarak kaydedilirse derlenemez.

Örnek: Aşağıdaki programın üreteceği ekran çıktısını yazınız #include <stdio.h> float fonk(float a, int b){ while (b > a) { a *= 2; printf("%.2f\n", b/a); } return a; main(){ float a=3, b=3, c=fonk(a/b, a*b); printf("%.2f,%.2f,%.2f", a, b, c); for (; b > a; a *= 2) { 9.00 4.50 2.25 1.13 4.50 2.25 1.13 0.56 3.00,3.00,16.00

Fonksiyonun Tanımı C dilinde ya diğer tüm fonksiyonlar main() fonksiyonundan önce yazılır, yada en azından tanım satırları yazılır. Örn: int fakt(int); // fonksiyon tanımı void main(){ printf("%d", fakt(5)); } int fakt(int sayi){ … faktöriyel hesabı …

Ödevler 2. Bir sayının karekökünü bulan ve değer olarak döndüren fonksiyonu yazınız. OBEB ve OKEK işlemlerini fonksiyonları kullanarak yapınız. Parametre olarak aldığı sayının yazı ile yazılışını döndüren fonksiyonu yazınız. Örn: 694 değerini parametre olarak alacak “AltıYüzDoksanDört” string’ini döndürecek.

Ödevler 5. Parametre olarak aldığı 2 sayının “dost sayılar” olup olmadığını bulan fonksiyonu yazınız. A ve B tam sayılardır: A’nın tam bölenlerinin toplamı B’ye eşitse B’nin tam bölenlerinin toplamı A’ya eşitse Bu iki sayı dost sayıdır Örn: 220 ve 284 sayıları dost sayıdır

Ödevler 6. M.Ö. 2589-2566 yılları arasında yapıldığı tahmin edilen dünyanın 7 harikasından biri olan Keops Piramdi’nin en az 2.3 milyon taş bloktan oluştuğu tahmin edilmektedir. Piramidin tabanında kare biçiminde yerleştirilmiş N*N adet, ikinci katında (N-1)*(N-1), üçüncü katında (N-2)*(N-2), ... , N. katında (son kat) 1 taş blok olduğu kabul edilirse, piramitin kaç taş bloktan oluştuğunu ve kaç katlı olduğunu bulan programı yazınız (2.3 milyondan büyük olacak şekilde en az kaç kat olmalıdır). Piramidin tam 24 yılda bittiğini ve işçilerin günde 10 saat çalıştıklarını düşünelim. İşçilerin bir saatte ortalama kaç blok yerleştirdiklerini bulan SaatBasinaBlok fonksiyonu yazınız (1 yıl = 365 gün + 6 saat kabul edilecek).