ページ 11

構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 12:47
by skcl

コード:

#include <stdio.h>

struct dr {
  int quotient;
  int remainder;
};
typedef struct dr DivideResult;

DivideResult Divide(int a, int b);

int main() {
  DivideResult dr = Divide(11, 3);
  printf("商=%d, 剰余=%d\n", 
    dr.quotient, dr.remainder);
  return 0;
}

DivideResult Divide(int a, int b) {
  DivideResult dr;
  dr.quotient = a / b;
  dr.remainder = a % b;
  return dr;
}
このプログラムでaとbだけでなくcdeと増やしたり商と乗余だけでなく、和や差も入れるプログラムにするには、どこを変えれば良いのでしょうか。windows10 64bit visual studio 2015communityです。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 13:37
by みけCAT
skcl さんが書きました:このプログラムでaとbだけでなくcdeと増やしたり
Divide関数の宣言(9行目)、定義(18~23行目)、呼び出し(12行目)を変えればいいでしょう。
skcl さんが書きました:商と乗余だけでなく、和や差も入れる
構造体の定義(4~5行目)、Divide関数の定義(20~21行目)、結果の出力(13~14行目)を変えればいいでしょう。

[hr]
質問の意図がよくわかりません。
試してみてエラーになったコードなどはありますか?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 13:43
by skcl
すみません。色々なプログラムを組みたいと思うのですがなかなか進歩しなくてまだ初心者なんです。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 13:53
by skcl
Divide関数の宣言てどうやるんですか?和や差を入れる場合12行目は変えなくていいのですか?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:00
by box
割り算用の関数が意図どおりに動いているのであれば、それには手を触れずに
「新たに」足し算用の関数(名前の例:Add)と引き算用の関数(名前の例:Sub)を用意するのがよいと思います。
1つの関数で足し算も引き算も割り算も実行する、というのは避ける方がよいと思います。

なお、構造体に、商とあまりの他、和と差のためのメンバーを追加する必要があると思います。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:12
by skcl
足し算用の関数add引き算用の関数subとはどの様に用意すれば良いのでしょうか?私サンプルプログラム等を試していてどのようにしたらプログラムを変化させられるかと思って投稿しました。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:19
by purin52002
なにも難しいことはありません。
落ち着いて考えればわかるはずです。

aとbを引数にとってa+bやa-bをreturnします。
余りは出ないから整数の値を一つ返すだけの関数ができると思います。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:22
by purin52002
あ、もしかして構造体に四則演算の結果を入れたいんですかね?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:26
by skcl
このプログラムをもっとバリエーションを増やすことってできるのですか?まだまだ初心者でわからないのですが変数をint a int bをint c int dとか増やしていくことは出来ますか?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:29
by purin52002
func(a,b,c,/*何個でも引数をとれる*/);ってことですかね?
一応できると思いますよ。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:35
by skcl
funcなんてないのですが、どこで宣言するのでしょうか?intは増やせますか?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:40
by purin52002
すみませんでした。もう少し詳しく書きますね^^;

コード:

#include <stdio.h>
 
struct dr {
  int quotient;
  int remainder;
};
typedef struct dr DivideResult;
 
DivideResult Divide(int a, int b);
 
int main() {
  DivideResult dr = Divide(11, 3);
  printf("商=%d, 剰余=%d\n", 
    dr.quotient, dr.remainder);
  return 0;
}
 
DivideResult Divide(int a, int b) {
  DivideResult dr;
  dr.quotient = a / b;
  dr.remainder = a % b;
  return dr;
}
intを増やしたいというのはDivide(int a,int b)の引数のことでよろしいでしょうか?
printf関数のようにいくらでも引数を渡せるようにしたいということでしょうか?

もしそうでないのなら(引数がabcdeの5個でいいよー)、

コード:

#include <stdio.h>
 
struct dr {
  int quotient;
  int remainder;
};
typedef struct dr DivideResult;
 
DivideResult Divide(int a, int b,int c,int d,int e);
 
int main() {
  DivideResult dr = Divide(11, 3, 0, 0 ,0);
  printf("商=%d, 剰余=%d\n", 
    dr.quotient, dr.remainder);
  return 0;
}
 
DivideResult Divide(int a, int b,int c,int d,int e) {
//好きな処理を書く
}
のようにすればどうでしょう?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 14:49
by skcl
すみません具体的なコードまで書いてくださって。quotientとremainderは変えなくていいんですか。好きなように記述するところをやったら、商と剰余の所を変えればいいのですか?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 15:01
by purin52002
よろしければどういうことがしたいか教えてもらってもいいですか?

