Kod Yazmanın Mantığı, Giriş
-
siyahbereli bunu yazdıyunusemre bunu yazdı
Çok ucu açık bir soru sormuşsun. Milyon tane şey var mantığı anlatılabilecek. Neyi anlamadığını sorarsan onun üzerinden daha rahat yardımcı olabiliriz.
abi bende anlatamıyorum ki, yumurta pişireceğiz diyelim; yumurta var mı, dolabı aç, dolap var mı, var, varsa, aç, yoksa, yumurta pişirmeyi unut, kuru ekmek var mı bak, var, kuru ekmek yada yumurta, yumurta için market var mı, var, varsa markete gitr yoksa kuru ekmek, markette kasaya git, al vsvs... bunların inciğine cincigine kadar yazarım yazılanlarında bir sürü eksiğini gediğini bulabilir. buraya kadar ok. amagel gelelim tek satır kod yazamıyorum sorun bu. syntax mı bilmiyorum. yoksa geri zekalımıyım, yoksa başka bir şey mi onu çözmeye çalışıyorum.
ben programlama öğrenmek istemiyorum kafamda kurguladıklarımı rakamlara ve harflere = + neyse onlara dökemiyorum. sorun bu
bu yaptığın şey zaten algoritma kurmak. Sanırım sen syntax bilmiyorsun, bu yüzden düşündüğünü koda çeviremiyorsun.
O 5 sayfa worde yazdığın algoritmayı yazılıma çevirmeden önce psudo kod ile yazmayı dene.
-BAŞLANGIÇ-
>>> BAŞLA
Yumurta = yok
Tereyağ = Yok
Tuz = Yok
Tava = Yok
Ocak = Yok
Doğalgaz = Yok
Tava var mı?
- Evet
--Tava = Var
- Hayır
---> Markete Git
Ocak var mı?
- Evet
-- Ocak = Var
- Hayır
---> Markete Git
(bunları yumurta tereyağ ve tuz için de yaz)
>>> Yemek Yap
tuz varsa VE tereyağ varsa VE yumurta varsa VE ocak varsa VE doğalgaz varsa VE tava varsa
- Terayağını tavaya koy
- Tavanın altını yak
- 1 dakika bekle
- Yumurtayı tavaya kır
- 3 dakika bekle
- Tavanın altını kapat
- Yemeği ye
---> Bitir'e Git
tuz yoksa VEYA tereyağ yoksa VEYA yumurta yoksa VEYA ocak yoksa VEYA doğalgaz yoksa VEYA tava yoksa
---> Markete Git
>>> Markete Git
- Eksik malzemeleri al
---> Başlaya Git
>>> Bitir
-BİTİŞ-
Sonra bunu sevdiğin bir programlama dilinin syntax'ine çevir.
Hiç programlama dili bilmiyorsan ve mantığı kavramak istiyorsan, linç edileceğimi bile bile söylüyorum, QBASIC programlama dilini öğren. Kafandaki soruları cevaplayacak ve sorduğun mantığı kavramanı sağlayacak dil bence o. Sonra istersen python, istersen c++, istersen php'ye, istersen vb.net 'e geç...
-
Hocam işin çok zor çok. Sıkı çalışman lazım. Bu kodda bu soruları soruyorsan işin var.
Ünilerde lisansta verilem programming languages derslerine internetten bakmanda fayda görüyorum. Syntax o zaman sana daha anlamlı gelebilir.
-
Problemi parçalara bölebiliyorsan işin %50 sini halletmiş olursun
Örneğin bir pacman yazmak istiyorsun, problemi şu parçalara bölücen
1) Ekrana bişey nasıl çizerim
Ekrana pacman nasıl çizerim
Pacmani nasıl animate ederim
2) Klavyeden bi tuşa basıldığını nasıl algılarım
Klavyeden ok tuşlarına basıldığnı nasıl algılarım
3) Pacman in yönünü nasıl çeviririm?
4) Pacmani nasıl yürütürüm?
5) Labirenti nasıl çizerim?
6) Labirentin içine yiycekleri nasıl dizeirm?
7) Pacman yiyecegin üstünde mi nasıl bilirim?
8) Yiyecegi ekrandan nasıl silerim
9) Bütün yiyeceklerin tükendiğini nasıl anlarım
10) Creeplerin kendi kendini oynamasını nasıl sağlarım
11) Creepin Pacmana dokunduğunu nasıl detect ederim?
12) Pacmanın duvara çarptığını nasıl tespit ederim?
13) Levelin sonuna geldiğimde nolacak?
...
Pacmanı belki yazamazsın ama bu küçük parçaların birçoğunu yazabilirsin. Sonra diğer %50 de bu çözümleri okunabilir ve parametrik olacak şekilde birbiriyle birleştirmek yani bunların hepsini içiçe yazarsan senden başkası okuyamaz, muhtemelen sen de 1 ay sonra kendi kodunu okuyamazsın
Konuyu anlatabileceğim en basit hali budur, işin gerçeği sorunun cevabının ne kadar kapsamlı olduğunu bilsen muhtemelen skerim pacmeni başıma bela mı arıyorum der uzaklaşırsın
-
HolyOne bunu yazdı
Problemi parçalara bölebiliyorsan işin %50 sini halletmiş olursun
Örneğin bir pacman yazmak istiyorsun, problemi şu parçalara bölücen
1) Ekrana bişey nasıl çizerim
Ekrana pacman nasıl çizerim
Pacmani nasıl animate ederim
2) Klavyeden bi tuşa basıldığını nasıl algılarım
Klavyeden ok tuşlarına basıldığnı nasıl algılarım
3) Pacman in yönünü nasıl çeviririm?
4) Pacmani nasıl yürütürüm?
5) Labirenti nasıl çizerim?
6) Labirentin içine yiycekleri nasıl dizeirm?
7) Pacman yiyecegin üstünde mi nasıl bilirim?
8) Yiyecegi ekrandan nasıl silerim
9) Bütün yiyeceklerin tükendiğini nasıl anlarım
10) Creeplerin kendi kendini oynamasını nasıl sağlarım
11) Creepin Pacmana dokunduğunu nasıl detect ederim?
12) Pacmanın duvara çarptığını nasıl tespit ederim?
13) Levelin sonuna geldiğimde nolacak?
...
Pacmanı belki yazamazsın ama bu küçük parçaların birçoğunu yazabilirsin. Sonra diğer %50 de bu çözümleri okunabilir ve parametrik olacak şekilde birbiriyle birleştirmek yani bunların hepsini içiçe yazarsan senden başkası okuyamaz, muhtemelen sen de 1 ay sonra kendi kodunu okuyamazsın
Konuyu anlatabileceğim en basit hali budur, işin gerçeği sorunun cevabının ne kadar kapsamlı olduğunu bilsen muhtemelen skerim pacmeni başıma bela mı arıyorum der uzaklaşırsın
Fun Fact:
Pacman'deki hayaletlerin çok ilkel bir yapay zekası olduğu biliyor muydunuz...
-
neverland bunu yazdı
Veri tipleri vardır. Integer, string, float, double vs. vs. vs. Mesela perl dilinde veri tipi yoktur.
$i = 1 der geçersin. $i = "hello" dersin falan.
Her veri tipinin ram'de tutulduğu bir alan vardır. int- 2bytes, char 1-byte gibi. Bu da senin kodun derlenmeden memory'e ne kadarlık bir alana ihtiyacın olduğunu söyleme biçimindir. Yani daha az memory kullanarak yazılım yapabilirsin.
örneğin c senden bir array tanımlarken boyutunu isterki memory'de o kadarlık alan açayım diye ama javascript'te array size vermeden direk array tanımlayabilirsin. Tabi c'de de dynamic array tanımlama yöntemi mevcut. Ama temel olarak basit şekilde bunu yapmana izin vermiyor.
misal; c'de int arr[10]; dersin ama javascript'de arr= []; dersin ve arr.push diyerek istediğin kadar içerisine veri girebilirsin. Yanlış hatırlamıyorsam, c'de pointer'lardan yararlanabiliyordun ve malloc ile memory'de kendine alan açıyordun falan.
diğer konu da şu işe yarıyor: iki tane integer sayıyı böldüğünde bazen float elde edebilirsin. Ama sen bunu bir integer değişkene atarsan sana doğru sonucu vermez. Ya da bir string ile integer'ı topladığında saçma sonuçlar almamana engel olur.
Ayrıca "+" bazı dillerde birleştirme operatorü olarak kullanılır. Örneğin sen i'yi integer yerine string olarak tanımlasaydın, senin yeni i değeri "01" olacaktı. Ama sen burada toplama yapmak istiyordun fakat veri tipin hatalı olduğu için bilgisayar bunu yanlış yorumladı ve yanlış bir sonuç elde ettin vs.
Diğer yazdığın ise, çoğu programlama dilinde "=" assign yani atama görevi görür. Bir eşitlik belirtmez. Sağdaki değeri soldakine atayacağında "=" kullanırsın. Fakat istisnai olarak delphi'de atama belirteçi ":=" budur.
Eşitlik için kullanılan "==", denklik için kullanılan "===" dir. Tabi yine delphi'de "=" eşitlik belirtir.
İşin özü bütün bunlar yazılım dilinin syntax'ına göre değişir. O syntax'ı öğrenmek için de o dili öğrenmen gerekir. Yabancı dil gibi düşün. Biz ambulans dememize rağmen, ingilizler ve amerikalılar ambulance diyor.
Syntax ve neyi nereye yazacağını bilmek miş olay hocam sağolasın. oradan ilerleyeceğim. ayrıca detaylı yazmışsın takıldığım yerde bakacağım. teşekkür ederim
-
akrepkral53 bunu yazdı
hocam çok ince gitmeye çalışıyorsun anladığım kadar. kod yazmayı bırak hayatta bile çok ince düşünmek insanı geriye düşürüyor bazen. kendimden biliyorum bunu. hani derler ya sonunu düşünen kahraman olamaz. akışına bırakmaya çalışıyorum bir çok şeyi.
bilgi sahibi olan kişilerle bir projenin içine girsen çok daha rahat bulursun sorularının cevabını. en azından bir çoğunun. hatta zamanla assembly dilin içine girip kendini hiç düşünmediğin yerlerde bulabilirsin.
lisede yazılım okudum. ilk sene idi galiba 3-5 satır visual basic koduna 2-3 saat baka kaldım. burda bana ne demek istiyor. neden, niçin, nasıl vs. vs.
aklıma şu fıkra geldi. dünyadaki en iyi bilgisayara her ülkeden bir kişi davet ederek soru sorduruyorlar. bizden de temeli yolluyorlar. diğer ülkelerden gelenler bilgisayara soru soruyor, bilgisayar da şak diye cevabını veriyor. sıra temele geliyor. şöyle bilgisayara bir iki sağdan soldan bakıyor ve soruyor. ula ne var ne yok. bilgisayarın beyni karışıyor ve pert oluyor.
her şeyi en ince ayrıntısına kadar anlamak, soruşturmak bazen bizi de pert ediyor :)
katılıyorum biraz ayrıntılı iş yapmak var bende, yorumsuz bakan adam yorumlamaması lazım. şak diye her şeyin görünüyor olması, tüm ihtimallerin düşünülmüş olması lazım. gibi gibi. biraz ezberede kaçıp sonra detaylara da girmek te bir yöntem. teşkr.
-
italyan bunu yazdısiyahbereli bunu yazdıitalyan bunu yazdı
int i;
i=0;
while(i<20)
i=i+1;
Şu kodu okurken kafası senin dediğin şekilde karışan kişi disleksidir.:) yapma beh, matematiğim zayıf, hep ilgisiz hocalara denkgeldim serserilik yaptık, ben matematik ile ilgili zannediyorum
Matematiğinin zayıf olmasının sebebi bile disleksi olabilir. Online bi test yap.Türkiyede bizim jenerasyonda bi ton disleksi var ve kimse farketmemiş. Çırpına çırpına nerelere geldik amk...
türkçe bir sitede yaptım sorular basit geldi, ama yinede %27 çıktı.. olabilir falan diyor. fırsat bulunca detaylı olanlarada bakacağım.
-
NoktaliVirgul bunu yazdısiyahbereli bunu yazdıyunusemre bunu yazdı
Çok ucu açık bir soru sormuşsun. Milyon tane şey var mantığı anlatılabilecek. Neyi anlamadığını sorarsan onun üzerinden daha rahat yardımcı olabiliriz.
abi bende anlatamıyorum ki, yumurta pişireceğiz diyelim; yumurta var mı, dolabı aç, dolap var mı, var, varsa, aç, yoksa, yumurta pişirmeyi unut, kuru ekmek var mı bak, var, kuru ekmek yada yumurta, yumurta için market var mı, var, varsa markete gitr yoksa kuru ekmek, markette kasaya git, al vsvs... bunların inciğine cincigine kadar yazarım yazılanlarında bir sürü eksiğini gediğini bulabilir. buraya kadar ok. amagel gelelim tek satır kod yazamıyorum sorun bu. syntax mı bilmiyorum. yoksa geri zekalımıyım, yoksa başka bir şey mi onu çözmeye çalışıyorum.
ben programlama öğrenmek istemiyorum kafamda kurguladıklarımı rakamlara ve harflere = + neyse onlara dökemiyorum. sorun bu
bu yaptığın şey zaten algoritma kurmak. Sanırım sen syntax bilmiyorsun, bu yüzden düşündüğünü koda çeviremiyorsun.
O 5 sayfa worde yazdığın algoritmayı yazılıma çevirmeden önce psudo kod ile yazmayı dene.
-BAŞLANGIÇ-
>>> BAŞLA
Yumurta = yok
Tereyağ = Yok
Tuz = Yok
Tava = Yok
Ocak = Yok
Doğalgaz = Yok
Tava var mı?
- Evet
--Tava = Var
- Hayır
---> Markete Git
Ocak var mı?
- Evet
-- Ocak = Var
- Hayır
---> Markete Git
(bunları yumurta tereyağ ve tuz için de yaz)
>>> Yemek Yap
tuz varsa VE tereyağ varsa VE yumurta varsa VE ocak varsa VE doğalgaz varsa VE tava varsa
- Terayağını tavaya koy
- Tavanın altını yak
- 1 dakika bekle
- Yumurtayı tavaya kır
- 3 dakika bekle
- Tavanın altını kapat
- Yemeği ye
---> Bitir'e Git
tuz yoksa VEYA tereyağ yoksa VEYA yumurta yoksa VEYA ocak yoksa VEYA doğalgaz yoksa VEYA tava yoksa
---> Markete Git
>>> Markete Git
- Eksik malzemeleri al
---> Başlaya Git
>>> Bitir
-BİTİŞ-
Sonra bunu sevdiğin bir programlama dilinin syntax'ine çevir.
Hiç programlama dili bilmiyorsan ve mantığı kavramak istiyorsan, linç edileceğimi bile bile söylüyorum, QBASIC programlama dilini öğren. Kafandaki soruları cevaplayacak ve sorduğun mantığı kavramanı sağlayacak dil bence o. Sonra istersen python, istersen c++, istersen php'ye, istersen vb.net 'e geç...
katılıyorum hocam, algoritmayı yazacağım. sonra syntaxa dökeceğim. syntaxı da baka baka deneye deneye.. süper teşkr
-
HolyOne bunu yazdı
Problemi parçalara bölebiliyorsan işin %50 sini halletmiş olursun
Örneğin bir pacman yazmak istiyorsun, problemi şu parçalara bölücen
1) Ekrana bişey nasıl çizerim
Ekrana pacman nasıl çizerim
Pacmani nasıl animate ederim
2) Klavyeden bi tuşa basıldığını nasıl algılarım
Klavyeden ok tuşlarına basıldığnı nasıl algılarım
3) Pacman in yönünü nasıl çeviririm?
4) Pacmani nasıl yürütürüm?
5) Labirenti nasıl çizerim?
6) Labirentin içine yiycekleri nasıl dizeirm?
7) Pacman yiyecegin üstünde mi nasıl bilirim?
8) Yiyecegi ekrandan nasıl silerim
9) Bütün yiyeceklerin tükendiğini nasıl anlarım
10) Creeplerin kendi kendini oynamasını nasıl sağlarım
11) Creepin Pacmana dokunduğunu nasıl detect ederim?
12) Pacmanın duvara çarptığını nasıl tespit ederim?
13) Levelin sonuna geldiğimde nolacak?
...
Pacmanı belki yazamazsın ama bu küçük parçaların birçoğunu yazabilirsin. Sonra diğer %50 de bu çözümleri okunabilir ve parametrik olacak şekilde birbiriyle birleştirmek yani bunların hepsini içiçe yazarsan senden başkası okuyamaz, muhtemelen sen de 1 ay sonra kendi kodunu okuyamazsın
Konuyu anlatabileceğim en basit hali budur, işin gerçeği sorunun cevabının ne kadar kapsamlı olduğunu bilsen muhtemelen skerim pacmeni başıma bela mı arıyorum der uzaklaşırsın
Üstad, maddelere bakarak söylüyorum cahilce bir şey söylersem affola, Sonucu geriye doğru bölümlendirmeyi yapabileceğimi düşünüyorum.. tabi ekrana çizgi çizme aşamasınıda deneyerek öğreneceğim. kodun okunaklı olması, hangi kodun ne işe yaradığı textlerle belirterek Camelcase kuralları yazılması, önce analizin hazırlanması, sonra algoritmanın hazırlanması, en son aşama koda dökülmesi ve yazılan her şeyin not alınması gibi gibi. disiplin konusu perfect orada sorun yok bunlara farkıdnalığım var. çalışssında nasıl çalışırsa çalışssın şeklinde düşünmüyorum. analiz algortima örneğinide not alıp an azından uğraşacağım. Teşekkür ederim.
-
siyahbereli bunu yazdıitalyan bunu yazdısiyahbereli bunu yazdıitalyan bunu yazdı
int i;
i=0;
while(i<20)
i=i+1;
Şu kodu okurken kafası senin dediğin şekilde karışan kişi disleksidir.:) yapma beh, matematiğim zayıf, hep ilgisiz hocalara denkgeldim serserilik yaptık, ben matematik ile ilgili zannediyorum
Matematiğinin zayıf olmasının sebebi bile disleksi olabilir. Online bi test yap.Türkiyede bizim jenerasyonda bi ton disleksi var ve kimse farketmemiş. Çırpına çırpına nerelere geldik amk...
türkçe bir sitede yaptım sorular basit geldi, ama yinede %27 çıktı.. olabilir falan diyor. fırsat bulunca detaylı olanlarada bakacağım.
Bircok dahi disleksiymiş Bill Gates de bunlardan.