🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1464閲覧

要素の入れ替えについて

kennzi_665

総合スコア4

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/11/23 06:39

編集2020/11/23 07:24

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
サイト初心者でお見苦しいところがあったら申し訳ありません。
関数のint data[], int len, int x, int yを変更せず、for文を使わずに結果を12345
12435とだしたいのですが、お力を貸して頂きたいです。
変更点は関数のint data[], int len, int x, int yより下のコードです。
何卒宜しくお願い致します。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

void swap(int data[], int len, int x, int y);

int main(void)
{
int arr[5] = { 1, 2, 3, 4, 5 };
int length = sizeof(arr) / sizeof(int);
for (int i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
puts("");
swap(arr, length, 2, 3);
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
puts("");
return 0;
}
void swap(int data[], int len, int x, int y)
{
int i = 1;
int temp;
for (i = 0;i < len;i++)
{
if (i == x)
{
temp = data[x];
data[x] = data[y];
data[y] = temp;
}
}
}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2020/11/23 06:47

提示のコードではどういう結果になるんでしょうか
kennzi_665

2020/11/23 06:50

自分が載せたソースコードでも出力結果は12345 12435となります。情報不足で申し訳ありません。
kennzi_665

2020/11/23 06:57

申し訳ありません。関数のコードは変更しないと載せるのを忘れいていました。」
dodox86

2020/11/23 07:17

関数のコードは変更しない、関数のint data[], int len, int x, int yは変更しない、でもfor文は使わずに、とは意味不明です。一体どうしろと。
kennzi_665

2020/11/23 07:22

申し訳ありません、int data[], int len, int x, int yを変更せずにfor文を使わずに、です。誤解を招いて申し訳ありません。
episteme

2020/11/23 07:50 編集

> void swap(int data[], int len, int x, int y) コレは何してくれる関数なんですか? 仕様をきっちり述べてください。 「daa[x] と data[y] を入れ替える」であれば len は何に使うんですか?
kennzi_665

2020/11/23 08:16

長さがlenの配列dataの要素xと要素yを入れ替える関数の本体を答えるという問題です。言葉が足らずに申し訳ありません。
dodox86

2020/11/23 08:32

配列の要素長lenがあるということは、実はx, yが配列の範囲を越えているかどうかをチェックせよ、という隠れた要件があるのでは?(もう質問閉じちゃってますけど)
kennzi_665

2020/11/23 13:02

そのような要件は特にないと思います!皆さんコメントありがとうございました。また、何かあったら質問させていただきます。
guest

回答1

0

ベストアンサー

for文でi==xとしていますが、必要ありません。
x,yは独立した変数です。
そのまま配列のインデックス値として扱えばよいです。
swap関数のforを削除すればOKです。

c++

1void swap(int data[], int x, int y) { 2 int temp = data[x]; 3 data[x] = data[y]; 4 data[y] = temp; 5}

投稿2020/11/23 06:51

akiruno-oneone

総合スコア815

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

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

kennzi_665

2020/11/23 07:02

本当にごめんなさい。関数のint data[], int len, int x, int yは変更しないと情報を載せるのを忘れいました。せっかく回答していただいたのに申し訳ありません。
kazuma-s

2020/11/23 07:45

「関数の引数の int data[], int len, int x, int y は変更しない」ということですか? それなら、第2引数に int len, を追加するだけですよね。 引数は全部使う必要はありません。 何が問題なのですか?
kennzi_665

2020/11/23 08:10

確かにその通りですね!緊張してよく読まずにコメントしていました。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問