質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

3028閲覧

c言語での放物線のプログラムする方法

ryusen

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/07/22 03:50

問題と先生が出してくれたヒントです

学校でのc言語の問題について質問です。

上の写真のように放物線を描くプログラムを作る宿題が出ました。

自分で考えてみたのですが、どうすればいいか分からなかったので質問させていただきました。

下にコードを張るのでよろしければ添削をしていただきたいです。

c

1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3#include <stdlib.h> 4 5int main(void) { 6 7 int i,j,n,b; 8 9 printf("数字を入力してください"); 10 scanf("%d", &n); 11 12 for (i = 0; i < n+1; i++) { 13 14 b = (i - n)*(i - n) + n*n; 15 printf(b); 16 17 printf("○%d\n",i); 18 } 19 20 for (i = n; i < 0; i--) { 21 22 } 23 24 return 0; 25} 26

突っ込みどころ満載のコードかもしれませんがよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

「添削」とか言うなら,

  • コードの意図を説明すべき
  • つーか,そもそもコンパイル通るまともなコードを示すべき

と思う.
画像に書込まれている (i-n)^2 + n^2 なる謎の式は一体何なのでしょう?
(この式の値はiの値がいくつだろうが常にn^2以上になりますが,どこかにそんなにたくさんのスペースを表示する話なのでしょうか?)
他人にコードを見せるならば,そういうところの説明をまともに行わねばなりません.
(仮に,ご自身が意味や用途を説明できない数式なのだとしたら,そんなものをなんとなくコードの中に入れてみたところで,それがまともな効果を発揮する可能性は限りなく低いと思われます.)


それはそれとして,何か似たのができたので貼っておく.

C++

1const int N = 7; 2const int SqN = N*N; 3 4void Catness( int y ) 5{ 6 const int nsp = SqN - y*y; 7 for( int i=0; i<nsp; ++i ){ putchar( '-' ); } 8 printf( "Catness=%d\n", N-abs(y) ); 9} 10 11int main(void) 12{ 13 for( int i=-N; i<=0; ++i ){ Catness( i ); } 14 for( int i=0; i<=N; ++i ){ Catness( i ); } 15 return 0; 16}

投稿2020/07/22 04:24

編集2020/07/22 04:45
fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

次のように書けば質問の画像と同じ表示が得られます。

C

1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3 4int main(void) 5{ 6 int i, n; 7 printf("整数を入力→"); 8 scanf("%d", &n); 9 for (i = 0; i <= n; i++) 10 printf("%*s○%d\n", (2*n-i)*i, "", i); 11 for (i = n; i >= 0; i--) 12 printf("%*s○%d\n", (2*n-i)*i, "", i); 13}

しかし、これは i = n の場合を 2回書いているので正しい放物線ではありません。
最初の for文の i <= ni < n とすると、正しい放物線になります。
なお、スペースの個数は -(n-i)(n-i)+nn ですが、これは (2*n-i)*i と簡略化できます。

投稿2020/07/23 00:34

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  1. 変数jを一切使っていないことを考えると、使うべき変数は問題側で指定されていた感じでしょうか。

まだ学校で教わっているレベルではこういうヒントをちゃんと考慮しましょう。
あ、多分forは入れ子で二重にするといいんだろうな、と。
0. b がなんの役割を果たしているかちゃんと考えましょう。
今回の場合、b は'○'を打ち込む水平方向の位置です。
printf(b)はなにがしたかったのでしょうか?←そもそもエラーです。
するべきは b個の空白を入れる、です。
0. 放物線は線対称ですから、i = 0 -> 9までやったら、次は折り返して i = 9 -> 0 もしないといけないですね。
ご自身で書かれたコードの2回の for - i ループはその点では大正解ですね。
この2つの for ループ内では全く同じ作業をします。
0. 改良して、#define で定義した定数 c の値を変えれば二次関数の高さ(?)を変えられるようにしました。
自分の裁量で c の値をいい感じにしてください(笑)。

以下コードです。

C

1#define _CRT_SECURE_NO_WARNINGS 2 3#define c [] 4//原点をとおり、頂点の座標が(x, y) = (n, c)となる、二次関数 y = -(x - n)^2 * c / n^2 + c の c 5//画面左上原点、下向きにx軸、右向きにy軸をとったグラフで考えてください 6//上式中 n は プログラム内の変数 n のこと 7//上式中 x は プログラム内の変数 i のこと 8//上式中 y は プログラム内の変数 b のこと 9#include <iostream> 10using namespace std; 11#include <stdio.h> 12#include <stdlib.h> 13 14int main(void) { 15 16 int i, j, n, b; 17 18 printf("数字を入力してください"); 19 scanf("%d", &n); 20 21 for (i = 0; i <= n; i++) { 22 23 24 b = c - (i - n) * (i - n) * c / (n * n); 25 for (j = 0; j < b; j++) { 26 printf(" "); 27 } 28 29 printf("○%d\n", i); 30 } 31 32 for (i = n; i >= 0; i--) { 33 34 35 b = c - (i - n) * (i - n) * c / (n * n); 36 for (j = 0; j < b; j++) { 37 printf(" "); 38 } 39 40 printf("○%d\n", i); 41 } 42 43 return 0; 44}

投稿2020/07/22 13:33

XionCode

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問