Friedman Mesaj tarihi: Nisan 21, 2010 Paylaş Mesaj tarihi: Nisan 21, 2010 3 - 5 exercise dan sonra beynim sulandı çözemedim bi türlü hatayı . zaten dandiri bi şekilde yazdım kodları iyice karıştı aklım =/ . iyi güzel compile oluyo inputu alıyo ama sonra float point exception çekiyo. Nerde neyi yanlış yapıyorum kod #include <iostream> using std::cout; using std::cin; using std::endl; void convertBinary(int); int pow(int, int); int main() { int num; cout << "Gimme a binary integer : n"; cin >> num; convertBinary(num); } void convertBinary(int num) { int degrees[30]; int total = 0; for(int i = 0; i < 30; i++) { degrees[i] = num % pow(10,i + 1); } for(int j = 0; j < 30; j++) { total += degrees[j]; } cout << "The decimal value is : t" << total << endl; } int pow(int base,int exp) { for(int i = 0; i < exp; i++) { base *= base; } return base; } degrees[i] deki [i] görünmüyo site mi bozuldu yoksa . aha bu yazıdada görünmüyo dikdörtgen parantez aç "i" dikdörtgen parantez kapa Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Friedman Mesaj tarihi: Nisan 21, 2010 Konuyu açan Paylaş Mesaj tarihi: Nisan 21, 2010 biraz düzenledim zaten yarım yapmışım orda sorunu bulcam diye . gene köşeli parantez arası i görünmüyo ama loopun içindeki degrees de var kod #include <iostream> using std::cout; using std::cin; using std::endl; void convertBinary(int); int pow(int, int); int main() { int num; cout << "Gimme a binary integer : n"; cin >> num; convertBinary(num); } void convertBinary(int num) { int degrees[30]; int total = 0; for(int i = 0; i < 30; i++) { degrees[i] = (num % pow(10,i + 1)) * pow(2,i) ; } for(int j = 0; j < 30; j++) { total += degrees[j]; } cout << "The decimal value is : t" << total << endl; } int pow(int base,int exp) { if(exp == 0) { return 1; } for(int i = 0; i < exp; i++) { base *= base; } return base; } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
El-Barto Mesaj tarihi: Nisan 21, 2010 Paylaş Mesaj tarihi: Nisan 21, 2010 Öncelikle o 10'un katlarına göre modunu alıyosun ama her işlem bitişinde o sayıdan bi önceki modu çıkarman lazım sanırım. Çünkü 101'in 10'a göre modu da 1, 100'e göre modu da 1. Küçükten giderken sayıları çıkarırsan düzgün çalışır mantık olarak. Aldığın floating point hatası da sanırım int'in sınırına dayanmış olmandan olabilir, 10*30 sayısını alabilirmi bi int bilmiyorum, double falan dene istersen. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Friedman Mesaj tarihi: Nisan 21, 2010 Konuyu açan Paylaş Mesaj tarihi: Nisan 21, 2010 dimi ya onu varsayımsal olarak 30 vermiştim bi bakiyim 10 veriyim belki kabul eder Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
aquila Mesaj tarihi: Nisan 21, 2010 Paylaş Mesaj tarihi: Nisan 21, 2010 10*30 hicbi yere sigmaz Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Friedman Mesaj tarihi: Nisan 21, 2010 Konuyu açan Paylaş Mesaj tarihi: Nisan 21, 2010 5 yaptım şu an linuxte değilim ondan visual c++ da compile ettim konsol göçüyo her defasında . Heralde aynı problem. Şu kodda benim gözlemlediğim hiçbir problem yok alalala #include using std::cout; using std::cin; using std::endl; void convertBinary(int); int pow(int, int); int main() { int num; cout << "Gimme a binary integer : n"; cin >> num; convertBinary(num); } void convertBinary(int num) { int degrees[5]; int total = 0; for(int i = 0; i < 5; i++) { degrees[i] = (num % pow(10,i + 1)) * pow(2,i) ; } for(int j = 0; j < 5; j++) { total += degrees[j]; } cout << "The decimal value is : t" << total << endl; } int pow(int base,int exp) { if(exp == 0) { return 1; } for(int i = 0; i < exp; i++) { base *= base; } return base; } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
El-Barto Mesaj tarihi: Nisan 21, 2010 Paylaş Mesaj tarihi: Nisan 21, 2010 Sayıyı çok küçük verdiğinde bile hata çıkıyomu? Mesela düz 1 versen noluyo? Eğer hala hata veriyosa her seferinde i'yi print ettir, sonra kaçıncı sayıda floating point hatası verdiğine bak. Öyle de bulamazsan intlerin hepsini double yap. Son olarak da bu sorunu çözsen bile kodun hatalı sanırım. Her mod bulduktan sonra, sonucu asıl sayıdan çıkarmalısın. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Friedman Mesaj tarihi: Nisan 21, 2010 Konuyu açan Paylaş Mesaj tarihi: Nisan 21, 2010 abi o ondalığı ikiliğe çevirirken benim bildiğim . ikiliği ondalığa çevirirken her basamağı 2 nin sırayla üsleriyle çarpıp topluyosun geneli. bide print ettirmiyo namussuz hiçbişeyi . inputu aldığı gibi erroru basıyo Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
El-Barto Mesaj tarihi: Nisan 21, 2010 Paylaş Mesaj tarihi: Nisan 21, 2010 Bak örneği bi daha yaziim. 101 saysını çeviriceksin mesela ondalığa sonuç 5 çıkması lazım. Senin kod şöyle yapıyo: 101%10 * 1 = 1 101%100 * 2 = 2 101%1000 * 4 = 404 bunları toplayınca sonuç 406 çıkıyo 5'le arasında dağlar kadar fark var :) Senin yapman gereken şu: 101%10 * 1 = 1; 101-1 = 100; 100%100 *10 = 0; 100 - 0 = 100; 100%1000 = 100; hatta benim söylediğim sistemde burda patlıyo :) Buna da mod yaptığın sayı aslından yüksekmi diye bi kontrol ettirmen lazım heralde. Veya benim uykum var saçmalıyorum, eğer öyleyse lütfen quote yapmadan yüzüme vurun hemen editliyim :D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Friedman Mesaj tarihi: Nisan 21, 2010 Konuyu açan Paylaş Mesaj tarihi: Nisan 21, 2010 tmm tmm şimdi anladım ne demek istediğini şu saniye anladım çok geç oldu ama olsun :P . Bakalım float problemimi çözücek mi . edit : Veee çözmedi eheh Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
El-Barto Mesaj tarihi: Nisan 21, 2010 Paylaş Mesaj tarihi: Nisan 21, 2010 Şimdi tekrar baktım koda, power fonksiyonunda int base alıyosun ama base *= base yapıyosun. uzun zamandır kullanmıyorum c++ ama sanki böyle yapılamaması lazım. onu içerdeki bişeye eşitleyip işlemleri yapmayı bi dene. temp = base; temp *= temp gibi Ama ilk postta dediğim gibi floating point exception ya sıfırla bölme, ya sınırı aşan bi sayı yada uzak bi ihtimalle yazdığın sayıyı sayı olarak almıyodur. Eğer sayıyı düzgün almıyosa convertBinary(num) diye çağırdığında onu 0la çağırmış olucak. Heralde 0'ın herhangi bi modunu almak hata veriyodur. Böyle işte cout'ları çoğaltıp bişeyleri comment out edip hatayı bulmaya çalış :D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
mightee Mesaj tarihi: Nisan 22, 2010 Paylaş Mesaj tarihi: Nisan 22, 2010 burada iki tane for döngüsü yerine hepsini aynı for içinde yapabilirsin. for(int i = 0; i < 5; i++) { degrees[ i ] = (num % pow(10,i + 1)) * pow(2,i) ; total += degrees[ i ]; } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Cd- Mesaj tarihi: Nisan 23, 2010 Paylaş Mesaj tarihi: Nisan 23, 2010 Bitset class'ı var kolaya kaçmak istersen http://www.cplusplus.com/reference/stl/bitset/to_ulong/ Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Kojiroh Mesaj tarihi: Nisan 25, 2010 Paylaş Mesaj tarihi: Nisan 25, 2010 Kullanıcının yazdığını int'e atmak zorunda mıyız? Öyleyse çok ufak olur çevirebileceğimiz maksimum binary sayı. Ha eğer string de okunabilir sorun olmaz dersen, 64 bitlik sayıya kadar çevirebilirsin (unsigned int boyutu). Kod şu: #include <iostream> #include <math.h> #include <string> using namespace std; unsigned int cevir(unsigned int x) { unsigned int donus = 0; unsigned int sayac = 0; while(1) { if(x%10 == 1) donus += pow(2.0, sayac * 1.0); sayac++; x = x/10; if(x == 0 || sayac > 31) break; } return donus; } unsigned int cevir(string s) { unsigned int donus = 0; unsigned int sayac = 0; for(int i = s.length() - 1; i >= 0; i--) { if(s.at(i) == '1') donus += pow(2.0, sayac * 1.0); sayac++; } return donus; } int main(int argc, char* argv[]) { unsigned int k = 0; string s; while(1) { cin >> s; cout << cevir(s) << endl; } } Edit: Bu arada sayac * 1.0 yazmamın nedeni (double)sayac yazmaya üşenmem lakjsfhşalkjflk Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar