Şimdi Ara

C ödevim için yardım gerekiyor.

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
0
Favori
768
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar bir sorum var. Örneğin 24 sayısı girilsin. 24 sayısının rakamları toplamının karesi 2^2+4^2=12. 12 sayısının rakamları toplamı 1^2+2^2=5... gibi her bulunan sayının rakamlarının toplamını alan programı yazmam gerekiyor.
    Yardımcı olabilir misiniz?



  • bulunan sayı için işlem tekrar mı yapılacak yoksa sadece bir defa mı?
  • Bulunan sayılar için sürekli devam edecek. Bulunan sayı 1 olunca "Dongu 1den baslıyor" yazdıracak.

    62 için 36+4=40 40 için 16+0=16 16 için 1+36=37 gibi. Eğer 1 olmazsa da "Dongu ilk değerden baslayacaktır" yazılacak.
  • ryoneasis kullanıcısına yanıt
    Recursive olarak boyle birsey yazdim C ye cevirebilirsin kolayca duzenlemek de fazla zor olmamali istegine gore

    Ayrica bu yöntemle çoğu sayı için hata alıcaksın muhtemelen çünkü işlem çok fazla tekrarlanabiliyor bu da stackoverflow a neden olmakta

    def RakamToplam(sayi): 
    onlar = int((sayi / 10) % 10)
    birler = int((sayi / 1) % 10)

    if int(onlar) is 0:
    return sayi
    toplam = (onlar ** 2) + (birler ** 2)
    return RakamToplam(toplam)


    print("Sonuc : {}".format(RakamToplam(24)))



    < Bu mesaj bu kişi tarafından değiştirildi bersgurs -- 11 Kasım 2015; 22:32:04 >
  • Peki bu işlemi kendimiz fonksiyon tanımlamadan , döngülerle yapabilir miyiz hocam ? Dediğin gibi hata alıyorum. Döngüler yardımıyla nasıl yapabiliriz? Döngümü yaparken değişken değerime 1den fazla değer bindiği için gerçek sonucu ekrana yazdıramıyorum.
  • ryoneasis kullanıcısına yanıt
    recursive olan herşeyi iterative yani döngüler ile yazabilirsin ancak genelde daha fazla kod yazımı gerektirir bir bakayım editlerim
  • Peki teşekkür ederim yardımınız için.
  • Yapay Zeka’dan İlgili Konular
    c'de yardım
    13 yıl önce açıldı
    Daha Fazla Göster
  • ryoneasis kullanıcısına yanıt
    Bu şekilde çalışması lazım yüzler basamağınıda ekledim artık bir sorun çıkmamalı

    def Iterative(sayi): 

    toplam = sayi

    yuzler = int((toplam / 100) % 10)
    onlar = int((toplam / 10) % 10)
    birler = int((toplam / 1) % 10)

    while(int(onlar) != 0):

    toplam = (yuzler ** 2) + (onlar ** 2) + (birler ** 2)
    yuzler = int((toplam / 100) % 10)
    onlar = int((toplam / 10) % 10)
    birler = int((toplam / 1) % 10)


    return toplam



    print("Sonuc : {}".format(Iterative(123)))
  • Hocam son yazdığınız kod işe yaramadı malesef çünkü sadece 3 rakamlılarda çalışıyor. Benim yapmam gereken tüm basamaklı sayılarda bu işlemi yapmak. Ben şu anda sadece 1 defa ilerletebildim.

    #include <stdio.h> 
    #include <conio.h>
    #include <locale.h>


    int main()

    {
    setlocale(LC_ALL, "Turkish");
    int Sayi, Toplam = 0,Mod,SayiToplam=0;


    printf("Sayiyi giriniz");
    scanf_s("%d", &Sayi);

    printf("%d ", Sayi);

    while (Sayi > 0)
    {

    Mod = Sayi % 10;
    Sayi = Sayi / 10;

    Mod = Mod*Mod;

    SayiToplam = SayiToplam + Mod;

    }
    printf("%d ", SayiToplam);
    }


    Benim yazdığım kod bu. Sizce nerelerde değişiklik yapmalıyım. Bu işlemin döngü şeklinde ilerleyebilmesi için ne yapabilirim. Buradan çıkan sayıyı da aynı işleme tabi tutmak istiyorum.




  • ryoneasis kullanıcısına yanıt
    Çalısıyor ıkı basamaklı sayılarda en azından bende çalışmakta

    < Bu ileti mobil sürüm kullanılarak atıldı >
  •  
    #include<stdio.h>

    int main(){

    int n = 0,devam = 1;
    char c[50];
    gets(c);
    while(devam){
    int toplam = 0;
    while(c[n] != '\0'){
    toplam = toplam + ((c[n]-'0')*(c[n]-'0'));
    n++;
    }
    n = 0;
    printf("%d\n",toplam);
    if(toplam == 1){
    devam = 0;
    }
    sprintf(c,"%d",toplam);
    }
    return 0;
    }



    kodu yazdım ama çoğu sayı için sonsuz döngüye giriyor. örneğin 10 kadar olan sayılardan sadece 1 ve 7 için 1 sonucunu veriyor. diğerleri için sonsuz döngüye giriyor. bu kodla 49 basamaklılara kadar istediğin işlemi yaptırabilirsin. daha fazlasını istersen c[50] kısmını c[istediğin kadarı + 1] yapmalısın. bunun sebebi de gets fonksiyonunun dizi sonuna '\0' sonlandırma karakterini otomatik olarak eklemesi. kodda anlamadığın bir sey olursa sorabilirsin.



    < Bu mesaj bu kişi tarafından değiştirildi Etin -- 12 Kasım 2015; 18:31:08 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.