掲示板


From taka at 2005年6月11日 3時52分

C言語入門:制御文-> 3-10. 練習問題

こんばんは。
あ〜〜っ!そっかまず-1で片方を真にしてscanfを実行できるようにして
そのあと0〜9999の範囲で両方偽にしてif文に向かうってことだったんですね^^;
ここのと勘違いしてました、どちらかを真にしてしまわないとif文に行けないって思い込んでまして
よく考えたらwhile文の後はscanfでしたね>< これじゃどちらかが真の間scanf繰り返しちゃいますね・・・orz
どうもお手数かけまして申し訳ありませんでした。


From 管理人 at 2005年6月10日 23時56分

re;C言語入門:制御文-> 3-10. 練習問題

問題には、「入力する範囲は0から9999に限定し、」とありますので、それ以外が入力された場合は、この範囲が入力されるまでwhile文(scanf)を抜け出さないようにしています。逆に言えば0〜9999が入力された時にwhile文を抜け出し、その次のif文に来るわけです。

おわかりになりますでしょうか?
                                  .     .
 「char」型の変数の値を「int」型に代入する場合のように、『大きい変数に小さい変数に』代入する場合は問題ありません。

 …どっちに代入するか分かりません!
本当は別に大した問題じゃないですけど。


From ミサキ at 2005年6月10日 18時24分

ファイル一括操作

はじめまして。
趣味でC言語を使っている者でいつも参考にさせていただいております。

ファイル操作で分からない点があり質問に来ました。
フォルダ内にあるすべてのファイルに同じ処理を施したいのですが、fopen()などで
1つ1つファイル名を入力して「コンパイル→実行」するには数が多過ぎ、
またファイル名も共通点が無いため、一括処理のアルゴリズムが組めません。
フォルダ内のファイルを1つ1つ順に読み込める方法は無いでしょうか?


From taka at 2005年6月10日 3時24分

C言語入門:制御文-> 3-10. 練習問題 

はじめまして。

私は、最近C言語を始めたばかりでまったくの超初心者です。
どうしてもわからないとこがありまして、そこから先に進めません;;

int seikai = 1484;
int count;
int inp = -1;

