Hocam alakasız olacak sorduğum soru da çok cahilce biliyorum ama cevaplarsanız sevinirim. C ile yazdığım programı dos dışında nasıl neyde açabilirim? ( Hocam çok bilgisizce bir soru olabilir affola) |
C kodları çok taşınılabilir bir koddur örnenğin windows'ta yazdığın bir C uygulamasını linux'dada açabilirsin bazen çok nadir durumlarda koldarda az bir değişişklik yapman gerekirki onlardada bir sıkıntı çıkmaz fakat Windows'ta yazdığın bir uygulamayı linux'da çalıştırman için onu linux'da da derlemen gerekir çünki linux exe çalıştırmaz gerçi winloader programı ile oda oldu ama temiz bir iş için linux'ta uygulamanı tekrar derlemen gerekir umarım anlamışsındır |
O proje algoritma ağırlıklı olduğu için c++ ile de yazsam aynısı olacak, janjanlı özelliklere gerek yok çünkü. C temiz, sade ve hızlı bir dil. |
hmm anladığım kadarıyla c++ c ile yapılan herşeyi yapabiliyor fakat c daha hızlı ve temiz ve sade bir dil doğrumu hocam bu c c++ ilişkisi ? |
Bu olaylar iki cümleyle anlatılabilecek kadar düz mantık şeyler değil. C küçük, sınırları belli olan bir dildir. C++ ise herşeyden önce dilden OOP desteklidir, c' nin üzerine dünya kadar şey eklenmiş çok geniş çaplı bir dildir. Dilin büyüklüğü yüzünden c++ kodunun derlenmesi çok daha uzun sürer. C++ ı adam gibi kullanmak için bilinmesi gereken şeyler çok daha fazladır. Yine tecrübe edinme süresi de c' ye nazaran çok daha uzundur. Bunları bilerek yola çıkarsan iyi edersin. |
Merhabalar arkadaşlar, Bir iş yerinin web sitesi gibi bir otomasyon programı hazırlayacağım , yöneticeler giriş yapıp sitedeki herşeyi görebilecekk, üye olmayanlar ise bu sitedeki izin verilen yerleri görecek, yöneticiler kendi aralarında mail gönderebilecek, dışarıdan gelen konuk misafir yani üye olmayanlada izin verilen yerlere mail atabilecek. |
hocam Cyi öğrenmeme az kaldı ben c++ 'a geçecemde şu kitap iyimidir bir baksanız araşştırdıklarımın içinde bula bula en iyi bunu duldum malum ingizicem vasat olduğu için işte kitap =http://www.babil.com/urunler/1339307/c-temel-ogrenim-kilavuzu?gclid=CjwKEAjwtMqrBRDwtoehx72vm34SJACl_Un1KkM7TQr9lDv9RHHFWxpd39szskv6HUJVxPc1WCWUxBoC9Zbw_wcB#description aslında nesne yönelimli c++ programlama klavuzunu alacaktım fakat hiçbir yerde bulamadım bende bu kitabı alayım dedim bu kitap c'yi biliyormuşuz gibi var sayıyor bu yönden iyi |
settings > compiler > gloabal compiler settings > selected compiler bölümünden sçeceksin fakat seçtiğin derleyici sistemine kurulu olması lazım "gcc" derleyicisinin sisteminde kurulu oldup olmadığına anlamak için cmd'ye "gcc --version" yaz orada versiyon bilgileri falan filan bişeyler çıkarsa kululudur hiçbirşey çıkmazsa kurulu değildir |
Kurulu hocam netbeans'e tanıtmadan kontrol etmiştim sağolasınız |
hocam bu yazdığınız kod böyle daha iyi olmazmı sizinkisi 50 karaktere kadar olurken bu fonksiyon kullanıcının girdiği karakter sayısı kadar destekli yani daha esnek eğer bu fonksiyonda bir yanlışlık varsa düzeltirmisiniz
|
Şimdi ben yanlış diyeceğim sen de "çalışıyor işte nesi yanlış?" diyeceksin. 50 az geldiyse yanına bir 0 eklersin 500 olur zor bişey değil. Yok eğer boşa giden hafızanın hesabını yapıyorsan o yazdığın kod israfın kralını yapıyor. Diyelim ki 1 milyon satırdan oluşan bir text dosyamız var ve başka bir dosya oluşturup her satırın tersini bu dosyaya yazacağız. Her satır ortalama 100 karakterden oluşuyorsa ve en uzun satır 500 karakter ise ben "MAX_UZUNLUK 1000" yazıp işi garantilerim. Bu işlemi benim yazdığım fonksiyon ile yaparsan sonuçta bellekte 1000 byte yer ayrılmış olacak çünkü fonksiyondan her çıkışta geçici olarak ayrılan 1000 byte yok olur. Sadece main deki tek obje kalır. İşlemi senin fonksiyonla yaparsak fonksiyona her girişte ortalama 100 byte ayrılacak ama geçici değil kalıcı olarak! 1.000.000 * 100 = yaklaşık 100 Mbyte. Eğer oluşturulan yeni stringler elde tutulacaksa her bir stringi gerektiğinde yok edecek mekanizmayı da kurmalısın. Ancak o zaman bir avantajı olur. C dünyasında bunun gibi dinamik objeler için kurucu ve yok edici fonksiyonlar yazılır, manuel olarak çağrılırlar. Şunun gibi mesela; Cstr* new_cstr (int size); void destroy_cstr (Cstr *obj); C++ ta constructor ve destructor fonksiyonlar var, otomatik olarak çağrılırlar. |
Hoccam bence bu fonksiyonun en güzel hali bu şekilde lütfen kodları sonuna kadar inceleyin ve kod yorumlarını okuyun neden en iyi diye soracak olursanız hem karakter dizisini uzunluğu kadar bellekte alan kaplıyor yani bellek israfı olmuyor hemde ayrılan alan geri iyade ediliyor sizi yaptınığınız fonksiyonda çok güzel fakat karakter dizisi 2 harfli olursa ne olacak 48 byt bellek alanı israf edilecek o yüzden bellek alanın hiçbir şekilde israf etmeyen bir fonksiyon ve harcadığı değeri geri döndüren bir fonksiyon tasarladım bence en iyisi bu
Not hocam size daha öncedende mesaj atmıştım ama cevap gelmedi bu kitap hakkında bilgi verirseniz çok sevinirim = "http://www.babil.com/urunler/1339307/c-temel-ogrenim-kilavuzu " |
İlk fonksiyonu öyle yazdım çünkü dizileri nasıl döndüreceğini sormuştun, o sorunun yanıtı. Ben olsam öyle yapmazdım, neyse. C' de tecrübe kazandıkça göreceksin ki öyle birkaç byte lık tasarruflar mümkün olamıyor. İlk örnekte bellek zaten ayrılmış olan stack alanından kullanılıyor. Sen orayı kullanmasan dahi o bölge tahsis edilmiş. Bu yüzden ilk fonksiyon hem cpu hem bellek yönünden senin yazdığından daha verimli. Tabi ki en verimlisi değil. Sen elinin altındaki stack alanını bırakıp heap alanına başvuruyorsun, yani ekstra bellek istiyorsun. Fakat bu alanı da hemen geri veriyorsun. heap bölgesi uzun süre tutulacak büyük veriler için tercih edilir, anında yok edilen veriler için değil. Ayrıca heap bölgesinden bellek tahsisi stack kullanmaktan çok daha yavaştır. Tabi stack alanı küçüktür o ayrı. Bir de işletim sistemine "ver ordan 2 byte" diyemezsin. Yani dersin ama sana tutup sadece 2 byte vermez. Sistemin böyle küçük miktarlarda kayıt tutması çok verimsiz ve karmaşık olacağı için bellek tahsisi büyük porsiyonlarla yapılır. Sonuç olarak problem neyse ona göre algoritma kurulur. Eksi artı yönleri ele alınır ona göre tasarlanır. Daha önce söylediğim gibi mesela yeni stringleri elde tutup sonradan kullanacak olsaydın senin yöntemin gayet verimli olurdu ama "kullan at" mantığı olunca hiçbir avantajı kalmıyor. Kitap için öm atıyorum. |
sağ olun hocam cahilliğimi affedin C yi sadece bilmek yetmiyor kullanmasınıda bilmek gerekiyor bunu anladım aslında benim fonksiyonum alan israfı etmesede sürekli iste iade et yaprak küçük şeyler için cpu' yu fazla yoruyor buda verimli değil oysaki belirli ayrılmış alan kullanmak daha iyi. benim sadece yapmak istediğim şey esneklikti yani her uzunlukta karakter dizisine işlem yapabilme fakat oda mümkün değil münkün olsa bile cpu yu fazla meşgul ediyoruz. C diğer üst seviyeli dillere benzemiyor üst seviyeli dillerde bunu rahatlıkça yapıyoruz fakat C'de olmuyor oysaki C daha güçlü nebileyim C güçlü olduğu halde bunu yapamamak zoruma gidiyor açıkcası belkide üst seviyeli dillerde fazla alan israfı vardır ama ben göremiyorumdur tekrar sağolun sizi meşgul ettiğim için affedin |
Merhaba bu yazılımdan pek anlamam ama baya bir araştırmaya başladım okuyorum az çok mantığı kavradım.şimdi benim aklımda bi şey var şimdi ben pc ye ses kaydı yapıp atsam mesela merhaba diye ve ben pc ye sesli komut versem merhaba diye benin merhabamı algılayıp bana merhaba diyen bi şey yapabilirmiyim misal naber dediğimde kaydettiğim iyidir senden naber gibi bişey dicek bişey yapabilirmiyim.eğer olursa bana ufak şekilde bi anlatım yaparmısınız şimdiden teşekkürler. |
Son bir düzeltme yapayım. C' de mümkün olmayan şey diğer hiçbir dilde mümkün değildir. Çünkü alayı c ile yazılmıştır. Diğer dillerde "aaa ne kadar kolaymış" dediğin şeylerin arka planında işte burada yaptığımız malloc-free işlemleri yapılıyor başka bişey değil. Mesela stringe ekleme yapacaksın, bakıyor yeterli alan varmı diye. Alan varsa ekliyor, yoksa sistemden daha büyük yer tahsis ederek eski stringi buraya kopyalıyor, sonra da eski yeri serbest bırakıyor. Aynı işlemleri sen de yapabilirsin c'de. Yani o dillerde gördüğün hiçbirşey mucize değil, hepsi c kullanıyor onların. Başka bir konuda hata yakalama sormuşsun mesela, c'de yok demişsin. Hata yakalama dediğin şey teknik olarak fonksiyon dışına goto ile dallanmaktan ibaret. Yüksek seviyeli diller c' de olan herşeyi allayıp pullayarak kullanıcıya sunarlar. Farkı sadece daha kolay olması. Yeterli ingilizcen olsaydı şuna bak diyecektim. C ile yazılmış müthiş bir kütüphane.https://developer.gnome.org/glib/stable/ En kısa zamanda bir kursa gidip temel seviyede ingilizce öğren, sonra da ustaca kodlanmış projeleri incele ve açıklamalarını oku. Nasıl spin atarak öğrendiğine kendin bile şaşıracaksın. |
bir sorum olacak c# da sql veritabanı kullanırken accesse geçersem kodları değiştirmeme gerek var mı ? Yani Sql ve access için ayrı ayrı kod yapıları mı mevcut ? |
Evet ama çok farkları yok c# için |
Bu mesajda bahsedilenler: @Harun2525