ページ 11

C++の配列で質問です

Posted: 2013年2月04日(月) 11:46
by あい
以前、□と■で10×10の図形を生成することについて質問した者です。
ランダムでの生成は成功したのですが、手動での生成がどうしてもわかりません。(入力はできるのですがうまく表示されません)
下のプログラムのように配列に格納して表示させたいです。どなたかご教授願います。
入力方法ですが、0を押すと□、1を押すと■が表示されるというものをユーザーに10行分入力させるという方法をとっています。

コード:

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

main(){
	int dim[10][10];
	int i, j;
		/*配列dimの初期化*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				dim[i][j]=0;
			}
		}
		/*乱数生成*/
		srand((unsigned)time(NULL));
		
		/*配列dimに0か1をランダムに入れる*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				dim[i][j]=rand()%2;
			}
		}
		
		/*0のとき■、1のとき□を出力するようにする*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				if(dim[i][j]==0){
					cout << "■" ;
				}else{
					cout<< "□" ;
				}
				if(j==9){
					cout << "\n" ;
				}
			}
		}
	}

Re: C++の配列で質問です

Posted: 2013年2月04日(月) 11:59
by softya(ソフト屋)
過去のトピックで放置状態のモノが有るようですので、出来るだけ返答をお願いします。 フォーラムルール → http://dixq.net/board/board.html
解決した場合は解決した内容と解決チェックをお願いします。

「図形の回転について教えてください • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=12245#p98351
「C++ について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=12103

このコードにはcinが見当たりませんが、そちらのコードはどうされたのでしょうか?

【追記】
#include<iostream.h>
はC++の古い書き方なのでオススメ出来ません。
それとnamespace名前空間の指定がないので問題の有るプログラムです。
どのようなコンパイラをお使いででしょうか?

Re: C++の配列で質問です

Posted: 2013年2月04日(月) 12:07
by あい
そうなのですか?
コンパイラはbcpadというものを使っています。
学校指定のものがこれだったので…

Re: C++の配列で質問です

Posted: 2013年2月04日(月) 12:18
by あい
すみません。困っている点について書き忘れていました。
質問に書いたプログラムの、/*配列に0か1をランダムに入れ込む*/
の部分を、cinとcoutで手動で入力してもらっても、コンパイルしたときに図形として表示されないのです。
それは何故なのでしょうか。

Re: C++の配列で質問です

Posted: 2013年2月04日(月) 12:18
by softya(ソフト屋)
解決チェックしていただいのは良いのですが、フォーラムルールに有るように解決内容の説明もお願いします。
あい さんが書きました:そうなのですか?
コンパイラはbcpadというものを使っています。
学校指定のものがこれだったので…
bcpadだとBorland C++ Compiler 5.5でしょうか?
これは2000年なのでかなり古いですが、新しい書き方も出来るので新しい書き方を使って下さい。
今時は、古い書き方でエラーに成るコンパイラが多いです。
「基本入出力」
http://wisdom.sakura.ne.jp/programming/cpp/cpp2.html

で、うまくいかないcinを使ったプログラムも見せてもらえますか。

【追記】
C++らしい今風のincludeの書き方。

コード:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

Re: C++の配列で質問です

Posted: 2013年2月07日(木) 12:46
by あい
遅れて申し訳ありませんでした。こちらがプログラムになります。
色々とつっこみどころがあるとは思いますがよろしくお願いします。

コード:

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>

main(){
	int dim[10][10];
	int i, j;
	
		/*配列dimの初期化*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				dim[i][j]=0;
			}
		}
		
		/*配列dimに0か1を入れる*/
		for(i=0;i<10;i++){
			cout<<i+1;
			cout<<"行目\n";
				cin>>dim[i];
			}
		
		/*0のとき■、1のとき□を出力するようにする*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				if(dim[i]==0){
					cout << "■" ;
				}else{
					cout<< "□" ;
				}
				if(j==9){
					cout << "\n" ;
				}
			}
		}
}

Re: C++の配列で質問です

Posted: 2013年2月07日(木) 12:53
by softya(ソフト屋)
dimは2次元配列なので1次元しか指定していないのが問題ですね。
あと今風の書き方でお願いします。

Re: C++の配列で質問です

Posted: 2013年2月07日(木) 15:47
by あい
今風、というのはこんなかんじでいいのでしょうか。

コード:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

main(){
	int dim[10][10];
	int i, j;
	
		/*配列dimの初期化*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				dim[i][j]=0;
			}
		}
		
		/*配列dimに0か1を入れる*/
		for(i=0;i<10;i++){
			cout<<i+1;
			cout<<"行目\n";
			for(j=0;j<10;j++){
				cin>>dim[i];
			}
		}w
		
		
		/*0のとき■、1のとき□を出力するようにする*/
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				if(dim[i]==0){
					cout << "■" ;
				}else{
					cout<< "□" ;
				}
				if(j==9){
					cout << "\n" ;
				}
			}
		}
}
dimに0と1を入力するところが2次元配列なのに1次元しか指定してないというのは自分も問題だと思っていました。
でも2次元の指定をすると入力の時に10行×10回分の入力を要求されてしまったので指定の仕方を間違えたのだと思います。
その指定の仕方に問題があると思うので、どのように間違えているのか教えてもらえないでしょうか。

Re: C++の配列で質問です

Posted: 2013年2月07日(木) 16:11
by softya(ソフト屋)
10x10なんだから100個入力するのは当たり前ですよね。
ただ、空白で区切れば一行で10個入力できますよ。

それとdimの扱いは間違っているところが他にもあります。

Re: C++の配列で質問です

Posted: 2013年3月02日(土) 02:18
by あい
時間が開いて申し訳ありません。
とりあえずこの問題は解決いたしました。
ありがとうございました。