mrb c de işlemini c de nasıl kodlayabilirim.
Teşekkürler.
c de matris
#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
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.)
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
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
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
Ç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
#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