#5
by かずま » 8年前
あっしゅ さんが書きました:どこがおかしいのか教えていただけますでしょうか。
- 解決していないのに、解決にチェックを入れている。
- タイトルがおかしい。「初期化を関数にする」とか「配列を関数に渡す方法」などにしてほしかった。
- ■と□が反対と分かっているのに直していない。
問題から外れますが、こういうのは、実行時に初期化するのではなく、
最初から初期値を持っていたほうが良いでしょう。
コード:
#include <stdio.h>
enum { _, O };
char pattern[10][5][3] = {
O,O,O,
O,_,O,
O,_,O,
O,_,O,
O,O,O,
_,_,O,
_,_,O,
_,_,O,
_,_,O,
_,_,O,
O,O,O,
_,_,O,
O,O,O,
O,_,_,
O,O,O,
O,O,O,
_,_,O,
O,O,O,
_,_,O,
O,O,O,
O,_,O,
O,_,O,
O,O,O,
_,_,O,
_,_,O,
O,O,O,
O,_,_,
O,O,O,
_,_,O,
O,O,O,
O,O,O,
O,_,_,
O,O,O,
O,_,O,
O,O,O,
O,O,O,
O,_,O,
_,_,O,
_,_,O,
_,_,O,
O,O,O,
O,_,O,
O,O,O,
O,_,O,
O,O,O,
O,O,O,
O,_,O,
O,O,O,
_,_,O,
O,O,O,
};
int main(void)
{
int n;
while (printf("数値を入力して下さい(0~9,終了=0~9以外):"),
scanf("%d", &n) == 1 && n >= 0 && n <= 9)
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++)
printf(pattern[n][i][j] ? "■" : "□");
putchar('\n');
}
return 0;
}
0 か 1 を記憶するのに int は必要なく、char でよい。
ビットにすることもできます。
コード:
#include <stdio.h>
short pattern[10] = {
075557, 011111, 071747, 071717, 055711, // 7:■■■, 5:■□■
074717, 074757, 075111, 075757, 075717, // 4:■□□, 1;□□■
};
int main(void)
{
int n;
while (printf("数値を入力して下さい(0~9,終了=0~9以外):"),
scanf("%d", &n) == 1 && n <= 9u)
for (int i = 12; i >= 0; i -= 3) {
int t = pattern[n] >> i;
for (int j = 2; j >= 0; j--)
printf(t>>j & 1 ? "■" : "□");
putchar('\n');
}
return 0;
}
[quote="あっしゅ" id=3,19217,145576]どこがおかしいのか教えていただけますでしょうか。[/quote]
[list]
[*]解決していないのに、解決にチェックを入れている。
[*]タイトルがおかしい。「初期化を関数にする」とか「配列を関数に渡す方法」などにしてほしかった。
[*]■と□が反対と分かっているのに直していない。[/list]
問題から外れますが、こういうのは、実行時に初期化するのではなく、
最初から初期値を持っていたほうが良いでしょう。
[code=c]
#include <stdio.h>
enum { _, O };
char pattern[10][5][3] = {
O,O,O,
O,_,O,
O,_,O,
O,_,O,
O,O,O,
_,_,O,
_,_,O,
_,_,O,
_,_,O,
_,_,O,
O,O,O,
_,_,O,
O,O,O,
O,_,_,
O,O,O,
O,O,O,
_,_,O,
O,O,O,
_,_,O,
O,O,O,
O,_,O,
O,_,O,
O,O,O,
_,_,O,
_,_,O,
O,O,O,
O,_,_,
O,O,O,
_,_,O,
O,O,O,
O,O,O,
O,_,_,
O,O,O,
O,_,O,
O,O,O,
O,O,O,
O,_,O,
_,_,O,
_,_,O,
_,_,O,
O,O,O,
O,_,O,
O,O,O,
O,_,O,
O,O,O,
O,O,O,
O,_,O,
O,O,O,
_,_,O,
O,O,O,
};
int main(void)
{
int n;
while (printf("数値を入力して下さい(0~9,終了=0~9以外):"),
scanf("%d", &n) == 1 && n >= 0 && n <= 9)
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++)
printf(pattern[n][i][j] ? "■" : "□");
putchar('\n');
}
return 0;
}[/code]
0 か 1 を記憶するのに int は必要なく、char でよい。
ビットにすることもできます。
[code=c]
#include <stdio.h>
short pattern[10] = {
075557, 011111, 071747, 071717, 055711, // 7:■■■, 5:■□■
074717, 074757, 075111, 075757, 075717, // 4:■□□, 1;□□■
};
int main(void)
{
int n;
while (printf("数値を入力して下さい(0~9,終了=0~9以外):"),
scanf("%d", &n) == 1 && n <= 9u)
for (int i = 12; i >= 0; i -= 3) {
int t = pattern[n] >> i;
for (int j = 2; j >= 0; j--)
printf(t>>j & 1 ? "■" : "□");
putchar('\n');
}
return 0;
}
[/code]