SDN Programlama Kafe

Haciwhat

Asistan
Katılım
25 Eylül 2011
Mesajlar
108
Reaksiyon puanı
0
Puanları
0
<html>
<title>SDN Ailesi</title>
<body bgcolor="black">
<center>
<font color="red" size="+5">
Hepiniz Bitanesiniz
</font>
</center>
</body>
</html>
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
arkadaşlar bi program için uğraşıyorum

program sonucunda şu işlemin sonucunu almam gerek

12n3c.png


burdaki - ile + arasındaki terim oluyor. Bu sonsuz döngü ise şu şekilde sonlanacak ve sonucu bize bildirecek
abs(sonterim)<0.0001 olduğunda döngü sonlanacak ve sonucu bildirecek.

program c dilinde yazılacak. yazılırken for, if, while, do-while komutları kullanılabilecek.

bende kendi yazdığım programı koyuyumda yanlışlarımı eksiklerimi söyleyin. aslında ben denedim çalışıyor ama + - olmuyor sürekli

Kod:
#include <stdio.h>int main(void)
{
double x;
double toplam,pay,payda,terim=0.0;
int k;
    printf("\nx degerini giriniz: ");
    scanf("%lf", &x);
    toplam=1.0;
    pay=(x*x);
    payda=1*2;
    for(k=3;abs(terim)<=0.0001;k=k+2)
    {
             terim=pay/payda;
             toplam+=terim;
             pay*=(x*x);
             payda*=(k*(k+1));
    }
    printf("Seri: %.4f\n\n",toplam);            
            
system("PAUSE");
return 0;
}

programcılığa yeni adım atmış olan arkadaşınızdan yardımlarınız esirgemeyin lütfen :)
 

__kadıköyRAP__

Müdavim
Müdavim
Katılım
3 Mart 2007
Mesajlar
29,201
Reaksiyon puanı
2,148
Puanları
7,358
[MENTION=71554]cobra11[/MENTION]

başkasının algoritmasının üzerinden gidemiyorum :D baştan ben böyle yaptım, mantığını anlamazsan yardımcı olurum
Kod:
#include<stdio.h>
double fakto(double f) // faktoriyel fonksiyonu
{
   double carpim=1,deger;
   for(deger=f; deger>1; deger--)
   {
      carpim*=deger;
   }
   return carpim;
}
main()
{
   double x;
   
   printf("X değeri:");
   scanf("%lf", &x);

   double k,toplam=1,pay=x*x,payda=fakto(2),carpan=-1;

   for(k=4;(pay/payda)>0.0001;k+=2)
   {
      printf("%lf değeriyle döngüye giriliyor\n", pay/payda); // hangi pay/payda değeriyle dönyüye girildiğini görelim (0.0001'den büyük değer çıkacak hep)
      toplam+=carpan*(pay/payda);
      pay*=x*x;
      payda=fakto(k);
      carpan*=-1; // bir artı bir eksi olan yer burası
   }

   printf("Toplam: %lf\n", toplam);
   
}
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
[MENTION=16260]__kadıköyRAP__[/MENTION]

işlem sonucu yanlış veriyor. resimde seriyi yazarken yazmamışımda o ser cos(x) değerini veriyor

cos60 yazıyorum çok saçma bi rakam çıkıyor.
 

__kadıköyRAP__

Müdavim
Müdavim
Katılım
3 Mart 2007
Mesajlar
29,201
Reaksiyon puanı
2,148
Puanları
7,358
[MENTION=71554]cobra11[/MENTION] nerden sardırdın şunu başıma :D dizi izliyordum yarıda kestim neyse devam edeyim diziye, sonra bakarım buna, 3 ve 4 değerlerini ver kendin bak istersen mesela 3 için google'ın verdiği sonuç;

1 - (3^2/2!) + (3^4/4!) - (3^6/6!) + (3^8/8!) - (3^10/10!) + (3^12/12!)

Benim algoritma da aynı sonucu veriyor. Hata göremiyorum algoritmada ama dediğin gibi cos değerini de vermiyor. Neden 12'de kestin dersen çünkü 3^14/14! 0.0001'den küçük.
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
yok yaptığın değer doğru zaten ona bişey demiyorum ama, ifade cos(x) değerini verecekmiş. x değerini bizden alacak mesela 60 girdik cos(60)=0.5 değerini bize vermesi gerek.

soruyu ödev veren doçent saolsun bizi pc başına hapsetti :) ama bi türlü cos değerlerini sağlamıyor. ne türlü fantaziler denedim cos(x) e tahmin bile edemezsiniz :) ama olmuyor işte :)
 

