Çözüldü C# girilen 100 sayıdan kaç tanesinin asal olduğunu bulan programlama

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

Alparslan Keskin

Hectopat
Katılım
9 Şubat 2021
Mesajlar
156
Yer
Ankara
Daha fazla  
Sistem Özellikleri
Nvidia Geforce GTX 1050 - İntel Core İ7 7700HQ - 16 Gb Ram - 1 TB HDD
Cinsiyet
Erkek
Meslek
Öğrenci
Console uygulaması üzerinden yapmaya çalışıyorum çok sıkıntı yaşıyorum yardımcı olabilecek var mı?
 
Çözüm
Direkt kodları vermeye karşıyım. Her programlama konusunda yazarım bunu. Yine bunu belirtip algoritmaya geçelim.

Öncelikle ihtiyacımız olan ne? Kullanıcıdan 100 tane sayı istemek.

O zaman bir isteme döngüsü oluşturuyoruz. Bir for döngüsüyle bunu yapabiliriz. İstenenleri bir de dizinin içine almamız gerekiyor. Dolayısıyla array[100] oluşturulmalı. Girilenleri diziye ekledikten sonra, kontrol aşaması başlıyor. Burada iki yöntem tercih edebiliriz. Birincisi kullanıcıdan girdiyi aldığı anda diziye eklemeden önce kontrol edip, eğer asalsa ayrı bir diziye eklettirebilir yada bir counter değişken atayıp, bu değişkeni arttırabiliriz. İkinci yöntem olarak, girdiler tamamlandıktan sonra yapabiliriz.

Eğer girdi esnasında kontrol edeceksek, for döngüsünün içine bir for döngüsüyle if yerleştirmemiz gerekiyor, girdi sonrasında kontrol edeceksek bahsettiğim for döngüsünü içiçe for döngüsü olarak ayriyeten yerleştirmemiz yeterli olacaktır.

Asal sayı nedir? 1 ve kendisinden başka bir sayıya tam bölünemeyen sayıya denir. 1'den büyük olmak zorundadır. Yani 1 girdisi gelirse asal değildir. 2 gelirse asaldır. Bunları da döngünün dışına bir kontrol olarak eklememiz gerek. Bundan sonra kendisine kadar olan tüm sayılarla bölerek asal olup olmadığını öğrenebiliriz. Ancak biliyoruz bir sayının yarısından fazlası olan herhangi bir sayı onu tam bölemez.

Örneğin; 8. Yarısı 4. 8/5 kesirli bölüm olacaktır. Bu sebeple ilk yarıyı kontrol ettikten sonrasını kontrol etmemize gerek yok. Bu da programda verimlilik demektir. arrayden çektiğimiz sayının yarısını başka bir değişkene atarız. Ardından for döngüsünü i<=sayımızın yarısı olacak şekilde ayarlarız. i++ dediğimizde de for döngüsü arttıkça ana sayımız i ye bölünmeli. O zaman array[j] ana sayımız olsun. Geçici bir değişkenimiz olsun, o da n olsun. n = array[j] % i. Neden normal bir şekilde bölmedim de mod kullandım? Mod bize bir sayının başka bir sayıya bölümünden kalan verir. Eğer sayı o sayıya tam bölünmüyorsa kalanı sıfır olmaz. if ile de bunu kontrol edeceğiz. if(n == 0) sonucu doğruysa program bu sayıyı diziye eklemeli yada sayacımızı arttırmalı. Buna kendin karar verirsin. E iş bitti hala bölmeye devam mı edecek? Hayır, tabii ki. break; yazmamız bizi döngüden çıkartacaktır. Şimdi tek bir sayıyı kontrol ettik iş bitti mi? Bitmedi. Bir başka for döngüsü (array[j] yazmamın sebebi bu ilk for döngüsü için) de arraydeki sayıları ilerletmek için. yani

