int main()
{
int a1,a2;
double s;
printf("Lutfen Birinci Sayiyi Giriniz: ");
scanf("%d",&a1);
printf("Lutfen Ikinci Sayiyi Giriniz: ");
scanf("%d",&a2);
s=sonuc(a1,a2);
printf("Sonuc: %.2f",s);
return 0;
}[/CODE]
S1 ve S2 değişkenleri integera atadığımda S3'ün cevabı daima tam sayı olarak çıkıyor ama S1 ve S2'yi double atadığımda ise sonuç ya tam sayı ya da ondalıklı sayı çıkabiliyor. Benim anlamadığım ise S1, S2'nin veri tipi neden double veri tipli S3'ü integer ya da double olarak gösteriyor?
5 ve 10 girdim ve 0,5 cevabını verdi. Bence güzelce çalışıyor. Alternatif olarak dediğinizi de kod olarak paylaşırsanız daha anlaşılır olur bence.
Tipleri değiştirerek sanırım integer bölme ile karşılaştınız. Integer sayıları bölerseniz sonuç integer olur. Ondalıklı kısım yok olur. Yani 5 / 10 olur size 0.
5 ve 10 girdim ve 0,5 cevabını verdi. Bence güzelce çalışıyor. Alternatif olarak dediğinizi de kod olarak paylaşırsanız daha anlaşılır olur bence.
Tipleri değiştirerek sanırım integer bölme ile karşılaştınız. Integer sayıları bölerseniz sonuç integer olur. Ondalıklı kısım yok olur. Yani 5 / 10 olur size 0.
int main()
{
int a1,a2;
double s;
printf("Lutfen Birinci Sayiyi Giriniz: ");
scanf("%d",&a1);
printf("Lutfen Ikinci Sayiyi Giriniz: ");
scanf("%d",&a2);
s=sonuc(a1,a2);
printf("Sonuc: %.2f",s);
return 0;
}[/CODE]
Burada int s1, int s2 yaptığımda bu sonucu alıyorum ama double s1, double s2 yaptığımda sonuç istediğim gibi çıkıyor. Bunun nedenini anlayamadım.
Dediğim şey. Integer bölme. Bölme işlemine giren iki sayı da integer ise sonuç integer çıkar. Ondalıklı sonuç için sayıların en az biri float/double tipinde olmalı.
Bir bölme işlemi için fonksiyon yazmanız çok saçma geliyor bana. Değişken ve fonksiyon isimleriniz de aynı şekilde. Aşağıdaki gibi tekini cast edip sonucu double alabilirsiniz. Atadığınız şeyin tipinin double olmasının atanan şeyin integer olmasını değiştirmediğini anlamalısınız.
Kod:
#include <stdio.h>
int main() {
int a1;
int a2;
double s;
printf("Lutfen Birinci Sayiyi Giriniz: ");
scanf("%d", &a1);
printf("Lutfen Ikinci Sayiyi Giriniz: ");
scanf("%d", &a2);
s = (double)a1 / a2;
printf("Sonuc: %.2f", s);
return 0;
}
Fonksiyona gönderdiğinizde sayıların her ikisi de tam sayı olduğu için tam sayı olarak bölüm yapılıyor. Daha sonradan çıkan sonucu kusuratli olarak yapıyor sonucu double olarak yazdığınız için. Sıralama böyle.
Dediğim şey. Integer bölme. Bölme işlemine giren iki sayı da integer ise sonuç integer çıkar. Ondalıklı sonuç için sayıların en az biri float/double tipinde olmalı.
Bir bölme işlemi için fonksiyon yazmanız çok saçma geliyor bana. Değişken ve fonksiyon isimleriniz de aynı şekilde. Aşağıdaki gibi tekini cast edip sonucu double alabilirsiniz. Atadığınız şeyin tipinin double olmasının atanan şeyin integer olmasını değiştirmediğini anlamalısınız.
Kod:
#include <stdio.h>
int main() {
int a1;
int a2;
double s;
printf("Lutfen Birinci Sayiyi Giriniz: ");
scanf("%d", &a1);
printf("Lutfen Ikinci Sayiyi Giriniz: ");
scanf("%d", &a2);
s = (double)a1 / a2;
printf("Sonuc: %.2f", s);
return 0;
}
Fonksiyon yazma sebebim konuyu kavramak için. Anlamama sebebim de a1 ve a2 yi tam sayı olarak ayarladım ki bunları tam sayı olarak gireceğim ama a3 ü double olarak ayarlamama rağmen çıktısı tam sayı olmasıydı.
Bu da bana saçma geldi ama yapacak bir şey yok iki veri türünde içermesi içinde kapsamlı olanı kullanmak lazımmış.
Anlamama sebebim de a1 ve a2 yi tam sayı olarak ayarladım ki bunları tam sayı olarak gireceğim ama a3 ü double olarak ayarlamama rağmen çıktısı tam sayı olmasıydı.
Yazdığımı okumadiniz sanırım. Program önce a1 ve a2 sayısını tam sayı olarak bölüyor birbirine ondan sonra çıkan sonucu double olarak yazıyor.
Örneğin 11 ve 2 sayılarını ele alalım. Bu sayıları tam sayı olarak bölüyor ve 5 sonucu elde ediyor. Ardından double yazdığınız için 5 sayısını 5.00 olarak kusuratli yazıyor.
Yazdığımı okumadiniz sanırım. Program önce a1 ve a2 sayısını tam sayı olarak bölüyor birbirine ondan sonra çıkan sonucu double olarak yazıyor.
Örneğin 11 ve 2 sayılarını ele alalım. Bu sayıları tam sayı olarak bölüyor ve 5 sonucu elde ediyor. Ardından double yazdığınız için 5 sayısını 5.00 olarak kusuratli yazıyor.
@KebabAlanya integer sayıyı integer sayıya bölerek sonuç integer olur. Yani int 5'i int 3'e bölerek sonuç 1 çıkar. Ama float veya double ile yaparsan virgülden sonraki değerler de çıkar. Sen virgülü çıksın istersen float veya double olarak kaydetmelisin. Eğer hafıza kısıtlıysa float daha iyi olur.