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

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

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

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

Q&A

解決済

4回答

781閲覧

c++ classの実装

_._._ami

総合スコア26

C++

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

0グッド

0クリップ

投稿2020/07/14 04:37

編集2020/07/15 00:01

9th.inの内容を取得し,はじめの点(二次元)とデータ点との距離が r 未満である場合は true, それ以外の場合は false を一行ごとに出力するプログラムをかきたいのですが,ほとんど何も分かっていません...。

9th.inの中には
1行目: x 座標, y 座標, 半径 r
2行目: データ数 n
3行目から 3 + n 行目: データ点の x 座標, y 座標
が含まれています。

加算,減算を行う二次元ベクトルクラスを作成.以下の4つの機能も実装しなければなりません。
長さを計算する関数 len
加算演算子
減算演算子
コンストラクタ

4つの機能の実装のコードは(全然未完成かもしれませんが)下記のような感じです。

長さを計算する関数len

c++

1 class A{ 2 double z; 3 public: 4 double x; 5 double y; 6 double len(){ 7 return sqrt(x*x + y*y); 8 } 9 };

加算演算子と減算演算子

c++

1 class R1{ 2 public: 3 double x; 4 R1(double x){ 5 (*this).x = x; 6 } 7 R1 operator+(R1 r1){ 8 return R1((*this).x + r1.x); 9 } 10 R1 operator-(R1 r1){ 11 return R1((*this).x - r1.x); 12 } 13 }; 14 15 16 class R2{ 17 public: 18 double y; 19 R2(double y){ 20 (*this).y = y; 21 } 22 R2 operator+(R2 r2){ 23 return R2((*this).y - r2.y); 24 } 25 R2 operator-(R2 r2){ 26 return R2((*this).y + r2.y); 27 } 28 };

コンストラクタ

c++

1class A2{ 2public: 3 double x; 4 A2(double x){ 5 (*this).x = x; 6 } 7};

9th.inの内容の取得については全くわかりません。
この4つをまとめて一枚に書けばいい感じですか?

皆さんの回答を参考に書き直したコードです

c++

1#include<iostream> 2#include<fstream> 3#include<cmath> 4using namespace std; 5 6class A{ 7 8public: 9 double x; 10 double y; 11 12 A() = default; 13 14 //コンストラクタ 15 A(double x,double y){ 16 (*this).x = x; 17 (*this).y = y; 18 } 19 20 //長さを計算する関数len 21 double len(){ 22 return sqrt((-1.14453-x)*(-1.14453-x) + (0.560077-y)*(0.560077-y)); 23 } 24 25 //加算演算子と減算演算子 26 A operator+(A a1){ 27 return A((*this).x + a1.x); 28 } 29 A operator-(A a1){ 30 return A((*this).x - a1.x) 31 } 32 33}; 34 35int main(){ 36 ifstream ifs("9th.in"); 37 if(!ifs) return 1; 38 39 double x,y,x0,y0,r; 40 int n; 41 ifs >> x0 >> y0 >> r >> n; 42 43 cout << boolalpha; 44 for(int i=o;i<n;i++){ 45 ifs >> x >> y; 46 cout << (hypot(x - x0,y - y0) < r) << endl; 47 } 48}

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

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

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

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

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

guest

回答4

0

ファイル 9th.in を読み込むには ifstream を使います。

C++

1#include <iostream> // cin, cout, endl 2#include <fstream> // ifstream 3#include <cmath> // hypot 4using namespace std; 5 6 7int main() 8{ 9 ifstream ifs("9th.in"); 10 if (!ifs) return 1; 11 12 double x, y, x0, y0, r; 13 int n; 14 ifs >> x0 >> y0 >> r >> n; 15 16 cout << boolalpha; 17 for (int i = 0; i < n; i++) { 18 ifs >> x >> y; 19 cout << (hypot(x - x0, y - y0) < r) << endl; 20 } 21}

追記
解決済みにしたのなら、どのようにして解決したのかコードを書いてほしい
と思います。後から質問を検索してみる人のためにも。

