AKB48の推しメンをセンターにできちゃうかもしれない!? >>

擬似言語についての繰り返し処理にかんする質問です。

[要約]
擬似言語の繰り返し処理の条件部分に2つの条件がある場合は、2つの判断条件を表しているものなのか?

[詳細]
下記のような、擬似言語のループがありますが、繰り返しにもかかわらず、条件の部分に、2つの条件があるので、混同していましたが、この擬似言語の流れ図を見ると、選択構造が2つあり(if文の中にif文という構造)、なぜ、擬似言語の繰り返し条件として表しているのかが理解できませんでした。仮説ですが、こちらの擬似言語の引用は15年前に出版された書籍からのなので、昔は、こういう書き方をされていたのかな? という理解をしていますが、実際とのころはどうなのか? 分かりません。


■ J<M かつ N - I >= M- J
|
| (処理)
|



(補足)
流れ図より擬似言語化してみると、下記のように、IFで分岐さていました。

▲ J<M
| ▲ N - I >= M- J
|  | -------------
| ▼
|----------------------
|

このQ&Aに関連する最新のQ&A

A 回答 (4件)

While (条件) ~ Wend、Do ~ Loop Until (条件)


#VBの場合
等の場合は、条件文として複数条件が指定できます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そう思うと、擬似言語は言語によって解釈が変わってきますね。とても参考になります。

お礼日時:2017/04/12 05:48

そのような書き方がどこでされているのかわからないので憶測で書くけど,


■ J<M かつ N - I >= M- J
の部分は
「J<M かつ N - I >= M- J」という 1つの条件
と解すべきじゃないかなぁ.

まあ, もう 1つの質問を読むと怪しくなるんだけど, 普通はそう考えるものだと思うよ.
    • good
    • 0
この回答へのお礼

ありがとうございます。
どのような箇所で使われているかによってということは、
ケースバイケースの部分もりそうです。

お礼日時:2017/04/12 05:51

その流れ図というのは、次のようになってないですか?



Label1: /* この疑似言語にはラベルが無いみたいだけど便宜上こうしておく */
▲ J<M
| ▲ N - I >= M- J
|  |(処理)
|  | Label1へ戻る /* GoToも無いみたいだけど便宜上こうしておく */
|  | -------------
| ▼
|----------------------
|


もしそうなら、同じことを表しています。


実際のプログラムでも「複数の条件を同時に(あるいは、少なくともどれか一つを)満たす場合」という判定はよくあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。とても参考になります。
時々擬似言語で分からない書き方が出てくくるので非常にたすかりました。

お礼日時:2017/04/12 06:11

J>M と N - I >= M - J の条件に対して、それぞれ別の処理が発生するなら下のようにしますし、


同じ処理しか無いのなら上の処理でいいのではないのでしょうか?

■ J<M かつ N - I >= M- J
|
| (処理)        #ループに入った場合、必ず実行される
|


▲ J<M
| ▲ N - I >= M- J
|  | -------------   #ここは、実行されるかどうかは条件に合うかによって変わる
| ▼
|---------------------- #この部分の処理が必ず実行される
|


このようにそれぞれのコードは、全く同じ実行結果になるとは限りません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q擬似言語の書き方について (for文)

擬似言語の繰り返し条件の書き方についての質問ですが、前判定反復構造で、下記①のような書き方は、一般的に、見かけますでしょうか? あまり見ないので、何んだ?この書き方? と思ったのですが、… 

①反復構造

■ i = 3 and i <=10
| (処理)
| i ← i + 1



私的には、上記①の書き方は、下記②のように解釈していますが…

②反復構造

■ i : 3 , i <= 10, 1
|
| (処理)
|

Aベストアンサー

擬似言語の書き方は、自分が得意な言語、または自分に解りやすい書式で
書けば良く、決められた書式というのは有りません。
それでも 「■i = 3 and i <=10」から予想されるコーディングは
For文を使ったものではなく
While (i = 3 and i <=10)
End While
となり、i=3の場合のみ有効な処理としか見えません。
またiの初期値が設定されていない様に見えるのも、「何んだ?この
書き方?」と感じる原因となっていると思います。
結論としては、擬似言語の書式として適していない様に思われます。

QCのプログラムに無性にイライラするのはおかしいですか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  hn[ p[0] ]++;
 }
}

3重にするならせめて、y,x,i の順にしてp[0]への代入は1回で済ませればと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  for( i=0; i<256; i++){
     if(p[0]==i){hn[i]++;}
  }
 }
}

最近のコンパイラの最適化では、私の書いたようなコーディング(修正?)は無意味なのでしょうか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++)...続きを読む

