c de kullanıcının girmiş old.sayı

glck
12-12-2010, 20:35   |  #1  
OP Üye
Teşekkür Sayısı: 0
77 mesaj
Kayıt Tarihi:Kayıt: Oca 2009

mrb kullanıcıdan girlen sayının hangi sayının birden fazla girildiğini bulan kodu nasıl yazabilirim.
bunu oyun prog.girilen sayıdan rakamları aynı old. hata vermesi ve hangi sayıdan 1 den fazla yazıldığı gösteren satırda kullanacağım.
teşekkürler.

muh34
12-12-2010, 22:04   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Surekli karsılasılan sorgu problemlerden bir tanesi veri miktar yogunlugunun belirlenmesidir.Ornegin anket sistematigi.Bir anketin icerisinde bulunan herhangi bir sorunun,kac kişi tarafından cevaplandırıldıgı,hatta verilen cevaplar icerisinden en çok hangisinin verildigi veya bu adedin nekadar oldugu gibi sorular programcılıkta geniş yer almaktadır.Yukarıdaki soru da bu soruya cok benzerdir ve aynı mantıkta anlatmaya calısacagım.
Soruda hangi sayının veya sayıların birden fazla girildigi sorulmaktadır.Boyle durumlarda işaretci(pointer) ve dizi(array) kavramı on plana cıkmaktadır.Kullanıcıdan surekli sayılar alınırken,ote yandan kullanıcının aynı sayı girmiş mi ? girmiş ise hangi sayıdan kac adet girmiş gibi sorular merak edilebilir.Burada kullanıcıdan alınan sayılar bir işaretcide tutulacaktır.(Dizide de tutulabilir,ancak kullanıcının kac adet sayı girecegini bilemedigimiz icin,sayıları bir gostericide tutmak iyi bir fikir olacaktır).Istemci,her sayı girdiginde sistem tarafından girilen sayının varlıgı kontrol edilecektir.Eger boyle bir sayı var ise sadece adedi arttırılacak olan sayı,veri kumesine eklenmeyecektir.Şayet girilen sayı daha onceden girilmemiş ise,işaretcinin kuyruguna eklenerek veri girişine devam edilecektir.(Bizim sorumuzda girilen veri -1 olana kadar devam edecektir).Girilen degerlerin varlıgı veya yoklugunu bir bayrak(flag) degiskeni ile kontrol edebiliriz.Ornegin daha onceki girilen bir sayı ile aynı sayı girildinde flag 0 olacaktır.Kullandıgımız bu flag degiskeni 1 oldugu zaman veri girişine izin verilecektir.Yukarıda anlatılan bu algoritmayı koda dokecek olursak,kodun C programlama dilindeki karsılıgı asagıdaki gibi olacaktır.

#include <stdio.h>
#include <stdlib.h>

int main() {

int girilenSayi=0,count=0,i,flag=1;
int *sayici=(int *)malloc(sizeof(int));
int *head=sayici;
int dizi[20]={0};
while(girilenSayi!=-1) {
printf("Lutfen sayilar giriniz(cikis -1):");
scanf("%d",&girilenSayi);
sayici=head; // pointer zincirini basa al
for(i=0;i<count;i++) {
if(*sayici==girilenSayi) {  
dizi++;
flag=0;
break;
}
sayici++;
}
if(flag) 
if(girilenSayi!=-1) {
*sayici=girilenSayi;
count++;
}
flag=1;
}
sayici=head;
for(i=0;i<count;i++) {
printf("%d sayisindan %d adet var\n",*sayici,dizi+1);
sayici++;
}
getchar();
return 0;
}

Başarılar

Son Düzenleme: muh34 ~ 12 Aralık 2010 22:11