座標間の折れ線の長さを出力するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mako
記事: 2
登録日時: 2年前

座標間の折れ線の長さを出力するプログラム

#1

投稿記事 by mako » 2年前

平面上の点の座標をいくつか入力して、それらを結ぶ折れ線の長さを出力するプログラムを作成する。座標を扱うための適当な構造体を定義して入力された座標は配列リストに格納していき、どちらかに負の数が入力された場合入力の繰り返しを終える。  という問題がわかりません。
//★の部分に文を加えて完成させる問題です。
実行結果は
Input x=0
Input y=0
Input x=2
Input y=1
Input x=1
Input y=3
Input x=-1
Input y=-1
(0.00,0.00)-(2.00,1.00)-(1.00,3.00)=4.47
のようにしたいです。

コード:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<math.h>

//マクロ定義
#define MAXSIZE 30
#define LIST_TAIL-1
//二次元座標データを扱うための構造体の定義
struct  POINT {
	double x,y;
};

//データ型(構造体PINT)の抽象化
typedef struct POINT LIST_ITEM;

//データ型(int)の抽象化
typedef int LIST_POS;

LIST_ITEM list[MAXSIZE];
LIST_POS tail;

//Init関数リストを空にする
void Init(void) {
	tail = 0;
}
//Top関数リストの先頭位置を返却する
LIST_POS Top(void) {
	return 0;
}
//Next 関数リストの次の要素位置を返却する
LIST_POS Next(LIST_POS pos) {
	if (pos < tail - 1) {
		return pos + 1;
	}
	else {
		return LIST_TAIL;
	}
}

//Item関数リスト内の位置を指定して、その要素を返却する
LIST_ITEM Item(LIST_POS pos) {
	if ((pos >= 0) && (pos < tail)) {
		return list[pos];
	}
	else {
		LIST_ITEM ret = { 0,0 };
		return ret;
	}
}
//Add関数リストの末尾に要素を追加する
void Add(LIST_ITEM value) {
	if (tail < MAXSIZE) {
		list[tail] = value;
		tail++;
	}
}

int main(void) {
	//変数の宣言
	LIST_ITEM n, pt1, pt2;
	LIST_POS p;
	double sum = 0;
	//リストの初期化

//★

//2次元座標をリスト配列の要素に追加(Add)していく
while (1) {
	printf("Input x="); scanf("%lf", &n.x);
	printf("Input y="); scanf("%lf", &n.y);
	if (n.x < 0 || n.y < 0)break;
	Add(n);
}
//リストの先頭から内容(Item)を取り出して表示(printf)しつつ、2点間の距離(pt1,pt2)を合算していく

//★

//合算値を表示する

	printf("=%.2f\n", sum);
	return 0;
}

アバター
usao
記事: 1887
登録日時: 11年前

Re: 座標間の折れ線の長さを出力するプログラム

#2

投稿記事 by usao » 1年前

穴埋め問題なのであれば,要は,
【ここに無駄に大仰に用意した機構があるだろ? これの使い方をコードを読んでわかってみせてみろや】
っていう「コードを読む問題」なので,読んでください.
(「折れ線の長さがどうの」とかいう話は取って付けたようなどうでもいい「お題」でしかない)

で,コードを読むためには,少なくともそこに用いられている文法の意味がわかる必要があります.
文法の時点で行き詰っている場合には,まずは勉強(復習)してください.それしか手はありません.

「文法はわかるけど意味が読めないんです><」とかいうのなら,単に「わかりません」とだけ漠然と述べるのではなく,どこがわからんのかを具体的に質問するべき.
あなたが既にわかってる箇所についての説明とかが返ってきても困るでしょ?
ミスマッチを避ける努力はしましょう.

また,もしも
「何か課題出たんだけど,自分では1ミリもやりたくないのだから 誰か 無料で 代わりにやってくれや」
っていう要求をしているのであれば,その旨をはっきり述べた方が良い.
学ぶ気も取り組む気も微塵も無いのに「●●について調べてみてはどうですか?」みたいなアドバイスされても困るでしょ?
ミスマッチを避ける努力はしよう.

欲しい回答の形態に関しても,例えば
「コピペすれば動くコードだけ貼ってもらえればそれで済むので,説明とかは一切不要です」とか具体的に指定を出した方がよかろうと思う.
(もちろん,実際に代わりにやってくれる人がいるかどうか?ってのはまた別の話だが)

---

とにかく,現状だと
「何かこういう問題があるんだけど → わかりません^^」
という情報しかないから,もっと話を具体的にすべし.

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 座標間の折れ線の長さを出力するプログラム

#3

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「
学校の宿題ですかね ?


#define LIST_TAIL-1

は、

#define LIST_TAIL -1

の間違いですか ? でも、使ってないですね。

//★

のところは、

puts( "(0.00,0.00)-(2.00,1.00)-(1.00,3.00)=4.47" );

でいいみみ ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

mako
記事: 2
登録日時: 2年前

Re: 座標間の折れ線の長さを出力するプログラム

#4

投稿記事 by mako » 1年前

すみません。もう解決したので回答不要です。

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 座標間の折れ線の長さを出力するプログラム

#5

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「
rules

> 義務行為

> "C言語何でも質問掲示板"でのみ適用される事項
> トピックを立て、解決した場合は「解決しました」とだけ書かず、どうやって解決したか
> 他の人に分かるように書いて  からトピックを終了して下さい。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

“C言語何でも質問掲示板” へ戻る