Arama butonu
Bu konudaki kullanıcılar: 2 misafir, 1 mobil kullanıcı
4171
Cevap
168128
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (67. sayfa)
G
12 yıl
Yarbay

quote:

Orijinalden alıntı: yasasin.domates

Kullanıcıdan alınan değere göre bir küme oluşturan ve aşağıdaki gibi bir çıktı veren program yazmaya çalışıyorum.
{1, 2, 3} dizisinin alt kümeleri;
{ }
{ 1 }
{ 2 }
{ 3 }
{ 1, 2 }
{ 1, 3 }
{ 2, 3 }
{ 1, 2, 3 }

Diziyi oluşturma ve diziye eleman atama kısmını hallettim ama 2 ve 3 elemanlı alt kümelerini nasıl oluşturacağım çözemedim. 8 elemanlı bir küme olursa 4,5,6,7 elemanlı alt kümelerini de buldurmam gerekiyor. Biraz açıklayabilir misiniz?

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
...



G
12 yıl
Yarbay

quote:

Orijinalden alıntı: atilkan

İyi günler,
Yazdığım XOX oyununa yapay zeka eklemek istiyorum. Ancak ne şekilde yapabileceğimi tam olarak çözemedim.
Aklıma gelen tek yöntem benim belirlediğim senaryoları test ederek yapay zekanın ona göre "O" koyması.
Sadece mantık söylerseniz yada basit bi algoritma kurarsanız çok makbule geçer.
Teşekkürler


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.



G
12 yıl
Yarbay

quote:

Orijinalden alıntı: ~H!ddeN

Arkadaşlar, c++'ta bir sorum olacak.
 
int fonksiyon(int* dizi,int a,int b)
{
for(int i=0;i<5;i++)
{
dizi[i]=i;
}
cin>>a>>b;
}

int fonksiyon2()
{

}

Koddaki gibi oluşturduğum değerleri diğer bir fonksiyonda nasıl kullanabilirim? Pointerları bir türlü kavrayamadım. Mesela fonksiyon2 adında bir fonksiyon oluşturdum ve bunda ilk fonksiyondaki diziyi ve a,b değerlerini aynen kullanmak istiyorum. Nasıl yapabilirim?

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


Bu mesaja 1 cevap geldi.
M
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: elektro_gadget

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.


Bu mesaja 1 cevap geldi.
T
12 yıl
Er

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



G
12 yıl
Yarbay

quote:

Orijinalden alıntı: ~H!ddeN

Peki fonk2'de neden dizinin başına & işareti koymadık hocam? Teşekkürler bu arada.

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.


Bu mesaja 1 cevap geldi.
M
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: elektro_gadget

quote:

Orijinalden alıntı: ~H!ddeN

Peki fonk2'de neden dizinin başına & işareti koymadık hocam? Teşekkürler bu arada.

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?


Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

quote:

Orijinalden alıntı: ~H!ddeN

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.


Bu mesaja 1 cevap geldi.
M
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: elektro_gadget

quote:

Orijinalden alıntı: ~H!ddeN

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.


Bu mesaja 1 cevap geldi.
K
12 yıl
Yüzbaşı

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

quote:

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=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ış
quote:

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=|DataDirectory|\muhammed.accdb");

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 ,





< Bu mesaj bu kişi tarafından değiştirildi Koyuncu332 -- 22 Mart 2013; 0:07:44 >
Bu mesaja 1 cevap geldi.
A
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Koyuncu332

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

quote:

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=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ış
quote:

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=|DataDirectory|\muhammed.accdb");

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.


Bu mesaja 1 cevap geldi.
K
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: alifuat_a

quote:

Orijinalden alıntı: Koyuncu332

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

quote:

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=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ış
quote:

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=|DataDirectory|\muhammed.accdb");

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?


Bu mesaja 1 cevap geldi.
A
12 yıl
Yüzbaşı

OleDbConnection bag = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=muhammed.accdb";
demen de yeterli olur


Bu mesaja 1 cevap geldi.
F
12 yıl
Teğmen

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ı?



0
12 yıl
Çavuş



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.



C
12 yıl
Teğmen

quote:

Orijinalden alıntı: £XE

Arkadaşlar buraya böyle bir konu açma ihtiyacı duydum. C/C++/C# da takıldığınız yerler olursa bu konu altında paylaşın. Ben ve diğer arkadaşlar elimizden geldikçe yardımcı olalım.

[size=3]NOT : Bana şu programı yazabilir misiniz ? Tarzında sorulara cevap vermeyeceğim. Önce kendiniz yapabildiğiniz kadar yapın, takıldığınız yerlerde kodu koyup sorun yardımcı olalım..





İyi Çalışmalar.

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


