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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1646閲覧

for文のループから抜け出せなくなってしまった

langhtorn

総合スコア104

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/06/06 05:32

###実現したいこと
距離が最小となる点をみつける関数をつくりたい
###問題点

デバック用に作った std::cout << "[" << i << "]->[" << j << "]=" << dist << std::endl;//デバッグ用 が永遠に続いてしまう。

抜け出し方を教えてください。
###コード

C++

1#include<iostream> 2#include<vector> 3#include<cmath> 4 5struct Point 6{ 7 double x; 8 double y; 9}; 10 11//二点a,bの間の距離を計算する関数 12double distance(Point a,Point b) 13{ 14 double dis; 15 dis=std::sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); 16 return dis; 17} 18 19//vectorに保存されている点の集合から、距離が最小となる2点を計算する関数 20void closet_pair(std::vector<Point>& points, int& idx1, int& idx2,double& dist) //idx1,idx2は最小となる二点の添え字,distは二点間の距離 21{ 22 int n=points.size(); //配列の大きさ 23 dist=distance(points[0],points[1]); 24 double d=0; 25 int i,j; 26 idx1=0; 27 idx2=1; 28 for(i=0;i<n-1;i++){ 29 for(j=i+1;i<n;j++){ 30 d=distance(points[i],points[j]); //距離を求める関数の呼び出し 31 std::cout << "[" << i << "]->[" << j << "]=" << dist << std::endl;//デバッグ用 32 if(d<dist){ 33 dist=d; 34 idx1=i; 35 idx2=j; 36 } 37 } 38 } 39} 40 41int main() 42{ 43 int n,i; 44 double dist=0; //距離 45 int idx_a,idx_b; //添え字 46 47 std::cout<<"点の個数を入力してください\n"; 48 std::cin>>n; 49 50 std::vector<Point> pts; //配列 51 std::cout<<n<<"点の座標を入力してください\n"; 52 for(i=0;i<n;i++){ 53 Point p; 54 std::cin>>p.x; 55 std::cin>>p.y; 56 pts.push_back(p); 57 } 58 59 //距離が最小となる二点を計算する関数の呼び出し 60 closet_pair(pts, idx_a, idx_b,dist); 61 62 //最近点対の添え字と距離を出力 63 std::cout<<"添字は\n"<<idx_a<<"と"<<idx_b; 64 std::cout<<"その距離は"<<dist; 65 std::cout<<"\n"; 66 67 return 0; 68}

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

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

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

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

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

guest

回答1

0

ベストアンサー

cpp

1 for(i=0;i<n-1;i++){ 2 for(j=i+1;j<n;j++){ 3 d=distance(points[i],points[j]); //距離を求める関数の呼び出し 4 std::cout << "[" << i << "]->[" << j << "]=" << dist << std::endl;//デバッグ用 5 if(d<dist){ 6 dist=d; 7 idx1=i; 8 idx2=j; 9 } 10 } 11 }

内側のループの終了条件がi<nになっています。

投稿2020/06/06 05:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

langhtorn

2020/06/06 06:13

初歩的なミスでした。これから気を付けます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問