C de 2 boyut dizi yapımı hakkında?

Başlatan Firzen, 28 Ağustos 2012, 03:18:11

Firzen

Arkdaşlar dün bir kod yazmaya çalıştım ama bir türlü başaramadım sanırım kodu beya bir yanlış yazdım. size şimdi kodu gönderiyorum

yapmak istediğim aslında
100 100 100 100 ........ 100
100 0 0 0    .......  100
......
...
..
100 0       0    0    .......  100
100 0       0    0    .......  100
100 0       0    0    .......  100
100 100 100 100 ........ 100

şeklinde kenarları 100 olan bir KARE matris oluşturmak.fakat bir türlü yapamadım size şimdi yazdığım kodu gönderiyorum.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int A[22][22],i,j,x,y;

for(i=0;i<23;i++)
{
for(j=0;j<23;j++)
{
	A[i][j]=0;
		printf(" %d",A[i][j]);
}
printf(" \n");
}

if(A[0][y]==0 && A[22][y]==0)
{
 for(y=0;y<23;y++)
 {
   A[0][y]=100;
   A[22][y]=100;            
                  }             
              }
 
if(A[x][0]==0 && A[x][22]==0)
{
 for(x=0;x<23;x++)
 {
   A[x][0]=100;
   A[x][22]=100;            
                  }             
              }             

      
printf("% d",A[i][j]); 
  
  system("PAUSE");	
  return 0;
}


Yardımlarınız için şimdiden teşekkür ederim.
Kararsız...

ertsen

if(A[0][y]==0 && A[22][y]==0)
komutuna kadar y'ye hiç atama yapmamışsın. Belki sorun buradadır.

ArGeMaNiA

Run-Time Check Failure #3 - The variable 'y' is being used without being initialized.
Haydi göreyim sizi, vazife-i ubudiyetinizi unutmamak şartıyla öyle çalışınız ki,  rûy-i zemini, her tarafı herbirinize görülen ve her köşesindeki sesleri size işittiren bir bahçeye çeviriniz.

berat23


GreeN

#4
for(i=0;i<22;i++)
{
for(j=0;j<22;j++)
{
if(i==0||j==0||i==22||j=22)
{
A[i][j]=100;
}
}
}


Bu işini görür. A....=1; şeklinde değiştirip çalıştır. sonuç daha net görünüyor.
Terörü Lanetliyoruz.

Erdem

İşte bir örnek. Forumun kod renklendirme özelliği pek parlak olmadığı için gist'e yazdım:

https://gist.github.com/3497239

GreeN

#6
Alıntı yapılan: Erdem  - 28 Ağustos 2012, 14:04:21
İşte bir örnek. Forumun kod renklendirme özelliği pek parlak olmadığı için gist'e yazdım:

https://gist.github.com/3497239

ilk mesajı okumadın mı ?


Kodu denedim , aşağıdaki gibi istediğini yapıyor .
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void main(){

int A[22][22],i,j;


for(i=0;i<23;i++)
{
for(j=0;j<23;j++)
{
    A[i][j]=0;
        printf(" %d",A[i][j]);
}
printf(" \n");
}

for(i=0;i<22;i++)
{
for(j=0;j<22;j++)
{
if(i==0||j==0||i==21||j=21)
{
A[i][j]=100;
}
}
}

 printf(" \n");
 printf(" \n");

for(i=0;i<22;i++)
{
for(j=0;j<22;j++)
{

        printf(" %d",A[i][j]);
}
printf(" \n");
}
  getch();
}
Terörü Lanetliyoruz.

Erdem

#7
Alıntı yapılan: GreeN - 28 Ağustos 2012, 15:32:36
ilk mesajı okumadın mı ?

Okudum ama genellikle çözümün tamamını vermekten ziyade çözüm yolunu göstermeyi tercih ediyorum.

Alıntı yapılan: GreeN - 28 Ağustos 2012, 15:32:36
Kodu denedim , aşağıdaki gibi istediğini yapıyor .

Ben de denedim. Sonsuz kez sıfır yazıyor  :D

    for(i=0;i<23;i++)


Hızlıca görebildiklerim 22 yerine 23 yazmışsın, void'in doğrusu int main() olacak  ;)

mesaj birleştirme:: 28 Ağustos 2012, 16:50:25

Alıntı yapılan: Erdem  - 28 Ağustos 2012, 14:04:21
https://gist.github.com/3497239

Kodu tekrar tam olarak istediğini yapacak şekilde düzenledim.

Bu göstergeleri de sırf yeşillik olsun diye sadece başka bir soru için yazdım. Bence de kodun okunabilir olması daha önemli :)

ozgurelkt

Benimki biraz basit gibi duruyor ama yine de çalışıyor :)


#include <stdio.h>

