以下プログラムです。
#include <stdio.h>
/*
名称 rotation
引数 const char in_buf[8][9]:8X8ドット文字
char out_buf[8][9]:回転後の文字
int direc:回転方向(0:左へ,1:右へ)
int angle:回転角度(0:90度,1:180度,2:270度)
戻り値 無し
*/
/*----- ここより下に解答を記述してください -----*/
void rotation(const char in_buf[8][9], char out_buf[8][9], int direc, int angle)
{
int i, j;
if(direc == 1){
switch (angle) {
case 0 : for(i = 0; i < 8; i++){
for(j = 0; j < 9; j++){
out_buf[j][9 - i] = in_buf[i][j];
}
}
break;
case 1 : for(i = 0; i < 8; i++){
for(j = 0; j < 9; j++){
out_buf[9 - i][j] = in_buf[i][j];
}
}
break;
case 2 : for(i = 0; i < 8; i++){
for(j = 0; j < 9; j++){
out_buf[j][9 - i] = in_buf[i][j];
out_buf[i][9 - j] = out_buf[i][j];
}
}
break;
}
} else {
switch (angle) {
case 0 : for(i = 0; i < 8; i++){
for(j = 0; j < 9; j++){
out_buf[9 - j][i] = in_buf[i][j];
}
}
break;
case 1 : for(i = 0; i < 8; i++){
for(j = 0; j < 9; j++){
out_buf[i][9 - j] = in_buf[i][j];
}
}
break;
case 2 : for(i = 0; i < 8; i++){
for(j = 0; j < 9; j++){
out_buf[9 - j][i] = in_buf[i][j];
out_buf[9 - i][j] = out_buf[i][j];
}
}
break;
}
}
return;
}
/*----- ここより上に解答を記述してください -----*/
int main(void)
{
char in_buf[8][9] = { {" A "},
{" A "},
{" A A "},
{" A A "},
{" A A "},
{" AAAAA "},
{"A A "},
{"A A "} };
char out_buf[8][9] = { { 0 } };
int i, direc, angle;
printf("回転方向(0:左へ,1:右へ)=");
scanf("%d", &direc);
printf("回転角度(0:90度,1:180度,2:270度)=");
scanf("%d", &angle);
/*----- ここより下に解答を記述してください -----*/
rotation(in_buf, out_buf, direc, angle);
/*----- ここより上に解答を記述してください -----*/
for(i = 0; i < 8; i++)
printf("%s\n", out_buf[i]);
return 0;
}
下手ですが一応、表示例も2つ程、載せておきます。
回転方向:0 (左へ) 回転角度:0 (90度)
AA
AA
AA A
AA A
AA A
AA
AA
回転方向:0 (左へ) 回転角度:1 (180度)
A A
A A
AAAAA
A A
A A
A A
A
A
コンパイルエラーは起きていないのですが、デバッグエラーで途中までしか表示されなかったり
文字化けされたものがたくさんでてきたり・・・という状況です。
デバッグもしてみましたが何が原因なのかもわからずじまいです。
個人的には、最後に「文字列として」結果を出力する事がなにか関係してるのかなと考えています。
ちなみに8x8ドットなのに列数が9なのは最後に\0があるからです。
表示例もコードの最後に2つ程載せておきました。
関数部分全部書き直しでも構わないのでうまく表示させる方法をどなたかご教授お願いします。
長文失礼しました。