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