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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

637閲覧

アルゴリズムの表現;疑似コード

helmy

総合スコア1

C

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/04/08 13:39

編集2024/04/08 14:29

疑似コードで、「与えられた正数nまでの素数の総和を出力する」アルゴリズムを表現したいのですが、簡単な書き方などあればご教授いただけますと幸いです。

疑似コードについて少し誤解のある書き方をしてしまったため追記させていただきます。

例えば、上記のアルゴリズムに対しては以下のように例を示してくださいますと幸いです。
SumPrimeNum(n)
1.
2.
3.
4.
...
return

※疑似コードでは一般的に行数を書き、変数はイタリック、配列はボールド体など、厳格な決まりがありますが皆さんのアルゴリズムの表現を参考にさせていただきたいと思い、投稿させていただきました。必要があれば元コードを載せます。

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

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

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

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

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

TakaiY

2024/04/08 14:04 編集

疑似コードとありますが、C, Java, Pythonのタグが付いているのはどういう意図があるのですか?
helmy

2024/04/08 14:11

ありがとうございます。 すみません、何かタグを追加する必要があったため、とりあえず3つ追加した次第です。特に今はありませんでした。紛らわしくしてしまい申し訳ありません。
jimbe

2024/04/08 14:25

既存のプログラミング言語がその仕様によってプログラムを構成するのと同じく、『疑似コードの仕様』が決まらなければ疑似コードのプログラムは書きようが無いわけですけども。
helmy

2024/04/08 14:33

コメントいただきありがとうございます。 使用言語についての制限はございません。 ですので、伝わる書き方であれば=などをequal toなどと表現していただいて大丈夫です。 疑似コードに使用する表記についてお伝えせず申し訳ございません。ありがとうございます。
ikedas

2024/04/08 21:16

> 疑似コードでは一般的に行数を書き、変数はイタリック、配列はボールド体など、厳格な決まりがありますが 疑似コードといえどもプログラミング言語ですので、文法や記法に厳格な決まりがあるのは当たり前です。 ただ、おっしゃるような表記法を取るものだけを「疑似コード」と呼ぶわけではありません。 「疑似コード」という言葉を何かしら勘違いされていませんでしょうか。
thkana

2024/04/08 22:43

> 疑似コードでは一般的に行数を書き...厳格な決まりがあります 「擬似コード」という名の世界で唯一の擬似コードがあるわけではなく、そんな「一般」もありません。なにか特定の文法規則などを規定するのなら、質問にそれを提示してください。(あなたが習っているものが誰にとっても当然、というものではありません)
thkana

2024/04/08 22:54

