Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4171
Cevap
169688
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (55. sayfa)
G
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: espanolun
  
private void btnKelebek_Click(object sender, EventArgs e)
{
string yazi = txtYazi.Text;
string c = "";

for (int i = 0; i < yazi.Length; i++)
{
for (int j = 0; j <= i; j++)
{
c = yazi.Substring(0, j + 1).ToString();
}

lsbListe.Items.Add(c);

string[] ters1 = new string[yazi.Length];
for (int k = 0; k < yazi.Length; k++)
{
ters1[k] = c;
}
c = "";
}


for (int i = 0; i < yazi.Length; i++)
{
for (int j = 0; j < yazi.Length-i; j++)
{
c = yazi.Substring(0, j).ToString();
}
lsbListe.Items.Add(c);
c = "";
}
}

Ne yazikki C# bilgim yoktur.

Ama boyle bir sekilde olmuyor mu bu is ?

 
private void btnKelebek_Click(object sender, EventArgs e)
{
string yazi = txtYazi.Text;
string c = "";

for (int i = 0; i < yazi.Length; i++)
{
c = yazi.Substring(0, i+1).ToString();
c += new string (' ', yazi.Length-(i+1))*2);
c += yazi.Substring(yazi.Length-(i+1),(i+1)).ToString();
lsbListe.Items.Add(c);
}

//ALT tarafi unutmusum.
for (int i = yazi.Length-2; i >= 0; i--)
{
c = yazi.Substring(0, i+1).ToString();
c += new string (' ', yazi.Length-(i+1))*2);
c += yazi.Substring(yazi.Length-(i+1),(i+1)).ToString();
lsbListe.Items.Add(c);
}
}





< Bu mesaj bu kişi tarafından değiştirildi garui -- 16 Ocak 2013; 16:30:04 >

-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: espanolun

teşekkürler, bir ikiz düzeltme ile işimi çözdüm...
bir soru daha var aslında..

soru: textbox'tan bir string alıyoruz...örneğin KELEBEK olsun..(listboxa bunun her karakterini sırayla atıyoruzz ama snucta bir kelebek şekl çıkacak biçimde..altta görüntü ekledim.
kelebegin sol kanadını yaptım ama sağ kanadını yapamadım.



< Resime gitmek için tıklayın >

Ben konsol uygulaması olarak yaptım sen form uygulamasına göre uyarlarsın.
Burada yaparkan ilk K'yı yaparkan karşısındakini de yapman gerekir.

 
string yazi = "KELEBEK";

// KELEBEK'in üst tarafı
for(int i = 0; i < yazi.Length; i++)
{
// Sol taraf
for(int j = 0; j <= i; j++)
{
Console.Write(yazi[j]);
}
// Karsisini yapmak icin gerekli bosluklar
for(int k = 0; k < (yazi.Length - 1) * 2 - 2 * i; k++)
Console.Write(" ");

// Karsi taraf(sag)
for(int j = i; j >= 0; j--)
{
Console.Write(yazi[j]);
}
Console.WriteLine();
}
// KELEBEK'in alt tarafı
for(int i = yazi.Length - 2; i >= 0; i--)
{
for(int j = 0; j <= i; j++)
{
Console.Write(yazi[j]);
}
for(int k = 0; k < (yazi.Length - 1) * 2 - 2 * i; k++)
Console.Write(" ");

for(int j = i; j >= 0; j--)
{
Console.Write(yazi[j]);
}
Console.WriteLine();
}



Daha iyi ve kısa bir yöntemi olabilir şimdilik benim aklıma gelen bu.





< Bu mesaj bu kişi tarafından değiştirildi -Source- -- 16 Ocak 2013; 16:13:23 >
Bu mesaja 1 cevap geldi.
E
12 yıl
Binbaşı

çok teşekkür ederim....consloda tam istediğim gibi....forma çevireyim hemen...



S
12 yıl
Çavuş

quote:

Orijinalden alıntı: Seviyeli Yarbay

#include <iostream>
using namespace std;
int main()
{
cout << “Merhaba Bu Ilk Programimiz” << endl;
return 0;
}

bunun neresi hatalı

Hatan yok, sonuna programi durduracak bir fonksiyon eklememissin program calisiyor ama senin goremeyecegin bir hizda kapaniyodur. cstdlib kutuphanesini include edip system("pause") fonksiyonunu cagir, sen entere basana kadar uygulama bekler. Veya conio.h kutuphanesini ekleyip getch() fonksiyonunu cagir program sen herhangibir tusa basana kadar beklesin



