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.