C Kodu çalışmıyor

342746

Kilopat
Katılım
2 Haziran 2020
Mesajlar
5.441
Makaleler
10
Çözümler
84
Arkadaşlar girilen sayını tersini almak istiyorum. Şöyle bir şey yaptım ama çalışmıyor. Hatam nedir?

C:
#include <stdlib.h>
#include <stdio.h>

int basamakSayisiBul(int sayi)
{
    int basamaksayi = 0;

    if (sayi >= 0)
    {
        do
        {
            basamaksayi++;
            sayi = sayi / 10;
        } while (sayi > 0);
    }
    return basamaksayi;
}

int tersineCevir(int sayi)
{
    int basamakSayimiz = basamakSayisiBul(sayi);
    int dizi[basamakSayimiz];
    int basamakSayisi = 0;

    do
    {
        basamakSayisi++;
        dizi[basamakSayimiz - 1] = sayi % 10;
        sayi = sayi / 10;

    } while (sayi > 0);

    float sayininTersi = 0;

    for (int i = 0; i < basamakSayimiz; i++)
    {
        sayininTersi = sayininTersi + dizi[i] * pow(10, basamakSayimiz - 1 - i);
    }
}

int main()
{
    int sayi;
    printf("Sayinin tersi icin bir sayi giirinz.\n");
    scanf("%d", &sayi);

    printf("%d\n", tersineCevir(sayi));

    system("pause");
    return 0;
}
 
Son düzenleyen: Moderatör:
pow() fonksiyonundan olduğunu düşünüyorum.
Hocam böyle uyarılar veriyor bir de.
Screenshot_1.png
Screenshot_2.png
 
Diziyi öyle tanımlayamazsın. C dilinde dizi boyutu girilmek zorunda. Yani Derlenmeden önce değerinin ne oldugu belli olmalı. Mesela sen burada basamak sayısına göre ayarlamaya çalışıyorsun. Bu basamak sayısı runtime da belli olduğu için C bunu kabul etmez. Umarım anlatabilmişimdir. Ayrıca pow fonksiyonunu ya tanımlayın yada math.h kütüphaneisini ekleyin.
Ayrıca basamaksayisibul fonksiyonunu şu şekilde yapabilirsin.
C:
int basamakSayisiBul(int sayi)
{
    int basamaksayi = 0;

    while (sayi > 0)
    {
        sayi /= 10;
        basamaksayi++;
    }
    return basamaksayi;
}
Yani do while kullanıoyrsun ancak if ile başlangıçta kontrol ediyorsun. Gerek yok buna. direk while kullan.

Ayrıca dizi kullanmana da gerek yok. Zaten tüm işler Sayının basamak değeriyle oluyor. yani bunu düşünerek tekrar yazmanı tavsiye ederim.(dizi kullanmadan)
 
Diziyi öyle tanımlayamazsın. C dilinde dizi boyutu girilmek zorunda. Yani Derlenmeden önce değerinin ne oldugu belli olmalı. Mesela sen burada basamak sayısına göre ayarlamaya çalışıyorsun. Bu basamak sayısı runtime da belli olduğu için C bunu kabul etmez. Umarım anlatabilmişimdir. Ayrıca pow fonksiyonunu ya tanımlayın yada math.h kütüphaneisini ekleyin.
Ayrıca basamaksayisibul fonksiyonunu şu şekilde yapabilirsin.
C:
int basamakSayisiBul(int sayi)
{
    int basamaksayi = 0;

    while (sayi > 0)
    {
        sayi /= 10;
        basamaksayi++;
    }
    return basamaksayi;
}
Yani do while kullanıoyrsun ancak if ile başlangıçta kontrol ediyorsun. Gerek yok buna. direk while kullan.

Ayrıca dizi kullanmana da gerek yok. Zaten tüm işler Sayının basamak değeriyle oluyor. yani bunu düşünerek tekrar yazmanı tavsiye ederim.(dizi kullanmadan)
Az önce çok gereksiz uzatmışım. Şöyle yaptım ve çalışıyor. Teşekkür ederim size de :).
C:
#include <stdio.h>
#include <stdlib.h>

int tersineCevir(int sayi)
{
    int yeniSayi = 0;

    while (sayi > 0)
    {
        yeniSayi *= 10;
        yeniSayi += sayi % 10;
        sayi /= 10;
    }
    return yeniSayi;
}

int main()
{

    int sayi;

    printf("Tersine cevirmek istediginiz sayiyi giriniz.\n");
    scanf("%d", &sayi);

    printf("%d sayisinin tersi: %d\n", sayi, tersineCevir(sayi));

    system("pause");
    return 0;
}
 

Geri
Yukarı