以前ヒントを教えてもらったプログラムですが・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

以前ヒントを教えてもらったプログラムですが・・

#1

投稿記事 by 初心者 » 15年前

整数を入力して、小さい順に偶数、2,4,6・・・numと表示するプログラムを作ったのですが、
奇数を入力したときにこのプログラムだと表示しないことがわかりました。
よろしければいじるべき点を教えてください。

#include <stdio.h>

int main(void)
{
int num,i;

i = 2;

printf("数値を入力してください:");
scanf("%d",&num);

while(i <= num )
{
if(num%2 ==0)
printf("%d\n",i);

i = i + 2;
}

return 0;
}

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#2

投稿記事 by パコネコ » 15年前

>i = i + 2;
これは「i++」で十分です。

それと称号がすごいことなってますね…初心者って名前ダメなんじゃ…?
前来たことあるかもわからないし…名前は決めたほうがいいですよ。

==========
これ書いた意味ないですね。
勘違いしてしまいました。
これならもとのまま
if文削ればいいのに・・・
画像

Poco

Re:以前ヒントを教えてもらったプログラムですが・・

#3

投稿記事 by Poco » 15年前

ここです。

if(num%2 ==0)
  printf("%d\n",i);

どういじるかは、考えてください。

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#4

投稿記事 by パコネコ » 15年前

ついでにもうひとつ
これ特に指定されてないならfor文のほうが向いてますよ。
指定されてるなら仕方ないけど。

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#5

投稿記事 by パコネコ » 15年前

おぉ~
if文がすごいことになってた…
でも奇跡的にprintf文はあってる…だからうごいたのか…

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#6

投稿記事 by パコネコ » 15年前

これfor文なら一行でできそうですね…入力は別ですけど…

だいちゃん

Re:以前ヒントを教えてもらったプログラムですが・・

#7

投稿記事 by だいちゃん » 15年前

まだ解決されていないようなので
質問者さんが来てくれると信じて回答

とりあえずこのプログラムって偶数を表示するプログラムですよね?
それで奇数を入力したら表示がされないのでいじるべき点を教えてほしいと

単にいじるべき点を教えてくださいと言われましても
いじるべき点はあるといえばたくさんあるしないといえばありません

理由としては質問者さんがこのコードを書き換えて
どういう結果にしたいのかが私達にはわからないから

こうすればこうなるよ
とか
ここはこう書きかえると見やすいね
とかはいくらでもありますが
それが質問者さんのしたいことではないならば何の意味も持ちません

例えば奇数を入力したとしても2以上で入力した数値よりも小さい偶数を全部表示したいとか
奇数を入力したら偶数を入力してくださいって打ち直させるのかなどなど

とりあえずやりたいことを教えてください
そうなるようにこちらとしては全力でサポートする姿勢です

初心者

Re:以前ヒントを教えてもらったプログラムですが・・

#8

投稿記事 by 初心者 » 15年前

そうですね、だいちゃんさんの言う、
奇数を入力したとしても2以上で入力した数値よりも小さい偶数を全部表示したい
まさにこれですね^^
たとえば
45と入力して、2,4、6・・・44
46と入力して、2,4,6・・・46
と奇数ででも偶数ででもnumまでの偶数を表示してくれるプログラムです。
ただしforを使わずwhileとifを使わないといけません。
とりあえず今は、ぽこさんとパコネコさんのifいじりをちょっと考えてみます。 画像

初心者

Re:以前ヒントを教えてもらったプログラムですが・・

#9

投稿記事 by 初心者 » 15年前

if(num%2 ==0 || num-1%2==0)
printf("%d\n",i);

これの場合、もしnumが3だったとして、num-1%2==0が2になるから、
2と表示されると思ったんですけど、駄目でした;

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#10

投稿記事 by パコネコ » 15年前

なんか見当違いな気がします
ヒントとしては
numって値変わりませんよね。

/*
これの場合、もしnumが3だったとして、num-1%2==0が2になるから、
2と表示されると思ったんですけど、駄目でした;
*/
これについても
num-1%2==0
ではなく
(num-1)%2==0
ではないですか?

