2010/3/5 papatya prenses <[email protected]>

> merhaba;
> 1den 100e kadar aralarında asal olan sayıları yazdırması için bir prog.
> yazdım. mantık olarak şöyle düşündüm; eğer obebleri 1 ise bu sayılar
> aralarında asaldır. önce divi fonksiyonunda obeblerini buluyor sonra mainde
> obeblerinin 1 olup olmadığını kontrol ediyor ve 1 ise yazdırıyor. sorum şu:
> nasıl bir mantık uygulayayım ki kodları daha kısa yazayım?
>
> kodlar şöyle:
>
> #include<stdio.h>
> #include<stdlib.h>
> int divi(int a,int b)
> {
>    int max,min;
>     if(a==0||b==0){
>         if(a>b)
>             return a;
>         else
>             return b;
>     }
>     else {
>         if(a<b){
>             min=a;
>             max=b;
>         }
>         else {
>             min=b;
>             max=a;
>             }
>
>     if(max%min==0)
>         return min;
>     else
>        return divi(max,max%min);
>    }}
>
> int main()
> {
>     for(int x=1;x<100;x++)
>         for(int y=1;y<100;y++){
>             if(divi(x,y)==1)
>                 printf("\\\\n%d %d\\\\n",x,y);
>                 }
>
>     system("pause");
>     return 0;
> }
>
> teşekkür ederim. iyi günler.
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
> su sekilde kodun daha kisa tutabilir eger istedigin buysa?

#include<stdio.h>
int divisible(int num, int by){
//bolunebilirligi test ediyoruz
        if (num%by == 0){
                return 1;
        }
        else{

                return 0;
        }
}
int main (){
        int x=0;
        int i,status;
        for (x=1;x<=100;x++){
// sayimizin durumunu ilk olarak asal kabul ediyourz
                status = 1;
                for (i=2;i<x;i++){
//eger kendisine gelene kadar her hangi bir boleni varsa 1 den baska
durumunu asal olmayana isaretliyoruz
                        if (divisible(x,i)){
                                        ;
                        }
                }
//durumu asal olmayan olarak isaretlenmisse yazdiriyoruz
                if (status != 0){
                        printf("%d\n",x);
                }
        }
return 0;
}

belki daha da kisaltilabilir.

-- 
Mustafa Arıcı
NEU Computer Engineering Student
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap