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

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

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

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Q&A

解決済

1回答

1001閲覧

4次元空間でのユークリッド距離

tikuno

総合スコア18

C

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

0グッド

0クリップ

投稿2020/06/14 14:57

「 4 次元空間を軸に沿って距離 1 ずつ移動する A さんを考える.ここで A さんの位置は (x1,x2,x3,x4), ま た,x1,x2,x3,x4 に対応する次元の番号はそれぞれ 1, 2, 3, 4 とする.A さんの初期位置を (0, 0, 0, 0) と し,次元番号(1 から 4)を入力したときはその次元方向に 1 移動し,マイナス次元番号(−4 から−1) を入力したときはその次元方向に−1 移動するプログラムを作成せよ.ただし,−4,−3,−2,−1,1,2,3,4 以外が入力された場合は,原点から現在の A さんまでのユークリッド距離を計算し終了すること.また, プログラム中で使用する変数は全て int 型とすること. 」という問題で
[実行例]
$ ./a.out
(0, 0, 0, 0)

Input: 1
(1, 0, 0, 0)

Input: -3
(1, 0, -1, 0)

Input: -3
(1, 0, -2, 0)

Input: 0
Euclidean distance = 2.236068

のとき最後のユークリッド距離を少数で表す方法と次元番号を入力した際の位置の表し方がわかりません。自分で組んだものは以下の通りです。

#include <stdio.h> #include <math.h> int main(void) { int x1 = 0; int x2 = 0; int x3 = 0; int x4 = 0; int num = 0; int distance = 0; while (trunc) { printf("Input:"); scanf("%d",&num); printf("\n"); if (num == 1) x1++; else if (num == 2) x2++; else if (num == 3) x3++; else if (num == 4) x4++; else if (num == -1) x1--; else if (num == -2) x2--; else if (num == -3) x3--; else if (num == -4) x4--; else { distance = (int)ceil(sqrt(x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4)); printf("Distance = %d", distance); break; } } printf("\n"); return 0; }

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

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

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

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

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

thkana

2020/06/14 22:38

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14226828154 https://teratail.com/help#posted-otherservice 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」だそうです。
guest

回答1

0

ベストアンサー

質問のコードを修正する形をとるなら、

  1. ユークリッド距離を少数で表す方法

ceil() で整数にした段階で小数点以下の情報が失われてしまうため、int 型の変数しか定義してはいけないという縛りを守るのであれば、sqrt() の double 型の返り値を直接 printf() で出力してはどうでしょうか。

  1. 次元番号を入力した際の位置の表し方

if-else 文の後に printf("(%d, %d, %d, %d)\n", x1, x2, x3, x4); を入れればよいです。

c

1else { 2 distance = (int)ceil(sqrt(x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4)); 3 printf("Distance = %d", distance); 4 break; 5}

c

1else { 2 printf("Distance = %lf\n", sqrt(x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4)); 3 break; 4} 5printf("(%d, %d, %d, %d)\n", x1, x2, x3, x4);

投稿2020/06/14 15:09

編集2020/06/14 15:09
tiitoi

総合スコア21956

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

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

tikuno

2020/06/15 00:18

丁寧に教えてくださりありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問