10. Hafta Uygulama Dersi Dokümanı

BM101 BİLGİSAYAR PROGRAMLAMA I
UYGULAMA ÖRNEKLERİ
Fonksiyonlar
1.
Aşağıda kaynak kodu bulunan hesap makinesi örneğinde çeşitli türlerde (Bkz. Çizelge 1) fonksiyonlar
kullanılmıştır. Çözümü inceleyip uygulamayı kendi bilgisayarınızda kodlayınız.
Çizelge 1. Hesap Makinesi Örneği Fonksiyonlarının Türlerine Göre Gruplandırılması
Değer döndüren
Değer Döndürmeyen
Parametreli
Parametresiz
KlavyedenOku()
Bolme(float, float)
Carpma(float, float)
Toplama(float, float)
Cikarma(float, float)
Mod(float, float)
main()
Yaz_Float(char [], float)
Yaz_Int(char [], int)
Yaz_Float(char [], float)
Yaz_Int(char [], int)
Bolme(float, float)
Carpma(float, float)
Toplama(float, float)
Cikarma(float, float)
Mod(float, float)
KlavyedenOku()
main()
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float KlavyedenOku();
void Yaz_Float(char aciklama [], float deger);
void Yaz_Int(char aciklama [], int deger);
float Bolme(float bolunen, float bolen);
float Carpma(float carpan1, float carpan2);
float Toplama(float toplanan1, float toplanan2);
float Cikarma(float eksilen, float cikan);
int Mod(float bolunen, float bolen);
int main()
{
float param1 = KlavyedenOku();
float param2 = KlavyedenOku();
Yaz_Float("Toplama: ", Toplama(param1,param2));
Yaz_Float("Cikarma: ", Cikarma(param1,param2));
Yaz_Float("Carpma: ", Carpma(param1,param2));
Yaz_Float("Bolme: ", Bolme(param1,param2));
Yaz_Int("Mod: ", Mod(param1,param2));
system("pause");
return 0;
}
float KlavyedenOku()
{
float deger = 0;
printf("Float tipinde bir deger giriniz: ");
scanf("%f", &deger);
printf("\n");
return deger;
}
void Yaz_Float(char aciklama [], float deger)
{
printf("%s %f\n", aciklama, deger);
}
void Yaz_Int(char aciklama [], int deger)
{
printf("%s %d\n", aciklama, deger);
}
float Bolme(float bolunen, float bolen)
{
float bolum = bolunen/bolen;
return bolum;
}
float Carpma(float carpan1, float carpan2)
{
float carpim = carpan1 * carpan2;
return carpim;
}
float Toplama(float toplanan1, float toplanan2)
{
float sonuc = toplanan1 + toplanan2;
return sonuc;
}
float Cikarma(float eksilen, float cikan)
{
float fark = eksilen - cikan;
return fark;
}
int Mod(float bolunen, float bolen)
{
//mod’ un int’ lar arasında yapılmasını istiyoruz.
//Bu yüzden float → int dönüşümü yapıyoruz.
int ibolunen = (int)bolunen;
int ibolen = (int)bolen;
int mod = ibolunen - (ibolen * (ibolunen / ibolen));
return mod;
}
BM101 BİLGİSAYAR PROGRAMLAMA I
UYGULAMA ÖRNEKLERİ
Fonksiyonlar
2.
Aşağıda kaynak kodu yer alan ve iki değer arasında rastgele sayı üreten programı inceleyiniz.
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //time() fonksiyonunu içeren kütüphane
//Kullanılacak fonksiyonların tanımlayıcıları
int RastgeleSayi(int altSinir, int ustSinir);
void Yaz_Int(char aciklama [], int deger);
int main()
{
//RastgeleSayi() fonksiyonundan dönen değer
//rastgeleSayi isimli değişkene atanır
int rastgeleSayi = RastgeleSayi(10, 15);
//rastgele sayı değişkeninin değeri
//Yaz_Int fonksiyonuna girdi parametresi olarak atanır.
Yaz_Int("Rastgele Sayi: ", rastgeleSayi);
system("pause");
return 0;
}
//İki değer arasında rastgele sayı üreten fonksiyon
//İki adet int tipinde parametre alır, Int tipinde bir değer döndürür
int RastgeleSayi(int altSinir, int ustSinir)
{
//(altSinir,ustSinir] aralığında sayı üretir
srand(time(NULL));
return (rand() % (ustSinir - altSinir)) + altSinir + 1;
}
void Yaz_Int(char aciklama [], int deger)
{
printf("%s %d\n", aciklama, deger);
}
3.
İki adet float sayıyı karşılaştıran program kodunu fonksiyon yardımı ile yazınız. Kullanılan fonksiyon iki adet
float parametre alacaktır. Integer tipinde bir değer döndürecektir. Problemin çözümü için tanımlamanız
beklenen fonksiyonlar ve beklenen ekran çıktısı aşağıda sunulmuştur.
int Karsilastir(float val1, float val2)
float KlavyedenFloatOku()
int main ()
BM101 BİLGİSAYAR PROGRAMLAMA I
UYGULAMA ÖRNEKLERİ
Fonksiyonlar
4.
Klavyeden girilen bir tamsayının faktöriyelini alan program kodunu yazınız. Problemin çözümü için
tanımlamanız beklenen fonksiyonlar aşağıda listelenmiştir.
int Faktoriyel(int value)
int KlavyedenIntOku()
void Yaz_Int(char aciklama [], int deger)
int main()
5.
Klavyeden iki sayı okuyan, bunları sırasıyla m ve n değişkenlerine atan ardından bu değişkenlerin
değerlerini değiş tokuş eden program kodunu aşağıdaki ekran çıktısına benzer çıktı üretecek şekilde
yazınız. Değiş tokuş işlemi için iki parametre alan swap isimli fonksiyonu tanımlayınız.
6.
Kullanıcıdan alınan x ve y parametreleri ile
işleminin sonucunu hesaplayan program kodunu yazınız.
Ardından bu işlemi math kütüphanesinde yer alan pow() fonksiyonu ile de çözüp hesaplamanızın
doğruluğunu test ediniz. Problemin çözümü için tanımlamanız beklenen fonksiyonlar aşağıdadır.
int main()
{
//Fonksiyonlar buradan çağrılacak
system("pause");
return 0;
}
int PowManual(int x, int y)
{
//Döngüler ile x üzeri y hesabı
}
int PowFromMathLibrary(int x, int y)
{
//math.h kütüphanesindeki pow fonksiyonu kullanımı
}
int KlavyedenIntOku()
{
//integer tipinde bir x ve y klavyeden girilecek
}
void Yaz_Int(char aciklama [], int deger)
{
//Sonuç ekrana yazdırılacak
}
BM101 BİLGİSAYAR PROGRAMLAMA I
UYGULAMA ÖRNEKLERİ
Fonksiyonlar
7.
Aşağıdaki ekran çıktısında görüldüğü gibi kullanıcıdan tamsayı tipinde bir değer girmesini isteyen ve belirli
kurallara göre bu değeri 1’ e yaklaştırmaya çalışan program kodunu yazınız.
Kural 1. Değer çift ise ikiye böl.
Kural 2. Değer tek ise 3 ile çarp ve 1 ekle.
Kural 3. Değerin her değişimini ekrana yazdır.
Kural 4. Değer 1 ise kaç iterasyonda 1’e ulaştığını ekrana yazdır.
Kural 5. Değer 1’den küçük olduğunda işlemi sonlandır.
Programda yazılması beklenen fonksiyonlar aşağıda listelenmiştir:
int Operate(int number); //değerin tek çift kontrolünü yapar ve uygun kurala göre
değeri değiştirip ekrana yeni değeri yazar
int KlavyedenIntOku();
void Yaz_Int(char aciklama [], int deger); //ekrana int yazar
BM101 BİLGİSAYAR PROGRAMLAMA I
UYGULAMA ÖRNEKLERİ
Fonksiyonlar
8.
Kullanıcıdan n ve m sayılarını isteyerek permütasyon ve kombinasyon hesabı yapan program kodunu
yazınız. Faktöriyel hesabını fonksiyon yardımı ile yapınız. Bu fonksiyon tamsayı tipinde bir parametre
almalı ve yine tamsayı tipinde bir değer döndürmelidir. Permütasyon ve kombinasyon için de ayrı
fonksiyonlar kullanınız. n ve m değerleri -1 oluncaya dek program hesaplama yapmaya olanak vermelidir.
n
m
P n, m
n
m
C n, m
9.
n
n!
m !
n!
m! n m !
Kullanıcının seçimine göre bir x açısının Sinüs ve Kosinüs değerini hesaplayan program kodunu yazınız.
Öncelikle programda iterasyon sayısı (n), açı değeri (x) ve yapılmak istenen işlem seçilmelidir. (Cos: C veya
c; Sin: S veya s; Çıkış: Q veya q). Hesaplamalar kullanıcı uygulamadan çıkmak isteyinceye kadar
sürdürülmelidir. Sinüs, kosinüs ve faktöriyel hesapları için ayrı fonksiyonlar kullanınız.
Hesaplama yapabilmeniz için aşağıdaki serilerin kullanılması gerekmektedir.
1
2
1 !
3!
5!
7!
1
2
İ
!
2!
4!
6!
…
…
: Kullanıcıdan istenen açı değeri dereceden radyana çevrilmelidir. Aşağıdaki kodu kullanabilirsiniz.
x
İ
x ∗ 3.142/180.0 ;/∗ Derecedenradyanadönüşüm ∗/
:x işlemini kodlamada pow x, y şeklinde ifade ederiz. Bunun için math kütüphanesini #include
.
şeklinde eklemeniz gerekecektir. Hazır kütüphane kullanmak istemezseniz bu işlemi de döngülerle
çözebilirsiniz.
İ
: Serilerdeki +, - geçişlerini uygulayabilmek için bir değişken (int lag
1) tanımlayıp onu döngünün
içerisinde -1 ile çarpabilirsiniz ( lag ∗ 1). Bu sayede döngünün her işletilmesinde işaret değiştirilmiş
olacaktır.
İ
: Faktöriyel hesapları için daha önce kullandığınız faktöriyel fonksiyonundan yararlanınız.
ı : Uygulamanızın doğru hesaplama yapıp yapmadığını otomatik olarak test etmek için
bulduğunuz sonuçları hazır kütüphane kullanarak değerlendiriniz. Bunun için math kütüphanesine ait kosinüs
ve sinüs fonksiyonlarını kullanabilirsiniz. Bu fonksiyonların radyan cinsinden parametre aldığına dikkat ediniz.
BM101 BİLGİSAYAR PROGRAMLAMA I
UYGULAMA ÖRNEKLERİ
Fonksiyonlar
Beklenen Ekran Çıktısı: