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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

4回答

1142閲覧

c言語 プログラミング

SKYARROW

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/07/25 08:38

乱数を発生させたあと、素数であるものを20個抜き出すプログラミングを作りたいのですが、二つのプログラミングを融合させる方法が分かりません。どのようにつなげていけばいいのでしょうか?参考書を見ても一つ目の試行の結果から二つ目の試行を行う作業が書いていません。乱数を発生させるプログラミングと素数を判断するプログラムは分かっています。20個抜き出す過程がわからないので教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

A.Ichi

2016/07/25 09:17

教えて頂けますか、「二つのプログラミングを融合する」とは、どの様な形を指しているのでしょうか?
PineMatsu

2016/08/03 08:53

乱数の最大値は?
guest

回答4

0

その3段階を別々に作って連結するという発想はとても良くて、UNIX思想と呼ばれるものです。
UNIXとかLinuxだと、そうやって単機能のコマンドをつなぎ合わせることで目的を実現しようとします。
ここでは
・乱数を表示し続けるコマンド
・数を次々受け取り、素数だった場合にだけ表示するコマンド
・行を次々受け取り、先頭からn行だけ表示して終了するコマンド
なんてのを用意し、これらをパイプでつないで実行するわけです。
3番目のコマンドは head コマンドといって標準コマンドに用意されているのでそれを使うとして、

random-numbers | filter-prime | head -n 20

なんていう風に実行。

C言語と関係ないことを書いてしまってすみません。
C言語のプログラミングで似たような発想で処理段階を連結させることはできるか?
残念ながら、ちょっと難しいのです。もっと最近の言語だとLINQとかstreamとかいって、まさにこういうことができる仕組みが整えられているんですが。

そこで、C言語では残念ながら以下のような手順で書くしかありません(擬似コードです)

for (20回繰り返す) { int n; do { n = ランダム数を生成; } while (nが合成数である間); n を印字; }

投稿2016/07/25 08:51

yuba

総合スコア5568

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

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

0

期待しているものかどうかは分かりませんが。
頭を整理するにはフローチャートをおすすめします。

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5/* 6素数判定 7@param t 値 8@return 1:素数、0:素数以外 9*/ 10int isSosu( int t ) { 11 int flag = 1; 12 for( int i = 2; i<t; ++i ) { 13 if( t%i == 0 ) { //割り切れるか 14 flag = 0; 15 break; 16 } 17 } 18 return flag; 19} 20 21int main() { 22 int i = 0; 23 24 srand( time( NULL ) ); //おまじない 25 while( i != 20 ) { //20個たまるまで繰り返す 26 int t = rand(); //乱数生成 27 if( isSosu(t) == 1 ) { //乱数か 28 printf( "%d\n", t ); 29 i++; 30 } 31 } 32 33 return 0; 34}

投稿2016/07/30 02:17

otaks

総合スコア223

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

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

0

「抜きだす」というのは「乱数を発生させて素数だけを20個」抜き出すわけですよね?であれば

int rdm; int sosu[20]; for ( j=0 ; j<20 ; ) { rdm=乱数を発生; if (rdmが素数?) { sosu[j]=rdm; /* ←これが「抜きだす」部分 */ j++ } }

こんな感じなのではないでしょうか?
このソースでは乱数をとにかく発生させ、素数が20個集まるまでプログラムは終わりません。

投稿2016/07/30 00:51

編集2016/07/30 11:58
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

20個の配列を用意して、そこに見つけた素数を格納したのではだめですか?
もし重複を許さないのなら、配列内にない素数だけ格納すればいいと思いますが?

投稿2016/07/25 08:45

cateye

総合スコア6851

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問