Senin belirlediğin değil bütün senaryoları test etmesi lazım ama her olasılığı test etmek if else ile olacak iş değil. XOX gibi çok sınırlı derinlikteki problemler için olabilir ama devamlı olan oyunlarda bu imkansıza yakın ve hataya çok açık olur. Peki nasıl olacak dersen board oyunlarında olasılıkları çözmek için minimax ağacı denen bir veri yapısı kullanılır (bunun çeşitleri de var). Ağacın ne kadar derine ineceği belirlenebilir. Derine indikçe işlemci ve bellek ihtiyacı artar ama program daha zeki olur. Veri yapılarına aşina değil isen önce bağlı liste, ardından ağaçlara dalabilirsin. Çokta zevklidirler. |
int fonk2(int *dizi, int a, int b)... Burada fonk2 içinde dizi de yaptığın her değişiklik orjinal diziyi etkiler çünkü dizinin başlangıç adresi geçirilir ve direkt bu adres üzerinde işlem yapılır. Buna referans ile çağırma denir. a ve b üzerindeki oynamalar ise orjinal a ve b yi etkilemez çünkü bunların adresleri değil sadece sayı değerleri geçirilir. Eğer değişiklik yaptığımda hepsi etkilensin diyorsan hepsinin adresini geçirirsin. Bu durumda fonksiyon başlığı şöyle olacak. int fonk2(int *dizi, int *a, int *b)... Çağırırken de int result = fonk2(dizi, &a, &b); Eğer & olmadan çağırırsan derleme hatası alırsın çünkü türler uyumsuz. int* != int |
Peki fonk2'de neden dizinin başına & işareti koymadık hocam? Teşekkürler bu arada. |
2- #include<stdio.h> BÜ # include<conio.h> MYO main() isminiz isminiz isminiz MYO isminiz *10 defa isminiz isminiz MYO isminiz isminiz isminiz Yukarıdaki çıktıyı SIRASIYLA do-while,while ve for kullanarak yazınız? acele yardım |
O kendiliğinden adres çünkü. Dizi isimleri de aslında bir işaretçidir ama içindeki adresler sabittir değişemez farkı bu. Bunları iyi anlamak istiyorsan adres, dizi ve işaretçi konularını tekrar gözden geçirmelisin. |
O zaman bu diziye eleman atamak için 2. fonksiyonda dizinin başına * işareti mi koymak gerekiyor direk o adresteki elemanı değiştirmek için? |
Evet öyle. dizi ifadesi adresin kendisini verirken *dizi veya dizi[0] o adresteki veriyi temsil eder (dereference). Bu adres ile diğer elemanlara da ulaşılır. *(dizi + 4) veya dizi[4] dersek bu adresten 4 sonraki elemana ulaşmış oluruz. Dizi elemanlarının bellekte ardarda dizilmesi bu imkanı veriyor. Elemanların bellekte rastgele dağıldığı veri yapılarında bu şekilde erişim olamaz. Unutmadan a ve b değişkenlerine de aynı şekilde erişiyoruz. fonk2 deki a adresi verir fakat *a o adresteki içeriği. a[0] da doğrudur ama a[1] yanlış çünkü o bölge bizim değil. |
Tamamdır hocam çok teşekkürler. |
Arkadaşlar bir konuda yardımınıza ihtiyacım var Db lı bır uygulama hazırlıyorum.Veritabanı dosyamı Projem >> Bin >> Debug klasorunun içersine (.exe dosyasının yanına) yerleştirdim ve form içersinde Veritabanı dosya adım :muhammed.accdb Dosyanın Dizini: Projem>> bin >> debug >> muhammed.accdb
Şeklinde kullanıyorum.Visual studio 2012 den Start Debug edınce uygulama sorunsuz calsıyıor. Peki bu uygulamayı bır baska bılgısayarda açmayı denesem Data source yolunu değiştirmeme gerek var mı? Bazı forumlarda şoyle bir yazım türü yapılmış
Bu gösterim ile benım yapıgım gosterımın farkı nedir?Programın farklı bilgisayarlardada veritabanıyla sorunsuz calısabılmesı ıcın hangısını kullanmalıyım ? Teşekkür ederim , |
veri tabanı ile exe dosyanın aynı yerde olması veri tabanını görmesi için yererli yani yol belirtmene gerek yok. datadirectory metot ile kullanılıyor diye biliyorum. |
Uygulamayı setup haline getirirken veritabnı dosyamı .exe dosyası ıle aynı dızıne koyacagım OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source="+Application.StartupPath+"\\muhammed.accdb"; Connectionstringimi de boyle yaptım.Herhangi bir sorun var mı arkadaşlar? |
OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=muhammed.accdb"; demen de yeterli olur |
C # ta form üzerinde kendime ait bir rengi şekli olan nesne yapmak istiyorum. Örneğin kırmızı renkli bir daire. Ama program çalışırken form üzerinde mouse ile onu hareket ettirebileyim. Nasıl yapacağım taktik verebilecek arkadaş var mı? |
Arkadaşlar başlayalı 2 hafta oldu ve bu soruyla karşı karşıyayım..Yardımınıza ihtiyacım olacak zorlanıyorum.. 1 saat uğraştım fakat daha en başından hata alıyorum..Soru şu : Kullanıcıdan klavye yoluyla aldığımız iki tarih arasındaki(gün,ay,yıl) gün sayısını hesaplayarak geri döndüren c++ konsol uygulaması yazınız.. Extra sorudaki bilgiler şöyle : 1-) Gün,ay ve yıl unsigned short int veri tipinde saklanacak. 2-) Artık yıllar da dikkate alınacak.Şubat 4 senede bir 29 çekiyor. 3-) Eğer mevcut olmayan tarih girilirse mesela 20.15.2013 (12'den fazla ay numarası olmaz.) uyarı vericek. 4-) Ayrıca fonksyon,global değişken ve dizi kullanımına izin yok.Sadece if-else,while,for gibi basit şeylerle yazılacak.Zannediyorum program biraz uzun ama uğraşan arkadaşlar olrsa çok sevinirim. Birkaç test sonucu var onlarıda veriyim örnek olarak : 1,1,2013 ile 2,1,2013 arasında 1 gün vardır. 1,1,2012 ile 1,3,2012 arasında 60 gün vardır. (Artık yıl) 1,1,2011 ile 8,8,2013 arasında 585 gün vardır. 1,1,1900 ile 31,12,1999 arasında 36523 gün vardır. 1,13,2008 ile 2,12,2009 Girilen 1.tarih hatalı. Bilgiler bukadar yardımcı olabilecek arkadaşlarıma şimdiden teşekkür ediyorum. |
klavyeden girilin bir sayının rakamlarını alt alta yazmak hakkında yardımcı olabilirmisiniz.printf'i kullandım ama sürekli hata veriyo 3 güne ödevimi yetiştirmem gerekiyor yardımcı olursanız sevinirim |
Dogru anladiysam su tarz bir sey istiyorsun sanirim.
|
yardımın için sağol.evet bende bunu yaptım ama programı çalıştırdığım zaman hem rakamları terse yazıyor hemde programı hemen kapatıyor. örnek değeri giriniz=123 1 2 3 bunun olmasını istiyorum ama rakamlar tersten yazılıyor.yardımcı olabilirsen sevinirim. |
Daha kisada yapilir kesin ama bu saatte kafa yormak istemedim
|
eyvallah arkadaşım çok sağol kaç gündür uğraşıyordum.müsait olduğun bi zaman kısa halini de yazarsan çok sevinirim. |
Bu konu düşmüş yukarı taşıyalım.
Biraz geç olacak ama bunun güzel bir yöntemi var. Önce bir unsigned değişken oluşturup sıfırlarız.
unsigned int alt = 0;
Bu değişkendeki 1 olan bitler bize sırasıyla altkümeleri verecek. Her seferinde değişkeni 1 arttırıp 1 olan bitlere karşılık gelen küme elemanlarını yazdıracağız. Örneğin küme 3 elemanlı ise bize ilk 3 bit lazım.
Küme = {3,2,1}
alt = 000 = { }
++alt = 001 = {1}
++alt = 010 = {2}
++alt = 011 = {2,1}
++alt = 100 = {3}
++alt = 101 = {3,1}
++alt = 110 = {3,2}
++alt = 111 = {3,2,1}
1 olan bitleri test etmek için değişken uygun bir sayı ile & işlemine sokulur.
unsigned int sayi = 1;
if(alt & sayi) // 0. bit 1
sayi <<= 1;
if(alt & sayi) // 1. bit 1
sayi <<= 1;
if(alt & sayi) // 2. bit 1
...