C++

1#include <iostream> // cout, endl, boolalpha 2#include <fstream> // ifstream 3#include <cmath> // hypot 4using namespace std; 5 6class Vector { 7 double x, y; 8public: 9 Vector(double x = 0, double y = 0) { this->x = x; this->y = y; } 10 Vector(const Vector& v) { x = v.x; y = v.y; } // copy constructor 11 12 Vector operator+(const Vector& v) { return Vector(x + v.x, y + v.y); } 13 Vector operator-(const Vector& v) { return Vector(x - v.x, y - v.y); } 14 15 double len(const Vector& v) { 16 Vector p = *this - v; // operator- を使用 17 return hypot(p.x, p.y); // 直角三角形の斜辺 c = hypot(a, b) 18 } 19}; 20 21int main() 22{ 23 ifstream ifs("9th.in"); // input file stream 24 if (!ifs) return 1; 25 26 double x, y, r; 27 int n; 28 ifs >> x >> y >> r >> n; 29 Vector v0(x, y); 30 31 cout << boolalpha; 32 for (int i = 0; i < n; i++) { 33 ifs >> x >> y; 34 Vector v(x, y); 35 cout << (v0.len(v) < r) << endl; 36 } 37}

投稿2020/07/14 07:42

編集2020/07/15 02:24
kazuma-s

総合スコア8224

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

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

_._._ami

2020/07/14 23:59

具体的なコードまで・・・!!本当にありがとうございます( ; ; )少し分かってきました!
guest

0

多分あなたが作ろうとしているものと同じものを昔作ったことがあるのでよければ
https://github.com/Nagarei/DxLibEx/blob/master/dxlibex/basic_types/point2d.hpp

投稿2020/07/14 07:10

yumetodo

総合スコア5852

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

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

_._._ami

2020/07/14 07:33

ありがとうございます!!参照させていただきます!
guest

0

ベストアンサー

二次元ベクトルクラス

が,

長さを計算する関数 len
加算演算子
減算演算子
コンストラクタ

の4つを有する,という話であると思います.(クラスを4種類作るのではなくて)

投稿2020/07/14 05:12

fana

総合スコア11996

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

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

_._._ami

2020/07/14 05:42

なるほど!!ありがとうございます! ちなみに9th.inのファイルの中身の取得については何か案はありませんでしょうか・・・?
fana

2020/07/14 05:54

「案」と言われても, std::ifstreamでも使って,std::getline()で1行ずつ読み込んで,行によっては必要に応じてカンマの位置でその読み込んだ文字列を細切れにしては数値に解釈する…といったことを行えばよいのではないでしょうか.
_._._ami

2020/07/14 07:33

ありがとうございます!!
guest

0

加算,減算を行う二次元ベクトルクラスを作成.以下の4つの機能も実装しなければなりません。

長さを計算する関数 len
加算演算子
減算演算子
コンストラクタ

こいつら全部 複素数クラス: std::complex<double> で解決しそうです。

[追記] ものは試しに書いてみた:

C++

1#include <iostream> 2#include <fstream> 3#include <complex> 4#include <string> 5 6int main() { 7 std::string _9th_in = 8 "3 4 3\n" 9 "3\n" 10 "0 0 \n" 11 "1 2 \n" 12 "3 4 \n"; 13 std::istringstream stream(_9th_in); 14 15 double x, y, r; 16 stream >> x >> y >> r; 17 std::complex<double> p(x,y); 18 19 int n; 20 stream >> n; 21 while ( n-- ) { 22 stream >> x >> y; 23 std::complex<double> q(x,y); 24 double distance = std::abs(p-q); // q-p間の距離 25 std::cout << p << ':' << q << " " << distance << " : " 26 << std::boolalpha << (distance < r) << std::endl; 27 } 28}

投稿2020/07/14 04:58

編集2020/07/15 03:41
episteme

総合スコア16612

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

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

_._._ami

2020/07/14 05:43

ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問