• 締切済み

C言語でポインタを使ってピタゴラスの定理の関数を作りたいです

私は今あるプログラムを書いていて、その過程でどうしても関数を使ってピタゴラスの定理を作りたいのですが、ポインタの渡し方がうまくいきませんでした。ポインタを使わない場合は次の通りでした。 double pythagoras(double a, double b){ double c; c = a*a+b*b; c = sqrt(c); return c; } これはメイン関数で二つの値a,b(int型)をpythagoras関数に入れて、ピタゴラスの定理を適用させてメイン関数にc(double型)を戻り値として返すものです。 しかし2つの値a,bがint型ではなくポインタだとうまくいかないです。どのような関数を作ればいいか分かる人がいたらぜひ教えてください。ちなみに現在a,bは次のように宣言してあります。 struct node { int a; int b struct node *next; };

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.2

そもそも、自己参照型構造体を使う必要が本当にあるのでしょうか?

rict-mict
質問者

お礼

他の方法を検討してみようと思います

全文を見る
すると、全ての回答が全文表示されます。
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

>しかし2つの値a,bがint型ではなくポインタだとうまくいかないです。 ポインタを使ってみた場合のソースは?(宣言部、呼び出し部、関数)

rict-mict
質問者

お礼

まだあまり完成していないです。回答どうも有難うございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【C言語】別関数でポインタの値を変えたのに変わらない。

    【C言語】別関数でポインタの値を変えたのに変わらない。 メイン関数のポインタの値を、別関数で書き換えるプログラムを作りました。 以下がそのプログラムになります。 そのままだと、ダブルポインタを操作する必要があるので分かり辛いです。なので、ダブルポインタをシングルポインタにしてからポインタの書き換えを行うようにしました。その結果、きちんとポインタの書き換えが出来なくなってしまいました。 なぜ出来なくなってしまったのでしょうか。 2つのプログラムの違いは、 >  *pp = &dummy; が >  p = *pp;      // ダブルポインタをシングルポインタにした >  p = &dummy; に変わっただけです。 【参考】http://www.kouno.jp/home/c_faq/c4.html#8 -----------------正しいプログラム---------------- // 以下プログラムは、正しく動作する // 実行結果は、 //   p = 5 // と表示される void func( int **pp ); int main (void){   int *p;   int a = 0;   p = &a;   func( &p );   printf("p = %d\n", *p);   return 0; } void func( int **pp ){   static int dummy = 5;   *pp = &dummy; } ---------------------------------------------- -----------------間違いプログラム---------------- // 以下プログラムは、正しく動作しない // 実行結果は、 //   p = 0 // と表示される void func( int **pp ); int main (void){   int *p;   int a = 0;   p = &a;   func( &p );   printf("p = %d\n", *p);   return 0; } void func( int **pp ){   static int dummy = 5;   int *p;   p = *pp;      // ダブルポインタをシングルポインタにした   p = &dummy; } ----------------------------------------

  • C言語:構造体、自作関数についての質問

    こんばんは C言語の問題を提示されてなんとか作成していますが構造体と自作関数の変数の値を返したりするのが上手くいきません。 問題 「(1)x座標およびy座標のペアとして構成される構造体pointを定義せよ(両座標は整数であるとする)  (2)x座標およびy座標のメンバに値を設定し、その構造体を返す関数  struct point pointof(int a,int b){………}を作成せよ。  (3)二つの座標a,b間の距離を計算する関数  double distanceod(struct point a,struct point b); を作成せよ。  ※sqrt関数を使用せよ」 という問題です。メンバについてもいまいちよくわかりません。 どこでintを使うのか、またmainに値を返すやり方も上手くいかずコマンドプロンプトにはねられてばかりです。 どなたか解説おねがいしますm(_ _)m

  • ポインタ型の関数のコンパイル

    Cについて勉強中の一回生です 今回初めてポインタ型の関数を作ったのですが コンパイルができません エラー内容は warning: assignment makes pointer from integer without a cast warning: assignment makes pointer from integer without a cast でした。 型があってないっぽいのですがどうしてできないのですか? struct node { int key; struct node *parent,*left,*right; }; struct node *memvber_recursive(int key,struct node *root){ struct node *x; if(root->key == 0){ printf("ありません\n",root->key); return NULL; } else if(root->key == key) printf("あります\n",root->key); else if(root->key > key) x = member_recursive(key,root->left); else x = member_recursive(key,root->right); return x; } 課題の内容は再帰を使った二分木の探索です 引数は、探索する要素の値(キー)と2分探索木の根のポインタ 戻り値は要素が見つかればその点を示すポインタを、見つからなければNULLを返します あと関数の前にアスタリスクがつく意味がわかりません ポインタを返すと言う意味ですか? 先生が例文として与えてくれたのですが こんな形は教科書にのっておらず困っています よかったら教えて下さい 宜しくお願いします。

  • C言語のポインタの考え方について

    ポインタについて理解ができていないのでお聞きしたいのですが 値を交換する関数のプログラミングでこの場合ポインタ で以下にしないといけないと思います。 #include<stdio.h> void swap(int *a int *b){ int c; c=*a; *a=*b; *b=c; } main(){ int x,y; x=123; y=456; swap(&x,&y); printf("x = %d, y = %d\n", x, y); } またポインタを使用せず以下のプログラムではなぜダメのでしょうか。 よろしくお願い致します。 #include<stdio.h> void swap(int a int b){ int c; c=a; a=b; b=c; } main(){ int x,y; x=123; y=456; swap(x,y); printf("x = %d, y = %d\n", x, y); }

  • ピタゴラスの定理

    >>3:4:5 は経験的に正しいが、比から導かれる c2 = a2 + b2 (c, b, a は辺の長さ、または比)が普遍的に成立するかは不明である(証明はピタゴラスの定理を参照こと)。 >普遍的に成立するかは、不明である!!! とは、どういうことですか?

  • ピタゴラスの定理において

    ピタゴラスの定理について質問です。 直角三角形において3辺の関係はa^2+b^2=c^2となりますが、 逆に3辺の関係がa^2+b^2=c^2の場合、必ず直角三角形になるのでしょうか? また出来る場合どう証明すればいいのでしょうか? 回答よろしくお願いしますm(_ _)m

  • ピタゴラスの定理を証明してください。

     ピタゴラスの定理(三平方の定理)を証明してください。 直角三角形の斜辺の長さをa、残りの直角に接している2辺をb,cとおくと、 a^2=b^2+c^2 となるという定理です。  今、この証明について、20種類以上の解法を探しています。 よろしくお願いします。

  • ピタゴラスの定理と比例式

    ピタゴラスの定理でC^2=A^2+B^2である場合A^2=C^2-B^2からA^2={C+B}(C-B)となりますからA:C+B=C-B:Aは証明しないでも正しいと主張してもよいのでしょうか.

  • ピタゴラスの定理について

    ピタゴラスの定理について この証明方法は相似を使って証明しているんですよね? a^2+b^2=acとは考えないのでしょうか?

  • ピタゴラスの定理を使った問題がわかりません。

    ピタゴラスの定理を使った問題がわかりません。 A辺 =1 B辺=0.5 だと 1の二乗➕ 0.5の二乗で C=√1.25 C=√5/4 となりませんか? 答えはこうでしたので、混乱してます C=√5/2

このQ&Aのポイント
  • 「パスワードの変更が必要」が表示された場合の対処方法や変更方法、IPアドレスやプリントサーバー名の調べ方について解説します。
  • パソコンやスマートフォンのOSがWindows10で無線LANで接続している環境で、「パスワードの変更が必要」が表示された場合の対処方法について説明します。
  • ブラザー製品でパスワードの変更が必要な場合、IPアドレスやプリントサーバー名の調べ方もわからない場合でも安心です。この記事では、具体的な手順を紹介しています。
回答を見る

専門家に質問してみよう