Çözüldü C dilinde yanlış hesaplama

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

KebabAlanya

Hectopat
Katılım
29 Ağustos 2018
Mesajlar
722
Yer
Alanya
C:
#include <stdio.h>
#include <stdlib.h>

int main() {

 int i,deger,fact,durum;
 fact=1;
 durum=1;

 while(durum!=0)
 {
 printf("Lutfen deger giriniz: ");
 scanf("%d",&deger);
 for(i=1;i<=deger;i++)
 {
 fact=fact*i;
 }
 printf("sonuc: %d",fact);
 printf("\n\n");
 printf("Devam etmek icin 1'e, cikmak icin ise 0'a basiniz. ");
 scanf("%d",&durum);
 }

 return 0;
}

Buradaki amacım, kişinin girdiği değerinin faktöriyel değerini bulmak ve isteğine göre çıkış veya devam etmesini sağlamak.
İlk girilen değerin sonucu doğru buluyor fakat ikinci girilen değeri doğru bulmak yerine bir önceki işlemde çıkan sonucu, yeni girilen değerin faktöriyel değeriyle çarpıyor.
Buradaki hatam nedir?
 
Son düzenleyen: Moderatör:
Çözüm
C:
#include <stdio.h>
#include <stdlib.h>

int main() {
     int i, deger, fact, durum = 1;
    
     while(durum != 0)
     {
         fact = 1;
         printf("Lutfen deger giriniz: ");
         scanf("%d",&deger);
         for(i = 1; i <= deger; i++)
         {
            fact = fact * i;
         }
         printf("sonuc: %d\n\n",fact);
         printf("Devam etmek icin 1'e, cikmak icin ise 0'a basiniz. ");
         scanf("%d",&durum);
     }

 return 0;
}

Temelde yapmış olduğunuz hata 'fact' değişkenini while döngüsü içerisinde tekrardan 1'e eşitlememek olmuş. Bu sebepten yeni bir değer girdiğiniz zaman önceki 'fact' değeriyle çarpıyor, haliyle sonuç beklenen gibi çıkmıyor. Kodda da düzelttiğim buydu.
C dilinden anlamıyorum ancak, faktöriyel demek: n sayısına kadar olan her sayının biribiriyle çarpımı demek. Bu doğrultuda kodlama yapabilirsiniz bence.
 
C:
#include <stdio.h>
#include <stdlib.h>

int main() {
     int i, deger, fact, durum = 1;
    
     while(durum != 0)
     {
         fact = 1;
         printf("Lutfen deger giriniz: ");
         scanf("%d",&deger);
         for(i = 1; i <= deger; i++)
         {
            fact = fact * i;
         }
         printf("sonuc: %d\n\n",fact);
         printf("Devam etmek icin 1'e, cikmak icin ise 0'a basiniz. ");
         scanf("%d",&durum);
     }

 return 0;
}

Temelde yapmış olduğunuz hata 'fact' değişkenini while döngüsü içerisinde tekrardan 1'e eşitlememek olmuş. Bu sebepten yeni bir değer girdiğiniz zaman önceki 'fact' değeriyle çarpıyor, haliyle sonuç beklenen gibi çıkmıyor. Kodda da düzelttiğim buydu.
 
Çözüm
C dilinden anlamıyorum ancak, faktöriyel demek: N sayısına kadar olan her sayının biribiriyle çarpımı demek. Bu doğrultuda kodlama yapabilirsiniz bence.

While kullanmadığımda faktöriyel düzgün çalışıyor ama bu sefer de devam edebilmek için consolu kapatıp tekrardan açmak gerekiyor. Bunun yerine kişinin tercihine göre devam ya da çıkış sağlamak istiyorum.
C:
#include <stdio.h>
#include <stdlib.h>

int main() {
     int i, deger, fact, durum = 1;
   
     while(durum != 0)
     {
         fact = 1;
         printf("Lutfen deger giriniz: ");
         scanf("%d",&deger);
         for(i = 1; i <= deger; i++)
         {
            fact = fact * i;
         }
         printf("sonuc: %d\n\n",fact);
         printf("Devam etmek icin 1'e, cikmak icin ise 0'a basiniz. ");
         scanf("%d",&durum);
     }

 return 0;
}

Temelde yapmış olduğunuz hata 'fact' değişkenini while döngüsü içerisinde tekrardan 1'e eşitlememek olmuş. Bu sebepten yeni bir değer girdiğiniz zaman önceki 'fact' değeriyle çarpıyor, haliyle sonuç beklenen gibi çıkmıyor. Kodda da düzelttiğim buydu.
Bunu hiç düşünmemiştim teşekkür ederim.
 
Son düzenleme:
C:
/******************************************************************************

                            Online C Compiler.
                Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>

int faktoriyel(int deger)
{
    int fact=1;
    for (int i=1; i<=deger; i++)
    {
        fact=fact*i;
    }
    return fact;
}

int main()
{

 int i,deger,fact=1,durum;
 while(durum!=0)
 {
    printf("Deger Gir");
    scanf("%d",&deger);
    int cikis=faktoriyel(deger);
    printf("\nSonuc= %d", cikis);
    printf("\nDevam Etmek Icin 1'e, Cikis Icin 0'a Bas\n");
    scanf("%d",&durum);
 }

 return 0;
}
 
C:
/******************************************************************************

                            Online C Compiler.
                Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>

int faktoriyel(int deger)
{
    int fact=1;
    for (int i=1; i<=deger; i++)
    {
        fact=fact*i;
    }
    return fact;
}

int main()
{

 int i,deger,fact=1,durum;
 while(durum!=0)
 {
    printf("Deger Gir");
    scanf("%d",&deger);
    int cikis=faktoriyel(deger);
    printf("\nSonuc= %d", cikis);
    printf("\nDevam Etmek Icin 1'e, Cikis Icin 0'a Bas\n");
    scanf("%d",&durum);
 }

 return 0;
}
Bu hangi IDE'den yazılma ?
 
1646989475219.png


Fonksiyondan itibaren kopyala.

İnt maine kadar olan kısım için bu hatayı veriyor
 

Geri
Yukarı