22 Şubat 2017 Çarşamba

Obeb Okek Hesabı - C#

 

//uygulamayı internet üzerinden çalıştırmak isterseniz: https://repl.it/@primalshade/OBEB-OKEK-C using System; using System.CodeDom; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.Eventing.Reader; using System.Dynamic; using System.Linq; using System.Net.NetworkInformation; using System.Runtime.InteropServices; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; namespace Okek { public class Program { static void Main(string[] args) { Console.WriteLine("OBEB ve OKEK hesaplaması yapılacak sayı adedini giriniz."); string userInputString = Console.ReadLine(); while (int.Parse(userInputString) > 10 || int.Parse(userInputString) < 2) { Console.WriteLine("Girilen 'n' değeri 2 <= n <= 10 şartını sağlamıyor."); Console.Write("Tekrar sayı giriniz: "); userInputString = Console.ReadLine(); } int numbersCount = int.Parse(userInputString); var inputNumbers = new int[numbersCount]; for (int i = 0; i < numbersCount; i++) { Console.Write($"{i + 1}. sayıyı giriniz: "); int ithNumber = int.Parse(Console.ReadLine()); // kullanıcı 0 sayısı girerse, sayı 1 olarak alınıyor (örnek uygulamada da böyle) if (ithNumber == 0) { ithNumber = 1; } inputNumbers[i] = ithNumber; } Console.WriteLine(); //geçici //int[] inputNumbers = { 5, 10, 13 }; //int[] inputNumbers = { 255, 125}; //int numbersCount = inputNumbers.Length; int obeb = 1; int okek = 1; Console.WriteLine(); bool isDone = false;
while (!isDone) { Console.WriteLine(); for (int i = 0; i < numbersCount; i++) { Console.Write(inputNumbers[i]); Console.Write("\t"); // son eleman mı ? if (i == numbersCount - 1) { // evet. Console.Write(" | "); } } // bu döngü haddinden fazla çalışabilir // dolayısıyla çalışması gerektiği kadar çalıştıktan sonra döngüden çıkılmalıdır int maxNumber = inputNumbers.Max(); if (maxNumber == 1) { // dizideki en büyük sayı 1 ise, adam 1, 1, 1, .. şeklinde girmiş olmalı Console.Write("1"); isDone = true; } for (int i = 2; i <= maxNumber; i++) { int counter = 0; // konsola yazılan sayı adeti // i, asal sayı değilse uğraşmaya gerek oyk if (IsPrime(i)) { // i asal sayı fakat herhangi birini bölmüyorsa uğraşmaya gerek yok if (HerhangiBiriniBolenMi(inputNumbers, i)) { Console.Write(i); // BAŞLANGIÇ: OBEB & OKEK HESAP // her halükarda, her bir bölen OKEK hesabı için kullanılır if (HepsiniBolenMi(inputNumbers, i)) { // Yalnızca hepsini bölüyorsa OBEB hesabı için kullanılır Console.Write("+"); obeb = obeb * i; okek = okek * i; } else { okek = okek * i; } // BİTİŞ: OBEB & OKEK HESAP for (int j = 0; j < numbersCount; j++) { if (inputNumbers[j] % i == 0) { // Dizi içindeki i ile kalansız bölünebilen sayıları i'ye bölüyoruz. // Yeni sayıyı bölünen sayı ile değiştiriyoruz. inputNumbers[j] = inputNumbers[j] / i; } counter++; } } } if (counter == numbersCount) { // eğer bütün sayılar 1 ise işlem bitmiş demektir // isDone true yapılmalı isDone = inputNumbers.All(t => t == 1); // haddinden fazla çalışabilecek döngünün sonlandırılması break; } } } Console.WriteLine(); for (int i = 0; i < inputNumbers.Length; i++) { Console.Write(inputNumbers[i]); Console.Write("\t"); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("OBEB " + obeb); Console.WriteLine("OKEK " + okek); } public static bool HepsiniBolenMi(int[] numbers, int hepsiniBolecekSayi) { int toplamSayiSayisi = numbers.Length; int bolunenSayiSayisi = 0; foreach (var number in numbers) { if (number % hepsiniBolecekSayi == 0) { bolunenSayiSayisi = bolunenSayiSayisi + 1; } } if (bolunenSayiSayisi == toplamSayiSayisi) return true; else return false; } public static bool HerhangiBiriniBolenMi(int[] numbers, int bolecekOlanSayi) { foreach (var number in numbers) { if (number % bolecekOlanSayi == 0) return true; } return false; } public static bool IsPrime(int number) { int bolenSayisi = 0; for (int i = 2; i <= number; i++) { if (number % i == 0) { bolenSayisi += 1; } } return bolenSayisi == 1; } } }

Hiç yorum yok:

Yorum Gönder