eyvallah hocam |
(Yıllar sonra gelen edit) Hocam demin birşey okuyordum da, tartıştığımız konu aklıma geldi, yazmak istedim. Seg-fault korumalı modun bir mekanizması, C ile bir alakası yok. Benim açıklamaya çalıştığım dilin kurallarıydı ki, DOS korumalı mod u kullanmadığı için DOS da stringi değiştirmeye çalışmak undefined behaviour olur ve seg-fault yemezsiniz. Haksız mıyım? |
Bu std::swap fonksiyonu nasil calisiyor? Yani ben swap fonksiyonu yazsam parametre olarak 2 pointer alip degerleri takas ederdim. Boylece degiskenler direk degisirdi. Ama bunda parametreler integer ama yine de degiskenler direk degisiyor. Nasil olutor bu? |
Doğrudur teknik olarak bir engel yok. Fakat korumalı mod olmasa bile sistem uygulamayı kendisinden koruyacaktır. Öyle olmasa hatalı bir adresi gösteren bir işaretçi rahatlıkla programı bozar. İşletim sisteminin olmadığı 8 bitlik gömülü işlemcilerde bile programı koruyan mekanizmalar var. Tabi yine de emin değilim. Dos konusunda ahkam kesecek kadar dinozor değilim çok şükür. ![]() |
C++ ta bir nesneye referans vermenin 2 yolu var. Birincisi senin dediğin C usülü işaretçi-adres olayı. İkincisi çoğu dilde olmayan direkt referans olayı. Bu yöntemde & operatörü ile bir referans tanımlanır ve ona atanan nesne gibi davranır. Yani aynı nesnenin 2. ismi olur. int a = 0; int &b = a; b = 1; a 1 oldu. Link vereyim.http://www.learncpp.com/cpp-tutorial/611-references/ |
haa anladım. referans ile yaparken de foo(&x) diye çağırıyoruz sanıyodum ![]() void swap2(int &a, int &b) { int c = b; b = a; a = c; } çok iyi oldu çokda güzel oldu sanırım :Dteşekkürler hocam. sizi bu ara çok meşgul ediyorum artık cevap vermiceksiniz diye korkmuyo dğeilim ![]() |
Çok iyi oldu da o konuda bir tavsiye vereyim yine de. Şimdiden genel algoritmalara alışırsan ilerde çok rahat edersin. "Bir fonksiyon yazayım 2 tane int i değiş tokuş etsin" değil, "bir algoritma yazayım herhangi 2 nesneyi değiş tokuş etsin" diye düşün. Mesela std::swap için int, double, string ya da kullanıcı tanımlı tür farketmez. STL kütüphanesi bu şekilde çalışır, tip zorlaması yapmaz. |
Sanırım azcık salağım ben ![]() ![]() |
Zamanı gelince görürsün acele etme. Aklında olsun diye söyledim genel düşünmek her zaman iyidir. Normalde C'de de bu şekilde düşünmek lazım ama onun olanakları kısıtlı. Herkese void* ile yap diyemiyorsun. Fakat c++ ta böyle silahlar varken kullanmamak olmaz. |
function overloading ile yapmayı denedim ama typedef'lerde beceremedim. STL'deki kodunda böyle (T& x) falan var umarım büyüyünce anlarım ![]() |
yine bir gereksiz C++ sorusu yine ben ![]() bu başkaları tarafından oluşturulmuş libraryleri kullanmak için neden kullancağımız compilerde build etmemiz gerekiyor? bir de SFML kütüphanesini kullanmaya çalışıyorum da. onla ilgili de genel sorularım var. Static ve dynamic library kullanma arasında ne fark var? (library'i build ettiğimde bi -s takılı static dosyalar bir de normal dosyalar çıktı) Dynamic yapınca yanında DLL falan olması gerekiyormuş öyle ki kendim bile DLL'siz çalıştıramadım zaten ![]() Bir de Visual Studio'da SFML projesi yapmak çok uğraştırıcı yani her seferinde kullanılcak lib dosyalarını directoryleri göstermek sıkıcı. Her tutorialde yeni proje açmak da alışkanlığım oldu. Bunları direk ayar ypabilir miyim? Hani Windows Form Application gibi mesela. SFML application diyeyim o benim için herşeyi ayarlasın falan? |
c'ye yeni başladım takip ettiğim derslerde basit toplama ve çıkarma programı yaptılar ama ben yazınca çok saçma bir şey oluyor. sayılar ne olursa olsun sonuçlar 2milyonlu bir şey çıkıyor.. #include <stdio.h> #include <conio.h> int main () { int sayi1, sayi2, toplama, cikartma; printf("\nIlk Sayiyi Giriniz..\n"); scanf("%d",&sayi1); printf("\nIkinci Sayiyi Giriniz..\n"); scanf("%d", & sayi2); toplama= sayi1+sayi2; cikartma= sayi1-sayi2; printf("\nToplam Sonucu %d, toplama\n"); printf("\nCikartma Sonucu %d, cikartma\n"); getch (); return 0; } < Resime gitmek için tıklayın > |
Merhaba, Hatanız şu satırlarda: printf("\nToplam Sonucu %d, toplama\n"); printf("\nCikartma Sonucu %d, cikartma\n"); toplama ve cikartma değişkenlerini bu şekilde yazdıramazsınız. Şu şekilde olması gerek: printf("\nToplam Sonucu %d\n", toplama); printf("\nCikartma Sonucu %d\n", cikartma); Kolay gelsin... |
tamamdır hocam farkettim hatamı teşekkür ederim ![]() |
Rica ederim, yardımcı olabilmiş isem ne mutlu bana. ![]() |
Ya bu soruya cevap veren olmamis yada ben kacirdim. Bir tane karakteri integer ile karsilastirabilirsin. 1 char 1 byte dir, yani 256 tane deger alir. Cogu programlama dilinde char in encoding i ASCII dir. Yani sayilarin karakter olarak gosterilmesi. Bu yontem ornegin bir kelimedeki harflerin alfabetik siraya gore diziliminde cok kullanilir cunku ASCII encoding alfanumerik olarak siralanmistir. |
ARKADAŞLAR C GRAFİK İŞLEMLERİNDE 2 DAİRE VE BİR DİKTÖRTGENDEN OLUŞAN TOPLU ŞEKLİ YÖN TUŞLARI İLE NASIL HAREKET ETTİREBİLİRİM... ? GRAFİKTE ÇOK YENİ OLDUĞUM İÇİN SORUYORUM |
Beyler C#'a başladım. C++ bildiğim için çok kolay geliyor şu anda Aritmetik operatörlerdeyim. Şimdi C++ 'da kullanıcıdan bir veri girmek için "Cin " fonksiyonunu kullanmamız gerekiyordu. Fakat C# 'da böyle bir şey yok sanırım. Yani Console.Read fonksiyonunu değişkene eşitliyoruz sanırım. Örneğin ;
Bir de arkadaşlar Visual Studio 2013 Ultimate kullanıyorum ve Ctrl+s ile kaydettikten sonra F5 ile derledikten sonra bu programı yazmadan önce ki program çalışıyor. Anlamadım bu işi |
Integer için Console.Read, string için Console.Readline. Vs için projene gelip sağ tıkladıktan sonra Set As Startup Project demen yeterli. |
dizi yaratmışsın ama sadece ilk beş elemanına değer vermişsin. Değer vermediğin elemanların değeri otomatik olarak 0 atanır.
dizi[0]=3
dizi[1]=2
dizi[2]=8
dizi[3]=-4
dizi[4]=6
dizi 0. indexten başlar.
for döngüsü de 1 ile 14 arasındaki sayılar arasında. Bu yüzden senin döngünün içinde 0. indexi görmüyorsun.
0 dan büyük veya eşit olan her değer için s yi 1 artırmakta.
getche diye bir şey var mı bilmiyorum da DevC++'da ekran çıktısını görmek için getch->get character kullanırdık.
Bu mesaja 1 cevap geldi. Cevapları Gizle