C++ kodlarını C'ye çevirebilecek bir eklenti gibi birşey var mıdır acaba? #include <iostream> Bunu C kodu olarak çalıştıramıyorum. Printf ve scanf leri düzeltip attığımda forlarda hata alıyorum. |
iyi akşamlar key.preview ne işe yarar??? |
unsigned int niye int in yaklaşık 2 katı pozitif değer alır diye düşünmekle başla. Data Type Ranges int 32 bit tanımlanır. Negatif ve Pozitiflik MSB(Most Significant Bit) -yani 32. bit diyebiliriz - bitinde tutulur. 8 bitlik bi sayı ile anlatıyım. Memoryde aşağıdaki gibi tutulduklarını düşün. 00000011 = signed 3 = unsigned 3 11111101 = signed -3 = unsigned 253 Şimdi sen -3 diyince unsigned int değişkene 11111101 değerini atıyorsun. unsigned int için bu değer 253 demek. Eğerki biz 11111101 memory bloğuna bu aslında int deseydik bilgisayar bu sayıyı int olarak ele alıcak. Bakıcak MSB 1 yani bu sayı negatif. Üstinde 2's complement uyguluycak (1's complement +1) bu sayının negatif değerini bulmak için. Sonuç 00000010 + 1 = 00000011 = 3 ama negatif yani -3. Daha fazla açıklama için 2's complement wiki sayfası --> Two's Complement Neden böyle bir yöntem ile sayıların memory üzerinde tutulduğunu soruyorsan Wiki sayfasında da belirtilmiş. Çoğu matematik işlem üzerlerinde direk uygulanabiliniyor. Örnek : -3 + 5 = 11111101 + 00000101 = 100000010 (9.bit 8bit memory üstünde işlem yaptığımızdan Carry Bit olarak algılanacak.) Elimizde 8 bit olarak memoryde 00000010 var. Sonuç : 2. -3 + 2 = 11111101 + 00000010 = 11111111 (Sonuç 8 bit. Carry Bit taşması yok.) Sonuç : MSB'e bakıyoruz 1 yani sonuç negatif. 11111111 -> (2's complement) -> 00000000 + 1 = 00000001. Yani -1. |
Celcius, Fahrenheit ve kelvin derecelerini birbirlerine çeviren program yazmaya çalışıyorum şunu yazdım ama çalışmadı yardımcı olabilecek olan var mı? #include<stdio.h> |
http://codepad.org/4zZALvUe Sadece C kısmını ve switchleri düzelttim. Scanf de biraz garip gibi. Yanayana istiyorsun. |
Cevap için teşekkürler yalnız dev c++ sizin yazdığınız program da hata veriyor 40. satırda bi de 8. satırda yazdığınız value=32.0f; ne işe yarıyor onu anlamadım açıkçası scanf'te girdileri hep yan yana istiyo bizim hocalar ondan öyle yazıyorum |
32.0 veya 32 yaz. Ben 32.0 tercih ederdim. Hatta o satırı kaldır. Ben o satırı codepad.org sayfasında sonuç bastırabilmek için girdim. Sen kendi scanf satırını kullanacaksın. #include <conio.h> da o sayfada hata verdiğinden kaldırdım. Sen sadece switch kısmına ve ilk case 'c' case 'C' kısmına odaklan. |
Son olarak şunu yazdım büyük oranda doğru çalışıyor yalnız fahrenheit girince girdiye hatalı sonuç veriyo neden olduğunu anlıyamadım son kod şu #include<stdio.h> hatalı kısım ise şurası case 'F': F 212 olarak girdiğimde bana (212-32)*10/18'den celcius için 100 derece kelvin için de 273+100'den 373 vermesi lazım ama sırayla -17'ye 255 veriyor |
Dikkatini toplamamışsın :) value=cel; scanf ile value değerini alıyorsun. cel daha değer almamış. Memoryde o an orada ne yazıldıysa onun değerini value'ya aktarıyorsun. Senin cel=value; kel=value; fah=value; yazman gerek. İlk seferde farketmen için özellikle sadece Celcius için düzeltmiştim. Altta hepsini düzeltmiş bulundum böylece. ( %.2f , sayının basamaktan sonra son iki hanesini bas demek. Biraz yuvarlama yapmış olduk böylece) #include<stdio.h> |
Ya aslında o aklıma geldi de sonra dedim ki kelvin ve celcius için doğru değer veriyor fahrenheit için neden vermesin? Dediğiniz gibi yaptım şimdi tamamen düzgün çalışıyor teşekkürler ![]() |
Rica ederim :) Yukarıda basamaktan sonra iki hanesi yazmışım. Pardon. Noktadan sonra iki hane olacaktı. Yanlış yazmışım. |
Hocam bu value=fah ile fah=value olayı kafama tam yatmadı ![]() |
Her değer için mi doğru çıkıyor :) 20 25 45 vererek 3 kere çalıştır programı. Bakalım hepsinde doğru mu gelecek. cel=value; --> value değerini cel değerine ata demektir. 1=cel ile cel=1 farklıdır. Hatta ilkinde compiler hata verir :) |
|
Basit olarak şöyle diyebiliriz. Sayıların bellekteki görünümleri aynı olsa bile işaretli ve işaretsiz olarak yorumlanmaları farklıdır. Mesela 1111 1110 verisine signed char üzerinden erişirsek -2, unsigned char üzerinden erişirsek 254 sonucunu alırız. union { char a; unsigned char b; }; b = 200; printf("b = %d\n", b); // 200 printf("a = %d\n", a); // -56 İki sayıda binary olarak aynı olsada yorumlanmaları farklı. Bir diğer konu da pointerlar. char* bptr = (char*) &b; printf("b = %d\n", *bptr); // -56 b içindeki veriye signed (char) olarak erişildiğinden -56 elde edildi. |
Teşekkür ederim. |
merhabalar ben h.tepede 1. sınıftayım hocamız bize kendi kütüphanenizi oluşturun dedi ben codeblcks kullanıyorum program hakkında bilginiz var mı bir de kütüphaneyi nasıl oluşturacağım? |
Hocan sadece bu kadar dediyse, http://stackoverflow.com/questions/42770/writing-using-c-libraries içine bir de, #ifndef __myCuteLibrary #define __myCuteLibrary . . . . . . #endif yaparsın tamamdır. Bir de buna benzer class için yaparsın. C++ olur. http://en.wikipedia.org/wiki/Library_(computing) --> Static linking, dynamic linking vs... |
teşekkür ederim.. |
İnt in değeri derleyiciden derleyiciye farklılık gösterebiliyor ama , - nin işlenmesi aynı anladığım kadarıyla. int kaç bitlikse bende mesela 32 bit -3 gibi bir değer verildiğinde 2^32-3 değerini alıyor ama nedenini çözemedim.
Bu mesaja 3 cevap geldi. Cevapları Gizle