Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > c yardım
Yazar
engineer58


avatar

Kayıt: 16.03.2006
29.07.2007-17:02 #25669
kendisine gönderilen bir sayinin basamaklari ile yazılabilecek tüm asal sayilari ekrana küçükten büyüğe doğru yazan bir işlev yazabilecek olan var mı( gösterici yada dizi kullanmadan) iki gündür uğraşıyorum çıkmadı yardım eden olursa sevinirim





Yazar
ogge


avatar
Vefa
Kayıt: 19.11.2006
29.07.2007-18:34 #25672
demek istediğin buysa;
312 için 2,3,13 (223,211 tekrar eden olurmu?)
verilen sayının basamaktaki sayıları bir dizide(dizisiz olmaz gibi) tut A dizisi. normal asal sayı bulma işlemini yap(2 den itibaren) ve asal sayıları bulurken kullandığın if deyimi içine for deyimi aç bu asal sayının basamaklarını, sağdan itibaren A dizisinde bulunup bulunmadığını kontrol et yoksa break de çık.(döngü sayısı=asal sayı basamak sayısı kadar) döngünün sonuna kadar geliniyorsa (sayıyı ekrana yazdır) bu asal sayı girilen sayının rakamlarından oluşur.(hem de küçükten büyüğe)... bilmem oldu gibi mi? anladığım kadarıyla böyle, yapamadıysan yardımcı olurum. gerçi dizi kullandık...





ogge®



Yazar
cracked


avatar
malatya
Kayıt: 27.11.2006
29.07.2007-21:29 #25691
sayı değerlerini bulmak için dizi kullanmak şart değil sayıyı sırayla 10 un katlarına bölüp kontrol ettirerek de sayı değerlerini bulabilirpeace





delilige vurdum...


Yazar
engineer58


avatar

Kayıt: 16.03.2006
29.07.2007-22:07 #25698
Çok teşekkür ederim ogge craked in dediği gibi 10 a bölme işlemiyle sayidaki rakamları elde ederek soruyu çözeriz sanırımhugs





Yazar
auzunun


avatar
Bursa
Kayıt: 15.01.2006
31.07.2007-10:28 #25753
Yapabilen yok mu ya ben de merak ettim.
Bir de rakamlar tekrar etmiyor değil mi?





Öldüremiyorsan, yaralama.
Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
31.07.2007-11:02 #25757
engineer58 sayesinde günler sonra c de kod yazmaya çalıştım.İlk başta kolay gibi görünüyor ama çok kıl bi soru.İşi bozan şey girilecek sayının kaç basamak olduğunun belli olmaması.Öyle bir for döngüsü yapmak gerekiyorki bütün sayılar için kullanılabilsin.Ben bayağı uğraştım baktım olmayacak vazgeçtim.Yapan varsa yazsın bende merak ediyorum cevabı.





More than one
Yazar
engineer58


avatar

Kayıt: 16.03.2006
31.07.2007-11:26 #25758
ben bir şeyler yaptım ama bir kaç kod daha eklenmesi gerekiyor galiba benim kodda girilen sayinin rakamlariyla yazılabilecek tüm sayiları dahil ediyo yani 2 sayısını 5 kere kullanabiliyo bu da kodun sonsuz döngü olmasına sebep oluyo buraya bir aynı sayı dan var mı gibi bir sınama lazım
bir de main deki for döngüsüyle 1000000 a kadar olan sayiları sınadım bunun yerine girilen bir sayının basamak değerleriyle yazılabilecek sayı kadar dönen bir döngü lazım ayrıca bu döngü de sayi asal olmasa bile döngünün bir sonraki turuna geçilmeli (continue lazım) bunları yapabilen olursa kodumuz tamam

#include <stdio.h>
#include <conio.h>
#include <ctype.h>


int is_prime(int);
int sorgu(int);
int fakt(int x);
int sinamak(int,int);
int basamak(int x);