Aベストアンサー

利点を考えてみました


これを並列処理したときに
スレッド0: hn[0] に p[0] = 0 をカウント
スレッド1: hn[1] に p[0] = 1 をカウント
...
とすれば、
・img -> imageData は読み出すだけなので衝突しない
・hn[i] でアクセスする領域は、スレッド毎に i が違うので、同じ箇所に書き込まれることはない。
となり、排他処理が不要となります。
(もちろん、x,y,i,p[0]はスレッドでローカルな変数とします)

ただ、並列処理のオーバーヘッドや同時並列処理数等を考えると、こんな並列処理はしない方が効率的です。


あるいは、hn[]がシークに時間がかかる領域の場合、
hn[p[0]) で毎回違う位置を探しに行って、その時間が無視できないほどだったら、
先にhnを決めてしまった方が速くなるでしょう。

こちらも、非現実的です。

Qメッセージの頭に「#」の意味教えてください

メッセージの頭に「#」の意味教えてください

Aベストアンサー

言語にもよりますがコメント文に利用されることが多いですね
ただC系ではありません

Q擬似言語 素朴な疑問

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

Aベストアンサー

その前に、言語は何で受験の予定ですか?
すでに勉強され始めていますか?

なんというか、プログラミングを一切経験したことがない方に感じます。
少し経験すれば、擬似言語もすんなり理解できると思います。
実際に動かすことができない擬似言語だけとにらめっこしていてもなかなか理解も進まないと思いますよ。

CでもJavaでもいいので、実際に動かせる言語で少し勉強されることをお勧めします。


1つ目の質問はすでに解決していると思うので、2つ目に付いて。
わかりにくくするために、ということはありえません。
何か理由があるはずです。

おそらく[]の中に数字がないものは型の宣言だと思います。
ようは箱です。その箱には配列を格納できることを意味します。
配列の数が何個かということは、箱には関係ありません。

で、次に、その箱に入れる配列の実態の宣言があるのだと思います。
それは実態であるので、何個かということが重要になります。

わかりますかね…。

この辺は大体どの言語でも共通していることです。JavaでもVBでも。
もしわからない場合には、やっぱり実言語の勉強を先にされることをお勧めします。

その前に、言語は何で受験の予定ですか?
すでに勉強され始めていますか?

なんというか、プログラミングを一切経験したことがない方に感じます。
少し経験すれば、擬似言語もすんなり理解できると思います。
実際に動かすことができない擬似言語だけとにらめっこしていてもなかなか理解も進まないと思いますよ。

CでもJavaでもいいので、実際に動かせる言語で少し勉強されることをお勧めします。


1つ目の質問はすでに解決していると思うので、2つ目に付いて。
わかりにくくするために、ということ...続きを読む

QC/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。 例えばですが、関数

C/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。

例えばですが、関数GetProcAddress()は、関数の文字列からエクスポート済みの関数のアドレスを戻り値で返しています。
GetProcAddress()と同じようにアドレスを取得したい変数名の文字列を渡して、変数のアドレスを取得したいです。

よろしくお願いします。

Aベストアンサー

無理です。

C/C++ はコンパイルした時点で変数名は捨てられて自動採番の識別子に置き換えられるので。

ただし、「どうしても変数名から」というときのために「マクロ引数の文字列化」を巧みに利用してそれらしい挙動をさせるためのコードはよく見ます。
詳しくはググってください。

参考になればよろしいんですが。

Q少ない順 昇順 降順

とある参考書をやっていまして
データを少ない順に並べ替えるプログラムがある
と記述されている場合は昇順なのでしょうか、降順なのでしょうか?

Aベストアンサー

昇順です
数が少ないのから昇っていく(大きくなっていく)
と考えればいいです

QC言語の漢字のホルダーは、chdirでは変更出来ないのだろうか。

下記のソースでは、ホルダーが漢字で無い時は成功するが。
漢字を使うと失敗する。

下記に成功する場合を示す。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(){
char *dir1="C:/Users/usui/mingw";
int ret;

ret=chdir(dir1);
printf("%d\n",ret);
}
上記は、漢字を使っていないので結果は0を表示する。
然し、ホルダーに漢字を使うと-1を表示する。

漢字のホルダーを使う方法をお知えて下さい。
宜しくお願いします。

Aベストアンサー

No3です。
ちなみに私がインストールした(今使っているバージョン)のは、下記URLの
mingw-get-inst-20120426.exe です。
https://sourceforge.net/projects/mingw/files/OldFiles/mingw-get-inst/mingw-get-inst-20120426/

