• ベストアンサー

擬似言語 素朴な疑問

こんばんは。 来春の試験に向けてアルゴリズムを勉強中ですが、初歩的なところでつまづいています。 ○のついた宣言文の表記規則について 1.変数、配列  ○プログラム名 に続いて()の中に記述されてあるもの  と○に後続して記述されてあるものは、何が違うのでしょうか。  プログラムの中での役割なのか、、適当にわかりにくくするためなのか。。 2.配列の要素数  配列名のあとに続く[]には、要素数を入れるよう説明していましたが、 擬似言語の問題文を見ると、大半が[]の中は空白です。これは 「要素数は[]に表記します」という意味で、表記するしないは任意なのでしょうか?それとも、要素数表記は必須だけども[]のあとにnなどという変数が表記されている場合、[]の中は空白でよろしいということなのでしょうか? うまく整理できませんが、ご質問に返答できる方いらしゃいましたらお助けください。。

  • Yepes
  • お礼率94% (1652/1746)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

その前に、言語は何で受験の予定ですか? すでに勉強され始めていますか? なんというか、プログラミングを一切経験したことがない方に感じます。 少し経験すれば、擬似言語もすんなり理解できると思います。 実際に動かすことができない擬似言語だけとにらめっこしていてもなかなか理解も進まないと思いますよ。 CでもJavaでもいいので、実際に動かせる言語で少し勉強されることをお勧めします。 1つ目の質問はすでに解決していると思うので、2つ目に付いて。 わかりにくくするために、ということはありえません。 何か理由があるはずです。 おそらく[]の中に数字がないものは型の宣言だと思います。 ようは箱です。その箱には配列を格納できることを意味します。 配列の数が何個かということは、箱には関係ありません。 で、次に、その箱に入れる配列の実態の宣言があるのだと思います。 それは実態であるので、何個かということが重要になります。 わかりますかね…。 この辺は大体どの言語でも共通していることです。JavaでもVBでも。 もしわからない場合には、やっぱり実言語の勉強を先にされることをお勧めします。

Yepes
質問者

お礼

回答ありがとうございます。選択言語は、プログラミング経験が一切ありませんので、CASLをと安直に考えています。 しかし、ご回答により、私の疑問は解決しました。 >[]の中に数字がないものは型の宣言だと思います。 >ようは箱です。その箱には配列を格納できることを意味します。 >配列の数が何個かということは、箱には関係ありません。 >で、次に、その箱に入れる配列の実態の宣言があるのだと思います。 >それは実態であるので、何個かということが重要になります 大変助かりました、。ありがとうございます。

その他の回答 (3)

  • kashira
  • ベストアンサー率33% (3/9)
回答No.4

まず、これは基本情報の擬似言語の質問ですよね。 そうであれば、質問のところに基本情報の擬似言語について教えてください と書かないと、基本情報を受けたことのない人は何を質問しているかわかりませんよ。 (情報処理技術者全般の掲示板なので、基本情報を受けていない人も結構います) 1.についてはNo.2の方の説明でわかっているかもしれませんが、念のため説明します。 ○プログラム名:insert(実数型:n)、○実数型:k と書くとこのinsertという 副プログラムがよそから渡される引数がnで、中で使う変数がkという定義になります。 プログラム名:insert(実数型:n、実数型:k)と書くと、insertがよそから渡される 引数がnとkの2つという定義になり、まったく意味が変わってしまいます。 引数と変数の違いを理解されていないようなので、一般的なプログラムの本を読まれる ことをお勧めします。 2.についても、「擬似言語の問題文を見ると、大半が[]の中は空白です。」と書かれて いるのは、引数のことではないですか。引数には要素数を書きません。 ちゃんとした回答が欲しければ、XX年午後1の問4のXX行目に ~と書いてありますが 括弧の中が空白なのはなぜですかというように具体的に質問をしないとあなたが何を 知りたいのか理解してもらえませんよ。

Yepes
質問者

お礼

ありがとうございます。 また、質問の内容、文面に不備があった旨、反省しています。 引数と変数の違いが不確定だったことが理解を妨げていたようです。 プログラミングの基礎の本を精読したいと思います。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

参考URLの5.副プログラムを見てください。 ○副プログラム(HAI[],SumA,SumB) ○整数型:I となっています。 引数が3つでHAIは配列を受け取ることのみ宣言しています。 次のIは引数ではなく、副プログラムの中に変数エリアを確保します。 引数の場合は副プログラムでなく、呼び出し元が変数や配列のエリアを準備しています。