確かにその方法でもできると思いますが…本当にnumを判定に使っていいんですね?

>ただしforを使わずwhileとifを使わないといけません。
残念…if文は使わないとだめでしたか。
ちなみに最初のプログラムからif文をなくすときれいにうごきます。
==============
何が言いたいのかというと、そのif文には意味がありません。
だって入力された数値が偶数ならiの値を出力
その条件に奇数の場合も付け加えたと、いう状態です。

つまり偶数でも奇数でもif文の条件を満たしてしまうのです。

ちなみに奇数の条件式?はnum%2==1です。

よ~く考えてくださいね。




画像

初心者

Re:以前ヒントを教えてもらったプログラムですが・・

#11

投稿記事 by 初心者 » 15年前

!!w
算数と一緒なんですね、かっこをつけない自分に恥ずかしく感じました・・。
if文をなくす、やってみます。

初心者

Re:以前ヒントを教えてもらったプログラムですが・・

#12

投稿記事 by 初心者 » 15年前

おかげさまでカッコ付、if文なし両方ででました^^
バコネコさんのようにシンプルにやるやり方もあったんですね。
参考になりました。ご協力してくださった方々、本当にありがとうございました。
画像

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#13

投稿記事 by パコネコ » 15年前

カッコつきってあれですか?

他の形とかは…

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#14

投稿記事 by パコネコ » 15年前

解決付いちゃったので、一つだけ…
あのif文のままではあってもなくてもおんなじです。

if(i%2==0)
と、してほしかったのですが…残念です。
ちなみにこの場合「i++」になります。

もし時間に余裕がありましたら、3の倍数とかにもチャレンジしてみてください。
できればnの倍数ができたら、理解できたと言えるレベルだと思います。

あ、一つじゃなかったですね。すいません…

初心者

Re:以前ヒントを教えてもらったプログラムですが・・

#15

投稿記事 by 初心者 » 15年前

あっそうですね、if文で奇数、偶数両方のことを結局はさしてますね。
カッコ付wすいません、呼び方がわからないもんで・・。

Dixq (管理人)

Re:以前ヒントを教えてもらったプログラムですが・・

#16

投稿記事 by Dixq (管理人) » 15年前

是非for文も覚えると良いので、for文でまず書いてみました。
この課題で重要なのは●●●の部分でしょう。
#include <stdio.h>  

int main(){
    int i, num;
    printf("数値を入力してください:");
    scanf("%d", &num);
    for( i=0; i<=num; i++ ){
        if( ●●● ){
            printf("%d\n",i);
        }
    }
    return 0;      
}
 

青部分を埋めればfor文版は完成です。
forとwhileは全く同じ動きに変換出来ますから、forが出来ればwhileにも出来ます。
さて、パコネコさんも仰っていますが、numは値が変わりませんね。
では、何が今刻一刻と変わっているのでしょう?
何の変数を判定に使わないといけないのでしょう?

もう一度考えてみて下さい。



うちの勝手な決まりなのですが、「初心者」という名前は使用禁止の名前になっています。
何故ならこの名前を使う方が沢山いて、誰が使っているか解らなくなってしまっているからです。
(現にポイント数が5万ポイントを超えています)
もしよければ自分だけの名前を決めて頂ければと思いますのでよろしくお願いします。

Dixq (管理人)

Re:以前ヒントを教えてもらったプログラムですが・・

#17

投稿記事 by Dixq (管理人) » 15年前

う・・のんびり書いているうちに話が進んじゃった^^;

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#18

投稿記事 by パコネコ » 15年前

このプログラムを自分で理解できたと思うとこまで、できましたか?
(納得いくぐらい)
もしくは似たような問題を解けるぐらいに…
もし不安な部分があるようでしたら、
暇なときでいいので解いてみてください。

さっきのプログラムをいじって、
偶数の場合を2の倍数だとして
自分で入力した値「n」
その値の倍数の数値を出力してください。

これができれば十分です。
===========
あ、すいません
進めちゃいました。

画像

