C double veri tipini integer ya da double olarak gösteriyor

KebabAlanya

Hectopat
Katılım
29 Ağustos 2018
Mesajlar
722
Yer
Alanya
[CODE lang="c" title="hesaplama"]double sonuc(double s1,double s2)
{
double s3;
s3=s1/s2;

return s3;
}

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?
 
Son düzenleyen: Moderatör:
Değişkenleri integer'a atamak nedir?

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.
 
Değişkenleri integer'a atamak nedir?

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.
[CODE lang="c" title="hesaplama"]double sonuc(int s1,int s2)
{
double s3;
s3=s1/s2;

return s3;
}



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]
1648111502901.png

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.
 
Son düzenleme:
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.
İşte ben de 5.00 yerine 5.5 ı neden programın yazmadığını sordum. Onun içinde alınan değerleri de double olarak tanıtmak gerekiyormuş.
 
@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.

C:
#include <stdio.h>

double bolme (double s1, double s2)
{
  double s3=s1/s2;
  return s3;
}

int main()
{
  double s1=5, s2=3;
  double sayi=bolme(s1,s2);
  printf("%.2f", sayi);
  return 0;
}
 

Yeni konular

Geri
Yukarı