参考URL:
http://www5f.biglobe.ne.jp/~pafu/kihonweb/gogokai/n1/kaihyo1.htm
Yepes
質問者

お礼

回答ありがとうございます。 副プログラムかメインプログラムかにもよるのでしょうか。 この辺はもう少し勉強を進めたいと思います。 勉強不足を実感する今日この頃です。

回答No.1

プログラムを確認できないのではっきりとはいえませんが…。 1、 ○プログラム名:keisan(a,b,c) といった具合に記述されているものを考えればよいのでしょうか? だとしたら「プログラム『keisan』において引数としてa,b,cを用いる」という解釈でよいかと思われます。 a,b,cの内容については、通常は問題文中で定義されていると思います。 2、 プログラム中に配列の要素が書かれていない場合も、問題文の中で定義がなされているかと思います。 要素が複雑な場合は擬似言語で表すのが難しいためでしょう。 なにぶん僕も勉強中の身ですのでわかりづらい点・説明不足などあるかと思われますが、参考になれば幸いです。

Yepes
質問者

補足

回答ありがとうございます。 書き方が不適切でしたので、1を訂正します。 1.変数、配列の表記について  a)○プログラム名 に続いて()の中に記述されてあるもの    ex)○プログラム名:insert(実数型:n)  b)○のあとに直接表記されてあるもの    ex)○実数型:k aとbの違いはなんでしょうか?という内容でした。  私だったら、わざわざ表記を分けずに   ○プログラム名:insert(実数型:n、実数型:k)  としてもよさそうに思うのですが、分けて表記する理由がいまひとつわからないのです。。