Bu mesaja 2 cevap geldi.
H
12 yıl
Çavuş

quote:

Orijinalden alıntı: can_navaro5

quote:

Orijinalden alıntı: £XE

Arkadaşlar buraya böyle bir konu açma ihtiyacı duydum. C/C++/C# da takıldığınız yerler olursa bu konu altında paylaşın. Ben ve diğer arkadaşlar elimizden geldikçe yardımcı olalım.

[size=3]NOT : Bana şu programı yazabilir misiniz ? Tarzında sorulara cevap vermeyeceğim. Önce kendiniz yapabildiğiniz kadar yapın, takıldığınız yerlerde kodu koyup sorun yardımcı olalım..





İyi Çalışmalar.

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.
 
int main()
{
int number;
printf("Please enter a number");
scanf("%d",&number);
while(number > 0)
{
printf("%d\n",number%10);
number = number / 10 ;
}
return 0;
}


Bu mesaja 1 cevap geldi.
C
12 yıl
Teğmen

quote:

Orijinalden alıntı: Hypersomniac

quote:

Orijinalden alıntı: can_navaro5

quote:

Orijinalden alıntı: £XE

Arkadaşlar buraya böyle bir konu açma ihtiyacı duydum. C/C++/C# da takıldığınız yerler olursa bu konu altında paylaşın. Ben ve diğer arkadaşlar elimizden geldikçe yardımcı olalım.

[size=3]NOT : Bana şu programı yazabilir misiniz ? Tarzında sorulara cevap vermeyeceğim. Önce kendiniz yapabildiğiniz kadar yapın, takıldığınız yerlerde kodu koyup sorun yardımcı olalım..





İyi Çalışmalar.

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.
 
int main()
{
int number;
printf("Please enter a number");
scanf("%d",&number);
while(number > 0)
{
printf("%d\n",number%10);
number = number / 10 ;
}
return 0;
}


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.


Bu mesaja 1 cevap geldi.
H
12 yıl
Çavuş

quote:

Orijinalden alıntı: can_navaro5

quote:

Orijinalden alıntı: Hypersomniac

quote:

Orijinalden alıntı: can_navaro5

quote:

Orijinalden alıntı: £XE

Arkadaşlar buraya böyle bir konu açma ihtiyacı duydum. C/C++/C# da takıldığınız yerler olursa bu konu altında paylaşın. Ben ve diğer arkadaşlar elimizden geldikçe yardımcı olalım.

[size=3]NOT : Bana şu programı yazabilir misiniz ? Tarzında sorulara cevap vermeyeceğim. Önce kendiniz yapabildiğiniz kadar yapın, takıldığınız yerlerde kodu koyup sorun yardımcı olalım..





İyi Çalışmalar.

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.
 
int main()
{
int number;
printf("Please enter a number");
scanf("%d",&number);
while(number > 0)
{
printf("%d\n",number%10);
number = number / 10 ;
}
return 0;
}


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
 
int main( void )
{
int number;
printf("Degeri giriniz= ");
scanf("%d",&number);
int i = 0;
int digits[10];
while(number > 0)
{
digits[i] = number%10;
number = number / 10 ;
i++;
}

for(int j= i-1; j>=0; j--)
{
printf("%d\n",digits[j]);

}
return 0;
}


Bu mesaja 1 cevap geldi.
C
12 yıl
Teğmen

quote:

Orijinalden alıntı: Hypersomniac

quote:

Orijinalden alıntı: can_navaro5

quote:

Orijinalden alıntı: Hypersomniac

quote:

Orijinalden alıntı: can_navaro5

quote:

Orijinalden alıntı: £XE

Arkadaşlar buraya böyle bir konu açma ihtiyacı duydum. C/C++/C# da takıldığınız yerler olursa bu konu altında paylaşın. Ben ve diğer arkadaşlar elimizden geldikçe yardımcı olalım.

[size=3]NOT : Bana şu programı yazabilir misiniz ? Tarzında sorulara cevap vermeyeceğim. Önce kendiniz yapabildiğiniz kadar yapın, takıldığınız yerlerde kodu koyup sorun yardımcı olalım..





İyi Çalışmalar.

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.
 
int main()
{
int number;
printf("Please enter a number");
scanf("%d",&number);
while(number > 0)
{
printf("%d\n",number%10);
number = number / 10 ;
}
return 0;
}


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
 
int main( void )
{
int number;
printf("Degeri giriniz= ");
scanf("%d",&number);
int i = 0;
int digits[10];
while(number > 0)
{
digits[i] = number%10;
number = number / 10 ;
i++;
}

for(int j= i-1; j>=0; j--)
{
printf("%d\n",digits[j]);

}
return 0;
}


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.