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

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

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

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

Q&A

解決済

2回答

794閲覧

構造体を用いた有理数をn回足す方法が分からない。

aoba-purines

総合スコア13

C

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

0グッド

0クリップ

投稿2022/04/14 04:51

有理数をn回足し合わせる関数reductionrの作成方法がわかりません。
forとaddr関数を組み合わせることはわかっているのですが、問題として与えられたcheck5の中身があまり理解できず、どのように作成すれば良いのかわかりません。

#include<stdio.h> #include<stdlib.h> typedef struct { int n, d; // n: \u5206\u5B50, d: \u5206\u6BCD } rational; int gcd(int a, int b) { int i; int min = a; if (a > b) min = b; for (i = min; i > 0; i--){ if ((a % i == 0) && ( b % i == 0)) return i; } return 1; } rational setr(int n, int d) { rational z; if (d == 0) { fprintf(stderr, "Denominator must be nonzero.\n"); exit(1); } z.n = n; z.d = d; return z; } void printr(rational z) { printf("%d/%d\n", z.n, z.d); } rational addr(rational x, rational y) { int n = x.n * y.d + y.n * x.d; int d = x.d * y.d; rational z = setr(n, d); return z; } rational reductionr(int n, rational ary[]) { } void check5(int argc, char *argv[]) { int n = atoi(argv[1]); rational ary[n]; for(int i = 0; i < n; i++) { ary[i] = setr(atoi(argv[2+i*2]), atoi(argv[3+i*2])); } rational z = reductionr(n, ary); printr(z); } int main(int argc, char *argv[]) { check5(argc, argv); return 0; }

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

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

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

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

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

y_waiwai

2022/04/14 04:58

なにをやりたいんでしょうか。
int32_t

2022/04/14 05:11 編集

addr() がすでにあるのですから、それを繰り返すだけですよね。 でも、reductionr という関数名で本当に「足し合わせる」が処理内容なんですかね。
jimbe

2022/04/14 05:57

>check5の中身 n 個の rational の配列 ary を作って reductionr を呼び出しているだけです。 パラメータを元に動作するよう reductionr の実装に集中すれば良いだけでしょう。
guest

回答2

0

約分はしていません。
1回計算毎に、約分すれば、良いかと。

C

1rational reductionr(int n, rational ary[]) 2{ 3 int i; 4 rational z = ary[0]; 5 for (i = 1; i < n; i++){ 6 z = addr(z,ary[i]); 7 } 8 return z; 9} 10

投稿2022/04/14 06:35

tatsu99

総合スコア5438

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

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

0

ベストアンサー

C

1// ほとんどそのまま使える疑似コード 2rational reductionr(int n, rational ary[]) { 3 rational result; 4 // result を 1分の0 で初期化する 5 for ( i = 0..n-1 に対し ) { 6 // result に array[i] を加える (addr使えばいいよね) 7 } 8 return result; 9}

投稿2022/04/14 06:06

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問