< Bu ileti tablet sürüm kullanılarak atıldı >

S
12 yıl
Yarbay

@serkat çok teşekkür ederim.

bir de genel bi şey sormak istiyorum, arkadaşlar bizim bi hesap makinesi ödevi vardı program istenilen şekilde çalışıyor fakat ödevde istenilen class oluşturma, prototip, kaynak kodu gibi ifadeler var ve ben bilmiyorum.

ben bu class mantığını en iyi şekilde nasıl öğrenebilirim ve class eklerken programda ciddi değişiklikler yapmam gerekecek mi?





< Bu mesaj bu kişi tarafından değiştirildi Seviyeli Yarbay -- 17 Ocak 2013; 21:46:15 >

< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 2 cevap geldi.
R
12 yıl
Yüzbaşı

arkadaşlar bazı merak ettiğim şeyler var daha yeni sayılırım C'de.

Birincisi return ile değişkeni döndürmenin tam olarak manası ne? Döndürme derken nasıl döndürüyor yani? Bir de Pointerlarla ilgili aklıma bir şey takıldı. int *ptr şeklinde pointerı tanımlıyoruz örneğin daha sonra ptr = &x diyoruz x'in adresini tutması için bunun yerine direk &x i kullansak programda ne farkı var?


Bu mesaja 1 cevap geldi.
C
12 yıl
Onbaşı

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: espanolun

selamlar, c# ta yeni sayılırım. bir ödev var. ödev şu textbox'tan aldığımız bir sayının 11'e tam bölünüp böülenemdiğini bulacağız.

11'e bölünebilme kuralı, sayının son rakamından başlayarak bunları+,-,+,- olarak işaretlendirmek ve sonrasında bunları toplama..eğer sıfır ve 11 in katıs ise tam bölünür.

nasıl yapabiliriz. aldığım string uzunluguna göre dizi yaptım. ama sndan başlayıp nasıl bir for döngüsü ile +,- olarak alıancak bunlar.. şimdiden teşerkküler

Sayımız 152347 olsun. Ve senin bunu aşağıdaki gibi diziye attığını varsayıyorum.
Kod açık ama flag kısmını açıklayım.
Döngüye ilk girdiğinde flag = false bu yüzden else düşecek ve flag'ı true yapacak. Yani 7'e bir nevi + koymuş olduk. Şimdi sıra 4'e - koymada. 2. döngüde flag = true bu yüzden if'e girdik içindeki değeri -1 ile çarptık. Böylece bir onu da - ledik ve flag'ı false yaptık. Bir sonraki for'un dönüşünde else düşüp 3'ü + olarak işaretmesi için. Ve böyle devam ediyor.
Sonra foreach ile dizideki sayıları toplattım. Sen sonra bu toplamın 11 in katı olup olmadıgına bakacaksın.
int[] dizi = new int[6] {1,5,2,3,4,7 };
bool flag = false; // False ise + gelecek, True ise -

for(int i = dizi.Length - 1; i >= 0; i--)
{
if(flag)
{
dizi *= -1;
flag = false;
}
else
flag = true;
}

int toplam = 0;
foreach(int sayi in dizi)
toplam += sayi;

Zorunluluk mu var 11'e bölünebilme kuralını uygulama ile :D

 
if (sayi%11==0)
{
sayı tam bölünür
}
else
{
bölünmez
}


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

quote:

Orijinalden alıntı: Conqueror42

arkadaşlar bazı merak ettiğim şeyler var daha yeni sayılırım C'de.

Birincisi return ile değişkeni döndürmenin tam olarak manası ne? Döndürme derken nasıl döndürüyor yani? Bir de Pointerlarla ilgili aklıma bir şey takıldı. int *ptr şeklinde pointerı tanımlıyoruz örneğin daha sonra ptr = &x diyoruz x'in adresini tutması için bunun yerine direk &x i kullansak programda ne farkı var?

return geri dönüş değeri olarak tanımlanır. Örneğin siz bir fonksiyon tanımladığınızda, misal:


x sayısının faktöriyelini belirleyen bir fonksiyon olsun.

Fonksiyon x değerini parametre olarak alır, içerisinde işlemler yapar, ve x! değerini geri döndürür. main fonksiyonu içerisinde bu fonksiyonu çağırdığımızda gerekli işlemi yaptıktan sonra istediğimiz değeri bize yollar.

