現在プログラムの勉強をしているのですが、その中で出てきた問題が解けません。どなたか教えてもらえませんか?
(問題)
整数型の配列変数dataを作成し、以下の条件のとおりの初期値を入れるものとする。
・大きさは、10
・値は、1から100の乱数
このとき、実行例のように、値をすべて表示し、その中の偶数の数と、奇数の数を表示するようにしなさい。
実行結果の例
21 58 89 27 5 45 34 21 19 69
奇数 : 21 89 27 5 45 21 19 69
偶数 : 58 34
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
すみません、具体的に何がわからないのでしょうか。
プログラムを組み立てる場合、(戻ったりもしますが)だいたい以下のような手順で進んでいきます。
0. どのような動作をするか決める
0. そのような動作をさせるには、どんな要素技術を使っていけばいいのか考える
0. 適切だと判断したものを組み合わせて、コードを作っていく
0. 正しく動作するか検証し、動かなければ適宜修正を加える
今回の課題の場合、全体の「動作」と、中でどういうことを行うかまでの段階が示されているわけですので、「1つ1つの動作についてどうコードとしていくか」と「なにもしないけど、正常にコンパイル・起動できるプログラムを作る」という2点が引っかかる可能性としては高いでしょう。
なお、授業の単位を取るのに必要などで「何はともあれ動くものを作って欲しい」というのであれば親切な人が書いてくれるかもしれませんが、それでは腕としてまったく上達しませんし、だいたい書いてくれたコードがほんとうに正しいものなのかも判別できないかもしれません。
(追記を受けて)
追記ありがとうございます。1行にまとめて出す方法ですが、(他の状況でも通じるアプローチとして)大きく分けて2パターンがあります。
0. 適切なものを生成してシステムに渡す
0. システムの機能を活用する
前者の場合ですが、出力する文字列を生成しておいて、まとめてConsole.WriteLine
するという方法です。後者の場合、Console.write
という改行の入らない関数があるので、これを活用して1行に出力させることもできます。
よくある話ではありますが、システムで標準から用意してあるものを自分で実装し直すのは手間だしバグも発生させがちなので、どんな機能がその環境にあるのか意識しつつプログラムしていきましょう。
投稿2015/02/20 08:01
編集2015/02/20 08:42総合スコア145123
0
lang
1static void Main(string[] args) 2{ 3 Random rnd = new Random(); 4 int[] data = Enumerable.Range(1, 10).Select(v => rnd.Next(1, 101)).ToArray<int>(); 5 Console.WriteLine(string.Format("奇数:{0}", string.Join(" ", data.Where(v => v % 2 != 0)))); 6 Console.WriteLine(string.Format("偶数:{0}", string.Join(" ", data.Where(v => v % 2 == 0)))); 7}
投稿2015/02/23 04:19
総合スコア163
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
一般的な書き方が出たのでちょっと変わった書き方でも。
lang
1static void Main(string[] args) 2{ 3 Enumerable.Range(1, 100).OrderBy(i => Guid.NewGuid()) // 値は、1から100の乱数 4 .Take(10) // 大きさは、10 5 .Aggregate(new[] { "偶数:", "奇数:", "" } // 結果出力用配列 6 , (arr, res) => 7 { 8 // 奇数、偶数をそれぞれの配列に文字列結合で格納 9 arr[res % 2] += res + " "; 10 // 使用する乱数格納 11 arr[2] += res + " "; 12 return arr; 13 }).Reverse() // 表示順序調整 14 .ToList().ForEach(x => Console.WriteLine(x)); // 出力 15}
整数型の配列変数dataを作成し
を満たしていませんが。
投稿2015/02/22 03:58
編集2015/02/22 04:01総合スコア3541
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
g++ ( on Mac) で書いてみました。
lang
1#include <iostream> 2#include <time.h> 3 4using namespace std; 5 6const int ARRAY_SIZE = 10; 7const int RAND_RANGE = 100; 8const int RAND_MIN = 1; 9 10void out_array(const int * array, int base, int rem, const char * title) { 11 cout << title; 12 for (int i = 0; i < ARRAY_SIZE; i++) { 13 // base で割ったときの余りが rem の場合にだけ出力する。 14 if (array[i] % base == rem) { 15 cout << array[i] << " "; 16 } 17 } 18 cout << endl; 19} 20 21int main() { 22 srand(time(NULL)); 23 24 int * array = new int[ARRAY_SIZE]; 25 // 配列に [1.. 101] の範囲の乱数を詰める 26 for (int i = 0; i < ARRAY_SIZE; i++) { 27 array[i] = rand() % RAND_RANGE + RAND_MIN; 28 } 29 30 out_array(array, 1, 0, ""); // 1 で割れば余りは 0 なので、全てが出力される。 31 out_array(array, 2, 1, "奇数 "); // 2 で割ったときに余りが 1 になる(奇数) を出力する。 32 out_array(array, 2, 0, "偶数 "); // 2 で割ったときに余りが 0 になる(偶数) を出力する。 33 return 0; 34}
実行例:
$ g++ sample.cpp $ ./a.out 22 55 71 17 52 28 20 18 50 70 奇数 55 71 17 偶数 22 52 28 20 18 50 70
投稿2015/02/20 23:03
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
同じ処理を繰り返すなら for などのループにし、繰り返す必要のないものはループの外に出す、ということですね。奇数と偶数を分けて出すなら、ループも分ければ良いわけです。
lang
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace hairetu { 8 class Program { 9 static void Main(string[] args) { 10 //配列に乱数をセットする 11 Random rnd = new Random(); 12 int[] n = new int[10]; 13 int i; 14 for ( i = 0; i < 10; i++ ) { 15 n[i] = rnd.Next(1, 101); 16 } 17 //配列の全件を出力する 18 for ( i = 0; i < n.Length; i++ ) { 19 Console.Write(n[i] + " "); 20 } 21 Console.WriteLine(); 22 //配列のうち奇数を出力する 23 Console.Write("奇数:"); 24 for ( i = 0; i < n.Length; i++ ) { 25 if ( n[i] % 2 != 0 ) { 26 Console.Write(n[i]+" "); 27 } 28 } 29 Console.WriteLine(); 30 //配列のうち偶数を出力する 31 Console.Write("偶数:"); 32 for ( i = 0; i < n.Length; i++ ) { 33 if ( n[i] % 2 == 0 ) { 34 Console.Write(n[i]+" "); 35 } 36 } 37 Console.WriteLine(); 38 } 39 } 40}
後は、コメントを付けた処理の単位ごとにメソッドとして切り分けるとベターです。
プログラムを書くとき、先にこうしたコメントを書いておくと、頭の整理にもなりますよ。
投稿2015/02/20 15:14
総合スコア209
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/20 11:00