C# Merak Ettiklerim
-
Bildiğiniz gibi alaylı olarak kendi kendime netten videolar izleyerek okuyarak daha çokda basitten yazarak öğrenmeye çalışıyorum.
merak ettiğim bir soru var bu soru belki çok basit ama çok basit olduğundan hiçbiryerde açıklamasınıda göremedim. merakta ediyorum buraya sorayım dedim.
Şimdi biz saysal değerlerle işlem yapacağımız zaman.
benim diyelimki işim pozitif çift sayı ile alakalı bunun için double kullanılıyor.
fakat aynı kümeyi long da içine alıyor.
dolayısı ile o daha geniş küme de tanımlamam daha rahat bir yöntem değilmi? yada int aralığı zaten yetiyor ama ben long olarak tanımladım ne farkediyor?
bunun haricinde şöyle birşeye rastgeldim.
http://www.csharpuygulamalar.com/2013/12/c-sharp-form-haritadan-sehir-ismi-bulma-oyunu.html
bu sitede çeşitli basit oyunlar var. kodlarını filan inceliyorum .
bu attığım linkteki kodda şöyle yazıyor.
/* Copyright HolyOne Aytek Üstündağ http://www.tahribat.com holyone@tahribat.com */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; namespace HolyOne { public class Turkey { public class City
:) buda güzel tesadüf oldu
-
Şimdi bir programın vardır, mesela bir takvim programı.
Bir takvimde günleri sayarsak en fazla 365 gün, hade 366 gün vardır,
ve bu nedenle kodlayacağımız program en fazla 366 rakamına kadar işlem yapacaktır.
366 rakamı en fazla 10 bit yer kaplayacaktır.
Uygulamamız gün sayısı için 16 bit bellek alanı ayıracaktır.
Ama biz günleri sayan uygulamamız için 366 rakamını kapsayan long tipinden bir veri tanımlar isek.
Yılın birinci günü için de yılın 366 ıncı günü içinde uygulamamız 64 bit yer ayıracaktır.
1 uygulamada yer alan veri için bellekte 16 bit yer ayırması ile 64 bit yer ayırması çok önemli bir fark olmayabilir.
Ama uygulamamızı aynı anda 1 milyon kişinin kullandığını düşünür isek,
bu sefer sistemin bellek alanı yetmeyecektir. Ve uygulamamız çökecektir.
Kısacası, senin sorunun cevabı belleğin verimli kullanımıdır.
-
hım evet tabloda yanlarda 2byt 4 byte filan yazıyordu minik şeyler diye takmadım kafama.
boşuna kalabalık arasından işlem yaptırmayalım diye o zaman :)
-
patates bunu yazdı
...Şimdi biz saysal değerlerle işlem yapacağımız zaman.
benim diyelimki işim pozitif çift sayı ile alakalı bunun için double kullanılıyor.
fakat aynı kümeyi long da içine alıyor.
dolayısı ile o daha geniş küme de tanımlamam daha rahat bir yöntem değilmi? yada int aralığı zaten yetiyor ama ben long olarak tanımladım ne farkediyor?...
Bellek tasarrufunun yanı sıra işlemcinin mimarisi de etken. Örneğin 32 bitlik işlemci en basit anlamda 32bitlik veriler üzerinde işlemi tek seferde tamamlarken 64 bitlik veride 2-3 çevrim yapması gereklidir. Şayet 32 bitlik parçaları yazmaçlarına alır, toplar, kalan bitini aktifleştirir, ikinci kısımları alır, toplar elde bitini ekler yerine koyar gibi... Sadece .NET için değil de C kodu için konuşursak sadece bu da etken değil. Bazı apiler (ya da bileşenler) belirli boyutta değişken kümeleri ya da yapılara ihtiyaç duyar. Bu yüzden daha düşük aralıklarda veri depolayan tipler var. Örneğin: https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute%28v=vs.110%29.aspx Ağ üzerinden (soketler aracılığıyla) bir şey transfer ettiğinde düşün bir de.
İkincisi şu: Bilgisayar kayar noktalı sayıları bizim gibi ele almaz. Virgülden sonraki her bitin değeri (2)^(-n) şeklindedir. Yani (101.101)2 = 5,625'e eşittir. Yani sen float, double gibi tiplerle örneğin 3,12'yi tutturamazsın. Aşağıdaki döngü işe sonsuz olabilir:
for(float f= 0.0f; f < 4.0; f+=0.1f)
{
}
-
Önce bi temel edinmen lazım.
video izleyerek öğreniyorsan videoları pür dikkat izle çünkü bir anlık anlatımı kaçırırsan bazı işlerin işleyişini anlayamazsın
en basitinden adam if'i anlatır dinlersin bir an başka bi iş ile uğraşırsın if içindeki işlem önceliğini söyler bir cümleden orayı kaçırırsın.
sonra hayda :) neden okumuyor şart sağlıyor dersin if içinde tek koşulda zaten problem yaşamıyorsun ama çok koşul olunca önce hangi koşulu denetleyecek gibi bir muhabbet :)
senaryoyu kafadan yazdım çürütmeyin hemen :)
-
evet. hiçbir video yokki sıfırdan paldır küldür bu işe başlayana en temel şeyi dahi anlatarak ilerlesin.
Açıkçası düzenli ve sabit bir yoldada ilerlemiyorum. Youtubedan açık akademiden biraz izledim.
bir kaç hesap makinası tarzı basit işler yaptım örneklere bakarak.
bir kaç mühendisliklerin sanıyorum ilk vize soruları vardı onların algoritmasını ve mantığını çıkarabildim fakat doğru şekilde cod a geçiremedim.
alışkın olmadığım için. burda if kullanılır burda şu kullanılır ı biliyorum. fakat yazarken hatalarım oluyo.
çoğunlukla basit bir uygulamaya netten bakıp. bunu nasıl yapmıştır diye düşünüp bir kağıda yazıyorum. sonra kodlamasına bakıyorum. öyle öyle anlamaya başladım.
fakat ben şu an kitap alıcam. yani eğitimi karışık yaptığım için başından kıçından olmuyor:)
tavsiyeleriniz varsa çok makbule geçer:)
-
https://msdn.microsoft.com/en-us/library/jj153219.aspx?f=255&MSPPError=-2147217396
buradan yararlanabilirsin.
-
RockZs bunu yazdı
https://msdn.microsoft.com/en-us/library/jj153219.aspx?f=255&MSPPError=-2147217396
buradan yararlanabilirsin.
bir app aracılığı ile ingilizce olarak öğrenmey eçalıştığım ayrı bir serüven yaşıyorum. Bununla birlikte ağır olabilir.
ama arama vs yaptığım zaman yabancı fotmumlarda genelde ref olarak bunu atmış oluyorlar kurcalıyorum yani
-
Kitapsız olmaz bu işler. Sefer Algan'ın kitabından şaşma. http://www.kitapyurdu.com/kitap/her-yonuyle-c-60/53477.html
Her ne kadar yazar pek sevilmese ve C/C++ kitapları hatalarla dolu olduğu söylense de http://www.hepsiburada.com/c-4-0-herkes-icin-pm-kalfa63799 kitabı gayet anlaşılır ve C#'ı baştan öğrenmek için iyi.
-
Küçük basit uygulamalar için memory işlemleri o kadar önemli olmaz, yani günümüz bilgisayarları oldukça geliştiği için aradaki performans farkını hissedemezsin ancak çok büyük uygulamalarda bu performans olayları göze batmaya başlar. Veri Tipleri konusunu bir gözden geçirirsen kafanda olaylar daha da netleşir diye düşünüyorum.
-
Açıkakademi varken ne bileyim başka kaynak aramak