if (p>q) {i=p;p=q;q=i;} eğer p, q'dan büyük ise p'yi q, q'yu da p yapıyor. i=q/p; //az once q'yu hep buyuk olacak sekilde ayarlamıstı simdi de i'yi q/p'ye eşitliyor. do{k=p*i; i=i+1; }while ( k%q!=0); k sayısının q'ya bölümü 0 değilken. q/p olan i'yi bir p ile çarpıyor ve bunu k ya eşitliyor. k'nın q'ya bölümü sıfır olana kadar devam ediyor. sonra da fonksiyon değeri k'ya dönüyor.
şimdi bir örnek yaparsak
diyelim p=16 q=24 if bakacak p,q'dan büyük mü diye burada değil. o yüzden if kısmını es geçecek. i=24/16= 1 sonucu i(integer olduğu için 1 olacak). şimdi do ya devam. k=16*1 i=i+1(burada i'yi bir arttırıyor) while (k%q!=0) (şimdi 16%24 sıfıra eşit değil while koşulu sağlandı,gene do'ya geri döner.) k=16*2(i'yi bir arttırmıştı.) (32%24 gene eşitlik sağlanmadı) do'ya geri döner. k=16*3(48%24) evet 48'in 24'e bölümünden kalan sıfır. while koşulu sağlanamadı. do döngüsü kırıldı. return k( fonksiyonun değerini 48 olarak ayarlar)
boylece int(16,24)=48 olur ki 16 ve 24'nin en küçük ortak katı 48'dir.
/* Öncelikle şunu söyliyeyim ben bu işte çok acemiyim. Anladığım kadarıyla açıklayayım. İki sayının okek'ini (ortak katların en küçüğü) bulan fonksiyon tanımlanmış */
int okek(int, int);
/* Burada okek fonksiyonuna girilen iki değişkenin de tam sayı olduğu beliritliyor */
int okek(int p, int q)
{ long i, k; // i ve k değişkenleri tanımlanmış.
/* Burada p değişkeni q dan büyükse i değişkeni yardımıyla p ile q nun değerleri birbiriyle değiştiriliyor. Niye? p>q ve q>p gibi durum söz konusudur. Böyle yapmazsa iki durum için ayrı kod yazmak */
if (p>q) { i=p; p=q; q=i; }
/* Şimdi burası çok önemli. Buradaki mantık şu: İki sayının okek'i, küçük olan sayının katlarından biridir. Eğer küçük sayının katı büyük sayının sayının da bir katı ise okek'i tesbit ediyor */
i=q/p; // Burada q, p'nin kaç katı olduğu tesbit ediliyor
do{ k=p*i; // Buradaki k öne sürülen koşulu gerçeklerse okek olacak i=i+1; // Öne sürülen koşul gerçeklenmez ise bir dahaki sefere bir fazlasıyla çarpılacak }while ( k%q!=0); // Küçük sayının katı büyük sayının da tam katı mı diye bakılıyor return k; // fonksiyon cevap olarak k yı (okek'i) verir.
int okek(int, int);
int okek(int p, int q)
{
long i, k;
if (p>q) {
i=p;
p=q;
q=i;
}
i=q/p;
do{
k=p*i;
i=i+1;
}while ( k%q!=0);
return k;