C#'ta referans ve değer tipleri için konuşuyorum. Değer tipleri belleğin stack bölgesi dediğimiz alanda tutulurlar, değeri taşır. Hızlıca erişmek mümkündür. Referans türleri ise veri yerine adresi bellekte tutar ve o adresin gösterildiği yerde de veri tutulur.



M
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Seviyeli Yarbay

@serkat çok teşekkür ederim.

bir de genel bi şey sormak istiyorum, arkadaşlar bizim bi hesap makinesi ödevi vardı program istenilen şekilde çalışıyor fakat ödevde istenilen class oluşturma, prototip, kaynak kodu gibi ifadeler var ve ben bilmiyorum.

ben bu class mantığını en iyi şekilde nasıl öğrenebilirim ve class eklerken programda ciddi değişiklikler yapmam gerekecek mi?

class'lar sınıflardır. Bunlar programı daha kolay kılmak için programı parçacıklara ayırmaktır. Aksine işi daha da kolaylaştırır. Belirli işlemleri yapacak classlar tanımlarsınız, programı dallandırırsınız yani. Karmaşık programları bir bütün olarak yapmak yerine, parçalar halinde yaparak birleştirirsiniz.



-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: celalettin1286

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: espanolun

selamlar, c# ta yeni sayılırım. bir ödev var. ödev şu textbox'tan aldığımız bir sayının 11'e tam bölünüp böülenemdiğini bulacağız.

11'e bölünebilme kuralı, sayının son rakamından başlayarak bunları+,-,+,- olarak işaretlendirmek ve sonrasında bunları toplama..eğer sıfır ve 11 in katıs ise tam bölünür.

nasıl yapabiliriz. aldığım string uzunluguna göre dizi yaptım. ama sndan başlayıp nasıl bir for döngüsü ile +,- olarak alıancak bunlar.. şimdiden teşerkküler

Sayımız 152347 olsun. Ve senin bunu aşağıdaki gibi diziye attığını varsayıyorum.
Kod açık ama flag kısmını açıklayım.
Döngüye ilk girdiğinde flag = false bu yüzden else düşecek ve flag'ı true yapacak. Yani 7'e bir nevi + koymuş olduk. Şimdi sıra 4'e - koymada. 2. döngüde flag = true bu yüzden if'e girdik içindeki değeri -1 ile çarptık. Böylece bir onu da - ledik ve flag'ı false yaptık. Bir sonraki for'un dönüşünde else düşüp 3'ü + olarak işaretmesi için. Ve böyle devam ediyor.
Sonra foreach ile dizideki sayıları toplattım. Sen sonra bu toplamın 11 in katı olup olmadıgına bakacaksın.
int[] dizi = new int[6] {1,5,2,3,4,7 };
bool flag = false; // False ise + gelecek, True ise -

for(int i = dizi.Length - 1; i >= 0; i--)
{
if(flag)
{
dizi *= -1;
flag = false;
}
else
flag = true;
}

int toplam = 0;
foreach(int sayi in dizi)
toplam += sayi;

Zorunluluk mu var 11'e bölünebilme kuralını uygulama ile :D

 
if (sayi%11==0)
{
sayı tam bölünür
}
else
{
bölünmez
}




Arkadaşım sana desem bilmiyorum. Sence öyle bir zorunluluk olsa neden kuralı uygulamayalım?


Bu mesaja 1 cevap geldi.
C
12 yıl
Onbaşı

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: celalettin1286

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: espanolun

selamlar, c# ta yeni sayılırım. bir ödev var. ödev şu textbox'tan aldığımız bir sayının 11'e tam bölünüp böülenemdiğini bulacağız.

11'e bölünebilme kuralı, sayının son rakamından başlayarak bunları+,-,+,- olarak işaretlendirmek ve sonrasında bunları toplama..eğer sıfır ve 11 in katıs ise tam bölünür.

nasıl yapabiliriz. aldığım string uzunluguna göre dizi yaptım. ama sndan başlayıp nasıl bir for döngüsü ile +,- olarak alıancak bunlar.. şimdiden teşerkküler

