Program n tane sayının obeb ve okek değerini yapılan işlemleri adım adım göstererek bulur.
Program Çıktısı

#include stdio.h
#include conio.h
#include locale.h
/// FONKSİYON prototipleri
int asalMi(int sayi);
int kontrolEt(int *sayiListe, int uzunluk);
void obebokekHesapla(int *sayiListe,int n);
int main()
{
setlocale(LC_ALL, "Turkish"); /// türkçe dil
int n = 0;
printf("Kaç tane sayının OBEB ve OKEK değeri hesaplanacak:");
scanf("%d", &n); /// n değerini kullanıcıdan iste
int sayiListe[n]; /// sayi dizisini n uzunluğunda oluştur
memset(sayiListe, 0, sizeof sayiListe); /// diziyi 0 la doldur
for (int i = 0; i < n; i++) /// n tane sayıyı diziye al
{
printf("%d.Sayıyı giriniz:", i + 1);
scanf("%d", &sayiListe[i]);
}
printf("\n=|= Obeb ve Okek Hesaplama Sonuçları =|=\n\n");
obebokekHesapla(sayiListe,n); /// obeb okek hesaplama algosuna dizi ve n uzunluğunu ver
getch(); /// programın kapanması için bir tuşa basılmasını bekle!
}
int kontrolEt(int *sayiListe, int uzunluk)
{
for (int i = 0; i < uzunluk; i++) // liste uzunluğunca dön
{
if (sayiListe[i] != 1) // 1 den farklı elamana sahipse henüz olmamış
return 0;
}
return 1; //bütün elamanları 1 se doğru dön
}
void obebokekHesapla(int *sayiListe,int n)
{
int sayiListeTemp[n]; // 1. sayı dışında tam bölünmeyenleri sonra yazdırmak için temp dizisi tanımlıyoruz (sayı dizimiz uzunluğunda)
memset(sayiListeTemp, 0, sizeof sayiListeTemp); /// diziyi 0 la doldur
int okek = 1, obeb = 1;
int asalSayi = 2, sira = 0, eslesmeSay = 0, tempSay = 0;
/// Obeb ve Okek listelemeli hesaplama algoritması
while (!(sira == n && kontrolEt(sayiListe, n))) /// döngüden çıkış şartı
{
sira = sira == n ? 0 : sira; /// sira n sayısına ulaşınca sıfırla
eslesmeSay = sira == 0 ? 0 : eslesmeSay; /// sira sıfırsa eslesmeyide sıfırla
if (sayiListe[sira] % asalSayi == 0) /// kalansız mı diye bak
{
eslesmeSay++;
if (sira == 0) /// liste başındaki sayı ise direk yaz
{
printf("%d\t", sayiListe[sira]);
sayiListe[sira] /= asalSayi; /// işlemi yap orjinal sayıyla değiştir.
}
else
{
sayiListeTemp[tempSay] = sayiListe[sira]; // yedekle sonra yazmak için
sayiListe[sira] /= asalSayi; /// işlemi yap orjinal sayıyla değiştir.
tempSay++; /// temp indexini artır
}
sira++; /// bir sonraki sayıya geç
}
else /// kalanlıysa
{
sayiListeTemp[tempSay] = sayiListe[sira]; /// yedekle sonra yazmak için
tempSay++;
sira++; /// bir sonraki sayıya geç
}
if (sira == n) /// liste sonundaysak
{
if (eslesmeSay > 0) /// eşleşme olmuşsa
{
for (int i = 0; i < tempSay; i++) /// temp sayacı kadar dön
{
printf("%d\t", sayiListeTemp[i]); /// tempdeki kalansız bölünmeyen sayıları yaz
}
printf("| %d\n", asalSayi); /// kullanılan asal sayıyı yaz
okek *= asalSayi; /// okek hesapla
}
else if (eslesmeSay != n) ///bütün sayılarda kalansız bölünmediyse bir sonraki asalı ara
{
do
{
asalSayi++;
} while (!asalMi(asalSayi)); /// bir sonraki asal sayıya geç
}
tempSay = 0; // temp sayacı sıfırla
}
obeb = eslesmeSay == n ? obeb * asalSayi : obeb; /// tam eşleşmede obeb hesapla
}
printf("\n");
printf("Girilen Sayıların OBEB değeri = %d\n", obeb); /// hesaplanan obeb sonucunu yaz
printf("Girilen Sayıların OKEK değeri = %d\n", okek); /// hesaplanan okek sonucunu yaz
}
int asalMi(int sayi)
{
/// asal sayı sadece kendisine ve 1 sayısına bölünebilen sayılara denir..
for(int i = 2; i < sayi; i++) /// 2 den başla sayının kendisine kadar dön
{
if(sayi % i == 0) /// kalansız bölünüyorsa
if(sayi != i) /// bölündüğü sayı kendisi değilse
return 0; /// yanlış
}
return 1; /// döngüden çıkabilirse doğru
}



Yorum Gönder
Yorum Kuralları
1) Küfürlü, siyasi ya da huzur bozucu yorumlar yapmayınız.
2) Konu ile alakalı yorumlar yapınız.
3) Reklam linkleri ve spam mesajlar atmayınız.
* Attığınız yorumlar moderatör kontrolünden sonra yayınlanacaktır.
* Yukarıdaki kurallara uymazsanız sitemizden engellenebilirsiniz.