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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

2回答

434閲覧

こちらのプログラムの書き方がわかりません。教えてください。

Kazut0

総合スコア10

C

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/11/01 02:08

こちらのプログラムの書き方がわかりません。教えてください。

整数 a, b, c を引数とし,2次方程式 a x^2 + b x + c = 0 の解のうち大きい方を戻り値とする関数 double quad_eq( int a, int b, int c ) を 作成せよ. 解を計算する上で、関数 discriminant を呼び出し,戻り値を利用すること. 
さらに,main 関数においてキーボードから a, b, c を受け取り, 「a x^2 + b x + c = 0 の解のうち大きい方は?です」のような表示 をするプログラムを作成せよ.ただし,関数 quad_eq からの戻り値を用いて解を得ること. 

ここで,方程式が実数解を2個もつような a,b,c が入力されると仮定してよい.

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

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

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

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

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

papinianus

2018/11/01 03:58

最低でもdiscriminantのシグネチャを教えていただかないと呼び出しが書けないです。もしdiscriminantも作る前提ならそちらの仕様も必要だと思います。
guest

回答2

0

解の公式でやればいいと思います

https://ja.wikipedia.org/wiki/%E4%BA%8C%E6%AC%A1%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E8%A7%A3%E3%81%AE%E5%85%AC%E5%BC%8F

±があるので両方求めて大きい方を返せばOKです

投稿2018/11/01 02:12

rururu3

総合スコア5545

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

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

0

CなのかC#なのかわからなかったので、中間のC++で書きました。(C++17 + boost 1.68.0)

C++

1#include <boost/multiprecision/cpp_complex.hpp> 2#include <boost/multiprecision/cpp_int.hpp> 3#include <iostream> 4 5template <typename T> T discriminant(const T &a, const T &b, const T &c) 6{ 7 return b * b - 4 * a * c; 8} 9 10template <typename T> T quad_eq(const T &a, const T &b, const T &c) 11{ 12 return (-b + sqrt(discriminant(a, b, c))) / (2 * a); 13} 14 15int main() 16{ 17 boost::multiprecision::cpp_complex_quad a, b, c; 18 while (!(std::cin >> a >> b >> c)) { 19 std::cin.clear(); 20 std::cin.ignore(); 21 } 22 auto x = quad_eq(a, b, c); 23 std::cout << std::setprecision(34) << a << u8" x^2 + " << b << u8" x + " 24 << c << u8" = 0 の解のうち大きい方は " << x.real(); 25 if (x.imag() > 0) 26 std::cout << " + " << x.imag() << "i"; 27 std::cout << u8" です。" << std::endl; 28 return 0; 29}

ちゃんと複素数の解も表示するようにしています。binary128ですので十進数で34桁ぐらいしか精度はありません。

投稿2018/11/01 12:24

raccy

総合スコア21733

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問