Sayımız 152347 olsun. Ve senin bunu aşağıdaki gibi diziye attığını varsayıyorum.
Kod açık ama flag kısmını açıklayım.
Döngüye ilk girdiğinde flag = false bu yüzden else düşecek ve flag'ı true yapacak. Yani 7'e bir nevi + koymuş olduk. Şimdi sıra 4'e - koymada. 2. döngüde flag = true bu yüzden if'e girdik içindeki değeri -1 ile çarptık. Böylece bir onu da - ledik ve flag'ı false yaptık. Bir sonraki for'un dönüşünde else düşüp 3'ü + olarak işaretmesi için. Ve böyle devam ediyor.
Sonra foreach ile dizideki sayıları toplattım. Sen sonra bu toplamın 11 in katı olup olmadıgına bakacaksın.
int[] dizi = new int[6] {1,5,2,3,4,7 };
bool flag = false; // False ise + gelecek, True ise -

for(int i = dizi.Length - 1; i >= 0; i--)
{
if(flag)
{
dizi *= -1;
flag = false;
}
else
flag = true;
}

int toplam = 0;
foreach(int sayi in dizi)
toplam += sayi;

Zorunluluk mu var 11'e bölünebilme kuralını uygulama ile :D

 
if (sayi%11==0)
{
sayı tam bölünür
}
else
{
bölünmez
}




Arkadaşım sana desem bilmiyorum. Sence öyle bir zorunluluk olsa neden kuralı uygulamayalım?

aslinda burda oop 'un boyle ogretilemeyecegi ile ilgili gonderme yapmistim ama neyse bosver.


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

quote:

Orijinalden alıntı: celalettin1286

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: celalettin1286

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: espanolun

selamlar, c# ta yeni sayılırım. bir ödev var. ödev şu textbox'tan aldığımız bir sayının 11'e tam bölünüp böülenemdiğini bulacağız.

11'e bölünebilme kuralı, sayının son rakamından başlayarak bunları+,-,+,- olarak işaretlendirmek ve sonrasında bunları toplama..eğer sıfır ve 11 in katıs ise tam bölünür.

nasıl yapabiliriz. aldığım string uzunluguna göre dizi yaptım. ama sndan başlayıp nasıl bir for döngüsü ile +,- olarak alıancak bunlar.. şimdiden teşerkküler

Sayımız 152347 olsun. Ve senin bunu aşağıdaki gibi diziye attığını varsayıyorum.
Kod açık ama flag kısmını açıklayım.
Döngüye ilk girdiğinde flag = false bu yüzden else düşecek ve flag'ı true yapacak. Yani 7'e bir nevi + koymuş olduk. Şimdi sıra 4'e - koymada. 2. döngüde flag = true bu yüzden if'e girdik içindeki değeri -1 ile çarptık. Böylece bir onu da - ledik ve flag'ı false yaptık. Bir sonraki for'un dönüşünde else düşüp 3'ü + olarak işaretmesi için. Ve böyle devam ediyor.
Sonra foreach ile dizideki sayıları toplattım. Sen sonra bu toplamın 11 in katı olup olmadıgına bakacaksın.
int[] dizi = new int[6] {1,5,2,3,4,7 };
bool flag = false; // False ise + gelecek, True ise -

for(int i = dizi.Length - 1; i >= 0; i--)
{
if(flag)
{
dizi *= -1;
flag = false;
}
else
flag = true;
}

int toplam = 0;
foreach(int sayi in dizi)
toplam += sayi;

Zorunluluk mu var 11'e bölünebilme kuralını uygulama ile :D

 
if (sayi%11==0)
{
sayı tam bölünür
}
else
{
bölünmez
}




Arkadaşım sana desem bilmiyorum. Sence öyle bir zorunluluk olsa neden kuralı uygulamayalım?

aslinda burda oop 'un boyle ogretilemeyecegi ile ilgili gonderme yapmistim ama neyse bosver.

Amaç algoritma mantığını geliştirmek olabilir. Bence güzel bir soru. Bir sonuca varılabilir, fakat çözüm mantığı bilinmeden benzer bir soru çözülemeyebilir. Olabildiğince zoru her zaman iyidir.


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

arkadaşlar c++ ödevim var hesap makinesi yapma.
ödevi aslında yaptım fakat class oluşturmam gerekiyormuş, en az 30 puan kırılacak ve ben nasıl oluşturulduğunu bilmiyorum. 2-3 saattir çalışıyorum fakat mantığını oturtamadım bi türlü uygulamaya koyamıyorum.

pazartesiye teslim etmem lazım, gerekirse internetten kopyala yapıştır yapacağım 0 almaktan iyidir.

tavsiye verebilecek, yardımcı olabilecek varsa çok memnun olurum.
aslında şu şekilde yazdım ama çeviremiyorum class'lı şekline.

 
#include <iostream>
using namespace std;
int main() {
float x,y,z;
cout<<"1. Sayi Degerini Giriniz : ";
cin>>x;
cout<<"2. Sayi Degerini Giriniz : ";
cin>>y;
cout<< "1-Toplama" << endl;
cout<< "2-Cikarma" << endl;
cout<< "3-Carpma" << endl;
cout<< "4-Bolme" << endl;
cout<<"Islem Turunu Giriniz : ";
cin>>z;
if (z<1 || z>4){
cout<<"Hata : 1-4 Arasi Bir Deger Giriniz";
}
if (z==1){
cout<<x+y;
}
if (z==2){
cout<<x-y;
}
if (z==3){
cout<<x*y;
}
if (z==4){
if(y==0){
cout<<"Tanimsiz";
}
else{
cout<<x/y;}
}
system( "PAUSE");
return 0;
}





< Bu mesaj bu kişi tarafından değiştirildi Seviyeli Yarbay -- 19 Ocak 2013; 16:29:45 >
Bu mesaja 1 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Seviyeli Yarbay

arkadaşlar c++ ödevim var hesap makinesi yapma.
ödevi aslında yaptım fakat class oluşturmam gerekiyormuş, en az 30 puan kırılacak ve ben nasıl oluşturulduğunu bilmiyorum. 2-3 saattir çalışıyorum fakat mantığını oturtamadım bi türlü uygulamaya koyamıyorum.

pazartesiye teslim etmem lazım, gerekirse internetten kopyala yapıştır yapacağım 0 almaktan iyidir.

tavsiye verebilecek, yardımcı olabilecek varsa çok memnun olurum.
aslında şu şekilde yazdım ama çeviremiyorum class'lı şekline.

 
#include <iostream>
using namespace std;
int main() {
float x,y,z;
cout<<"1. Sayi Degerini Giriniz : ";
cin>>x;
cout<<"2. Sayi Degerini Giriniz : ";
cin>>y;
cout<< "1-Toplama" << endl;
cout<< "2-Cikarma" << endl;
cout<< "3-Carpma" << endl;
cout<< "4-Bolme" << endl;
cout<<"Islem Turunu Giriniz : ";
cin>>z;
if (z<1 || z>4){
cout<<"Hata : 1-4 Arasi Bir Deger Giriniz";
}
if (z==1){
cout<<x+y;
}
if (z==2){
cout<<x-y;
}
if (z==3){
cout<<x*y;
}
if (z==4){
if(y==0){
cout<<"Tanimsiz";
}
else{
cout<<x/y;}
}
system( "PAUSE");
return 0;
}


Sınıf oluşturmak kolay aslında 2-3 saat neye, nereye baktın da anlamadın şaşırdım.

class HesapMakinesi
{
public:
int topla(int ilkDeger, int ikinciDeger) { return (ilkDeger + ikinciDeger);}
int cikart(int ilkDeger, int ikinciDeger) { return (ilkDeger - ikinciDeger);}
int carp(int ilkDeger, int ikinciDeger) { return (ilkDeger * ikinciDeger);}
int bol(int ilkDeger, int ikinciDeger) { return ikiciDeger == 0 ? -1 : (ilkDeger / ikinciDeger);} // ikinciDeger 0 ise -1 dönderir.
};

Bunu main'in üstüne yazacan. Sonra aşağıda ki kodu main içine senin if li yeri benim yazdığımla değiştir.

int secim = 0;
cout<<"Islem Turunu Giriniz : ";
cin>>secim;

HesapMakinesi *hMakinesi = new HesapMakinesi; // Sınıftan yeni nesne oluşturuyorum.

switch(secim)
{
case 1:
cout << hMakinesi->topla(x,y) << endl;
break;
case 2:
cout << hMakinesi->cikart(x,y) << endl;
break;
case 3:
cout << hMakinesi->carp(x,y) << endl;
break;
case 4:
cout << hMakinesi->bol(x,y) << endl;
break;
default:
cout << "Yanlis bir deger girdiniz!\n";
}


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

@source şimdi şöyle karışık bi durum var, bize direk c++ anlattılar ve sınıfta java görmeyenler olarak çok az bi bölümüz sürekli java üzerinden anlatılıyor neredeyse biz de arap gibi bakıyoruz. daha önce hiç alakadar da olmadım bu programlama işiyle o yüzden zorluk çekiyorum.

çok çok teşekkür ederim, ne desem az :)


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

Rica ederim işine yaradıysa ne mutlu bana. C++ zaten OOP bir dildir. Ben daha hiç java görmedim bunun java ile alakası yok zaten.



S
12 yıl
Teğmen

Merhabalar benim de kücük bir sorunum var
 
int yil;

double miktar, anapara = 1000.0, oran = .05;

printf("%4s%21s\n", yil, depozito miktari);

for (yil = 1; yil <= 10; yil++){

miktar = anapara * pow(1.0 + oran, yil);

printf("%3d%21.2fn", yil, miktar);


sorularıma gelelim burada kullanılan %4s %21s falan bunlar ne işe yarıyor mesela %.2f şeklinde yazımların floatta virgülden sonra iki basamak göster şeklinde oldugunu biliyorum da s ve başında sayı olan d lerin ne işe yaradığını bilmiyorum şunları bi acıklayabilecek var mı ?


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

quote:

Orijinalden alıntı: SaRpKaN

Merhabalar benim de kücük bir sorunum var
 
int yil;

double miktar, anapara = 1000.0, oran = .05;

printf("%4s%21s\n", yil, depozito miktari);

for (yil = 1; yil <= 10; yil++){

miktar = anapara * pow(1.0 + oran, yil);

printf("%3d%21.2fn", yil, miktar);


sorularıma gelelim burada kullanılan %4s %21s falan bunlar ne işe yarıyor mesela %.2f şeklinde yazımların floatta virgülden sonra iki basamak göster şeklinde oldugunu biliyorum da s ve başında sayı olan d lerin ne işe yaradığını bilmiyorum şunları bi acıklayabilecek var mı ?

Boşluk bırakmayı sağlar, iki değişkenin yazımı arasına boşluk bırakıp tablo oluşturmanızı sağlar. Yazılan karakter kadar boşluk bırakır.


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

Örneğin d[10]={1,2,3,4,5,6,6,7,8,9,0} gibi bir dizimiz olsa program her başladığında dizideki elemanların sıralarının değişmesini nasıl sağlarız (yani rastgele dağılacak dizi kend içinde) ?

d={0,6,6,3,9,1,2,8,4,5} gibi başlayacak mesela her açılışta random atanıcak elemanların yerleri .

Biraz araştırdım shuffle fonksiyonu olacakmış fakat benim istediğimde dizideki elemanlar belli ve random oluşturulmayacaklar sadece yerleri değişecek .





< Bu mesaj bu kişi tarafından değiştirildi Yarr -- 20 Ocak 2013; 21:16:00 >
Bu mesaja 1 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Yarr

Örneğin d[10]={1,2,3,4,5,6,6,7,8,9,0} gibi bir dizimiz olsa program her başladığında dizideki elemanların sıralarının değişmesini nasıl sağlarız (yani rastgele dağılacak dizi kend içinde) ?

d={0,6,6,3,9,1,2,8,4,5} gibi başlayacak mesela her açılışta random atanıcak elemanların yerleri .

Biraz araştırdım shuffle fonksiyonu olacakmış fakat benim istediğimde dizideki elemanlar belli ve random oluşturulmayacaklar sadece yerleri değişecek .

İlk yeni bir dizi oluştur. Sonra rastgele bir sayı üret ve o sayıyı yeni olusturduğun dizinin indexi olarak tut. Sonra o indexin olduğu yere dizinin ilk elemanını at. Ayrıca bu rastgele çıkan indexleri de ayrı bir dizide çıkıp çıkmadığını tut.

 
int d[10]={1,2,3,4,5,6,6,7,8,9};

int sayi = 0;
int yeniDizi[10] = {0};
bool flag[10] = {false};

for(int i = 0; i < 10; i++)
{
do{
sayi = rand() % 10;
}while(flag[sayi] == true); // Eğer ratgele üretilen sayı önceden çıkmışsa tekrar üretecek.

// Eğer rastgele çıkan sayı önceden çıkmamışsa dizinin elemanını ata
yeniDizi[sayi] = d[i];
flag[sayi] = true;
}

for each (int sayi in yeniDizi)
{
cout << sayi << endl;
}