C Programlama dilinde girilen bir sayının, herhangi bir sayının üssü olup olmadığını kontrol etmek için logaritma ya da bir döngü kullanarak çözebiliriz. Bu örnekte iki farklı yolu da göstereceğiz.
Yöntem 1 (logaritma ve logaritma özellikleri kullanarak)
C Programlama Dilinde math kütüphanesi sayesinde 10 tabanında ya da e tabanında logaritma kullanabiliyoruz. Bu sorunu logaritma özellikleri kullanarak çok basit bir şekilde yapabiliriz.
Örn: 1024 sayısının 2’nin üssü olup olmadığını kontrol etmek için;
log21024 = x ile bulabiliriz. x değeri eğer integer (tamsayı) ise 1024, 2 nin üsstü diyebiliriz. Bunu yapabilmek için;
log21024 = log101024 / log102 (logaritma özelliklerinden geliyor) şeklinde kullanabiliriz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <stdio.h>
#include <math.h>
int main() {
float sayi, us, sonuc;
printf("Sayi Giriniz: ");
scanf("%f", &sayi);
printf("Sonuc Giriniz: ");
scanf("%f", &sonuc);
us = log10(sonuc) / log10(sayi);
if(us / (int) us == 1 )
printf("%d ^ %d = %d\n", (int)sayi, (int)us, (int)sonuc);
else if (sonuc == 1)
printf("%d ^ %d = %d\n", (int)sayi, 0, (int)sonuc);
else
printf("ussu degildir\n");
return 0;
}
|
Yöntem 2 (döngü kullarak)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <stdio.h>
int main() {
int sayi, us, sonuc, sayac, gecici;
printf("Sayi Giriniz: ");
scanf("%d", &sayi);
printf("Sonuc Giriniz: ");
scanf("%d", &sonuc);
gecici = sayi;
sayac = 1;
while (gecici < sonuc) {
gecici *= sayi;
sayac++;
}
if (gecici == sonuc)
printf("%d ^ %d = %d\n", sayi, sayac, sonuc);
else if (sonuc == 1)
printf("%d ^ 0 = %d\n", sayi, sonuc);
else
printf("ussu degildir");
return 0;
}
|