#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
// fonksiyon tanımlamaları
_Bool asal_mi(int i);
_Bool herhangi_birini_bolen_sayi_mi(int sayilar[], int sayi);
_Bool hepsini_bolen_sayi_mi(int sayilar[], int sayi);
_Bool islem_tamamlanmis_mi(int sayilar[]);
int en_buyuk_sayi(int sayilar[]);
int global_hesaplanacak_sayi_sayisi = 0;
int main()
{
printf("OBEB ve OKEK hesabı yapılacak sayı miktarını giriniz: ");
scanf("%d", &global_hesaplanacak_sayi_sayisi);
while (global_hesaplanacak_sayi_sayisi > 10 || global_hesaplanacak_sayi_sayisi < 2)
{
printf("Girilen 'n' değeri 2 <= n <= 10 şartını sağlamıyor.");
printf("Tekrar sayı giriniz: ");
scanf("%d", &global_hesaplanacak_sayi_sayisi);
}
// Kullanıcıdan sayıar alınıyor:
int hesaplanacakSayilarDizisi[10];
for (size_t i = 0; i < global_hesaplanacak_sayi_sayisi; i++)
{
printf("%u. sayiyi giriniz: ", i+1);
int hesaplanacakSayi;
scanf("%d", &hesaplanacakSayi);
// kullanıcının girdiği sayı 0 ise,
// girilen sayı 1 olarak alınıyor
if(hesaplanacakSayi == 0)
{
hesaplanacakSayi = 1;
}
hesaplanacakSayilarDizisi[i] = hesaplanacakSayi;
}
printf("\n");
int obeb = 1;
int okek = 1;
_Bool isDone = 0;
printf("\n");
while (!isDone)
{
printf("\n");
for (int i = 0; i < global_hesaplanacak_sayi_sayisi; i++)
{
printf("%d", hesaplanacakSayilarDizisi[i]);
printf("\t");
// son eleman mı ?
if (i == global_hesaplanacak_sayi_sayisi - 1)
{
printf(" | ");
}
}
// alttaki döngü haddinden fazla çalışabilir
// dolayısıyla çalışması gerektiği kadar çalıştıktan sonra döngüden çıkmalıdır
const int dizidekiEnBuyukSayi = en_buyuk_sayi(hesaplanacakSayilarDizisi);
if(dizidekiEnBuyukSayi == 1)
{
// Bütün sayılar 1 olarak girilmiş
isDone = 1;
printf("1");
}
for (int i = 2; i <= dizidekiEnBuyukSayi; i++)
{
int counter = 0;
// i, asal sayı değilse uğraşmaya gerek yok
if (asal_mi(i))
{
// i asal sayı fakat herhangi birini bölm�yorsa uğraşmaya gerek yok
if (herhangi_birini_bolen_sayi_mi(hesaplanacakSayilarDizisi, i))
{
//printf(i);
printf("%d", i);
// BAŞLANGIÇ: OBEB & OKEK HESAP
// her şekilde, her bir bölen OKEK hesabı için kullanılır
if (hepsini_bolen_sayi_mi(hesaplanacakSayilarDizisi, i))
{
// Yalnızca hepsini bölüyorsa OBEB hesabı için kullanılır
printf("+");
obeb = obeb * i;
okek = okek * i;
}
else
{
okek = okek * i;
}
// BÜTÜN: OBEB & OKEK HESAP
for (int j = 0; j < global_hesaplanacak_sayi_sayisi; j++)
{
if (hesaplanacakSayilarDizisi[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.
hesaplanacakSayilarDizisi[j] = hesaplanacakSayilarDizisi[j] / i;
}
counter++;
}
}
}
if (counter == global_hesaplanacak_sayi_sayisi)
{
// eğer bütün sayılar 1 ise işlem bitmiş demektir, isDone true yapılmalı
isDone = islem_tamamlanmis_mi(hesaplanacakSayilarDizisi);
// haddinden fazla çalışabilecek döngünün sonlandırılması:
break;
}
}
}
// 1'ler g�steriliyor.
printf("\n");
for (int i = 0; i < global_hesaplanacak_sayi_sayisi; i++)
{
printf("%d", hesaplanacakSayilarDizisi[i]);
printf("\t");
}
printf("\nOBEB: %d", obeb);
printf("\nOKEK %d", okek);
return 0;
}
_Bool asal_mi(int sayi)
{
int bolenSayisi = 0;
for (int i = 2; i <= sayi; i++)
{
if (sayi % i == 0)
{
bolenSayisi += 1;
}
}
return bolenSayisi == 1;
}
_Bool hepsini_bolen_sayi_mi(int sayilar[], int sayi)
{
int bolunenSayiSayisi = 0;
for (int i = 0; i < global_hesaplanacak_sayi_sayisi; ++i)
{
if(sayilar[i] % sayi == 0)
{
bolunenSayiSayisi++;
}
}
if (bolunenSayiSayisi == global_hesaplanacak_sayi_sayisi)
return 1;
else
return 0;
}
_Bool herhangi_birini_bolen_sayi_mi(int sayilar[], int sayi)
{
for (int i = 0; i < global_hesaplanacak_sayi_sayisi; ++i)
{
if (sayilar[i] % sayi == 0)
{
return 1;
}
}
return 0;
}
_Bool islem_tamamlanmis_mi(int sayilar[])
{
for (int i = 0; i < global_hesaplanacak_sayi_sayisi; ++i)
{
if (sayilar[i] != 1)
{
return 0;
}
}
return 1;
}
int en_buyuk_sayi(int sayilar[])
{
int sayi = 0;
for (int i = 0; i < global_hesaplanacak_sayi_sayisi; ++i)
{
if (sayilar[i] > sayi)
sayi = sayilar[i];
}
return sayi;
}
Hiç yorum yok:
Yorum Gönder