__kadıköyRAP__

Müdavim
Müdavim
Katılım
3 Mart 2007
Mesajlar
29,201
Reaksiyon puanı
2,148
Puanları
7,358
yok yaptığın değer doğru zaten ona bişey demiyorum ama, ifade cos(x) değerini verecekmiş. x değerini bizden alacak mesela 60 girdik cos(60)=0.5 değerini bize vermesi gerek.

soruyu ödev veren doçent saolsun bizi pc başına hapsetti :) ama bi türlü cos değerlerini sağlamıyor. ne türlü fantaziler denedim cos(x) e tahmin bile edemezsiniz :) ama olmuyor işte :)

Olay şuymuş, radyan olarak hesaplıyor bu meret :)

Ancak düzgün sonuçları 32'ye kadar verebiliyor bende ancak, sanırım hesaplama kapasitesi yetmiyor 32'den sonra saçmalıyor.

Aç bilimsel hesap makinesini 32'ye kadar hesaplat cosinüslerini radyan cinsinden, tuttuğunu göreceksin.

--- Mesaj Güncellendi ---

Dereceyi girdikten sonra radyan'a dönüştürmek lazım.

PI sayısını tanımlamamız lazım ister en üste #include<stdio.h> altına yazarsın #define PI 3.141592654 diye ya da bunu görmediyseniz double PI = 3.141592654 diye tanımlarsın. scanf ile x i aldıktan sonra x = x * (PI/180) formülü ile radyana dönüştürürsün oldu bitti.

Kod:
#include<stdio.h>
#define PI 3.141592654
double fakto(double f)
{
   double carpim=1,deger;
   for(deger=f; deger>1; deger--)
   {
      carpim*=deger;
   }
   return carpim;
}
main()
{
   double x;
   
   printf("X değeri:");
   scanf("%lf", &x);

   x = x * (PI/180);

   double k,toplam=1,pay=x*x,payda=fakto(2),carpan=-1;

   for(k=4;(pay/payda)>0.0000001;k+=2) // 0.0001 yerine 0.0000001 yaptım hassasiyeti arttırdım, daha doğru sonuçlar veriyor
   {
      //printf("%lf/%lf = %lf değeriyle döngüye giriliyor\n", pay, payda, pay/payda); // bu satıra gerek yok artık
      toplam+=carpan*(pay/payda);
      pay*=x*x;
      payda=fakto(k);
      carpan*=-1; // bir artı bir eksi olan yer burası
   }

   printf("Toplam: %lf\n", toplam);
   
}

Şimdi hesapla bakalım cos(60) :)
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
programın çalışıyor eline sağlık. define komutunu gördük kolay bişey zaten ama

ordaki ortadaki main() komutunu görmedik. main i tek kullandığımız yer en başta int main (void) şeklinde oldu. Mantığını az çok anlar gibi oldum ama o main() olayında kopuyorum
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
598
Reaksiyon puanı
5
Puanları
18
int main (void) de sen aynı şey, standart prosedür de geç :D

Fenasın... :D

neyse sen dizideyken biz anlatırız arkadaşa onun ne olduğunu sorun değil...

int main (void)
int main (int argc,char** argv)
int main ()

bak şimdi
ilk blok "int" bunun yani bu main adlı fonksiyonun bir int değer döndürdüğüne delalet etmektedir.
main bir fonksiyon ve bu fonksiyonu özel kılan tek şey adı değil...
her C++ (ve C) programınde önce main fonksiyonu çalıştırılır, yani ana fonksiyondur.

yazdığın fonksiyonlara ve sınıflara çağrıyı burdan yaparsın.

3 blok ise parantez içleri yani, fonksiyonun alıcağı argümanları belirler.
içi boş parantezler "()" ve içinde void yazan parantezler "(void)" aynı şeye işaret ediyor, fonksyonun argüman almadığına.

fakat abilerimiz demişlerki ya bu main fonksiyonu argüman da alsın, hani işletim sisteminden gelen şu parametreler varya "C:\hede hödö" -iki tiki tak tuk
gibi...
işte bu parametrelerin işlenmesi için iki argümanı yeterli görmüş bu "abiler", ilk argüman tahmin ettiğin gbi bir int ve main fonksiyonuna gönderilen parametrelerin sayısını vermekte, 2. argüman ise parametrelerin tutulduğu bir karakter katarı dizisi.
parametreler bu dizide tutuluyor işte.

