C# yeni bir akım başlatıyorum 3

NightBreather

Katılımcı Üye
21 Ağu 2016
591
0
Diğer konular
http://www.turkhackteam.org/c-j-vb-net-net-dilleri/1396326-c-yeni-bir-akim-baslatiyorum.html
http://www.turkhackteam.org/c-j-vb-net-net-dilleri/1396487-c-yeni-bir-akim-baslatiyorum-2-a.html

Soru 3 :
Evet arkadaşlar bu seferki soruda sizden istediğim şey bir sayının KareKökü'nü bulan bir algoritma. Tabiki bunu yaparken Math.Sqrt metodunu kullanmamanız lazım.

Düzeltme : Bu arada KareKök'ün sonucunu bulurken sadece tam kare sayıları bulması yeterli. Yani virgüllü sayıları da bulmasına gerek yok.

Örnek : Kök 9 = 3 şeklinde bulması yeterlidir.

Iste bana bole sorular lazim ama isteyim suan eve gidince bakarim
 

CrossfiederTR

Katılımcı Üye
17 Nis 2015
922
0
Double kullan virgül falan yok

double sayi;
Console.Write("Sayı :");
sayi = Convert.ToDouble (Console.ReadLine());
Console.WriteLine("{0} sayısının karekökü = {1 :K}", sayi, Math.Sqrt(sayi));
Console.ReadKey();
Console.ReadKey();

Bide for döngüsü var üslü sayı; direk olarak sayının karesini alıyo akşam onunda consol kısmını paylaşayım
 
Son düzenleme:

xenceri

Uzman üye
16 Ağu 2010
1,948
0
İstanbul
Double kullan virgül falan yok

double sayi;
Console.Write("Sayı :");
sayi = Convert.ToDouble (Console.ReadLine());
Console.WriteLine("{0} sayısının karekökü = {1 :K}", sayi, Math.Sqrt(sayi));
Console.ReadKey();
Console.ReadKey();

Yanlış cevap :D Kardeşim sen konunun formatını anlamamışsın galiba. İstersen ilk konuya göz atabilirsin. Orada açıklama var. Ayrıca Sqrt kullanmayın demiştim ve bu sorduğum soru bir yardım isteği değil :)
 

Drve

Katılımcı Üye
15 Tem 2016
557
0
C# bilmiyorum ama c++ da
böyle olması lazım
#include <stdio.h>
#include <windows.h>

**** kokbul(int a){

int i;
int j;
for(j=0;j<1;j++){

for(i=0;i<a;i++){

if(i*i==a){
printf("",i);
break;

}

}
if(i*i!=a){
system("color c");
printf("Girdiginiz sayinin karekoku bilinmemektedir.\n");
break;
}
if(i*i==a){
system("color a");
printf("Giridginiz sayinin karekoku %d dir.\n",i);
break;
}
}
}
int main(){

int b;
system("color f");
printf("Karekokunu ogrenmek istediginiz sayiyi giriniz.>");
scanf("%d",&b);
kokbul(b);
system("pause");

return 0;
}
 

xenceri

Uzman üye
16 Ağu 2010
1,948
0
İstanbul
C# bilmiyorum ama c++ da
böyle olması lazım
#include <stdio.h>
#include <windows.h>

**** kokbul(int a){

int i;
int j;
for(j=0;j<1;j++){

for(i=0;i<a;i++){

if(i*i==a){
printf("",i);
break;

}

}
if(i*i!=a){
system("color c");
printf("Girdiginiz sayinin karekoku bilinmemektedir.\n");
break;
}
if(i*i==a){
system("color a");
printf("Giridginiz sayinin karekoku %d dir.\n",i);
break;
}
}
}
int main(){

int b;
system("color f");
printf("Karekokunu ogrenmek istediginiz sayiyi giriniz.>");
scanf("%d",&b);
kokbul(b);
system("pause");

return 0;
}
Evet hocam bu kod bizi doğru sonuca götürür. Kodu özetleyecek olursak;
**** kokbul(int a)
{
int i;
int j;
for (j = 0; j < 1; j++)
{
for (i = 0; i < a; i++)
{
if (i * i == a)
{
break;
}
}
}
}
Bu kadarı bizim için ilk doğru algoritmadır.
 

xenceri

Uzman üye
16 Ağu 2010
1,948
0
İstanbul
Başka cevap yok gibi. O zaman bir algoritma da ben paylaşayım.
public double XNCRKokAl(float Sayi)
{
float Hassasiyet = 0.00001f;
float SayiYarila = Sayi / 2;
float SayiArttirYarila = (SayiYarila + 2) / 2;
float KokDene = SayiArttirYarila;
while (true)
{
double Carp =Math.Round((KokDene * KokDene),4);
if (Carp == Sayi)
{
return Math.Round(KokDene,4);
}
else if (Carp > Sayi)
{
KokDene = KokDene / 2;
}
else if (Carp < Sayi)
{
KokDene += Hassasiyet;
}
}
}
Algoritmayı açıklayayım biraz.
Öncelikle SayiArttirYarila değişkeni ile sayının yarısının 2 fazlasının yarısını alıp bir değişkene attım.
Böyle yapmamın nedeni bu sonuç her halükarda sayının kökünden büyük bir sayı çıkıyor ve köke biraz daha yakın bir sayı çıkıyor.
Sonrasında Carp diye bir değişken tanımlayıp bunu SayiArttirYarila *SayiArttirYarila değerine eşitledim ve Round ile virgülden 4 sonrasını sildim.
Sonrasında Carp değişkeninin Sayi ya eşit olup olmadığını kontrol ettim. Değilse bir aşağısında 2 tane kontrol daha var.
İlk kontrolde eğer sayı büyükse 2ye bölüp, doğru sonuca daha çabuk ulaşmasını sağladım. Büyükse de Hassasiyet değişkenini ekleyerek virgüllü kök değerlerini de bulmasını sağladım.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.