• ベストアンサー

この問題の意味が分かりません。

配列aの全要素を配列bに対して逆順にコピーするプログラムを作成せよ。 なお、二つの配列の要素数は同一であると仮定して良い。 この問題の意味なんですが、要素数はnであるとして、 (1)a[n-1]をb[n-1]に、a[n-2]をb[n-2]に・・・a[0]をb[0]にコピーしていくということですか? 結果、配列aの全要素はbと同じ。 (2)それとも、a[0]をb[n-1]に、a[1]をb[n-2]に、・・・a[n-1]をb[0]にコピーしていうことですか? 結果、配列bはaの全要素を逆順にした要素が入ってる。 ちなみに、どちらの場合もプログラムは分かります。 やっぱり(2)の意味でしょうか?

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

  • ベストアンサー
  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.1

日本語の問題ですね。 たしかに厳密にはどちらとも取れるかもしれません。 ただし、普通に考えれば(2)の方だと思います。 逆順となるように、って書いてくれれば迷わないですよね。 まあ、この場合どちら側からというのが最終結果に関係無いので、 プログラムの例題として考えれば後者でしょうね。

wooyan_52
質問者

お礼

今帰りました! やっぱり厳密にはどちらとも取れますよね! 回答ありがとうございました。

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

関連するQ&A

  • C言語の配列のコピーについて質問です。

    intを要素とする二つの配列a、bとその配列の要素数を受け取り、配列aのすべての要素の値を配列bにコピーする関数を定義し、その関数の機能を確認するプログラム作成するという問題について質問です。 (1)配列aを配列bに「先頭から順番に」コピーする関数を作成する (2)配列aを配列bに「後ろから順番に」コピーする関数を作成する ただし、配列の要素数(例では4)が変更されても処理できる関数を作成したいです。また、配列の要素の値は関数main()内で表示したいです。 [ヒント] (1)関数宣言の例 void array_copy(コピー元の配列, コピー先の配列, 配列の要素数) [実行結果の例] (1)先頭から順番にコピーする コピー前 a[0]: 1 b[0]: 0 a[1]: 2 b[1]: 0 a[2]: 3 b[2]: 0 a[3]: 4 b[3]: 0 コピー後 a[0]: 1 b[0]: 1 a[1]: 2 b[1]: 2 a[2]: 3 b[2]: 3 a[3]: 4 b[3]: 4 (2)後ろから順番にコピーする コピー前 a[0]: 1 b[0]: 0 a[1]: 2 b[1]: 0 a[2]: 3 b[2]: 0 a[3]: 4 b[3]: 0 コピー後 a[0]: 1 b[0]: 4 a[1]: 2 b[1]: 3 a[2]: 3 b[2]: 2 a[3]: 4 b[3]: 1 #include <stdio.h> void array_copy() から始めて int main(void) { とプログラムを作成したいのですが教えてください。

  • 配列の問題

    配列の問題です。 n個の要素を持つ一次元配列の値(変数値)をまったく逆に入れ替えるプログラムを作りたいのですが、この場合どのようにして逆を表現すればよいのかわかりません。 (nの値は読み込み、配列は奇数個でも偶数個でも使えるプログラムでなければなりません) 参考書を見ながら作ってみたのですが…だめでした。 プログラム初心者です。アドバイスお願いします。 int main(void) { int i,n; int vc[n]; printf("n個の要素を持つ一次元配列をつくる\n"); printf("nの値を入力してください\n"); scanf("%d",&n); for (i=0;i<n+1;i++) vc[i]=i+1; for (i=0;i<5;i++) printf("vc[%d]=%d\n",i,vc[i]); printf("この配列を逆に入れ替えると\n); return 0; }

  • 数学の証明問題

    数学の論証問題の解き方を教えてください。『次のような条件を満たす集合Aがある。 (i)Aの要素は正の実数である。 (ii)Aは少なくとも2つの要素をもつ。 (iii)p∈A、q∈Aでp≠qならば、 p/q∈Aである。 このとき、次の(1)、(2)の問いに答えるという問題です。 (1)Aは無数に多くの要素をもつことを示す。 (2)1 ∈A、2 ∈Aであるとき、全ての整数nに対して、2^n ∈Aであることを示す。』 以下に自分の解いた過程を書いておきます。 間違っている箇所などのご指摘をお願いします。 (1)Aの要素の個数が有限個であると仮定する。この時、最大の要素をa、最小の要素をbとする。a>1のとき、b/a∈Aなのでbより小さい要素がある。a<1のとき、b/a∈Aなのでaより大きい要素がある。これは最大をa、最小をbとしたことと矛盾する。したがって、Aは無数に多くに要素を持つ。(証明終) (2)数学的帰納法で示す。n=1のとき、2∈Aで成立する。n=kのときに成立すると仮定すると、2^k∈A、2∈Aより、2^k/2=2^(k-1)∈A k→∞で考えていいので全ての整数nについて2^n∈Aが成立する。(証明終)

  • どうしても上手くいきません…

    #include<stdio.h> #include<stdlib.h> double sumf(int n,double *ds); int main(double){ double a,b; double df=0.7 int n; double *ds; double *z; int size; printf("Input two numbers -> "); scanf("%lf%lf",&a,&b); printf("n"); size = sizeof(*ds)*(1+(int)((b-a)/df)); z = ds = (double*)malloc(size); n = 0; while(a<=b){ *z = a; a += df; printf("%.1f",*z++); n++; } printf("n"); printf("n"); printf("sumf = %.1fn",sumf(n,ds)); return 0; } double sumf(int n,double *ds){ double sum = 0; while(n){ sum += *ds++; n--; } return sum; } 入力された二つの実数a,b(a<b)をもとに、aからbまで0.7ずつ増加する数値の配列を作り、その配列の合計を求める関数sumfを作りなさい。ただし、配列を作る、配列の合計を求める箇所はポインタを使うこと。 【ヒント】 ・プログラムの構成 mainで配列要素の作成、配列の表示、関数sumf呼出し、sumの表示。 関数sumfで配列の合計を求めreturnで合計値を返す。 ・引数の考慮点 実数の配列だけでなく配列の要素数も引数として渡す必要がある。 宜しくお願いします。 どこが違うのでしょうか? 【現時点での実行結果】 ./p243.c Input two numbers -> 2.0 7.0 2.0 2.7 3.4 4.1 4.8 5.5 6.2 6.9 sumf = 16.0 【実行したい結果】 ./p243.c Input two numbers -> 2.0 7.0 2.0 2.7 3.4 4.1 4.8 5.5 6.2 6.9 sumf = 35.6 どこが間違っているのでしょうか? 出来るだけの手直しはしたのですが…

  • C言語です。

    C言語について…配列を使うときにa[]を使いますが、例えば要素数を10個とすればa[10]ですよね? ではa[n]としてprintf("n=");scanf("%d",&n);でその度に要素数を変えることはできないのですか?エラーが出てきてしまいます。

  • Javaのプログラムが完成出来ません・・・

    この前、大学からこんな課題が出されました。 以下の条件が含まれてるシェルソートのプログラムを作成せよ。 条件。 ・ソート済み部分に新しい値を挿入するための空き場所を作るメソッドを入れること。 ・配列の逆順数を計算するメソッドを入れる。 ・今の歩幅より一段階小さい歩幅を計算するメソッドを入れる。 ・配列の大きさに一番合った歩幅を計算するメソッドを入れる。 ・歩幅hの挿入ソートを行うメソッドを入れる。 ・シェルソートを行うメソッドを入れる。 ・mainメソッドを完成させ、ソート過程を表示しながらシェルソートを実行するようにする。 ・作成したプログラムが正しく選択ソートを実行していることが分かる実行結果を示すこと。 ・値は、 a[0]=0, a[1]=30, a[2]=20,a[3]=10 一応プログラムは、 class ShellSort{ static int compare = 0; static int copy = 0; static void showArray(int a[], int N){ //2-0:逆順数と共に配列の内容を表示するメソッド //動作:N個の要素を持つ配列aの要素を全て画面に表示する //} static void initArray(int a[], int N){ //2-0:配列にランダムな値を代入するメソッド //動作:N個の要素を持つ配列aに対し、1~Nまでの範囲の数をランダムに入れる //ただし、a[0]には常に0を入れること。 } static int shiftLargerElements(int a[], int v, int i){ //2-0:ソート済み部分に新しい値を挿入するための空き場所を // 作るメソッド //動作:配列aに対し、a[i]より手前にあるvより大きい要素を後ろ //に1つずつずらしてvを挿入するための空き場所を作る。最後に、 //できた空き場所の添え字を戻り値として返す。 //空き場所を作るまでに行った比較回数を変数compareに加算 //空き場所を作るまでに行ったコピー回数を変数copyに加算      int space = 0; int j; j = i; while((compare++ >= 0) && (a[j-1] > v)){ a[j] = a[j-1]; copy++; j--; } space = j; return space; } static int shiftLargerElements(int a[], int v, int i, int h) { //2-1:ソート済み部分に新しい値を挿入するための空き場所を // 作るメソッド //動作:配列aに対し、a[i]より手前にある要素 //a[i-h],a[i-2h],a[i-3h],...のうち、vより大きい各要素を後ろに //hだけ移動させてvを挿入するための空き場所を作る。 //最後に、できた空き場所の添え字を戻り値として返す。 //空き場所を作るまでに行った比較回数を変数compareに加算 //空き場所を作るまでに行ったコピー回数を変数copyに加算 int space = 0; return space; } 現在はここまでしか作成出来てません。 それ以降でつまづいています。 分かる人がいましたら、是非教えて下さい。

  • c言語配列拡張

    c言語配列拡張 20個の要素からなる実数配列 x[ ] から、小さい添え字からn個の要素までの 最大値を取り出すプログラムを作成する。計算する要素の数nはキーボード から入力するか乱数で決定するかは乱数により得る。 a. 乱数が奇数の場合はキーボードから入力する。 b.乱数が偶数の場合この乱数の数を用いる。 誰が知ったら教えてください!

  • ポインタの問題です

    学校の課題である文字列をポインタを使って逆順に表示するというプログラムを作ったのですが、「問題で引数で与えられた文字列を逆順とする関数を作成せよ.ただし文字数が最大256文字であると仮定して良い.」ということなんですが、課題が求めている答えと自分が作ったプログラムがあっているか確認お願いします。 #include <stdio.h> void reverseWord(char *str); void main(void) { char *str = "sapporo"; char *p, *q; printf("元: %s\n", str); p = q = str; while (*q != '\0') q++; printf("逆順:"); while (q >= p) putchar(*q--); printf("\n"); } よろしくお願いします。

  • Eclipse による Java プログラミングの配列について質問です

    Eclipse による Java プログラミングの配列について質問です。 下の二つの問題に対して、それぞれのソースコードを教えてください。よろしくお願いします。 1. int型配列aの要素の中で,正の値だけを順に配列bの要素に 代入して,その結果を表示するプログラムを作成しなさい. ※配列aの要素と配列bの要素をそれぞれ表示すること. (実行例) 配列a={5 -1 3 4 -2 7} 配列b={5 3 4 7} 2. int型配列dataの要素の中で,最大値と何番目の配列の要素が 最大値か表示するプログラムを作成しなさい. ※配列dataの要素も表示すること. (実行例) 配列data={31 41 59 26 53 58 37 97 93 23 84} 最大値は97です 最大値は7番目の配列の要素です

    • ベストアンサー
    • Java
  • プログラムを上手く動かすには…

    #include<stdio.h> #include<stdlib.h> double sumf(int n,double *ds); int main(){ double a,b; double df=0.7 int n; double *ds; double *z; int size; printf("Input two numbers -> "); scanf("%lf%lf",&a,&b); printf("n"); size = sizeof(*ds)*(1+(int)((b z = ds = (double*)malloc(size); n = 0; while(a<=b){ *z = a; a += df; printf("%.1f",*z++); n++; } printf("n"); printf("n"); printf"sumf = %.1fn",sumf(n,ds)); return 0; } double sumf(int n,double *ds){ double sum = 0; while(n){ sum += *ds; n--; } return sum; } 入力された二つの実数a,b(a<b)をもとに、aからbまで0.7ずつ増加する数値の配列を作り、その配列の合計を求める関数sumfを作りなさい。ただし、配列を作る、配列の合計を求める箇所はポインタを使うこと。 【ヒント】 ・プログラムの構成 mainで配列要素の作成、配列の表示、関数sumf呼出し、sumの表示。 関数sumfで配列の合計を求めreturnで合計値を返す。 ・引数の考慮点 実数の配列だけでなく配列の要素数も引数として渡す必要がある。 宜しくお願いします。 どこが違うのでしょうか?