PDA

Tam Sürümünü Görmek İçin : Kafayı yiyecem!!!


C.d.
08/07/2004, 00:22
Beyler demin bir örnek kod buldum ama bir türlü çözemedim.
Kod sizden iki tane sayı alıyor (x,y) ve x in y derecesinden kuvvetini buluyor ama kodu bir türlü anlıyamadım nasıl oluyorda oluyor biri anlatabilir mi nasıl x i y derecesinden kuvvetini alıyor yav.

#include<stdio.h>
int main()
{
int i,x,y,kuvvet,c;
i=1;
kuvvet=1;
printf("iki sayi girin\n");
scanf ("%d%d",&x,&y);
while(i<=y){
kuvvet=kuvvet*x;
i=i+1;
}
printf ("Kuvvet %d\n",kuvvet);
scanf("%d",&c);
return 0;
}


C.d.
08/07/2004, 00:23
O sondaki c yine ekran kapanmasın diye koydum yani ona bakmayın siz.

JJ
08/07/2004, 01:06
while(i<=y){
kuvvet=kuvvet*x;
i=i+1;
}
simdi bu su demek oluyor.
i, y'den kucuk veya esit oldugu surece sunu yap: [ kuvveti x'le carp, i'yi 1 artir ]
burada i 1den basladigina gore while icindeki is toplam y kere yapiliyor, yani kuvvet y kere xle carpilmis oluyor, yani kuvvet = x^y

C.d.
08/07/2004, 01:22
Uff kavrıyamadım hala ya o satırın demek istediğini anladım aynı senin dediğin gibi ama i ile ne alak oluyo da x in y kere kendiyle çarpılacağını anlıyo uggff beynim ısındı.

acehreli
08/07/2004, 01:30
Bazi adlarin yanlis secilmis olmalari da anlamayi guclestirmis olabilir. En azindan 'kuvvet' denen sey aslinda 'sonuc'... Ben programi soyle degistirdim:


#include<stdio.h>

int kuvvetini_al(int sayi, int kuvvet)
{
int sonuc = 1;

int i;
for (i = 0; i != kuvvet; ++i)
{
sonuc *= sayi;
}

return sonuc;
}

int main()
{
int sayi, kuvvet;

printf("iki sayi girin\n");
scanf ("%d%d", &sayi, &kuvvet);
printf ("Sonuc= %d\n", kuvvetini_al(sayi, kuvvet));

return 0;
}


Sonra biraz daha ileri gidip kodu daha da guzellestirdim: (Kendimce tabii... Cunku guzellik zaten gorecedir :) ):


#include<stdio.h>

int sayi_oku(char const * soru)
{
int sayi;
printf("%s? ", soru);
scanf("%d", &sayi);
return sayi;
}

int kuvvetini_al(int sayi, int kuvvet)
{
int sonuc = 1;

int i;
for (i = 0; i != kuvvet; ++i)
{
sonuc *= sayi;
}

return sonuc;
}

int main()
{
int const sayi = sayi_oku("Sayi");
int const kuvvet = sayi_oku("Kuvvet");

printf ("Sonuc: %d\n", kuvvetini_al(sayi, kuvvet));

return 0;
}


Ali

JJ
08/07/2004, 01:35
simdi, while'i anlatiyim ben sana.

while'in bir () kismi, bir de {} kismi var. () icine bir kosul yerlestirilir, {} icine ise her turlu kod.

while satirina gelindiginde () icindeki kosul kontrol edilir. ornekte i<=y. diyelim ki y=3. bu durumda i=1 oldugundan 1<=3 dogrudur ve {} icine girilir.

kuvvet = kuvvet * x;
x'in de 2 oldugunu varsayalim. kuvvet en basta 1 oldugu icin kuvvet = 1 * 2; yani kuvvet 2 olur.

i=i+1; ile de i = 1+1; i 2 olur yani 1 artmis olur.

simdi {} icindeki kod bitince tekrar () icindeki kosul kontrol edilir. dogruysa tekrar {} icine girilir, ta ki kosul yanlis oluncaya dek.

eger iceriye i'yi artirma kodu konmasaydi i<=y hep dogru kalacagi icin sonsuza dek {} icindeki kod tekrar tekrar calisirdi.

nerde kalmistik, en son 2. kez kontrol ediyorduk i<=y'yi. i simdi 2. 2<=3 oldugundan iceri gireriz, kuvvet = 2 * 2; kuvvet 4 olur. i 1 artar 3 olur.

yine kosul kontrol edilir, 3<=3. kuvvet = 4 * 2; 8 oldu. i artti 4 oldu.

simdiiii...
i 4, y 3 oldugundan i<=y yanlistir ve artik while ici calistirilmaz. }'den sonraya bakilir ve ordan deva eder program. while'dan ciktigimizda kuvvet 8'di. yani x^y=2^3=8

JJ
08/07/2004, 01:41
ben de kuvvetini_al(int sayi, int kuvvet) islevini kendimce guzellestirdim:


double kuvvetini_al(int sayi, int kuvvet) {
if(kuvvet == 0) return 1;
if(kuvvet > 0) return kuvvetini_al(sayi, kuvvet-1) * sayi;
return kuvvetini_al(sayi, kuvvet+1) / sayi;
}

selami_32
08/07/2004, 08:42
arkadaşların kodları çok güzel. ben böyle şeyler yazamadığım için sadece pasif olarak satırları tek tek açıklamaya çalışacam:
#include<stdio.h> // stdio.h kütüphanesini al
int main() // ana fonksiyonun başlangıcı
{
int i,x,y,kuvvet,c; //i, x, y, kuvvet, c değişkenlerini integer olarak tanımla
i=1; // i ye 1 değeri ata
kuvvet=1; // kuvvet e de 1 değerini
printf("iki sayi girin\n"); // ekrana "iki sayı girin" yaz sonra entere bas "\n"
scanf ("%d%d",&x,&y); // ekrandan x ve y'yi oku
while(i<=y){ // i değişkeni y den küçük ve eşit olduğu sürece tekrarla
kuvvet=kuvvet*x; // kuvvet eşittir kendisinin x değeri ile çarpımı
i=i+1; // i yi bir artır
}
printf ("Kuvvet %d\n",kuvvet); //kuvveti yaz
scanf("%d",&c); // bunu sen yazmışsın :p
return 0;
}

falan. hata varsa belirtin arkadaşa yanlış anlatmayalım.

C.d.
08/07/2004, 19:09
Anam anladım galiba ehüeh while 'a biraz daha dikkat etmem gerekirdi sağolun.