for ( count = 1 ; count <= 10 ; count++ ){
inp = -1;
while( inp < 0 || inp > 9999 )
scanf("%d", &inp);
          **** 省略 ****
if ( inp < seikai )
printf("小さい\n");
else
printf("大きい\n");
                    **** 省略 ****

この部分なんですが、まず<scanf>までは -1 が <inp> に入ってるのですよね・・?
そこで 10000 を入力したとしたら、また <while>文にもどって中身は
こうなってるんですかね、while( 10000 < 0 || 10000 > 9999 )・・・?
もしこれだとすると,どちらかが’真 ’であればいいのだったら、
else
printf("大きい\n"); この部分にきそうなんですけど、きません・・・><
どういうことなんでしょうか、棍本的に私の考え方がちがうのでしょうか;;
どうかご指導のほどよろしくおねがいします。



From 管理人 at 2005年3月14日 4時29分

さすらいPG さん、はじめまして


さすらいPG さん、はじめまして。
激励の書き込みありがとうございます。

さすらいPGさんも、アセンブラの勉強がんばってください。
それでは、今後ともよろしくお願い致します。


From 管理人 at 2005年6月9日 0時46分

re:アセンブラについて

c03105さん、こんばんは。

20bitということは、2進数で20桁です。つまり0〜2^20、すなわち、
0000 0000 0000 0000 0000b(10進数では0、16進数では0x00000)から
1111 1111 1111 1111 1111b(10進数では1048575、16進数では0x11111)
まで表すことができます。


From c03105 at 2005年6月7日 11時18分

アセンブラについて

こんにちは。
かなり初歩的な質問で申し訳ありませんが、セグメントの説明のところで「10桁の電話番号なら10,000,000,000個の電話を管理できる」は理解できますが、「20bitだと16進数で5桁即ち1Mバイト分のアドレスを管理できる」とありますが、これはどのような計算でできるのでしょうか?10桁の電話番号では10^10で計算しましたが、20bitのほうはどう計算すればこうなるのかが不明なのですが…


From さすらいPG at 2005年3月11日 19時22分

はじまして

最近趣味でアセンブラを勉強したくてこのサイトを発見し、
日々ホームページを拝見しております。
私の主は、WEB言語なのですが、新たな発見が多々あり、
とても勉強になります。これからもがんばってください。


From 管理人 at 2005年6月4日 0時34分

re:よろしくお願いいたします

キョウキさんはじめまして。当サイトにお越しくださいましてありがとうございます。

当サイトから16bitリンカへのリンクですが、こちらで確認しましたところ正常にリンクされているようです。ですが、キョウキさんのようにダウンロードできない方のため、キョウキさんに紹介して頂いたところにもリンクを張りました。

ご連絡ありがとうございます。今後とも当サイトをよろしくお願い致します。

p.s.
お勉強、がんばってください。ぜひ修了試験まで!


From 田中秀和 at 2005年6月2日 12時49分

ありがとうございました。

管理人さま

いつもお世話になっております。
155にご回答いただき、ありがとうございました。

大変分かりやすく、具体的に説明いただいて、よく理解できました。
遅くなり恐縮ですが、お礼申し上げます。


From キョウキ at 2005年6月2日 12時3分

よろしくお願いいたします


 はじめまして。25年ぶりに一度挫折したアセンブラを再開しようと思い、大変素晴らしいサイトを発見できました。そして、一気にアセンブラの勉強を始める勇気を沢山頂きました。本当にありがとうございます。

 一つだけご報告申し上げます。MASM導入編他に掲載されている16bitリンカのダウンロード先が消滅しており、Microsoft内を検索しても見当たりませんでした。しかた無く英語サイ
トで検索しましたところ、
ttp://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe
を発見し落としてみました。一見したところ問題ないようですが、不都合等がある場合ご指
摘ください。

 『卒業試験』まで何時になったら辿り着けるかわかりませんが、気長に挑戦して行きたい
と思います。今後ともサイトのご運営、よろしくお願いいたします。


From 管理人 at 2005年5月31日 3時33分

re: 【155】 「アルゴリズム入門」6章について質問

田中秀和さん。こんばんは。当サイトをご利用くださいましてありがとうございます。

> 具体的にはどのようなケースを避けるべきなのでしょうか。
例えば外部の装置を利用するようなプログラムの場合、最初に外部装置を初期化するプロセスが必要になります。例えば測定装置ならば、初期化関数を呼び、測定開始関数を呼び出すといった流れになると思いますが、測定開始関数は初期化関数が呼ばれていることが前提となっています。こういうプログラムの場合は、初期化がきちんとされたかをフラグを用意しておき、測定関数ではそのフラグを見て初期化されていれば測定を行いますし、初期化されていないで呼ばれた場合はエラーを返すようにします。このようにすることで、測定関数は初期化関数が呼ばれていても呼ばれていなくてもきちんと動作するようになります。(エラーを返すというのも立派な処理です。)

他の例を挙げますと、例えばデータを検索する場合、アルゴリズム入門の6-3では、バイナリーサーチを紹介しておりますが、この前提条件として、データはソートされていないといけないというのがあります。つまりソートされていないのにこの関数が呼ばれますときちんと動作しないのです。そこでフラグを利用するなり、この関数の最初にソートされているかをチェックするなりの方法で、ソートされていない場合でもエラーを返すかソートを実行するかなどの方法で対処する必要があります。

このような説明でご理解頂けましたでしょうか。

p.s.
折を見て6章の方も直させて頂きます。


From 管理人 at 2005年5月31日 3時12分

re154:はじめまして

夕菜さん、はじめまして。

一口にプログラマーと言ってもいろいろあります。詳しくは当サイトのプログラマーになりたいを参照ください。

一般には「情報工学科」などになるのでしょうが、最近では各大学で呼び名もいろいろ違っていて、「情報通信工学科」、「情報数理学科」「ソフトウェア開発工学科」などがあります。

しかし自分が組み込み系のファームをやりたいという場合は、機械学科などの学科に行って研究室で制御系を研究しているところを選ぶという方法もあります。

どちらにしても、学科名で選ぶより大学のホームページなどでどのような研究室があって、どのような研究をやっているかを調べた方がよいかと思います。

以下のサイトを参考にしてみてください。


From 田中秀和 at 2005年5月30日 18時48分

アルゴリズム入門」6章について質問

はじめまして。
会社の後輩ともども、プログラミング教材として本サイトを重用しております。

早速ですが、Titleにある「6-1. サブルーチン」について質問があります。

サブルーチン(モジュール)を作る際の注意点として、

『「Aというサブルーチンを呼び出すためにはBというサブルーチンを呼び出していることが前提」というのは避ける 』

という項目がありますが、具体的にはどのようなケースを避けるべきなのでしょうか。
漠然とは伝わるのですが、想像が及ばなかったので、ご教授いただければ幸いです。

わかりやすいサイトを公開いただき、大変感謝しております。
それでは失礼いたします。


From 夕菜 at 2005年5月29日 15時8分

はじめまして

プログラマーになるには、学部はどこに行けばいいのですか?


From フート at 2005年5月26日 20時5分

はじめまして

はじめまして、フートといいます。
CFDに興味があります。CFDをやるのに最も適した言語は何ですか?
また、プログラム例や一番参考になる文献も挙げてくれると嬉しいです。
どうもわがままいって申し訳ないです。


From 管理人 at 2005年5月22日 3時3分

re:通りすがりのものですが…

旅人 under Southern Cross さん、はじめまして。
当サイトにお越しくださいましてありがとうございます。

残念ながら当サイトでは「新しい言語」の解説はないため
旅人 under Southern Crossさんのお役には立てなかった
かもしれませんね。

カメラの撮影入門ですか、、、私も何十本のフィルムを使って
あの枚数くらいしか気に入ったのが撮れていないので、執筆す
どころか、こちらが読みたいくらいですよ。

旅人 under Southern Crossさんもまた時間がある時にこちらに
遊びに来てください。

それでは!


From 旅人 at 2005年5月21日 18時20分

通りすがりのものですが…

こんにちは。
私も何年もSEをしているものです。正確には今は世間をはなれ旅人をしているのでSEならぬ"エセE"ですが。。。
久しぶりに新しい言語を覚えようとリンクをたどっていくとこんなすばらしいサイトが。
様々な言語を事細かに説明されているので面倒くさがりやの私は感心させられました。

管理人さんもお写真も拝見しました。どれもこれも私好みのものばかりです。
私も写真が趣味で旅の移動中にとりまくってます。おかげで相棒のLaptopのHDDはパンパンです。。。
ついでと言ってはあつかましいですが、時間があるときにでもカメラの撮影テクニック入門もついかしていただけるとうれしいです。

また時間のある時にでもちょくちょく覗かせていただきます。
サイトの運営ご苦労さまです。


From 管理人 at 2005年5月8日 2時37分

re:また、つまずいてしまいました。


soudaaさん、おひさしぶりです。だいぶ進みましたね。

割り込み処理は簡単に言うと以下のようになります。
1.ある割り込み(この場合は8番)が発生する。
2.自分の書いた処理をさせる(この場合、VECT8)
 そのために設定(AX=2508hのシステムコール)を行う。
3.自分が書いた処理が終わったら正規の割り込みにジャンプする
 今回は省略している。

本来ならばVECT8が呼ばれてCOUNTを増やしたら、本来の割り込みに
ジャンプしなくてはいけないのですが、常駐プログラムではないので
その部分は省略しています。

>保管、設定がいまいち良く理解できません。
保管とは、プログラムが終了したら、本来の8番の割り込みに処理が戻るように
プログラムが開始される前の8番の割り込み時にジャンプするアドレスを一時
的に保管しておくことを言います。
設定とは、本来の割り込み先にジャンプする前に、自分が書いた処理(VECT8)に
処理がうつるように設定することを言います。これがAX=2508hのシステムコール
です。

>以下の部分で、レジスタを保管するのは、どうしてなんでしょうか?
割り込みはいつ発生するかわかりません。例えば、
MOV AX,0001
と言った命令の直後に割り込みが発生したとします。もし割り込み先(VECT8)で
レジスタを保管していないと、AL=20hに変わってしまっています。これでは割り
込み処理が終わって戻ってきたらレジスタの内容が変わっていますので、誤作動
してしまいます。

割り込み処理では、必ずフラグを含めレジスタの値をも戸の状態に戻さなくては
ならないと思っていてください。


From soudaa at 2005年5月2日 19時28分

また、つまずいてしまいました。

この間、助言頂いたばかりなのに、また早速つまずいてしまいました。
アセンブラ入門の10-6の練習問題で、割り込みベクタ取得、保管、設定がありますよね。
割り込みベクタ取得というのは、割り込み番号8がどこにあるか?を割り出すために、ベクタを取得すると理解したんですが、保管、設定がいまいち良く理解できません。

割り込み番号8の割り込み処理は、既存のもので、VECT8は自作する割り込み処理なんですよね?つまり、VECT8と割り込み番号8の割り込み処理は別物と解釈していいんでしょうか?

割り込みベクタの設定とは、自作する割り込み処理VECT8のベクタを設定(登録)するということですか?

以下の部分で、レジスタを保管するのは、どうしてなんでしょうか?
inc cs:COUNT
↑は、割り込み8が何回実行されたか?をカウントするものですね。

VECT8:
cli ;割り込み禁止
push ax ;レジスタ保管

inc cs:COUNT

mov al,20h
out 20h,al ;割り込みコントローラーに終わりを告げる
pop ax ;
sti ;割り込みを許可する
iret ;終了

今回も、質問が沢山ですみませんが、何度考えても、自分では何とも、勝手な解釈になってしまっているようで不安なので、助言よろしくお願いします。



From soudaa at 2005年4月20日 13時15分

ありがとうございました

早速、お返事ありがとうございました。
お蔭様で、理解することができ、スッキリしました。
これからも、当サイトを利用してアセンブラを勉強していこうと思っています。
また、つまずいた時はよろしくお願いします!


From 管理人 at 2005年4月20日 2時22分

re:144 教えてください

>‘このような公式が’書かれていないので、もしかしたら数行抜けてしまってるのでは?
特に公式を記載せずとも問題が解けると判断していましたので、公式は載せており
ませんでした。等差数列の和を求める公式を載せましたのでご確認ください。


> フローチャートを書こうにも、どんなアルゴリズムにすれば良いのか?
> どんな変数を用意するか?でつまづいています。
これがすぐ浮かんでくるくらいになれば相当のプロフェッショナルですよ。

それでは勉強がんばってください。


From 管理人 at 2005年4月20日 2時11分

re:145 教えてください

> この上で、mov si,-1 としているので、dlには0が入るのですよね?
うーん。おしい!
mov si,-1
inc si
で、si=0となりますので、dl=0ではありません。
mob dl,[0]
となります。

> mov dl,[si] と書くと、
> [ds:si] ってことになるのでしょうか??
その通りです。


From soudaa at 2005年4月19日 13時5分

教えてください

はじめまして、こんにちは。
当サイトを利用し、アセンブラを勉強し始めている者です。
アセンブラ 〜MSDOSの世界〜の中のメモリー管理にある
練習問題2-2で
inc si
mov dl,[si] 
の2行が理解できません(汗)
この上で、mov si,-1 としているので、dlには0が入るのですよね?
環境変数領域は002Chで、そのアドレスをdsに設定しているのに、
そのdsの値をどう使っているのか分かりません。
mov dl,[si] と書くと、
[ds:si] ってことになるのでしょうか??
ds→セグメント002Ch
si→オフセット0000h
すみません、勉強不足で・・・。
だれか、この問題について、詳しく教えていただけませんか?
至急返事待っております。


From nishin at 2005年4月19日 0時45分

質問です

アルゴリズム入門4−2で、1行目
『高校ではこのような公式を習いましたが…』となっていますが
‘このような公式が’書かれていないので、もしかしたら数行抜けてしまってるのでは?
変数tが何を指しているのかも、分かりづらいので併せて書いていただけると助かります。

最近、プログラムの勉強を始めたのですが
こちらのサイトの練習問題を活用させていただこうと思っています。
フローチャートを書こうにも、どんなアルゴリズムにすれば良いのか?
どんな変数を用意するか?でつまづいています。


From 管理人 at 2005年4月17日 4時39分

re:javaのlog出力の仕方がわかりません

ログファイルの出力ですが、通常mainスレッドでログファイルを開いておき、
そのファイルに随所でアクセスすることになります。例えばmainメソッドが
あるクラスをTestとすると、

import java.io.*;

public class Test{
    public static PrintWriter fwLog;

    synchronized public static void writeLog(String s){
        try{
            fwLog.println(s);
        }catch(Exception e){}
    }

    synchronized public static void writeLog(Throwable t){
        try{
            t.printStackTrace(fwLog);
        }catch(Exception e){}
    }

    public static void main(String args[]){
        try{
            fwLog = new PrintWriter(new FileWriter("logfile.log"));
        }catch(Exception e){}
    }
}

のようにしておき、
  } catch( SQLException e ) {
   // ここにログ出力を入れたい
   Test.writeLog(e);
  }

