PDA

Tam Sürümünü Görmek İçin : Yardım, sorunun ne oldunğunu biliyorum ama nasıl anlatsam ?


marp
14/05/2006, 01:44
Kendi başıma bir kod yazayım dedim ama onuda elime yüzüme bulaştırdım.:( Herneyse sizide sıkmayım. Benim sorunum alınan bir değer check fonksiyonu tarafından kontrol edilecek ve eger 1 ile 5 arasında değilse tekrar bir değer isteyecek. Bu aldığı yeni değeri eskisinin yerine kullanacak. Yardımcı olursanız çok sevinirim( bu arada bu 3. yazışım daha once yazarken laptop kafayı sıyırıp isyanlara geldiği için tüm programları ara da bir kapatıyor.:) )


int main()
{

int ch[N];
cout<<"blablablablablablablablab ve blablabalbalasblabla. Lütfen 1 ile 5 arasında bir puan veriniz"<<endl;

cin>>ch[0]; // bu ch dizisi 500 e kadar gidiyor. Eger girilen deger 1 ile 5 arasında değilse check fonksiyonu yeni bir deger isteyecek ve bu yeni değeri ch[0] yerine kullanacak.

check(ch[0]);

return 0;

}

int check(int x)
{

if(x>5 || x<1)
{
int a;
cout<<"Lutfen 1 ile 5 arasinda bir puan veriniz!!"<<endl;
cout<<"\t>>";

cin>>a; // burda aldığı a degerini kontrol ettiği degerin yerine kullansın ama nasıl? yani yukardaki ch[0] yerine

check(a);



}

return 0;


}


redplanet
14/05/2006, 14:51
bir fonksiyon içinde kendi fonksiyonu çağırılamıyo diye biliyorum ben.
şöyle bişi yapabilirsin belki :
main ()
{
int h;

cout<<"1-5 arasi sayi gir";
cin>>ch;

check (ch);

}

check (int x)
{
int a;
while (x<1 || x>5){
cout<<"yeni bir sayi gir";
cin>>a;
x=a;
}
return a; //a dogru aralıkta olunca mainde istedigin gibi kullanırsın

}


programı compiler a yazıp derlemedim ama bence oldu. kolay gelsin:)

myavuzselim
14/05/2006, 15:14
Aldigin hata nedir? Mantiksal olarak program dogru gorunuyor.
Derlemede hata alabilirsin belki. iostream'i include ettin mi? using namespace std dedin mi? Bir de check fonksiyonunu main fonksiyonundan once yazmak gerekebilir.

marp
14/05/2006, 19:03
Gelen cevaplar için tessekur ediorum cevap yazan arkadaşlara ama birincisi red planet arkadasımın yazdığı kod da a sadece check fonksiyonunda x e eşit yani biz eger ch[0] a ilk deger olarak 8 verdiğimizde check fonksiyonu bizden 1 ile 5 arasında yeni bir deger isteyecek ama girilen değere rağmen ch[0] hala 8. Bu arada programda derleme yada run time hatası yok sadece bi noktada takıldım.

Sorumu daha basit şekilde tekrar soriyim : Mainde klavyeden aldığım bir değeri başka bir fonksiyon ile değiştirmek istiyorum. Zaman ayırıp baktığınız için tekrar tesekkür ederim.

myavuzselim
14/05/2006, 19:22
int sayOku(int min, int max) {
int sayi;
cout << "Lutfen " << min << " ve " << max << " arasinda bir sayi giriniz: ";
cin >> sayi;
while (sayi < min || sayi > max) {
cout << "Hatali sayi girdiniz!" << endl;
cout << "Lutfen " << min << " ve " << max << " arasinda bir sayi giriniz: ";
cin >> sayi;
}
return sayi;
}

// aslinda yukaridaki daha iyi, yine de rekursif
// olarak da yazalim
int sayOku2(int min, int max) {
int sayi;
cout << "Lutfen " << min << " ve " << max << " arasinda bir sayi giriniz: ";
cin >> sayi;
if (sayi < min || sayi > max) {
cout << "Hatali sayi girdiniz!" << endl;
sayi = sayiOku2(min, max);
}
return sayi;
}

...
int main() {
...
ch[0] = sayiOku(1, 5);
...
}
Bu arada (ozellikle de 500 boyutunda) bir diziye kullanicidan sayi okutmanin bana ilginc geldigini de ekleyeyim.

marp
14/05/2006, 19:32
Gelen cevap için tsk ederim soruna bu sekilde yaklasmak hiç aklıma gelmemişti sorunumu çözdüğü için myavuselim'e cok tesekkurler.

Aslında benim yapmaya calıstığım basit bir anket uygulaması. Kullanıcıdan istenilen 1(en kötü) 5(en iyi) şeklinde puan vermesiydi. 500 küsür soru olunca benimde aklıma cevapları bir dizide toplmak geldi. Tekrar ilgilenen arkadaşlara tesekkur ederim.

acehreli
15/05/2006, 20:25
redplanet, islevlerin kendilerini dogrudan veya dolayli olarak cagirmalarina "ozyineleme" (recursion) denir.

Cok eglenceli bir konudur. Bazi problemlerin cozumune cok yatkindir ama yersiz kullanildiginda cok sayida sorun da dogurabilir. Bir ornek olarak, hesaplarin gereksizce tekrarlanmasina neden olabilir.

Ali