Fonksiyon Obeb - Okek

Başlatan egcodes, 22 Ocak 2011 - 21:34:45

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

egcodes

İki sayının obeb'ini ve okek'ini hesaplayan fonksiyonlar.

Kodları daha verimli yapmak için extra birşeyler ekledim.

http://egcodes.blogspot.com/2011/01/obeb-okek.html


int calc_obeb(int val1, int val2)
{
    if (val1 == val2)
        return val1;

    else if (val1 % val2 == 0)
        return val2;

    else if (val1 % val2 == 0)
        return val1;

    else {
        int i = val1 < val2 ? val1 : val2;

        for (; i != 1; i--)
            if (val1 % i == 0 && val2 % i == 0)
                return i;
    }
}






int calc_okek(int val1, int val2)
{
    if (val1 == val2)
        return val1;

    else if (val1 % val2 == 0)
        return val1;

    else if (val2 % val1 == 0)
        return val2;

    else {
        int i;
        int limit = val1 > val2 ? val1 : val2;
        int return_val = 1;
        int val1_temp = val1, val2_temp = val2;

        for (i = 2; i <= limit; i++) {

            while (val1_temp % i == 0 && val2_temp % i == 0) {
                val1_temp /= i;
                val2_temp /= i;
                return_val *= i;
            }

            while (val1_temp % i == 0) {
                val1_temp /= i;
                return_val *= i;
            }
                   
            while (val2_temp % i == 0) {
                val2_temp /= i;
                return_val *= i;
            }
        }

        return return_val;
    }
}

1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

noktakom

Hem tebrik hem de teşekkür ederiz. Bu tarz örnekler benim için faydalı oluyor. Hani diyorum, hazır elin değmişken; sin, cos gibi fonksyonların grafiklerini çizen bir örnek te yapabilir misin, acaba ? BU ara onu merak ediyorum da... nasıl yapılabilir bir fikrin var mı ?

egcodes

Aslında Matlab dili matematik ve grafik işlemleri için biçilmiş kaftan. C ' de grafik fonksiyonlarını bilmiyorum ayrı bir kütüphane o.

Ama sin cos hesaplamak için math.h isimli standart bir kütüphane var. Oradaki fonksiyonlar kullanılarak yapılabilir.
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

noktakom

Standart olmayan fonksyonların kütüphanelerini ayrıca mı eklemek gerekiyor derleyiciye ?

egcodes

Kaynak dosyana #include "/home/username/aaa.h" şeklinde kütüphanenin yerini göstermen gerekiyor.
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

noktakom

Nereden indiriliyorlar peki bunlar ?

egcodes

Belli bi adresi yok kütüphanelerin araştırmak lazım.
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

noktakom

Peki, cevap için sağol. Eğer o dediğin grafik fonksyonları için hangi kütüphanenin gerektiğini biliyorsan son olarak onu da söyleyebilir misin ? ona göre bulmaya çalışıcam çünkü.

egcodes

http://www.kadirga.k12.tr/egitim/c_programlama/ders.php-id=17.htm

Burada grafik fonksiyonların nasıl kullanıldığı anlatılmış. Ama yerini bilmiyorum. graphic.h isimli başlık dosyasını ekleyerek kullanılıyor. Yanılmıyorsam Turbo C'de bu grafik fonksiyonları içinde geliyordu.

Kolay gelsin
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

guestwho

Alıntı yapılan: hkndvc - 22 Ocak 2011 - 22:43:23
Peki, cevap için sağol. Eğer o dediğin grafik fonksyonları için hangi kütüphanenin gerektiğini biliyorsan son olarak onu da söyleyebilir misin ? ona göre bulmaya çalışıcam çünkü.

apt-cache search plot

    Özellikle "plotutils" paketi işini görecektir.

http://www.gnu.org/software/plotutils/
http://www.gnu.org/software/plotutils/manual/index.html
http://www.gnu.org/software/plotutils/manual/html_node/plotutils_50.html
You want weapons? We're in a library. Books are the best weapon in the world. This room's the greatest arsenal we could have. Arm yourself!

noktakom

@guestwho, yardımın için çok teşekkürler ..

viplime

Obeb okek'i ben şöyle buluyorum.



void FindObebOkek( int firstNumber , int secondNumber , int *obeb , int *okek )
{
     
     int i,
         first,
         second;
         
     SwitchNumbers( &firstNumber , &secondNumber );
     /* If first is bigger than second , the numbers will be switched. */
     
     for( i=1 ; i < secondNumber ; ++i )
         {
             
             first = firstNumber % i;
             
             second = secondNumber % i;
             
             if ( first == second )
             {
                 
              *obeb = i;
             
             }
         }
         
         *okek = (firstNumber * secondNumber) / *obeb;               
     
}


egcodes

Çok çeşidi var zaten bi yerde 4-5 satırda hesaplayan kodları görmüştüm :)
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

travego0403

#13
Sanırım bahsettiğiniz algoritma Euclid algoritması

obeb(int a, int b)
{
    if ( b == 0 )
        return a;
    else
        return obeb(b, a % b);
}


okek(a,b) = a.b / obeb(a,b)