のようにします。


From 管理人 at 2005年4月17日 4時21分

re141:どうも初めまして

間違えのご指摘ありがとうございます。
早速訂正致しましたのでご確認ください。
これからも間違えなどがありましたらご指摘よろしくお願い致します。


From 白 at 2005年4月17日 1時29分

どうも初めまして

初めまして、こっそりとここをつかってC言語の勉強してるのですが
C言語の3-3どうも上手くいかないとおもったら
void main(){
int  n;
scanf("%d",&n");
&n"←これがどうもじゃまみたいなんですけど(見りゃわかるって言わないでください笑)お暇があれば、訂正しといたほうがという報告でした。


From かなざわ at 2005年4月10日 18時27分

javaのlog出力の仕方がわかりません

public static void close ( Connection con ) {
 if( con != null ) {
  try {
   if( !con.isClosed() ) {
    con.close();
   }
  } catch( SQLException e ) {
   // ここにログ出力を入れたい
  }
 }
}
というスレッドにログ出力
1. printStackTrace
2. log ファイルに出力
を取り入れたいのですが、どうすればよいのかわかりませんので、ご教授お願いします。


From 管理人 at 2005年3月27日 14時46分

re:137, 138

ゆーやんさんこんにちは。

間違えのご指摘ありがとうございます。早速訂正させて頂きました。
また間違えなどがありましたらぜひご指摘願います。

それでは、今後ともよろしくお願い致します!