質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

5回答

9276閲覧

配列の問題について

tomorrowny

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

2クリップ

投稿2015/02/20 07:27

編集2015/02/20 07:28

現在プログラムの勉強をしているのですが、その中で出てきた問題が解けません。どなたか教えてもらえませんか?

(問題)
整数型の配列変数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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryzna

2015/02/20 11:00

なんで逐次出力しようと思ったのかってのも気になりますが、キーワードとしては ・ 文字列同士で結合する ・ 数値を文字列として扱う の2つってことです。 もしこの二つのやり方がわからないならばもっと基礎的な勉強が必要かもしれません;
guest

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

fsoe

総合スコア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
sho_cs

総合スコア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

katoy

総合スコア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

shinosan

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問