Fonksiyon grafiklerini çizdirmek içinde OpenGL kullanabilirsin genelde oyun programlamak için kullanılan bir  grafik kütüphanesidir, biraz karışıktır ama matematiksel fonksiyonların grafiklerini çizmek basit, istersen bir kaç örnek verebilirim.


Düzeltme: Grafik kütüphanesi
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

sem

Alıntı yapılan: egcodes - 23 Nisan 2011 - 21:28:24
Çok çeşidi var zaten bi yerde 4-5 satırda hesaplayan kodları görmüştüm :)

Abi şu nasıl bir koddur peki =) Derlerken nano kullanmanızı öneririm.. Örneğin ben IDE olarak Eclipse kullanıyorum ve söz dizim hatası veriyor =) nano ve gcc ile sıkıntı yok... Enteresan;

#include <stdio.h>

main(t,_,a)
char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}


Şakası bir yana şu kodun mantığı nedir acaba?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

egcodes

Obfuscated C isimli bir yarışma var C kodlarını okunmaz hale getirerek bir iş yaptıran programlar yazıyosun.

Mesela aşağıda verdiğim kod kordinatları alıyor senden ve dünya haritası çizip nerede olduğunu işaretliyor.


        main(l
            ,a,n,d)char**a;{
         for(d=atoi(a[1])/10*80-
        atoi(a[2])/5-596;n="@NKA\
       CLCCGZAAQBEAADAFaISADJABBA^\
       SNLGAQABDAXIMBAACTBATAHDBAN\
       ZcEMMCCCCAAhEIJFAEAAABAfHJE\
       TBdFLDAANEfDNBPHdBcBBBEA_AL\
          H E L L O, W O R L D! "
          [l++-3];)for(;n-->64;)
             putchar(!d+++33^
                  l&1);}
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

sem

Bu kod "en kısa" ile başlayan bir dalda birinci olmuştu... Onu anımsıyorum...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

viplime

Alıntı yapılan: travego0403 - 23 Nisan 2011 - 21:37:22
Sanırım bahsettiğiniz algoritma Euclid algoritması

obeb(int a, int b)
{
    if ( b == 0 )
        return a;
    else
        return obeb(b, a % b);
}


okek(a,b) = a.b / obeb(a,b)


Fonksiyon grafiklerini çizdirmek içinde OpenGL kullanabilirsin genelde oyun programlamak için kullanılan bir  grafik kütüphanesidir, biraz karışıktır ama matematiksel fonksiyonların grafiklerini çizmek basit, istersen bir kaç örnek verebilirim.


Düzeltme: Grafik kütüphanesi

Kendini tekrarlayan fonksiyonlara güzel bir örnek olmuş. Paylaştığın için teşekkürler.Okuldada bu konuyu görmüştük en son :)

sem

Alıntı yapılan: viplime - 24 Nisan 2011 - 01:11:27
Kendini tekrarlayan fonksiyonlara güzel bir örnek olmuş. Paylaştığın için teşekkürler.Okuldada bu konuyu görmüştük en son :)

Bir başka örnek olarak;

http://forum.ubuntu-tr.net/index.php/topic,24911.msg298768.html#msg298768
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

travego0403

@viplime Rica ederim.Basit bir kod ama çok yararlı bir örnek.

Forumda programlama başlıklarından da en hareketli bölüm herhalde C/C++ bölümü.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

barış

Ben bir ara faktöryel yapmıştım ama unuttum nasıl olduğunu :D

viplime

Alıntı yapılan: barış - 24 Nisan 2011 - 11:23:05
Ben bir ara faktöryel yapmıştım ama unuttum nasıl olduğunu :D


int factorial(int n)
{
 
   if(n==0)
     
     return 1;

   else
     
     return ( n * factorial ( n - 1 ) );   
 
}




Bunu mu yapmıştın.

sem

Büyük ihtimal odur diye tahmiin ediyorum...
#include <stdio.h>

int fak(int a)
{
   if (a <1)
      return 1;
   else{
     return a *fak(a-1);
}
}

int main(int argc, char *argv[])
{
int result = fak(atoi(argv[1]));
fprintf(stdout, "%d\n", result);

}



Alıntı Yapsem0900@debian:~$ ./faktor 4
24
sem0900@debian:~$ ./faktor 5
120
sem0900@debian:~$ ./faktor 6
720

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

travego0403

Özyinelemeli fonksiyonlara başka örnekler, QuickSort (orjinal ismi sanırsam),  Fibbonacci(0,1,1,2,3,5,8....) dizisi verilebilir.

Ama bu yöntemi kullanırken dikkat etmek gerekir. Örneğin sıralama örneğinde bize hız kazandırırken, Fibbonacci dizisinin biraz büyük elemanlarını bulmak istediğimizde program oldukça yavaş çalışacaktır.Onun yerine bir döngü içerisinde sayıları kendinden önceki iki sayının toplamı olarak bulursak daha hızlı çalışan bir program yazabiliriz.

Faktöriyel örneğinde acaba özyinelemeli bir fonksiyon mu yoksa bir döngü içerisindeki hesaplamamı daha hızlı sonuç verir? :)
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman