LEthaL
20/04/2003, 00:01
Assağıdaki program kodu sayinin süper asal sayı olup olmadığına bakıyor. Tabi seçilen yöne göre.
Mesela 311; yön olarak da sol seçilmiş olsun
311 -> asal
11 -> asal
1 -> asal
311 soldan süper asal
Mesela 733; yön olarak da sağ seçilmiş olsun
733 -> asal
73 -> asal
7 -> asal
733 sağdan süper asal.
Anlayamadığım nokta açıklama satırı ile belirttiğim yerlerin kaldırılınca programın çalışmaması.
Neden?
Başka bir program kodu var mı aklınıza gelen?
Renkli olsun diye böyle yapıştırdım kodu.
#include <stdio.h>
int basamakbul(int sayi)
{
int basamak=0;
while(sayi!=0)
{
sayi /=10;
++basamak;
}
return basamak;
}
int bolunecek(int sayi)
{
int bolunecek=1;
while(sayi!=0)
{
sayi /= 10;
bolunecek *= 10;
}
return bolunecek;
}
int isPrime(int sayi)
{
int i,dur;
for(i=2; i<=(int)(sayi/2); ++i)
if ( (sayi%i)==0 )
{
dur = 0;
break;
}
else
dur = 1;
return dur;
}
int dropDigit(int sayi, int yon)
{
if ((sayi/10)==0)
return sayi;
else
{
if (yon==1)
sayi /= 10;
else
if (yon==0)
sayi = sayi%(bolunecek(sayi)/10);
}
return sayi;
}
int isSuperprime(int sayi, int yon)
{
int basamak=basamakbul(sayi), dur;
for (;basamak>=0;basamak--)
{
sayi = dropDigit(sayi,yon);
// Ne mantiktir anlamadim gittti alttaki printf satirini kaldirin calismiyor
printf("");
if( ! isPrime(sayi) )
{
dur = 0;
break;
}
}
return dur;
}
void main()
{
static int baslangic, bitis;
int sayi, syc, yon, kactane;
clrscr();
printf("Baslangic degerini girin: ");
scanf("%d",&baslangic);
printf("\nBitis degerini girin: ");
scanf("%d",&bitis);
printf("\nHangi yonden isleme sokulsun (\"1\" sagdan \"0\" soldan): ");
scanf("%d",&yon);
for( syc=baslangic, kactane=0; syc <= bitis; ++syc )
{
if( isPrime(syc) )
{
// Ne mantiktir anlamadim gittti alttaki printf satirini kaldirin calismiyor
printf("");
if( isSuperprime(syc,yon) )
{
++kactane;
printf("%d\n",syc);
}
}
}
printf("\n%d-%d araliginda %d tane super asal sayi var.", baslangic, bitis, kactane);
getch();
}
Mesela 311; yön olarak da sol seçilmiş olsun
311 -> asal
11 -> asal
1 -> asal
311 soldan süper asal
Mesela 733; yön olarak da sağ seçilmiş olsun
733 -> asal
73 -> asal
7 -> asal
733 sağdan süper asal.
Anlayamadığım nokta açıklama satırı ile belirttiğim yerlerin kaldırılınca programın çalışmaması.
Neden?
Başka bir program kodu var mı aklınıza gelen?
Renkli olsun diye böyle yapıştırdım kodu.
#include <stdio.h>
int basamakbul(int sayi)
{
int basamak=0;
while(sayi!=0)
{
sayi /=10;
++basamak;
}
return basamak;
}
int bolunecek(int sayi)
{
int bolunecek=1;
while(sayi!=0)
{
sayi /= 10;
bolunecek *= 10;
}
return bolunecek;
}
int isPrime(int sayi)
{
int i,dur;
for(i=2; i<=(int)(sayi/2); ++i)
if ( (sayi%i)==0 )
{
dur = 0;
break;
}
else
dur = 1;
return dur;
}
int dropDigit(int sayi, int yon)
{
if ((sayi/10)==0)
return sayi;
else
{
if (yon==1)
sayi /= 10;
else
if (yon==0)
sayi = sayi%(bolunecek(sayi)/10);
}
return sayi;
}
int isSuperprime(int sayi, int yon)
{
int basamak=basamakbul(sayi), dur;
for (;basamak>=0;basamak--)
{
sayi = dropDigit(sayi,yon);
// Ne mantiktir anlamadim gittti alttaki printf satirini kaldirin calismiyor
printf("");
if( ! isPrime(sayi) )
{
dur = 0;
break;
}
}
return dur;
}
void main()
{
static int baslangic, bitis;
int sayi, syc, yon, kactane;
clrscr();
printf("Baslangic degerini girin: ");
scanf("%d",&baslangic);
printf("\nBitis degerini girin: ");
scanf("%d",&bitis);
printf("\nHangi yonden isleme sokulsun (\"1\" sagdan \"0\" soldan): ");
scanf("%d",&yon);
for( syc=baslangic, kactane=0; syc <= bitis; ++syc )
{
if( isPrime(syc) )
{
// Ne mantiktir anlamadim gittti alttaki printf satirini kaldirin calismiyor
printf("");
if( isSuperprime(syc,yon) )
{
++kactane;
printf("%d\n",syc);
}
}
}
printf("\n%d-%d araliginda %d tane super asal sayi var.", baslangic, bitis, kactane);
getch();
}