PDA

Tam Sürümünü Görmek İçin : C++ Hatam Nerede?[Yardım]...


portalturks
15/04/2008, 23:54
Arkadaşlar hatam nerede? Compiler (devc++) çalıştırmadı. Visual Studio 2008 açılmak istiyor bu programı çalıştırdığım zaman.
Not: Visual kullanmayı henüz hiç bilmiyorum.

#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int i,k,a[i][k];
srand((unsigned)time(0));
for (int i=0;i<3;i++);
for (int k=0;k<3;k++);
{
a[i][k]=(1+rand()%100);
}

for(int i=0;i<3;i++)
{
for(int k=0;k<3;k++)
cout<<a[i][k]<<" ";
cout<<endl;
}
system ("pause");
return 0;
}


portalturks
15/04/2008, 23:55
Yapmak istediğim sadece 4x4 lük bir matrisi rastgele sayılar ürettirerek bunlara atama ve ekrana yazdırmak...

acehreli
16/04/2008, 00:16
Gorebildiklerimi aciklama satirlarina yazdim.


#include <iostream>
#include <ctime>
using namespace std;
int main()
{
/*
Burada i ve k'nin degeri verilmemis. Bu durumda a[i][k] yazinca ne
olmasini bekleriz?

Ayrica C++'ta i ve k gibi degiskenlerin degerlerini kullanarak dizi
olusturamazsin. Bunu bazi derleyiciler ek olarak sagliyorlar ama
standart degil.
*/
int i,k,a[i][k];

srand((unsigned)time(0));


/*
4x4 matris umuyorsun ama burada 0,1,2 degerlerini kullandigin icin
aslinda 3x3 bir bolumunu doldurmaya calisiyorsun.

Ama tabii o da olmuyor cunku for satirlarinin sonundaki ;
karakterleri o for'lari tamamladigi icin dOngulerin sonucunda hicbir
islem gerceklesmiyor.
*/
for (int i=0;i<3;i++);
for (int k=0;k<3;k++);
{
a[i][k]=(1+rand()%100);
}

/*
Buradaki for'un sonunda ; karakteri olmamasi iyi olmus ornegin.
*/
for(int i=0;i<3;i++)
{
for(int k=0;k<3;k++)
cout<<a[i][k]<<" ";
cout<<endl;
}
system ("pause");
return 0;
}


Ali

portalturks
16/04/2008, 00:25
int i=0,k=0,a[i][k]; // <-- a'da kac tane int var?


Calismasi sans eseri. :) Buna tanimsiz davranis (undefined behavior) denir.

a dizisi icin yer ayirdin mi? Ne kadar yer ayirdin?

i ve k dOngU degiskeni olarak cok yaygin olarak kullanilir ama geleneksel olarak i,j,k sirasiyla... Bence senin i ve k kullanman daha iyi olmus cunku i ve j birbirlerine benziyorlar. i ve k benzemiyor; iyi...

Sen aslinda dizi tanimlarken i ve j'nin kullanilamamasindan bahsediyorsun. C++'ta dizi tanimlamak icin derleme zamaninda sabit olan bir deger kullanman gerekir. Ornegin soyle:

const int satir = 42;
const int sutun = 50;
int dizi[satir][sutun];

veya soyle:

#define SATIR 42
#define SUTUN 50
int dizi[SATIR][SUTUN];

veya soyle:

int dizi[42][50];

veya derleme zamaninda sabit olabilecek herhangi bir sey. Ornegin:

int dizi[size_of(BirTur)][7];

Ali

acehreli
16/04/2008, 00:39
Yanit yaziyorum diye onunkini "degistirmisim". Ozur... :(

Ali

kasif
16/04/2008, 16:52
/* Compiler & Editor : MS Visual C++ 6.0 */
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int i,k;
int a[4][4]; // Rastgele matris için 4x4 int dizi tanimi

//srand(time(0));

for (i=0; i<4; i++)
{
for (k=0; k<4; k++)
{
a[i][k] = (1 + rand() % 100); // Rastgele sayilar diziye aktariliyor
}
}

cout << "Rastgele Matris : " << endl;
cout << "==================" << endl;
for(i=0; i<4; i++)
{
for(k=0; k<4; k++)
{
cout << a[i][k] << " "; // Dizinin 4 elemani yani bir satirini yaz
}
cout << endl; // satir basi, sonraki satira gec {CR_LF}
}

system ("pause");
return 0;
}
Merhaba, Bende yeni öğreniyorum, senin kodlarını biraz düzenledim ve yukarıdaki hale geldiler. Ama dizi statik, bu işlemi dinamik bir dizi ile nasıl yapabilirim araştırıyorum.

acehreli
16/04/2008, 18:42
Cok kucuk bir ayrinti: Satir basinin akima hangi karakterler olarak yazilacagi programin calistigi ortama baglidir. Program aslinda hep '\n' olusturur ama Windows CR ve LF'e dOnUsturur. Linux ve Mac ortamlarinda o karakterlerden yalnizca birisi akima gider.

Akim 'binary' modunda acilmissa hic dOnUsum olmadan '\n' gider. Ama cout 'text' modunda acilmistir.

Sonucta aslinda

cout << endl;

satirinin esdegeri her ortamda sudur:

cout << '\n' << flush;

Ali

kasif
17/04/2008, 09:18
Teşekkürler acehreli vermiş olduğunuz bu küçük ayrıntı inanın ben ve benim gibi yeni öğrenen arkadaşlar için kesinlikle müthiş bir bilgi, tecrübe ve deneyimlerinizi paylaştığınız için teşkkürler inanın her mesajınızı ilgi ile okuyorum.

coddy
25/04/2008, 22:24
Dizinin boyutunun ne olacağını tam olarak kestiremiyorsan;dizi boyutlarını bir fonksiyondan geçirerek bunu aşabilirsin.Daha pro yöntemler vardır ama aklıma gelen bu;
#include <stdio.h>
int array(int,int);
int main(){
int a,b;
scanf("%d\n",&a);
scanf("%d",&b);

array(a,b);
return 0;
}
int array(int i,int k){
a[i][k];
.
.
.
}