Tam Sürümünü Görmek İçin : c++ da kesirli işlemler
Kulanıcıdan a/b ve c/d şeklinde iki kesir girmesini isteyen ve sonucu da x/y şekline veren bir c++ programı yazmak istiyorum ama ,kesiri girme kısmında ne yapacağımı bilmiyorum.
Benim yazdığım kodlar kullanıcıdan pay ve paydayi tek tek alıp ondan sonra işlemi yapıyor ama ben kullanıcının kesri direk yazabilmesini istiyorum yani 1.kesir için önce a yı sonra da b yi girmek yerine direk a/b şeklinde girilmesini istiyorum bunu nasıl yapabilirim.
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d;
cout<<"1.kesri giriniz :";
cin>>a>>b;
cout<<"2.kesri giriniz :";
cin>>c>>d;
int pay=a*d+c*b;
int payda=b*d;
cout<<pay<<"/"<<payda;
system("PAUSE");
return 0;
}
ben bunları yazabildim ama bunlar istediğim gibi değil
Coldplay
06/07/2008, 05:19
$imdi sen a/b gibi bir ifadeyi i$lemek istiyorsun, sence bu hangi standart veri tipine benziyor? Tabi ki string! Yani yapman gereken kullanicinin girdilerini string seklinde okuyup sonra bu stringi parcalayarak pay ve paydayi int cinsinden elde etmek.
Asagida a/b seklinde bir girdiyi string olarak okuyan ve bundan integer degerleri yapan bir örnek kod veriyorum. Burada ödev cözmedigimiz icin programin tamamini vermiyorum. Geriye kalan kisimlari da kendin tamamlarsin. Iyi calismalar!
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
string s;
string stringParcasi;
int kesirCizgisiPozisyonu;
int a,b,c,d;
// Ilk kesri s isimli stringe kaydet
cout<<"Lütfen a/b $eklinde ilk kesri giriniz: "<< endl;
cin>>s;
// s'de kesir isaretinin pozisyonunu elde et
kesirCizgisiPozisyonu=s.find("/");
// Kesir cizgisi bulunamazsa find() Fonksiyonu -1 degeri verir
if (kesirCizgisiPozisyonu == -1)
{
cout<<"Kesir cizgisini girmediginiz icin islem gecersiz!"<<endl;
return 1;
}
// Kesir cizgisi en basta veya en sondaysa pay veya payda belirsiz
// Bu senin keyfine kalmis istersen burada böyle girdiye izin verip pay veya payi sifir kabul edebilirsin
else if (kesirCizgisiPozisyonu == 0 || kesirCizgisiPozisyonu == s.size()-1)
{
cout<<"Kesir cizgisini basta veya sonda girdiginiz icin pay veya payda tanimlanamadi!"<<endl;
return 1;
}
// Kesir dogru girildiyse pay ve payda degerlerini elde et
else
{
//s'de sifirdan kesme isaretine kadar olan stringi (yani pay) stringParcasina ata
stringParcasi = s.substr(0,kesirCizgisiPozisyonu);
// c_str() ile const char seklinde C-Formatina dönüsen stringi a'ya integer olarak ata
a = atoi(stringParcasi.c_str());
// Simdi yukarida ayni islemi payda (b) icin de yap
//(tabi ki paydanin baslangic ve bitis pozisyonlariyla)
stringParcasi = s.substr(kesirCizgisiPozisyonu+1,s.size()-1);
b = atoi(stringParcasi.c_str());
// Integer a ve b degerlerini su sekilde ekrana yazdirabilirsin
// a/b + c/d toplamindan sonra da ekrana benzer sekilde yazdir
cout<<"Kesrimiz(a/b) : "<<a<<"/"<<b<<endl;
}
// Simdi tek yapman gereken aynen yukaridaki gibi c/d degerini okumak
// ve kesir islemlerini yaptiktan sonra ekrana yazdirmak.
// Kolay gelsin!
return 0;
}
acehreli
06/07/2008, 06:37
string pozisyonlari icin string::size_type tUrU, bulunamama durumunun degeri icin de string::npos kullanilmasi onerilir. Baska turler her ortamda calismayabilir:
string::size_type kesirCizgisiPozisyonu = s.find("/");
if (kesirCizgisiPozisyonu != string::npos)
Ali
Coldplay
06/07/2008, 12:18
Ali bey, dikkatiniz icin tesekkürler. string::size_type türünde hakkiniz var. Ama string::npos -1 olarak tanimli degil mi? Yoksa C++'in pek cok özelliginde oldugu gibi bu da mi platforma göre fark ediyor? Ben http://www.cplusplus.com/reference/string/string/npos.html linkinde -1 olarak verildigi icin kisaca -1'le sorgulamistim. Bu arada örnek verdiginiz if sorgusu bulunmama durumu icin degil de bulunma durumu icin, yaniliyor muyum?
Yardımlarınız için teşekkur ederim.
acehreli
06/07/2008, 18:37
string::npos herhalde her yerde -1 olarak tanimlidir ama string npos diye bir deger tanimladigi ve arama fonksiyonlarindan da onu dOndUrebilecegini soyledigi icin npos kullanilmasi onerilir.
if dOngusunde haklisin tabii: '!= string::npos' denetimi arananin bulundugu duruma bakiyor.
Ali
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.