rahatlıkla parametre kabul eden ve bu parametreyi işleyip ona göre davranan program yazabilirsin.

elbet hatalarım vardır, bende çok eski sayılmam programcılıkta, hafif sulu bir beyin, kendinde olmayan bi orta kulak ve bi çok tuşu kendinden geçmiş bir klavye ile yardımcı olmaya çalıştım, umarım açıklayabilmişimdir, hatalarımı burdaki abilerimiz düzeltsinler, sende aramıza hoş geldin bu arada. :D
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
teşekkürler arkadaşlar. bu ödevi hocaya verdiğimiz gün hoca bu konuları anlattı :)
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
598
Reaksiyon puanı
5
Puanları
18
peki baktım bilmediğim konu var çaktırmadan paslarım :D

estafurullah, sen konu ayırmadan pasla işte, amaç genç nesle yön vermek. :D

"burda ki genç tabiri C++ daki düzeyimden kaynaklanıyor tabi" :D

konunun ehli kaç kişi var bilmiyorum ama php ile aram iyi, tamamen php'ye yoğunlaşsam iş olanaklarım neler olur, freelance projeler vs ?
bilgisi olan abilerimiz ablalarımız bi aydınlatabilirmi acaba ?
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
arkadaşlar şu koddaki yalnışlık nerde bi yardım edin.

1ffy8.png
bu işlemin sonucu verecek.

kod derleniyor ama sonuç hatalı çıkıyor.

Kod:
#include <stdio.h>
#include <math.h>
float seri(float x, int n);
int main(void)
{
    float x;
    int n;
printf("x ve n degerlerini giriniz: ");
scanf("%f%d",&x,&n);
printf("sonuc %f", seri(x,n));
getch();    
return 0;
}


float seri(float x, int n)
{
    float terim,sonuc;
    int z=2,y;
    
    for(y=1;y<=(2*n-1);y=y+2);
     {
       terim=y/pow(x,z);
       sonuc=sonuc+terim;
       z=z+2;
     }
     return(sonuc);
}
 

__kadıköyRAP__

Müdavim
Müdavim
Katılım
3 Mart 2007
Mesajlar
29,201
Reaksiyon puanı
2,148
Puanları
7,358
float seri(float x, int n) fonksiyonunu iki kere tanımlamışsın, baştaki boş olanı sil
 

cobra11

Müdavim
Müdavim
Katılım
28 Haziran 2009
Mesajlar
4,659
Reaksiyon puanı
16
Puanları
218
baştaki float seri(float x, int n) fonksiyonunu silince alttakinde hata veriyor. ben üsttekinde fonksiyon tanımlamadım prototip girdim zaten sonunda ; var yani işlemi ordan bitirdim. float seri(float x, int n) şeklinde bi işlem gelecek haberin olsun şeklinde bi işlemdi baştaki
 

__kadıköyRAP__

Müdavim
Müdavim
Katılım
3 Mart 2007
Mesajlar
29,201
Reaksiyon puanı
2,148
Puanları
7,358
float seri fonksiyonunu main fonksiyonun üstüne yazmayı dene sen yine de

--- Mesaj Güncellendi ---

şu yani

Kod:
#include <stdio.h>
#include <math.h>
float seri(float x, int n)
{
    float terim,sonuc;
    int z=2,y;
    
    for(y=1;y<=(2*n-1);y=y+2);
     {
       terim=y/pow(x,z);
       sonuc=sonuc+terim;
       z=z+2;
     }
     return(sonuc);
}
int main(void)
{
    float x;
    int n;
printf("x ve n degerlerini giriniz: ");
scanf("%f%d",&x,&n);
printf("sonuc %f", seri(x,n));
getch();    
return 0;
}

olmazsa algoritmayı bi inceleriz :)
 

VincentVega

Profesör
Katılım
29 Ağustos 2007
Mesajlar
2,666
Reaksiyon puanı
3
Puanları
218
algoritma da hata yok gibi görünüyor seri fonksiyonu da doğru yapılmış.

edit: seri fonksiyonunu printf dışında deneyip öyle yazdırsana bakalım nolacak
 

__kadıköyRAP__

Müdavim
Müdavim
Katılım
3 Mart 2007
Mesajlar
29,201
Reaksiyon puanı
2,148
Puanları
7,358
işe önce şu for'un sonundaki noktalı virgülü kaldırarak başla

--- Mesaj Güncellendi ---

sonuc değerine de başlangıç olarak 0 ata tamamdır :)
 
Üst