ページ 1 / 1
関数の作成ができません
Posted: 2018年4月13日(金) 21:27
by m1631
Nを表示するプログラムをどう記述していいかさっぱりです。
数式はどういう風にりようするべきでしょうか。
コード:
#include <stdio.h>
int hantei(int x,int y){
//ここに*とスペースの判定プログラムを記述
}
int main(){
int i,j;
//メインプログラムを記述
return 0;
}
コード:
y/x 012345678901234
0 * * * * * *
1 * * * * * * *
2 * * * * * * * *
3 * * * * * * * * *
4 * * * * * * * * *
5 * * * * * * * * *
6 * * * * * * * * *
7 * * * * * * * * *
8 * * * * * * * * *
9 * * * * * * * * *
10 * * * * * * * *
11 * * * * * * *
12 * * * * * * y=x-2
X =2 X =12 y=x
Re: 関数の作成ができません
Posted: 2018年4月14日(土) 03:21
by かずま
m1631 さんが書きました: ↑7年前
コード:
12 * * * * * * y=x-2
X =2 X =12 y=x
これは何ですか?
わけが分かりません。
N の斜めの線の傾きが、折れ線になっていて、
こんな複雑なものは書くのが難しいと思います。
ということで、もっと単純な結果を出すものを、
わけの分からない数式を利用する形で書いてみました。
コード:
#include <stdio.h>
int hantei(int x, int y)
{
return (x-x/2*2)*(5/x+x/23+(x+1)/(y*2)*((y*2+4)/x));
}
int main(void)
{
int i, j;
for (i = 1; i <= 12; i++, putchar('\n'))
for (j = 1; j < 28; j++)
putchar(hantei(j, i) ? '*' : ' ');
return 0;
}
実行結果
コード:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
参考にはならないでしょう。
Re: 関数の作成ができません
Posted: 2018年4月18日(水) 07:34
by m1631
意図したとおりの出力です。
わかりにくい質問の仕方で申し訳ありませんでした。
書いていただいたソースの意味を理解できていないのでじっくり理解しようと思います。
ありがとうございました。
Re: 関数の作成ができません
Posted: 2018年4月18日(水) 10:43
by かずま
理解するのは難しいと思うので、どうやって作ったかを説明します。
まずは、普通の解答。
コード:
/*
\x 111111111122222222
y\123456789012345678901234567
1 * * * * * *
2 * * * * * * *
3 * * * * * * * *
4 * * * * * * * * *
5 * * * * * * * * *
6 * * * * * * * * *
7 * * * * * * * * *
8 * * * * * * * * *
9 * * * * * * * * *
10 * * * * * * * *
11 * * * * * * *
12 * * * * * *
*/
#include <stdio.h>
int hantei(int x, int y)
{
if (x % 2 == 0) return 0; // x が偶数の時は打たない
if (x <= 5) return 1; // 左の縦線
if (x >= 23) return 1; // 右の縦線
if (x >= y*2-1 && x <= y*2 + 4) return 1; // 斜線
return 0;
}
int main(void)
{
for (int y = 1; y <= 12; y++) {
for (int x = 1; x <= 27; x++)
putchar(hantei(x, y) ? '*' : ' ');
putchar('\n');
}
}
これは、次のように書けます。
コード:
int hantei(int x, int y)
{
return x%2 != 0 && (x<=5 || x>=23 || x>=y*2-1 && x<=y*2+4);
}
これで解答としては十分ですが、数式を四則演算だけで
書いてみようという邪悪な道へ進むと。
a % b は、a - a/b*b と同じです。
a >= b を a/b != 0、または a/b と書けます。
コード:
return x-x/2*2 && (5/x || x/23 || x/(y*2-1) && (y*2+4)/x);
|| は +、&& は * にできます。
コード:
return (x-x/2*2) * (5/x + x/23 + x/(y*2-1) * ((y*2+4)/x));