関連するQ&A

  • C言語のsizeof(サイズオブ)演算子について

    はじめまして。 C言語の初学者です。 sizeof(サイズオブ)演算子の理解でつまづいています。 参考書の説明は下記の通りです。 要素数を数えるのは面倒くさいので、要素数を自動的に求めて繰り返させることにします。 要素数を求める直接的な方法は用意されていませんが、計算することは出来ます。 配列全体のサイズを求め、それを要素1つのサイズで割れば要素の数がわかります。 C言語には、変数や配列のサイズを求めるsizeof(サイズオブ)演算子があります。 sizeof演算子は、次のようにして使います。 sizeof(変数や配列名) sizeof演算子には()をつけなくても良いのですが、つけた方が読みやすいでしょう。 この演算子を使って配列arrayの要素数を求めるには次のようにします。 sizeof(array) / sizeof(array[0]) 上記の説明文にある、【配列全体のサイズ】と【要素1つのサイズ】の【サイズ】とは何を指しているのでしょうか。 また、上記の【sizeof(array) / sizeof(array[0])】の割り算の意味が分かりません。 下記のプログラムを例にして、具体的に何を何で割っているのか数字を当てはめて教えてください。 よろしくお願い致します。 #include <stdio.h> int main(void) { int array[] = {42,79,13,75,19}; int i; for (i = 0;i < sizeof(array) / sizeof(array[0]);i++) { printf("array[%d] = %d\n",i,array[i]); } return 0; } このプログラムの実行結果は次の通りになります。 array[0] = 42 array[1] = 79 array[2] = 13 array[3] = 75 array[4] = 19

  • 擬似言語にて

    この擬似言語のプログラムは、スタックを使って、中置表記法を後置き表記法に変換するプログラムです。 例えば,中置表記法による数式4×(9+3)は,toPostfixの処理の結果,後置表記法による数式493+×に変換するという具合です。 点線の上部分とした部分が全く同じ処理をしているように思えます。下の部分はどのような役割をしているのでしょうか。 ○toPostfix( 文字型: Exptext[],整数型: Textlen, 文字型: Postfix[],整数型: Postfixlen ) ○整数型: k,i ○論理型: sflag ○文字型: work ・initStack() ・k ← 0 上部分 ---------------------------------------------------------- 繰り返し処理(1) i:0,i<Textlen,1  繰り返し(2)    getPriority(Exptext[i])≦getPriority(top()) and top() ≠ "(" ・Postfix[k] ←pop() ・k←k+1  繰り返し(2)終わり  条件処理  (条件) Exptext[i] ≠ ")" 適合するなら ・push(Exptext[i])  しないなら   ・pop() /*取り出した要素は使わない*/ 処理終了 繰り返し(1)終了 ------------------------------------------------------------ ここから下部分 ------------------------------------------------------------- ・sflag ← true 繰り返し sflag = true ・work ← pop() 条件処理  合うなら work ≠ EOS      ・Postfix[k] ← work     ・k ← k+1    合わないなら  sflag ← false 処理終了 繰り返し終了 ・Postfixlen ← k ------------------------------------------------------------ よろしくお願いいたします。

  • 擬似言語のある処理について

    擬似言語についてわからないことがあります。 このプログラムはスタックを使って、実数値を10進数字に変換するプログラムです。 今回質問するのは、このプログラムの中でも数値を一桁ずつ10進数字に変換して、スタックに詰め込む部分です。 Fintは整数部分。Idxは変数。 IntはFの小数部をカットする。(つまり、整数部分だけにする処理です。) Chr[]={0,1,2,3,4,5,6,7,8,9},T (Chrは数値に対応する文字列を格納したものです。) Fint←Int(F) 繰り返し処理 Fint>0ならば ・Idx ← Fint - (Fint ÷ 10) × 10;Fintの最下位桁をIdxに取り出す。 ・Push(Chr[Idx]);最下位桁Idxに対応する数字をスタックにプッシュする ・Fint←Fint÷10;次の桁を最下位の桁にシフトする。 繰り返しで上へ 上記の「Fintの最下位桁をIdxに取り出す」という処理は たとえば、12,345という数字があったならば、12の最下位桁2を取り出すということなのだと思いますが、式に当てはめて計算すると 12-(12÷10)×10となりIdxに0という数字が格納されます。 その後に、Chrで0という数値を拾ってきて文字列0が格納されることになります。 しかし、問題文を見ると12,345という数字を変換すると12,345という文字列になっておりなぜ0?になってしまうのという話になります。 私の解釈は間違いだらけだと思いますが訂正していただけると 大変うれしいです。

  • 大滝みや子先生の「アルゴリズム解法」で

    大滝みや子先生の 基本情報技術者 「かんたんアルゴリズム解法」流れ図と擬似言語で ページ49 第2章 基本例題 第1部アルゴリズムと流れ図 5 1次元配列へのデータ格納 の 表2で、 umaxnの要素"4"と"5" 及び statusの要素"空き"が ○(まる)で囲まれている理由が、解りません。 ご存知の方、教えて下さい。 宜しくお願いします。

  • C言語

    以下のC言語のプログラムを教えてください。 お願いします。 (1)標準入力から文字列(2 文字以上)を入力し,文字数を計上すると共に,入力された文字列の逆順に入れ替える処理を実現してください.なお,以下の要件を満たしたプログラムを作成してください. ・ 入力された文字列は,char 型の配列(要素数50)で受け取ること ・ 文字数を計上するcount 関数(引数:配列のアドレス,戻り値:文字数)を定義 し,main 関数より呼び出すこと ・ 文字列を逆順に入れ替えるreverse 関数(引数:配列のアドレス,戻り値:無し) を定義し,main 関数より呼び出すこと ・ 標準出力の処理は,main 関数で記述すること 【プロトタイプ宣言】 int count(char *str); void reverse(char *str); 【実行結果】 文字列を入力してください(2 文字以上) apple 文字数 = 5 入れ換え前 apple 入れ換え後 elppa (2)char 型の配列(要素数50)を2 つ宣言し,標準入力から2 つの文字列を入力してください.そして,格納した字列を入れ替える関数(swapstr 関数)を作成し,入れ替え前と入れ替え後の配列内の値(文字列)を配列名とともに標準出力するプログラムを作成してください. 【プロトタイプ宣言】 void swapstr(char *str1, char *str2); 【実行結果】 2 つの文字列を入力してください apple strawberry 入れ換え前 配列str1 = apple 配列str2 = strawberry 入れ換え後 配列str1 = strawberry 配列str2 = apple

  • C++言語の配列の呼び方,動的・可変長の違い

    C++言語での配列の名称についての質問です. int Array[10]; みたいに宣言する普通の配列は「静的配列」と呼びますよね.コンパイル時に定数で要素数を指定しておかなければならないからですよね. これに対して,new[]演算子を用いて int *Array = new int[n]; といったように確保する配列はなんと呼ばれるのでしょうか. 実行後に変数を用いてその要素数を動的に指定できるので,「動的配列」と呼ぶ人が周りには多いです(「ポインタ配列」とも).しかし,C言語でのrealloc関数みたいに,直接に配列長を変化させるといったようなことはできませんよね. (改めてnew[]してmemcpy()すれば出来るのでしょうが) そこで,配列長をプログラム中で自在に変化させる方法としてstd::vectorを利用する方法がありますよね.このvectorを「動的配列」と呼ぶ人もいました. 私は,new[]したものは動的に要素数を指定できるがその後の配列長は固定であり,vectorはいつでも配列長が可変なので int Array[10]; ・・・静的固定長配列(静的配列) int n = 10; int *Array = new[n]; ・・・動的固定長配列 std::vector<int> v; ・・・可変長配列 と呼んでいるのですが,一般的にはそれぞれどのように呼ばれるのでしょうか. また,最近はstd::arrayをいうものを知りました.これについてもどのように呼ばれるのか,教えてください. よろしくお願いいたします.

  • C言語のプログラムで配列について教えてください

    配列の要素の数をscanf文で入力するためにはどうしたらいいのでしょうか。 x[N]のNの部分です。

  • 要素数・要素の値が未定の配列の宣言について(C言語)

    要素数・要素の値が未定の配列の宣言について(C言語) タイトルの通りプログラムの内容上、要素の数とその数値がプログラムの途中で算出されるため 最初の宣言の段階では両方ともその数が未定です。 こういった場合、配列の宣言はどのようにすればよろしいのでしょうか? どなたか教えていただけるととても助かります。よろしくお願いします。

  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

  • C言語 テキスト問題

    問題文の表示、回答の入力、答えの表示が行えるようにせよ。 以下に、問題文のファイルと答えのファイルに格納されている文字列を示す。 ・問題文(nazonazo_mondai): 自分の家をおんぶしている虫は何? ケガをしたときにつける毒は何? 銀色のチャックを大急ぎで集めている生き物は何? スポーツで破りたいものといえば何? 草が古くなったよ。どんな味がした? ・答え(nazonazo_kotae): カタツムリ 消毒 イソギンチャク 記録 苦い味 入力される値 カタツムリ 消毒 イソギンチャク 記録 苦い味 期待される出力値 第01問 ===================== 自分の家をおんぶしている虫は何? 第01問の答え: カタツムリ 第02問 ===================== ケガをしたときにつける毒は何? 第02問の答え: 消毒 第03問 ===================== 銀色のチャックを大急ぎで集めている生き物は何? 第03問の答え: イソギンチャク 第04問 ===================== スポーツで破りたいものといえば何? 第04問の答え: 記録 第05問 ===================== 草が古くなったよ。どんな味がした? 第05問の答え: 苦い味 制約 ・問題文のファイル名、答えのファイル名は以下を用いること。 問題文:nazonazo_mondai 答え:nazonazo_kotae ・それぞれのファイルを読み込めなかった場合の処理として、以下を出力しプログラムを終了する。 問題ファイルの読み込みに失敗しました。プログラムを終了します。 回答ファイルの読み込みに失敗しました。プログラムを終了します。 ・以下の構造体を用いてなぞなぞの問題と答えを読み込むこと。 構造体「MONDAI」を定義して、 「MONDAI」の構造体の中には以下のメンバを定義してください。 ただし、typedefを用いること。 【メンバ名】 【データ型】 【説明】 question 文字配列[要素数:256] 問題文を格納する変数 answer 文字配列[要素数:50] 答えを格納する変数 kaitou 文字配列[要素数:50] 入力した回答を格納する変数 ・fgets関数を使ってファイル内の文を読み込む際に、配列の大きさを引数として渡す必要がある。 その際にsizeof関数を用いること。 ・問題文の出力と答えの出力にはそれぞれ以下を使用すること 第%02d問 ===================== 第%02d問の答え: ポイント ・構造体のメンバ変数にkaitouを追加しています。ここに入力内容を格納すること。 ・問題文の表示、回答の入力、答えの表示を5回繰り返すようにする。 ・答えで表示する文字列は、nazonazo_kotaeのファイルから読み込んだ文字列を出力すること。 ※ kaitouに格納された文字列ではないことに注意してください。 サンプルケース1 入力値 カタツムリ 消毒 イソギンチャク 記録 苦い味 期待される出力値 第01問 ===================== 自分の家をおんぶしている虫は何? 第01問の答え:カタツムリ 第02問 ===================== ケガをしたときにつける毒は何? 第02問の答え:消毒 第03問 ===================== 銀色のチャックを大急ぎで集めている生き物は何? 第03問の答え:イソギンチャク 第04問 ===================== スポーツで破りたいものといえば何? 第04問の答え:記録 第05問 ===================== 草が古くなったよ。どんな味がした? 第05問の答え:苦い味

専門家に質問してみよう