void main(){

int A[10][10],i,j;


for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
    if(i==0 || j==0)
     {
        A[i][j]=1;
     }
      else if(i==9 || j==9)
      {
          A[i][j]=1;
      }
      else
      {
        A[i][j]=0;

      }
        printf(" %d",A[i][j]);
    if(j==9){
              printf("\n");
            }


}

}
}

GreeN

Alıntı YapBen de denedim. Sonsuz kez sıfır yazıyor

Sonsuz kez sıfır mı ? Paylaştığım kodun çıktısı aşağıda ...

[IMG]http://i1114.photobucket.com/albums/k538/lordex06/sonsuzkeresifir.jpg[/img]


Hızlıca görebildiklerim 22 yerine 23 yazmışsın


Farkındaysan bunu soruyu soran arkadaş yazmış ,  ben onun kodu üzerinde değişikliler yaptım. Ama hata mı evet hata ...


Terörü Lanetliyoruz.

ozgurelkt

hangi derleyicide çalıştırdınız bilmiyorum ama bende de sonsuz kez  sıfır yapıyor. derleyici olarak Code::Block kullanıyorum.

Erdem

Alıntı yapılan: ozgurelkt - 28 Ağustos 2012, 17:03:27
Benimki biraz basit gibi duruyor ama yine de çalışıyor :)

Evet bende kodun okunabilir olmasını daha doğru bulduğumu belirtmiştim. Yukarıdaki örneği sırf başka bir soru için yazmıştım.

Alıntı yapılan: GreeN - 28 Ağustos 2012, 18:38:18
Sonsuz kez sıfır mı ? Paylaştığım kodun çıktısı aşağıda ...

Evet  hatta kendi makinemde şimdi denediğimde şu hataları aldım:

gcc -Wall test.c -o test


Alıntı Yaptest.c:3:19: ölümcül hata: conio.h: Böyle bir dosya ya da dizin yok
derleme sonlandırıldı.
test.c:5:6: UYARI: return type of 'main' is not 'int' [-Wmain]
test.c: 'main' fonksiyonunda:
test.c:43:3: UYARI: 'getch' işlevinin örtük bildirimi [-Wimplicit-function-declaration]
/tmp/ccNBax1x.o: In function `main':
test.c:(.text+0x193): undefined reference to `getch'
collect2: ld çıkış durumu 1 ile döndü
test.c: 'main' fonksiyonunda:
test.c:44:1: UYARI: control reaches end of non-void function [-Wreturn-type]

getch, conio.h'ı iptal ettikten sonra 23'leri de 22 yaptım ve gcc altında programı derlediğimde ekran görüntüsü şu şekildeydi:



Bu arada benim derleyicim gcc  4.6.3 ve kullandığım editor de tabi ki emacs!   8)

Firzen

Arkadaşlar yardımlarınız için gerçekten teşekkür ederim klavyeniz dert görmesin :)
Kararsız...

GreeN

Alıntı yapılan: ozgurelkt - 28 Ağustos 2012, 18:48:48
hangi derleyicide çalıştırdınız bilmiyorum ama bende de sonsuz kez  sıfır yapıyor. derleyici olarak Code::Block kullanıyorum.

Borland C Builder 6 kullanıyorum.
Terörü Lanetliyoruz.

Erdem

İnsan bu konuları tam anlamadan da hayatınızı sürdürebilir :)

Ama gene de anlatmakta fayda görüyorum.
    int * dizi[8];  // 8 tane int göstergesinden oluşan bir dizi
    int (*dizi)[8]; // 8 tane tamsayıdan oluşan bir dizi için gösterge

Örneğin alttaki göstergenin türü int (*)[8] ve 8 tane tamsayıdan oluşan bir diziyi gösteriyor.

Yazdığım örneği yapabilmemizin nedeni  nedeni sayilar[2] aslında *(sayilar + 2) demek.
#include <stdio.h>
 
int main()
{
    int sayilar[5] = {10, 20, 30, 40, 50};
    int * ptr;
    ptr = sayilar;
 
    printf("%d", sayilar[2]);
    printf("%d", ptr[2]); // göstergeyi dizi gibi kullanıyorum
 
    printf("%d", *(sayilar + 2));
    printf("%d", *(ptr + 2)); // sayilar[2] demekle aynı şey
    
    printf("%d", 4[sayilar]); // bu da sayilar[4] ;-)
}


Yukarıdaki gibi bir yazım şeklini kullanabilmemizin nedeni sayilar[4] derleyici tarafından şu şekilde yorumlanıyor:
*(sayilar + 4)

ve 4[sayilar] şu şekilde yorumlanacak.
*(4 + sayilar)

İlkokul matematiğinden de bu ikisinin birbirine eşit olduğunu biliyoruz  ;)