いまのところ私の認識では、
  • 四則演算した結果を構造体に格納したい。
  • 引数を増やしてa+b+cやa-b-cなどにも対応できるようにしたい。
というのがskclさんのやりたいことなのかなと思っています。

これなら四則演算(いまだと割り算だけ)の結果であるquotientとremainderは特に変えなくてもいいんじゃないかなーと思いました。
商と剰余の所を変えればいいのですか?
というのがよくわからなかったので、そこには触れないでおきます^^;

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 15:06
by skcl
商と剰余の所を変えないと商とした所に足し算の結果等が出てきてしまいますよね。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 15:09
by みけCAT
習うより慣れよです。
あれこれ聞くより、まずは自分の予想でコードを書き換えてみてください。
コンパイルエラーなどが出てこんがらがってしまったら、そのエラーが出るコードを貼って質問してください。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 15:12
by skcl
分かりました。自分で予想コードを書いてみます。またお願いします。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 15:41
by skcl

コード:

#include <stdio.h>

struct DivideResult {
  int quotient;
  int remainder;
};

struct DivideResult Divide(int a, int b, int c, int d, int e);

int main() {
  struct DivideResult dr = Divide(11, 3, 6, 7, 4);
  printf("商=%d, 剰余=%d\n",
    dr.quotient, dr.remainder);
  return 0;
}

struct DivideResult Divide(int a, int b, int c, int d, int e) {
  struct DivideResult dr;
  dr.quotient = a / b / c / d / e;
  dr.remainder = a % b % c % d % e;
  return dr;
ってやってみました。とりあえず少し広がりました。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 16:05
by purin52002
おめでとうございます^^

あとは足し算とか引き算ですね^^^

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 16:28
by skcl
新しいプログラムの質問このまましてはいけないのでしょうか?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 16:36
by みけCAT
skcl さんが書きました:新しいプログラムの質問このまましてはいけないのでしょうか?
「新しいプログラム」が具体的にどのようなプログラムなのかによると思います。
今の「構造体(structure)のプログラム」と全く関係ない新しいプログラムの質問は、新しいトピックでするべきでしょう。
このトピックで質問されている「和や差も入れるプログラムにする」がまだ解決していないようなので、それに関する質問はこのトピックの続きとしてするべきでしょう。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 17:06
by skcl

コード:

#include <stdio.h>

struct DivideResult {
  int sum;
  int diff;
  int mul;
  int quotient;
  int remainder;
};

struct DivideResult Divide(int a, int b, int c, int d, int e);

int main() {
  struct DivideResult dr = Divide(11, 3, 6, 7, 4);
  printf("和=%d, 差=%d, 積=%d, 商=%d, 剰余=%d\n",
    dr.sum, dr.diff, dr.mul, dr.quotient, dr.remainder);
  return 0;
}

struct DivideResult Divide(int a, int b, int c, int d, int e) {
  struct DivideResult dr;
  dr.sum = a + b + c + d + e;
  dr.diff = a - b - c - d - e;
  dr.mul = a * b * c * d * e;
  dr.quotient = a / b / c / d / e;
  dr.remainder = a % b % c % d % e;
  return dr;
}
ってやったのですが、和と差と積はあってるのですが、商は確か、割り切れないと0になると思ったので、あってると思うのですが、剰余は2でいいのですかね。たぶんしょうがないとおもうのですが。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 17:16
by purin52002
実際に計算してみると

//()で囲っているところから計算しています
(11/3)/6/7/4=(3/6)/7/4=(0/7)/4=(0/4)=0

(11%3)%6%7%4=(2%6)%7%4=(2%7)%4=(2%4)=2

となります。

計算自体は間違ってないと思いますよ。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 17:19
by skcl
これでもう終わりでいいのですかね?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 17:20
by purin52002
skclさんの疑問が晴れたのならもういいのではないでしょうかね?

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 17:22
by skcl
でも少しプログラムができて良かったです。またお願いします。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 17:48
by みけCAT
skcl さんが書きました:商は確か、割り切れないと0になると思ったので
もしも割り切れないだけで0になったら、使い物にならないでしょう。
整数の割り算では小数点以下が切り捨てられるだけで、割り切れなくても0になるとは限りません。

Re: 構造体(structure)のプログラムについて。

Posted: 2017年3月03日(金) 20:36
by skcl
そうなんでしたよね。間違った解釈をしてました。