int main()
{
int i ,deger;


printf("lutfen sayiyi gir
");
scanf("%d",&deger);
for(i = 0; i < 100000000; ++i)
if(sinamak(deger,i))
if(is_prime(i))
printf("%d ", i);




return 0;
}

/////////////////////////////////////////////////////////
int is_prime(int val)
{
int k;

if(val == 0 || val == 1)
return 0;
if(val % 2 == 0)
return val == 2;
if(val % 3 == 0)
return val== 3;
if( val % 5 == 0)
return val == 5;

for(k = 7; k * k <= val; k +=2)
if(val %k ==0)
return 0;
return 1;
}

////////////////////////////////////////////////////////////
int fakt(int x)
{
int i,fak;
fak= 1;
for(i = 2; i <= x; ++x)
fak *= i;
return fak;
}
///////////////////////////////////////////////////////////
int basamak(int x)
{
int i;
for(i = 1; x /= 10; ++i)
;
return i;
}
//////////////////////////////////////////////////////////
int sinamak (int x,int y)
{
int x1 = x, y1 = y,i;
int toplam = 0,j;

for(i = 0; i < basamak(y); ++i){
x1= x;
for(j = 0; j < basamak(x); ++j)
if(y1 % 10 == x1 % 10){
toplam ++;
x1 /= 10;
break;
}
else
x1 /= 10;
y1 /= 10;
}
return basamak(y) == toplam;
}
////////////////////////////////////////////////






Yazar
excellence


avatar

Kayıt: 09.07.2007
31.07.2007-12:20 #25760
Rekürsif bir yapı denediniz mi ?





Yazar
ceyhun


avatar
Amasya
Kayıt: 09.11.2006
01.08.2007-21:00 #25818
http://www.4shared.com/file/21134518/a73dcb06/deneme.html

Ben böle bise yaptım dogru calısıyodur isallah.














Yazar
ceyhun


avatar
Amasya
Kayıt: 09.11.2006
01.08.2007-22:01 #25831
Ya benimde engiineer58 ile aynı sorun varmıs.Girilen sayıda bi rakan birden fazla kullanılmıyosa dogru calısıyo.












Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
02.08.2007-12:22 #25866
Ceyhun bir de senin kod belli bir basamağa kadar çalışıyor.7 basamaklı bir sayı girdiğin zaman biyerde tıkanıyor.Ama ıraya kadar bile yazmak gerçekten iyi birşey bence.





More than one
Yazar
xceo


avatar
Bingöl
Kayıt: 13.09.2007
12.11.2007-23:33 #30365
engineer58 verdiğin kodlarda çalışma performansı nı arttırmak gerekli çok ağır çalışıyor.. Nasıl yapabiliriz?d oh





http://www.makosan.net
Bir deli bu aralar...


Yazar
cengineer


avatar

Kayıt: 27.10.2006
20.01.2008-18:02 #35502
 
#include <stdio.h>
#include <stdlib.h>

typedef struct arkadas_listem{

char name[10];
char surname[10];
int no;
}FRIEND;

int main ()
{
int adet,i=0;
FRIEND *uye=NULL;
FILE *dosya;
printf("
how many member will you add?
");
scanf("%d",&adet);

uye=((FRIEND *)malloc(sizeof(FRIEND)*adet));


dosya=fopen("listem.txt","w+");
if(dosya==NULL)
{
printf("
file opening error, program will terminated!");
exit(0);
}


do{

printf("
record a friend's information :
");

printf("
record the name :");
scanf("%s",(uye+i)->name);

printf("
record the surname :");
scanf("%s",(uye+i)->surname);

printf("
record the tel_no :");
scanf("%d",(uye+i)->no);

printf("
%s %s %d
",(uye+i)->name,(uye+i)->surname,(uye+i)->no);

fprintf(dosya,"%s %s %d

",(uye+i)->name,(uye+i)->surname,(uye+i)->no);

}while(i<adet);

fclose(dosya);

return 0;
}

dosyaya yazma sırasında program sonlanıyor neden acaba anlamadım yardım edermisiniz?thinking





" Her arayan bulamayabilir ancak bulanlar arayanlardir..! " Imam-i Rabbâni




Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
20.01.2008-18:34 #35513
Problemin asıl kaynağı nedir bilemiyorum ama üye numarasını okurken & operatörünü kullanman gerekir.

scanf("%d", &((uye+i)->no));


Bir de (yanlış görmediysem) döngü içinde i sayacını arttırmamışsın.





Let`s make this world a better place to live !

Yazar
cengineer


avatar

Kayıt: 27.10.2006
20.01.2008-18:43 #35516
clairvoyant yazdi
 
Problemin asıl kaynağı nedir bilemiyorum ama üye numarasını okurken & operatörünü kullanman gerekir.

scanf("%d", &((uye+i)->no));


Bir de (yanlış görmediysem) döngü içinde i sayacını arttırmamışsın.


çok sağol belki bir saattir bakıyorum ama bulmadım deleme hatası da vemiyordu...





" Her arayan bulamayabilir ancak bulanlar arayanlardir..! " Imam-i Rabbâni




1 2
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb