• ベストアンサー

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

擬似言語についてわからないことがあります。 このプログラムはスタックを使って、実数値を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?になってしまうのという話になります。 私の解釈は間違いだらけだと思いますが訂正していただけると 大変うれしいです。

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

  • ベストアンサー
  • equinox2
  • ベストアンサー率48% (321/660)
回答No.1

>12-(12÷10)×10となりIdxに0という数字が格納されます。 正しくは 12-(int(12÷10))×10 ではないでしょうか。

rinnshan
質問者

お礼

なるほど。 (Fint ÷ 10) という処理は、int(Fint÷10)というように 解釈できるのですね。ありがとうございました。

その他の回答 (2)

noname#170371
noname#170371
回答No.3

#2です 訂正 >F ← int( F ) F ← int( F / 10 )

rinnshan
質問者

お礼

私などのために時間を割いていただき誠にありがとう ございました。

noname#170371
noname#170371
回答No.2

素人考えですが… Idx ← ( F / 10 - int( F / 10 ) ) * 10 … F ← int( F ) …こういう事ですか?

関連するQ&A

  • 数値を文字列に変換する処理

    基本情報の午後試験の擬似言語の問題でわからないところが あります。 この処理は、数値の整数部分を文字列に変換しスタックに積む プログラムです。 (たとえば、12.345だったら整数部分の12の一の位から順に スタックに積んでいきます。) Int()は小数部分を切り捨てる処理です。 文字型:Chr[]={"0","1","2","3","4","5","6","7","8","9"},T 整数型:Fint,idx; Fint=Int(F); while(Fint>0) { Idx=Fint - (Fint/10)*10; Push(chr[idx]); Fint=Fint/10; } 質問としては、なぜ上記のような処理で下位桁から順にスタックに 積んでいけるのかわかりません。 たとえば、Fint=Int(F)でFintに12が格納されて、 Idx=Fint - (Fint/10)*10の式でIdxには0が格納されて本来格納 されるべき'2'が格納されないと思うからです。 Idx=12-(12/10)*10→0というようにです。 表記は、擬似言語とC言語がごっちゃになっており大変わかりにくい かとは思いますが、何卒よろしくお願いします。

  • 擬似言語にて

    この擬似言語のプログラムは、スタックを使って、中置表記法を後置き表記法に変換するプログラムです。 例えば,中置表記法による数式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 ------------------------------------------------------------ よろしくお願いいたします。

  • 整数部関数と剰余関数・・・

    つぎの説明文の当てはまる語句、または数値を教えてください。 回答がなくてどう考えていいかわかりません。 [説明文] 5桁の整数から、上位3桁と下位2桁に分離した値をとりだすことを考える。 たとえば60524なら605と24を分離して取り出す。 まず元の数値を (1)×(2)+(3) と考えればわかるように、一般に5けたの整数を(2)で割った(4)は上位3桁の数になり、(5)で割った(6)は下位2桁になる。したがって、元の整数がセルA1に格納されているとすると、上位3桁を求める計算式は (7) 下位2桁を求める計算式は (8) とすればいい。 どう考えればいいでしょうか?よろしくお願いします。

  • 整数分割

    乱数で発生させた整数を配列に格納してその配列の整数を桁ごとに分割する簡単な方法はありますか。 例えば123を1と2と3に分割 整数を文字列に直して分割しようとしたけど整数は配列に格納されている (a[0]=123のように)のでできません。javaでプログラムを教えてください

  • エクセル 数値データを桁をそろえて文字列データに変換するには

    よろしくお願いします。 エクセル2002を使用しています。 数値データとして整数1桁、2桁、3桁のデータが混在してあります。 これを1桁、2桁のものは前にゼロを付けて全て3桁の文字列に変換する方法はありますか? できれば関数を使って 例  数値 文字列   8⇒008  12⇒012 235⇒235  11⇒011 できた文字列で品番コードとして使用します。 どなたかご存知の方、ご教授お願いします。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。

  • プログラミングについて

    次の問題と似た問題が試験で出るのですがまず例となる問題の答えにどうしてもたどりつけませんどなたか教えてくださいお願いします。 逆ポーランド記法による完全な整数電卓を作成すること仕様は以下の通り INで逆ポーランド記法入力をする OUTで結果を入力する 数値は複数桁対応(3桁まででよい) 数値と数値の間は1つ以上のスペースで区切られる 乗算は、シフト命令をうまくかうこと 除算は、商だけでよい スタック、サブルーチンをうまく活用すること たとえば、文字列を数値に変換する部分や、各演算部分をサブルーチン化するシュミレータによる動作確認をすること

  • C言語 空白の行(改行のみ)が入力されたらプログラムを終了する処理

    コンソールでうごくCUIプログラムを作っています。 そのとき文字列を入力してEnterキーを押すと、その文字列を格納したり何らかの処理をします。問題は何も入力せずにEnterキーを押された場合、プログラムを終了するという処理です。 どのようなソースになるのでしょうか?

  • C言語のプログラムについて

    大学のテストの確認をしているのですが、この問題の回答がどうしても分かりません。どなたか教えてください。 9桁以内の整数を入力し、int型の変数に格納し表示するプログラムを作成しなさい。 ただし、先頭は、数字か「+」か「-」とし、それ以外はすべて数字とする。この条件に合わないものおよび10桁以上のものは、「入力エラー」として表示後、再入力を行うこと。 例えば「-123456」や「45678989」は、整数としてint型の変数に格納し、「abcd」や「123-234」は、「入力エラー 」を表示し、再入力を行う。 ---------------------------------------------------------------- また、自動判定の都合上、表示は以下の表示例に準拠すること。 【 23-234 *12345 -123456 を入力した例】 入力エラー 入力エラー 整数は、-123456 です。 お願いします

  • C言語に関する質問

    C言語を独学で学んでいる者です。 配列に10桁の文字を格納して、そこから任意の1文字を探し出す(何番目に何の文字があると表示する)プログラムを作ってみたいのですが、どのように記述したらよいか分かりません。特に、10桁の文字列に同じ文字が複数含まれる場合は完全にどうしたら良いのかわからない状態です。 お分かりの方は、ぜひご教授願います。

専門家に質問してみよう