c de matris

unknownn
30-12-2010, 22:13   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Ara 2010

mrb c de işlemini c de nasıl kodlayabilirim.
Teşekkürler.

Son Düzenleme: unknownn ~ 03 Ocak 2011 11:09
muh34
31-12-2010, 09:56   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

#include <stdio.h>
#define boy 5

main() {

       FILE *dosya;
       dosya=fopen("a.txt","r");

       char dizi[boy][boy];
       int i=0,j=0;

       while(!feof(dosya)) {
       fscanf(dosya,"%s",&dizi[j++]);
       if(j==boy) {
       i++;j=0;}  
       }
       for(j=0;j<boy-1;j++) {
       char temp=dizi[j][0];
       dizi[j][0]=dizi[j][boy-1];
       dizi[j][boy-1]=temp;
       }
       fclose(dosya);
       dosya=fopen("b.txt","w");
       for(i=0;i<boy;i++) {
       for(j=0;j<boy;j++) 
       fprintf(dosya,"%c ",dizi[j]);
       fprintf(dosya,"\n");
       }
       fclose(dosya);
       return 0;
       }

Aynı kodu bu bolumde de yayımlıyorum.
Başarılar

unknownn
31-12-2010, 15:36   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Ara 2010

teşekkürler fakat bu kod istenileni yapmamaktadır.(istenilen matrisin saat yönünde 90 derece dönülmesidir fakat bu kod input u çıktı olarak aynen vermektedir.)

Son Düzenleme: unknownn ~ 01 Ocak 2011 14:54
muh34
01-01-2011, 15:16   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yukarıdaki kod test edilmiştir ve ilgili L seklindeki matris saat yonune Ters yonde hareket etmektedir.Matrisin saat yonunde donmesini saglayan kodu ise asagıda yayımlıyorum.

#include <stdio.h>
#define boy 5

int main() {

       FILE *dosya;
       dosya=fopen("a.txt","r");

       char dizi[boy][boy];
       int i=0,j=0;

       while(!feof(dosya)) {
       fscanf(dosya,"%s",&dizi[j++]);
       if(j==boy) {
       i++;j=0;}  
       }
       for(j=0;j<boy;j++) {
       char temp=dizi[boy-1][j];
       dizi[boy-1][j]=dizi[0][j];
       dizi[0][j]=temp;
       }
       fclose(dosya);
       dosya=fopen("b.txt","w");
       for(i=0;i<boy;i++) {
       for(j=0;j<boy;j++) 
       fprintf(dosya,"%c ",dizi[j]);
       fprintf(dosya,"\n");
       }
       fclose(dosya);
       return 0;
       }

Başarılar

muh34
01-01-2011, 15:44   |  #5  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Tabiki yukarıdaki sekliyle istenilen sonucu vermez.Ben size bir ornek olsun diye matris seklini en soldan itibaren baslayan durumlar icin gosterdim.Fakat siz benzer mantıkla algoritmayı genelleştirebilirsiniz.
Mantık su ki,90 derece donum itibariyle matris bulundugu konumdan bir sutun asagı kayarak,yeni durumda satır kadar sutun olacakken,sutun kadar satır olması sonucudur.Bu işlem matrisin saat yonunde donmesinin nedenidir.Bunun tersi durumunda ise matris bir sutun yukarı kayarak donme işlemini tamamlar.
Başarılar

Son Düzenleme: muh34 ~ 01 Ocak 2011 15:47
unknownn
02-01-2011, 14:50   |  #6  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Ara 2010

mrp çok teşekkürler ilginize ve bilginize peki siz yukaraıda yazdığım soru için yardımcı olabilirmisiniz.sizin anlattığınız mantığı anladım fakat bir türlü doğru kodu yazamadım

Son Düzenleme: unknownn ~ 03 Ocak 2011 11:11
unknownn
02-01-2011, 22:33   |  #7  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Ara 2010

cevap veren yok mu...

muh34
02-01-2011, 23:06   |  #8  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Çok doğru dusunmussunuz.Yapılması gereken matrisi dosyadan okuduktan sonra taramak olacaktır.Şayet 1 bulunursa,4 farklı yon tayini yapılması icin test etmek gerekecektir.Kodu sizin icin yayımlayacagım.

Başarılar

muh34
03-01-2011, 02:32   |  #9  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

#include <stdio.h>
#define boy 10
#define yatayBar 3
#define duseyBar 1

int dizi[boy][boy];

void ilerle(int x,int y,int *sayim,int yon) {

       while(dizi[x][y]==1) {
       if(yon==0) // yon sag ise
       y++;
       else if(yon==1) // yon sol ise
       y--;
       else // yon asagi ise
       x++;
       (*sayim)++;
       }   
}

void dondur(int i,int j,int sag1,int asagi1,int sag2,int asagi2,int sol2) {

     if(sag1==yatayBar-1 && asagi2==duseyBar) {
     dizi[j]=0;dizi[j+1]=0;
     dizi[i+2][j+sag1]=1;dizi[i+2][j+sag1-1]=1;
     }
     else if(asagi1==yatayBar-1 && sag2==duseyBar) {
     dizi[j]=0;dizi[i+2][j+1]=0;
     dizi[i+1][j+1]=1;dizi[i+1][j+2]=1;
     }
     else if(asagi1==duseyBar && sol2==yatayBar-1) {
     dizi[i+1][j-2]=0;dizi[i+1][j-1]=0;
     dizi[i-1][j]=1;dizi[i+1][j+1]=1;      
     }
     else if(asagi1==yatayBar-1 && sol2==duseyBar) {
     dizi[j]=0;dizi[i+2][j-1]=0;
     dizi[i+2][j+1]=1;dizi[i+2][j+2]=1;
     }
     else;
     FILE *dosya=fopen("b.txt","w");
     for(i=0;i<boy;i++) {
     for(j=0;j<boy;j++)
     fprintf(dosya,"%d ",dizi[j]);
     fprintf(dosya,"\n");
     }
     }

int main() {

       FILE *dosya;
       dosya=fopen("a.txt","r");

       int sagSayim=-1,asagiSayim=-1;
       int sagSayim2=-1,solSayim2=-1,asagiSayim2=-1;
       int i=0,j=0;

       while(!feof(dosya)) {
       fscanf(dosya,"%d",&dizi[j++]);
       if(j==boy) {
       i++;j=0;}  
       }
       fclose(dosya);
       int flag=0;
       for(i=0;i<boy;i++) {
       for(j=0;j<boy;j++)
       if(dizi[j]==1) {
       flag=1;
       break;
       }
       if(flag)
       break;
       }
       ilerle(i,j,&sagSayim,0); // sag
       ilerle(i,j,&asagiSayim,2); // asagi 
       if(sagSayim!=0) 
       ilerle(i,j+sagSayim,&asagiSayim2,2); // asagi
       if(asagiSayim!=0) {
       ilerle(i+asagiSayim,j,&sagSayim2,0); // sag 
       ilerle(i+asagiSayim,j,&solSayim2,1); // sola 
       }
       dondur(i,j,sagSayim,asagiSayim,sagSayim2,asagiSayim2,solSayim2);
       return 0;
       }
Isteginiz uzere programı veriyorum.

Başarılar

unknownn
03-01-2011, 11:09   |  #10  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Ara 2010

teşekkürler