for(j = 0; j<=99; j++) {
for(i = 0; i<= array [j] /2; i++) {
}
}
bizim döngümüz olacak. Aradaki kodları sen doldurursun.
Anlamadığın nokta olursa sorabilirsin.
Sikinti yasadigin nokta nedir?

Bu sekilde bir yardim istegi gorunce, ister istemez birisi odevini yaptirmaya calisiyor gibi dusunuyorum . Yanlis dusundugumden eminim ancak yine de su ana kadar denedigin seyleri paylasirsan senin icin daha faydali olacaktir.
 
Direkt kodları vermeye karşıyım. Her programlama konusunda yazarım bunu. Yine bunu belirtip algoritmaya geçelim.

Öncelikle ihtiyacımız olan ne? Kullanıcıdan 100 tane sayı istemek.

O zaman bir isteme döngüsü oluşturuyoruz. Bir for döngüsüyle bunu yapabiliriz. İstenenleri bir de dizinin içine almamız gerekiyor. Dolayısıyla array[100] oluşturulmalı. Girilenleri diziye ekledikten sonra, kontrol aşaması başlıyor. Burada iki yöntem tercih edebiliriz. Birincisi kullanıcıdan girdiyi aldığı anda diziye eklemeden önce kontrol edip, eğer asalsa ayrı bir diziye eklettirebilir yada bir counter değişken atayıp, bu değişkeni arttırabiliriz. İkinci yöntem olarak, girdiler tamamlandıktan sonra yapabiliriz.

Eğer girdi esnasında kontrol edeceksek, for döngüsünün içine bir for döngüsüyle if yerleştirmemiz gerekiyor, girdi sonrasında kontrol edeceksek bahsettiğim for döngüsünü içiçe for döngüsü olarak ayriyeten yerleştirmemiz yeterli olacaktır.

Asal sayı nedir? 1 ve kendisinden başka bir sayıya tam bölünemeyen sayıya denir. 1'den büyük olmak zorundadır. Yani 1 girdisi gelirse asal değildir. 2 gelirse asaldır. Bunları da döngünün dışına bir kontrol olarak eklememiz gerek. Bundan sonra kendisine kadar olan tüm sayılarla bölerek asal olup olmadığını öğrenebiliriz. Ancak biliyoruz bir sayının yarısından fazlası olan herhangi bir sayı onu tam bölemez.

Örneğin; 8. Yarısı 4. 8/5 kesirli bölüm olacaktır. Bu sebeple ilk yarıyı kontrol ettikten sonrasını kontrol etmemize gerek yok. Bu da programda verimlilik demektir. arrayden çektiğimiz sayının yarısını başka bir değişkene atarız. Ardından for döngüsünü i<=sayımızın yarısı olacak şekilde ayarlarız. i++ dediğimizde de for döngüsü arttıkça ana sayımız i ye bölünmeli. O zaman array[j] ana sayımız olsun. Geçici bir değişkenimiz olsun, o da n olsun. n = array[j] % i. Neden normal bir şekilde bölmedim de mod kullandım? Mod bize bir sayının başka bir sayıya bölümünden kalan verir. Eğer sayı o sayıya tam bölünmüyorsa kalanı sıfır olmaz. if ile de bunu kontrol edeceğiz. if(n == 0) sonucu doğruysa program bu sayıyı diziye eklemeli yada sayacımızı arttırmalı. Buna kendin karar verirsin. E iş bitti hala bölmeye devam mı edecek? Hayır, tabii ki. break; yazmamız bizi döngüden çıkartacaktır. Şimdi tek bir sayıyı kontrol ettik iş bitti mi? Bitmedi. Bir başka for döngüsü (array[j] yazmamın sebebi bu ilk for döngüsü için) de arraydeki sayıları ilerletmek için. yani

for(j = 0; j<=99; j++) {
for(i = 0; i<= array [j] /2; i++) {
}
}
bizim döngümüz olacak. Aradaki kodları sen doldurursun.
Anlamadığın nokta olursa sorabilirsin.
 
Çözüm

Gerçekten çok sağ ol çok yardımcı oldu.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…