脱初心者になりたい

Re:以前ヒントを教えてもらったプログラムですが・・

#19

投稿記事 by 脱初心者になりたい » 15年前

初心者です。すいません、そういう規定があるの知らずに使ってました・・。
ただ書いてもらっただけで感謝です、一つじゃなくても。
#include <stdio.h>

int main(){
int i, num;
printf("数値を入力してください:");
scanf("%d", &num);
for( i=0; i<=num; i++ ){
if( i%2==0){
printf("%d\n",i);
}
}
return 0;
}
これで表示はされたのですが、自信はないです。
自分なりには、
iが0で、numまでの間、1ずつ増えていき、もし2で割ったあまりが0ならば表示します。
という解釈なのですが、とりあえず3の倍数をいじってみます。
==============
forをwhileに変えるとビルドエラーが出ますね。英語で見るとどちらも間という意味ですけど、
C言語だと若干違うんですね。
あとnの倍数やってみます!! 画像

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#20

投稿記事 by パコネコ » 15年前

おしい、
いやある意味正解ですけど…細かいとこで言うと「0」も描写されてませんか?

Dixq (管理人)

Re:以前ヒントを教えてもらったプログラムですが・・

#21

投稿記事 by Dixq (管理人) » 15年前

すごく個性的な名前ですけど、今後ずっとそれでいいんでしょうか^^;

> 細かいとこで言うと「0」も描写されてませんか?

あ、私のミスですね。
偶数ということだったので、0からにしましたが、問題文からすると、2から始まらないといけないんですね。
まぁ最初にiにセットしている値を変更すればいいだけですね。

しかし、偶数と言えば0も含まれると思いますが、2からでいいんですか?

デミチェリス

Re:以前ヒントを教えてもらったプログラムですが・・

#22

投稿記事 by デミチェリス » 15年前

すいません、僕のミスです。
管理人さんの仰る、0からで本当はよかったのですが、
せっかく、以前にこの1番上のプログラムを教えてくださった方がいたのに、
それを変えるのはちょっとまずいかなと思ったので、そのまま2から流れで来てしまいました;
for( i=0; i<=num; i++ ){
if( i%n==0){
たぶんこれでnの倍数がでるようになると思います。


>すごく個性的な名前ですけど、今後ずっとそれでいいんでしょうか^^;
だめですかwいろんなの考えたのですが、へたれとかゲロとか
まともなのが出てこなくて、、短いほうがいいですね。

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#23

投稿記事 by パコネコ » 15年前

あってますね。
おめでとうです。

どうせなら自分で気に入ってるもののほうがいいですよ。
その名前でずっと呼ばれて行くんですから…
=========
逆に自分が気に入れば別に常識の範囲内なら何でもいいと思う。
あと、かぶってなければ… 画像

デミチェリス

Re:以前ヒントを教えてもらったプログラムですが・・

#24

投稿記事 by デミチェリス » 15年前

そうですね、そしたらゲロになるんですが、
当分はデミチェリスでいかせて頂きます。

パコネコ

Re:以前ヒントを教えてもらったプログラムですが・・

#25

投稿記事 by パコネコ » 15年前

これからもよろしくお願いします。
「デミチェリス」さん。

Dixq (管理人)

Re:以前ヒントを教えてもらったプログラムですが・・

#26

投稿記事 by Dixq (管理人) » 15年前

なるほど、そうでしたか。よかったです。

>へたれとかゲロとか

なんでわざわざ^^;
ちなみにへたれさんはいらっしゃいますね。
過去に名前が使われているかどうかはメニューの「http://www.play21.jp/board/ranking.cgi?id=dixq」で確認出来ます。
数が多いので、検索かけるしかないですね。
それにしても人数多くなりました・・。

デミチェリス

Re:以前ヒントを教えてもらったプログラムですが・・

#27

投稿記事 by デミチェリス » 15年前

こちらこそよろしくおねがいします^^
===============
へたれいるんですね・・w若干冗談まじりだったんですけど。 画像

閉鎖

“C言語何でも質問掲示板” へ戻る