初心者です。課題なんですが・・・。

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

初心者です。課題なんですが・・・。

#1

投稿記事 by とおる » 13年前

さっぱりわからなくて相談にのってくれるとありがたいのですが・・・。

問題
 2つの整数を入力することを繰り返すプログラムを作りなさい。入力を打ち返すこと、2つの整数のうち、最初の数に負の値が入力されたら繰り返しを終わるようにしなさい。
という問題なんですが。
自分は

#include <iostream>
using namespace std;
int main()
{
int x,y;
bool status;
x=0;
y=0;
while(x < 10)
{
status = (cin>>x != 0);
cout<<"status:"<<status<<"x:"<<x<<endl;
cin>>y;
cout<<"status:"<<status<<"y:"<<y<<endl;
}
x=x+1;
y=y+1;

return 0;
}


と作って見たんですが。うまくいかずに止まっています。アドバイスいただければ助かります。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: 初心者です。課題なんですが・・・。

#2

投稿記事 by bitter_fox » 13年前

コード:

while(x < 10)
{...}
whileは、本当にこれでよいのでしょうか???
>>最初の数に負の値が入力されたら終了する
のですよね?であれば最初の数がどの状態の間繰り返すのですか??その判定文が括弧内に入ります。

コード:

    x=x+1;
    y=y+1;
    return 0;
}
あと、終了するだけなのに、xとyに対して演算するのは無意味ですね。
ついでに、statusって何に使われているのでしょうか?

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: 初心者です。課題なんですが・・・。

#3

投稿記事 by ぬっち » 13年前

statusという変数が必要ないのであれば、

コード:

x = 1;    // 適当な正の数字
 
while(x >= 0) //最初の入力が負であったらループから抜ける
{
     cin >> x;
     cin >> y;
     if( x < 0 ){   //最初の入力が負であったらstatus:trueを表示
          cout << "status:true" << "x:" << x << " " << "y:" << y << endl;
     }
     else{    //最初の入力が負であったらstatus:trueを表示
          cout << "status:false" << "x:" << x << " " << "y:" << y << endl;
     }
}
としてみたらどうでしょう?
最後のx = x + 1;とかは何で入ってるんですか?

とおる

参考になります。

#4

投稿記事 by とおる » 13年前

すみません。とても参考になりました。
while は前回の課題のコピペのままだったので・・・。
x=x+1;は繰り返すことに必要なのかと思ってました。
正直statusはなぜいるのかわからないのですが。これはつかえと先生から言われていたので。

で作りなおしてみたんですが

#include <iostream>
using namespace std;
int main()
{
int x,y;
bool status;
x=1;

while(x >= 0)
{

status = (cin>>x != 0);
cout<<"status:"<<status<<"x:"<<x<<endl;
status = (cin>>y != 0);
cout<<"status:"<<status<<"y:"<<y<<endl;
}


return 0;
}


とやってみたんですが、これだとyが負の値になると終わってしまうんですよ。
どうしたらいいでしょうか?
それから授業でif else はまだならってなく使えなくて・・・。できればそれを使わない方法があれば・・・アドバイスお願いします。
迷惑かけてすみません。

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: 初心者です。課題なんですが・・・。

#5

投稿記事 by ぬっち » 13年前

else文を使わなくても、以下のようにすれば出来ます。
また、statusを使えということなので、while文の条件に対しても積極的に使うように変更しました。

コード:

bool status = false;   // 最初の値が負であるかどうかの判定
int x, y;

while( !status ){  // while( status == false ) としてもよいです。
    cin >> x;
    cin >> y;
    if( x < 0 ){
        status = true;   // 負の値が代入された。
    }
}
それでこちらからの質問なんですが、なぜ( cin >> x != 0 ) のような事を行っているのでしょう?
一応今後のために、ここははっきりとしておいたほうがよいと思います。

・・・それにしても、if-elseを習う前にC++から入ってるんですねぇ・・・。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 初心者です。課題なんですが・・・。

#6

投稿記事 by h2so5 » 13年前

このコードで問題ありませんよ。

xに-1を入力した時点では終了しません。
yも入力したあとに x >= 0 の判定が行われるためです。

もしxに負をの数値を入れた時点で終了させたかったら変更する必要があります。

とおえう

Re: 初心者です。課題なんですが・・・。

#7

投稿記事 by とおえう » 13年前

これは正直なんなのかさっぱりわかりません。( cin >> x != 0 )

どうして!マークなんですかね?

とりあえずあのままの感じでだすことにします。ありがとうございます。

で追加質問なんですが・・・。

問題 2つの数を長方形の2辺と考えて、2数を入力して面積を計算するプログラムを作りなさい。面積の合計も求めるようにしなさい。

なんですが・・。
僕は

#include <iostream>
using namespace std;
int main()
{
int x,y,sum;

while(x>=0)
{

cin>>y;
cout<<"x:"<<x<<endl;
cin>>x;
cout<<"y:"<<y<<endl;

}
sum=x*y-
cout<<"面積の合計"<<sum<<endl;

return 0;
}


でやってみたんですが。うまくできません。whlieの変数もどうしていいかよくわからないので。
すみませんがアドバイスお願いします。
たびたびすみません。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: 初心者です。課題なんですが・・・。

#8

投稿記事 by bitter_fox » 13年前

とおえう さんが書きました:これは正直なんなのかさっぱりわかりません。( cin >> x != 0 )

どうして!マークなんですかね?

コード:

#include <iostream>
using namespace std;
int main()
{
    int x,y,sum;

    while(x>=0)
    {
        cin>>y;
        cout<<"x:"<<x<<endl;
        cin>>x;
        cout<<"y:"<<y<<endl;
    }

    sum=x*y; // - 
    cout<<"面積の合計"<<sum<<endl;

    return 0;
}
惜しいですね、x,yが入力されるたびに面積を表示するのですよね。
であれば、
sum=x*y; // -
cout<<"面積の合計"<<sum<<endl;
はこの位置でいいのでしょうか??

( cin >> x != 0 )
まず、==では左辺と右辺が同じ値かを判定します。(同じであれば、trueにあたる値)
逆に、!=では左辺と右辺が違う値かを判定します。(違っていれば、trueにあたる値)

また、僕は、c++についてはそれほど詳しくないのですが、この文だと、
cin >> xの戻り値を判定していることになるのではないでしょうか??

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: 初心者です。課題なんですが・・・。

#9

投稿記事 by ぬっち » 13年前

とおえう さんが書きました:これは正直なんなのかさっぱりわかりません。( cin >> x != 0 )
また、僕は、c++についてはそれほど詳しくないのですが、この文だと、
cin >> xの戻り値を判定していることになるのではないでしょうか??
確かにそうなりますね。
cin >> xの戻り値は、
http://www.geocities.jp/ky_webid/cpp/library/029.html
にあるように(ofstreamのほうですが^^;)、std::ifstream&であるはずなので、うーん・・・どうなるんだろう。。。

とおる

Re: 初心者です。課題なんですが・・・。

#10

投稿記事 by とおる » 13年前

みなさんご協力ありがとうございました。
おかげで無事課題ができました。ありがとうございました。
アドバイス勉強になりました。

閉鎖

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