ページ 11

c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月21日(木) 19:57
by po_po
a[0]=3
a[1]=0
a[2]=1
a[3]=2
a[4]=4
というような配列の要素が重複なく、0から配列の要素数の範囲になっている配列aを
a[3]=0
a[0]=1
a[1]=2
a[2]=3
a[4]=4
といった風に添え字と要素を交換するプログラムを書きたいのですが、どのように書けばいいのか見当がつきません
方針を教えてくれると助かります

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月21日(木) 20:18
by hide
まずプログラムはどうでもいいので

コード:

a[0]=3
a[1]=0
a[2]=1
a[3]=2
a[4]=4

コード:

a[3]=0
a[0]=1
a[1]=2
a[2]=3
a[4]=4
にする手順を日本語で書いてみてください。

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月21日(木) 23:53
by zack
方法はいろいろあると思いますが、一番愚直にするなら
a[]のコピーb[]を用意してa[b] = i とすればよいのではないでしょうか?

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月22日(金) 00:21
by po_po
zackさん
それだと上の例で最初にa[0] = 3がa[3] = 0になり元のa[3] = 2という情報が失われる気がしますが

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月22日(金) 00:28
by box
po_po さんが書きました:zackさん
元のa[3] = 2という情報が失われる気がしますが
何か不都合がありますか?

コード:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int a[5] = { 3, 0, 1, 2, 4 };
    int b[5], i;

    memcpy(b, a, sizeof(a));
    for (i = 0; i < 5; i++) {
        a[b[i]] = i;
    }
    for (i = 0; i < 5; i++) {
        printf("%d ", a[i]);
    }
    putchar('\n');
    return 0;
}

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月22日(金) 01:00
by po_po
すいません勘違いをしていました 
何も問題ありません、解決しましたありがとうございました

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月22日(金) 12:52
by かずま
いろいろなやり方があります。例えば、

コード:

#include <stdio.h>
 
void proc(int *a, int i)
{
    int t;
    if (i > 0) t = a[--i], proc(a, i), a[i] = t;
}

int main(void)
{
    int a[5] = { 3, 0, 1, 2, 4 }, i;

    proc(a, 5);
    for (i = 0; i < 5; i++) printf("a[%d] = %d\n", i, a[i]);
    return 0;
}

Re: c言語で配列の添え字と要素を交換するプログラム

Posted: 2016年1月25日(月) 10:28
by かずま
かずま さんが書きました:いろいろなやり方があります。例えば、

コード:

    if (i > 0) t = a[--i], proc(a, i), a[i] = t;
これ、間違っています。次のように訂正します。

コード:

    if (i > 0) t = a[--i], proc(a, i), a[t] = i;