タグはあなたのためにあるのではなく、後に質問の山から欲しい情報を探す誰かのためのガイドとなるものです。あなたの勝手な理由で不適切なタグを付けないでください。既存では[アルゴリズム]というタグはあります。[擬似コード]というタグが必要だと思うなら運営に依頼してみては。 teratailとは?( https://teratail.com/tour )の冒頭に「質問・回答によって生まれたコンテンツを、同じ問題を持った人に最適な形で届けます」とあります。これはteratailの大きな目的の一つということでしょう。ここで活動するなら、その目的に沿うべきと思います。
fana

2024/04/09 01:20

> 「与えられた正数nまでの素数の総和を出力する」 この話の中でとりあえずめんどくさいのは「素数」の判定の部分かと思うのですが, その判定方法(アルゴリズム)の中身を回答者に答えさせることが目的なのですか? それともアルゴリズムの中身自体は問題ではなく「疑似コード」として書くことのみが主題なのですか? 後者なのであれば,「このアルゴリズムを 疑似コード として書いたらどうなるのか?」と問うべきで,アルゴリズム自体は先にあなたが説明(というか指定)する必要があるでしょう. (各回答が採用しているアルゴリズムがばらばらだったら,主題部分を比較するにも無駄に面倒になるのでは?) ※仮に前者なのだとしたら「疑似コードがどうの」いう話とは独立した問題とすべきでしょう.
guest

回答4

0

目的がわかりませんが、pascalのサンプルコードを拾ってきました。

https://alg24.com/en/eratosthenes-sieve-in-pascal/

pascal

1program sieve; 2  3const MAX=1000000000; 4var del: array[2..MAX] of boolean; 5  n,i,j: integer; 6  7begin 8  write('n = '); 9  readln(n); 10  if n>MAX then writeln('n must be betwen 2 to ',MAX) 11  else if n<2 then writeln('Bad n') 12  else begin 13    for i:=2 to n do del[i]:=false; 14    i:=2; 15    repeat 16      if not del[i] then begin 17        j:=i*i; 18        while j<=n do begin 19          del[j]:=true; 20          j:=j+i; 21        end; 22      end; 23      i:=i+1; 24    until i*i>n; 25    for i:=2 to n do if not del[i] then write(i:10); 26  end; 27  readln; 28end.

投稿2024/04/08 14:51

TakaiY

総合スコア12774

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

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

0

「与えられた正数nまでの素数の総和を出力する」という命令を持った擬似コードを定義して、
「与えられた正数nまでの素数の総和を出力する」と記述するのが一番簡単だと思います。

さらに、「与えられた正数nまでの素数の総和を出力する」ということを表す記号を例えば○nと定義(本当は○の中にnと書きたいのだけれど)すれば、
○n
と記述するだけでもいい、ということになり、簡単と言えば簡単かも知れませんがあまりに意味がわからなくなりますね。

投稿2024/04/08 14:15

thkana

総合スコア7647

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

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

helmy

2024/04/08 14:24

ご回答いただきありがとうございます。 参考にさせていただきます。
guest

0

  1. そのコードを作成する
  2. 処理名を分かりやすい日本語に置き換える
  3. 括弧など、疑似コードに含まれない情報を除外
  4. 完成

これで良いのではないですか?
元のコードは作られているのですよね?

投稿2024/04/08 13:56

Refrain

総合スコア532

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

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

helmy

2024/04/08 14:14

ご回答いただきありがとうございます。 元のコードは作りましたが、特定の言語以外に疑似コードが必要でした。大学院などで学んである程度の見識はありますが、どのように表現すべきか元コードからは書きにくかったため皆さんはどう表現するのか聞くべく質問させていただきました。改めて感謝申し上げます。参考にさせていただきます。
fana

2024/04/09 01:37 編集

{最終的に欲しい物って何なのか?, 何のためのものなのか?}というのがわからない. 特定の言語で書かれたコードが既にあるのだとしたら,その言語を知らない人から見ればそれは「アルゴリズムの手続きが過不足なく表現されているテキスト」であるわけで,それは「疑似コード」とは呼べないのでしょうか? > 特定の言語以外 の記述をわざわざ用意せねばならない理由というのがわかりません. だって,何らかの「既存のプログラミング言語ではない記述方法」で書き直してみたところで,読み手はその謎の記述方法固有の文法を把握せねばならないわけでしょう? 知らないプログラミング言語で書かれたコードを見るのとどれほどの差があるのでしょう? (その元のコードというのが異様に難読な言語で書かれている的な特異な事情でもあるのでしょうか?) その「元のコード」を平易に(基本的な,ぱっと見でなんとなくわかるような文法のみを用いるような感じで)書き下せばよいのではありませんか? あるいは「疑似コード」とかいう中途半端な何かで記述せずとも,全て日本語で具体的に述べれば良いのでは.
guest

0

ベストアンサー

「疑似コード」の例が欲しいのか、「アルゴリズム」の例が欲しいのかわかりませんが、

【例1】

1からnまで、次のことを繰り返す。
・その数を足す。
結果を出力する。

【例2】

n * (n + 1) / 2

【例3】

λ f. λ n. if n = 0 then 0 else f(n - 1) + n

……間違えた。「与えられた数までの自然数の総和」になってますね。まあ実際の実現方法を示すのが目的ではないようなので、これでもいいでしょう。

投稿2024/04/08 22:16

編集2024/04/08 22:23
ikedas

総合スコア4345

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

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

helmy

2024/04/09 02:27

様々ご回答くださりみなさんありがとうございました。 例を示してくださり感謝いたします。
ikedas

2024/04/09 04:30

よりによって一番テキトーなことを書いているこの回答がBAというのは釈然としないです。これって質問者さんが求めていた回答なんでしょうか。自分で書いておいてこういうことを言うのもなんですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問