• ベストアンサー

このプログラムどうすれば?

実数値a,b,cが与えられた時、方程式ax^2+bx+c=0を解き、解の個数をnnに、1つめの解(あれば)をxx1に、2つめの解(あれば)をxx2にセットする関数 void quadratic_equation(double a,double b,double c,int*nn,int*xx1,double*xx2) を作成せよ。ただし、a==b==c==0 の時には、nnに-1をがセットされるようにせよ。 というプログラムを作り、cygwinで確認しなければならないんですが、ポインタをどのようにして上手く用いるかが苦手でわかりません。教えて頂けないでしょうか?? よければ、y=ax^2+bx+c と y=dx+e の交点(あるいは接点)を表示するプログラムを作成してもらえたらうれしいです。ポインタを用いなければできるのですが、。。。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> ポインタをどのようにして上手く用いるかが苦手でわかりません。 ヒント。 #include <stdio.h> void set0(int* nn) {  *nn = 0; ← ここ重要! } int main() {  int x = 123;  printf("before: %d\n", x);  set0(&x); ← ここも重要!  printf("after: %d\n", x);  return 0; }

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

もうこれ以上助言することは何もないのですが、補足要求した手前、ほんの少しだけ... 書いてくれたプログラムをd = e = 0の場合に特化したものが2次方程式の解になります。 後は、mainからその部分を分離して(関数の作り方はわかるんですよね)、判別式Dをもとに重解か虚数解かを判別すれば個数(*nn)が出ますし、それに応じて解A, B, Cを対応する*xx1と*xx2に代入するだけです。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

ポインタを使わなければできるのであれば、とりあえずグローバル変数にでも結果を格納するものぐらいは自分で作ってみたのでしょうか? もし作った(またはこれからでも作る)のであれば、そのソースを載せれば回答もしやすいと思います。

spider1984
質問者

補足

#include <stdio.h> #include <math.h> int main(void) { int a,b,c,d,e; double P,Q,D,A,B,C,L,M,N; printf("y=ax^2+bx+c と y=dx+e のa,b,c,d,eの値を入力せよ。"); scanf("%d %d %d %d %d",&a,&b,&c,&d,&e); P=(double)(e-c)/(b-d); Q=(double)b*P+c; D=(double)(b-d)*(b-d)-4*a*(c-e); A=(double)((d-b)+sqrt(D))/(2*a); B=(double)((d-b)-sqrt(D))/(2*a); C=(double)(d-b)/(2*a); L=(double)d*A+e; M=(double)d*B+e; N=(double)d*C+e; if((a==0)&&(b!=d)) { printf("(%f,%f)",P,Q); } else if((a==0)&&(b==d)&&(c!=e)) { printf("解なし&平行"); } else if((a==0)&&(b==d)&&(c==e)) { printf("直線上の任意の点&恒等式"); } else if(D>0) { printf("(%f,%f)\n(%f,%f)\n",A,L,B,M); } else if(D==0) { printf("(%f,%f)\n接点です",C,N); } else { printf("解なし"); } return 0; } このプログラムは自分で作りました。ポインタの使い方などがあまりよく分からず、今必死で勉強しているとこです。

関連するQ&A