QC言語 型変換のタイミング

C言語 型変換のタイミングについて教えてください。
「型変換は代入のとき行われる」と理解していたのですが、代入の前の計算時も行われるのでしょうか?

char c1=120,c2=10;
int i;
のとき、
i = c1 + c2;
は i= -126 を期待したのですが i = 130 となっていました。

質問1)これは、C言語の仕様でしょうか? それともコンパイラに任されている仕様でしょうか?

関連して、
質問2)期待した計算結果をiに代入するには、
char c3;
c3 = c1 + c2; i=c3;
とする以外に方法ありますか?

質問3)計算途中でオーバーフローする可能性のある計算を確実の行うにはどのように記述したらよいでしょう?
int x0,x1,x2,x3;
x0 = (x1 + x2 + x3) / 3;
x0 = x1 * x2 / x3; (ただしx2 < x3)

よろしくお願いします。

Aベストアンサー

1 については C の仕様です. 計算を行うときに, int 以下の型はすべて int (または unsigned int) に変換したうえで計算されます. したがって
i = c1 + c2;
はあたかも
i = (int)c1 + (int)c2;
と書いたのと同じ計算をします.

2 は
i = (char)(c1+c2);
のように演算結果を強引にキャストすればいい, んじゃないかなと思う.

3 については.... ポータブルにやるなら努力と根性で多倍長演算を実装するしかないんじゃないかなぁ.

あ, あと余談だけど C の仕様では
char は*少なくとも*8ビット
です.

Qc言語は独学で、どこまで出来ますか?

大学生です。初歩的なc言語を学ぶ講義があるのですが、訳あって受けられなくなったので、独学でいこうかなと思っています。

初心者の大学生が1年程度受ける講義の内容は、独学でも難しいですか?

独学経験者、プログラミングに詳しい方の意見を伺いたいです。

Aベストアンサー

それは大丈夫でしょう。
最初はC言語入門的な書籍から入ってもいいし、真髄を学びたければカーニハン&リッチーの定番から読むのもいいし、プライマーから入ってもいいし。

ただ、コードを書くだけではダメなので、構造化プログラミングとか、コンパイラとか、ゆくゆくはオブジェクト指向とかに入っていかないといけません。

QC言語はどこまでゲームを作り込むことができますか?

ゲームを作っているのですが、使用しているソフトではパフォーマンスに少し満足できません。
なのでC言語を学ぼうと思ったのですがC言語は、例えばACTが作れるとか、どのくらいまで作れるとか。
逆にRPGとかは作れないみたいな、そういった限界がどこまであるのかわかりますか?

Aベストアンサー

C言語に限界はありません。
限界は、プログラマの方にあります。
C言語に変えたら全て解決、といった単純な話ではありませんので、覚悟してください。


CPUは、機械語しか理解できません。
全てのプログラムは、機械語に翻訳されるか、「プログラミング言語を解釈して実行するプログラム」を使って実行されます。

C言語は、大体前者で、しかも、 機械語とほぼ同等なことができるように作られています。
なので、原理的には、今あるコンピュータゲームは、ほぼ全てC言語で作ることができる、となります。


ですが、あなたが言う「作れる」とはニュアンスが違うと思います。

C言語自体は、とても低機能です。
そのツールが持っているような機能、例えば「画面にキャラクターを表示する」といったものはありません。
「水平に弾を発射」と設定すればいいだけのものが、
「一定時間毎に座標を少しずつ変化させて表示。画面外に出たら廃棄」
といった感じの、細かく分解する必要があります。
(これでも不十分で、「一定時間毎」ってどうやる?「画面外」とは?等と、より細かく分解しなければなりません)

結局、C言語で作る、ということは、「今使っているツールと同じようなものを自作する」のと同じことです。


また、C言語は速い、と誤解されているようです。
「無駄を省く等のチューニングができる場合がある」から「速くなるかもしれない」だけです。
そのツールでも、パフォーマンスは考慮されているでしょう。
C言語で書いても、何の対策もしていないなら、ツール以下のパフォーマンスになることもあります。

C言語に限界はありません。
限界は、プログラマの方にあります。
C言語に変えたら全て解決、といった単純な話ではありませんので、覚悟してください。


CPUは、機械語しか理解できません。
全てのプログラムは、機械語に翻訳されるか、「プログラミング言語を解釈して実行するプログラム」を使って実行されます。

C言語は、大体前者で、しかも、 機械語とほぼ同等なことができるように作られています。
なので、原理的には、今あるコンピュータゲームは、ほぼ全てC言語で作ることができる、となります。


です...続きを読む


人気Q&Aランキング