ページ 11

プログラミング教えください

Posted: 2011年5月13日(金) 12:16
by ・・・
0から999までの乱数を10個作りint型の配列に入れ、最大値と最小値を表示するプログラムを作りなさい。
    最初に求めた乱数をすべて表示し、最大値と最小値、それぞれの要素番号を表示すること。

*******0から999までの乱数を10個作りint型の配列に入れ、大きい順に表示するプログラムを作りなさい。
    最初に求めた乱数をすべて表示し、次に大きい順に表示する。
    ソートを使わず、以下のいずれかの方法で作成すること。
     方法1:最大値を見つけたら表示し、その配列要素に-1を入れることを繰り返す。
     方法2:配列を2つ用意し、最大値を見つけたらその配列要素を第2の配列にコピーする。
         次に、第1の配列の最大値の値を-1にし、これを繰り返す。
         最後に第1の配列の表示、第2の配列の表示を行う。

*******のとこの問題教えてください

Re: プログラミング教えください

Posted: 2011年5月13日(金) 13:16
by non
http://dixq.net/forum/viewtopic.php?f=3&t=8471
あなたは、「おつか」さん「ぼおおお」さんとは別人ですか?
同じ人ならハンドルネームを毎回変えるのをやめましょう。
作れるところまで、作って、わからないところを尋ねてください。

Re: プログラミング教えください

Posted: 2011年5月13日(金) 13:29
by softya(ソフト屋)
毎回、名前を変更しないようにお願いします。
回答者も混乱しますし、あんまり印象的にも良く有りません。
この件についてはフォーラムルールにも記載されていますので、全部を一度お読みくださると嬉しいです。
http://dixq.net/board/board.html

それとご自分で作ったプログラムコードをcodeタグで囲って貼っていただくようにお願いします。

Re: プログラミング教えください

Posted: 2011年5月13日(金) 14:12
by 井上
//難しいけどいい問題ですね!

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

#define ARRAY_COUNT (10) // 配列の数
#define RAN_NUM_MAX (1000) // ランダム値の最大値(0~999)用

void main(void)
{
int array[ ARRAY_COUNT ]; // 配列

srand((unsigned int)time(NULL));


// 乱数を10個の配列にセット
for(int i = 0; i < ARRAY_COUNT; i++ )
{
int num = rand()%RAN_NUM_MAX;

array[ i ] = num;
}


puts("");
puts("取得順に表示");

// 表示
for(int i = 0; i < ARRAY_COUNT; i++ )
{
printf("array[%d] = %d\n", i, array[ i ] );
}

puts("");
puts("方法1:大きい順に表示");

// 1forループ毎に、配列の中から最大値を表示する
int disp_count = ARRAY_COUNT; // 画面表示回数
while( disp_count > 0)
{
int max = -1; // 最大値を格納するための変数
int max_element_no = 0; // 最大値の要素番号を格納するための変数

// 配列のなかから最大値を求める
for(int i = 0; i < ARRAY_COUNT; i++)
{
if( array[ i ] > max )
{
max = array[ i ];
max_element_no = i;
}
}

// 最大値の配列に -1 を入れる
array[ max_element_no ] = -1;
printf("array[%d] = %d\n", max_element_no, max );
disp_count--; // 画面表示回数を減算
}

}

Re: プログラミング教えください

Posted: 2011年5月13日(金) 15:34
by naohiro19
non さんが書きました:http://dixq.net/forum/viewtopic.php?f=3&t=8471
あなたは、「おつか」さん「ぼおおお」さんとは別人ですか?
同じ人ならハンドルネームを毎回変えるのをやめましょう。
作れるところまで、作って、わからないところを尋ねてください。
IPが同一であれば同じ人です。

Re: プログラミング教えください

Posted: 2011年5月13日(金) 17:11
by softya(ソフト屋)
井上さん、こちらは始めてですか?
回答していただくのはありがたいのですが、ぜひ、こちらのフォーラムルールをお読みください。
http://dixq.net/board/board.html
面倒だと思われるでしょうが、アドバイスをしていただけると助かります。

Re: プログラミング教えください

Posted: 2011年5月15日(日) 12:27
by たかぎ
naohiro19 さんが書きました:IPが同一であれば同じ人です。
それはちょっと言い過ぎでは?
同じPCを複数人で共有することは普通にありますので。
逆にIPが異なれば別人かといえば、それも違いますね。

Re: プログラミング教えください

Posted: 2011年5月15日(日) 12:57
by たかぎ
言語不明なので、C++0xだと勝手に解釈しました。
次のような感じでよいのでしょうか?

コード:

#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>
#include <random>

int main()
{
  const int N = 10;
  int array[N];

  std::generate(array + 0, array + N, std::bind(std::uniform_int_distribution<int>(0, 999), std::mt19937()));
  std::copy(array + 0, array + N, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;

  for (int i = 0; i < N; i++)
  {
    auto it = std::max_element(array + 0, array + N);
    std::cout << *it << ' ';
    *it = -1;
  }
  std::cout << std::endl;
}