ページ 11

奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:11
by タマ
#include <stdio.h>
#define NMAX 10

int main(void) {
int data1[NMAX];
int data2[NMAX], i, cnt = 0;
int *p1, *p2;

p1 = data1;
p2 = data2;

for (i=0; i<NMAX; i++)
scanf("%d", data1+i);

for (i=0; i<NMAX; i++) {
● if (data1%2=1) {
● data1=data2[cnt];
● ???????????;
cnt++;
}
p1++;
}

p2 = data2;

for (i=0; i<cnt; i++) {
printf("%d\n", *p2);
p2++;
}

return 0;
}
10個の数字を入力し、奇数のみを出力するプログラムを作る問題です。
●の部分は元々???しか書かれてなく、そこだけを変更するように指示されていたので
自分なりに埋めてみました。が、うまくいきませんでした…

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:16
by パコネコ
if()って=じゃなくて==だって思っていたのですが…関係ないですか?

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:22
by パコネコ
描写されるのはp2(data2)ですよね
つまり奇数のデータをP2に入れていくプログラムですね
data1=data2[cnt];
逆なのでは?
これでは2のデータを1に入れているように思いました
間違ってたらごめんなさい

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:23
by fatens
=だと代入になるので、この場合は==ですね。

●の部分ですが、何のために
>p1 = data1;
>p2 = data2;
としているのか考えてみると良いのでは。

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:25
by パコネコ
忘れてました
for (i=0; i<NMAX; i++) {
● if (data1%2=1) {
● data1=data2[cnt];
● ???????????;
cnt++;
}
p1++;
}
はdata1ではなくp1を使ってあらわしたほうがいいです
多分そういう問題だと思う
iとポインタをうまく使って頑張ってください

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:29
by パコネコ
ヒントで
for (i=0; i<NMAX; i++)
scanf("%d", data1+i);
          ___
dataをp1にするかんじ
この部分が参考になると思います
余計な事だったらごめんなさい

==================
間違えてしまいました
すいません。忘れてください 画像

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:32
by fatens
>パコネコさん
p1++;
がありますよ。

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:35
by パコネコ
ヒントのつもりで書いたほうですよね
ちょっと失敗
iは使わないのが「あたり」でしたね。
すいません

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:41
by タマ
●の部分
if (*(p1+i)%2==1) {
*(p2+cnt)=*(p1+i);
こんな感じで良いでしょうか?

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:46
by fatens
>こんな感じで良いでしょうか?
●の部分にはiもcntも入りません。
画像

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:49
by パコネコ
ワイはあれでいいと思ってたけど…プリンタを使うなら
もう一つの???を使うんですね。
================
iはどっちにしても違いましたね 画像

Re:奇数のみを出力するプログラム

Posted: 2010年6月19日(土) 23:55
by fatens
for (i=0; i<NMAX; i++) {
● if (data1%2=1) {
● data1=data2[cnt];
● ???????????;
cnt++;
}
p1++;
}

p2 = data2;

この部分で、for文の中にp1++があり、外でp2 = data2としている理由を考えてみましょう。
iはただのカウンタで、cntは最後のループの上限として使うだけです。

Re:奇数のみを出力するプログラム

Posted: 2010年6月20日(日) 00:06
by パコネコ
for (i=0; i<NMAX; i++) {
● if (???????%2==1) {
● ??????=??????;
● ???????????;
cnt++;
}
p1++;
}

p2 = data2;

data1でもできる気はしますけど…p1,p2が含まれますね全部

Re:奇数のみを出力するプログラム

Posted: 2010年6月20日(日) 00:09
by タマ
今の状態↓
● if (*p1%2==1) {
● *p2=*p1;
● ???????????;
p1++はdata1内に入る数値を、順番に入れていく役割ですかね?
p2=data2は初期化しているのでしょうか?

Re:奇数のみを出力するプログラム

Posted: 2010年6月20日(日) 00:12
by パコネコ
data2のアドレスをp2に再入力?しているんですよ。多分
p2は値変わってますから
残りの??????で!
================
>p1++はdata1内に入る数値を、順番に入れていく役割ですかね?
そうですね次のアドレスに移動?しているんですね。 画像

Re:奇数のみを出力するプログラム

Posted: 2010年6月20日(日) 00:35
by タマ
if (*p1%2==1) {
*p2=*p1;
p2++;

チェックシステムに送信した所、うまくいけました。
教えてくださって、ありがとうございます!